Заполнить параметры макета 1с
В этом уроке мы научимся создавать табличные макеты в 1С, которые в дальнейшем могут быть использованы для программного формирования печатных форм.
К примеру, как я сформировал макеты для тестовой базы.
Я зашёл в форму обработки и перешёл на закладку "Макеты":
Далее я нажал на "Плюсик" и выбрал тип "Табличный документ":
Открылся редактор табличного документа:
Во многих моментах работа в редакторе похожа на работу в программе Excel, но есть свои особенности, на которых я бы хотел остановиться.
Как назначить имя области
Что я понимаю под областью? Это и несколько строк и несколько ячеек, в общем любая часть табличного документа, которая может быть выделена нами, используя левую кнопку мыши.
Вот выделенная область из двух строк:
А вот выделенная область из 2 столбцов:
А сейчас мы выделим область на пересечении первых двух строк и первых двух столбцов:
Так вот. Если мы сумели выделить нужную нам область, то, нажав на ней правой кнопкой и выбрав пункт "Свойства", мы сможем присвоить ей имя, по-которому мы будем к ней обращаться из нашего кода, формируя печатную форму:
Это базовый навык, которым мы должны овладеть, чтобы суметь делать табличные макеты.
Как посмотреть уже назначенные имена
А давайте посмотрим какие имена областям уже назначены в макете?
Для этого из меню конфигуратора выбираем:
Вот она наша только что назначенная область "Шапка":
А если сейчас выделим её в диалоге и нажмём "Выбрать", то в редакторе будет выбрана соотв. область ячеек:
Как задать параметр области
Часто при формировании печатной области требуется не просто вывести область из макета. Нужно ещё и заполнить определенные ячейки определенными параметрами.
Эти параметры мы задаём у области и заданные значения автоматически попадают в нужные ячейки.
Для этого в свойствах нужной нам ячейки (куда будет выводиться значение параметра).
Указываем в поле "Заполнение" значение "Параметр", а в поле "Параметр" пишем имя, по которому мы будем обращаться к этому параметру из кода:
Если же указать в заполнении не "Параметр", а "Шаблон", то можно будет в самой ячейке указать какой-то текст (шаблон) с использованием имени параметра в квадратных скобках:
В этом случае имя параметра (и его позиция в шаблоне) указывается в квадратных скобках.
Как задать параметр расшифровки?
Имя параметра расшифровки задаётся всё в тех же свойствах ячейки:
Уже потом из кода мы присвоим этому параметру (по имени "РасшифровкаНоменклатуры") нужное значение (ссылку на элемент номенклатуры).
И когда пользователь сделает двойной щелчок на этой ячейки - ему откроется значение, присвоенное параметру расшифровки (в данном случае откроется форма элемента номенклатуры).
Дальнейшее напутствие
Мы рассмотрели необходимые основы. А теперь внимательно исследуйте рабочий пример.
Скачайте и разверните эту базу. Найдите в ней обработку "ОбработкаДляИспытаний".
В её макетах есть табличные варианты. Исследуйте их как можно тщательнее, опираясь на приёмы, которые мы рассмотрели чуть выше.
Уже затем (в этой же обработке) переходите к примерам использования этих макетов. Только так вы научитесь создавать свои печатные формы на основе табличных макетов.
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Всем привет, всех с наступившим Новым 2020 годом! В данной статье я предлагаю вам разобрать такой интересный функционал как использование собственных макетов в системе СКД. Отмечу, что за свою достаточно продолжительную практику (порядка 15 лет), я, наверное, всего пару-тройку раз встречал в чужих отчетах (не в типовых) использование данной возможности.
Сообщество приветствует чистоту и оптимизацию исполняемого кода обработок или отчетов, но могу точно сказать по своему опыту, что в сотнях отчетах, прошедших через меня – я не встречал ни одного, который бы хотелось отности к категории "идеальный, по всем правилам", с которого бы хотелось взять пример. 99 % отчетов сделаны «на отвяжись» по принципу - работает, данные показывает, не важно сколько он там строится по времени. Но и многие пользователи даже не могут объяснить, как получается та или иная цифра в отчетах (особенно производственных). Хотя, система компоновки данных, по-моему мнению, - это даже пользовательский функционал в какой-то степени. Какие-либо «улучшения» отчета с использованием всех возможностей СКД – это что-то из ряда вон выходящее.
Ну да ладно. Давайте рассмотрим использование собственного макета в отчете на СКД. Надеюсь, что этот функционал будет полезен вам для использования в ваших разработках. Постараюсь описать как можно подробнее и проще - "на пальцах". Итак, начнем с подготовки самого отчета в СКД.
Подготовка отчета в СКД
Воспользуемся типовой конфигурацией Розница 2.2 на платформе предприятия 8.3.15.1700. Подготовим простой отчет для определения количества и суммы продаж по организации/кассе в разрезе дней за выбранный период.
Для этого напишем запрос по регистру накопления "Продажи" (обороты) в макете компоновки данных. Поскольку, в этом регистре нет данных о КассеККМ, с которой была совершена продажа, то мы левым соединением с регистратором получаем кассу продажи из документа. С условием, что документ-регистратор является отчетом розничных продаж. Так же я добавлю несколько вспомогательных полей, которые потребуются в отчете на основе собственного макета.
В общем виде набор данных запрос выглядит вот так:
На закладке "Ресурсы" определим какие из полей являются ресурсами и выберем выражение расчета этого поля по другим колонкам.
Рис.1. Определяем ресурсы отчета.
Далее, определим параметры данного отчета. В качестве "Периода" реализуем задействуем такую возможность СКД как тип "СтандартныйПериод" (можете здесь поставить "галочку" для дальнейшего использования в ваших СКД отчетах вне зависимости как вы будете их реализовывать). См. как это сделать:
Рис.2. Создаем параметр "Период" в отчете на основе дат начала и окончания.
Затем, в "Настройках" выбираем доступные поля и ресурсы для отображения отчета.
Рис.3. Создаем саму таблицу отчета с выбранными полями.
В пользовательских настройках отчета включаем созданный нами параметр "Период":
Рис.4. Включаем в пользовательские настройки параметр "Период".
Все, самое основное выполнено - этого достаточно, чтобы отчет выводил информацию. Отчет выглядит вот так:
Рис.5. Сформированный отчет в СКД в "базовом варианте".
Обычно, на этом все и заканчивается. Но, я продолжу и перехожу к работе с собственными макетами в следующем разделе.
Реализация собственного макета оформления. Подготовка настроек
Начну с того, что создам копированием новый вариант настройки отчета. Пусть он называется "Основной1". В общем виде эта настройка выглядит вот так:
Рис.6. Настройка отчета для собственного макета.
Распишу каждую строку данной настройки:
Период - этот параметр отвечает за день, на который будут создаваться отчеты по кассам. Далее, к этому параметру я "прикручу" дополнительные реквизиты и буду использовать его как "шаблон".
Касса, НомерОтчета, Магазин, ДатаОтчета (СводныйЗаголовок) - в разрезе этой группы параметров (своего рода "фильтр") я буду отбирать данные продаж номенклатуры.
Далее, идут строки (в скобках я присваиваю персональное имя (правой кнопкой - "Установить имя. ") каждой строке - ШапкаМ, СтрокаТаблицы, ИтогиТаблицы):
ДетальныеЗаписи (ШапкаМ)
ДетальныеЗаписи (СтрокаОтчета)
ДетальныеЗаписи (ИтогиТаблицы)
ДетальныеЗаписи - это "набор реквизитов", который будет использоваться в этом "блоке".
Наборы реквизитов для группировок такие:
Для (СводныйЗаголовок) - Касса, НомерОтчета, Магазин, ДатаОтчета,
для (ШапкаМ) - реквизиты отсутствуют,
для (СтрокаОтчета) - Номенклатура, КоличествоОборот, СтоимостьОборот,
для (ИтогиТаблицы) - КоличествоОборот, СтоимостьОборот.
Везде снимаем галку "Авто".
Реализация собственного макета оформления. Рисуем новый макет
Переходим на закладку "Макеты" и начнем создавать требуемый макет. В итоговом виде, он выглядит вот так:
Рис.7. Настройка отчета для собственного макета.
Опишу процесс создания этого макета.
Процесс создания печатной формы макета СКД не отличается от процесса создания печатных форм документов. Также есть параметры, шаблоны и текст. В данном примере, я использую параметры в таблице продаж, шаблоны - в шапке отчета.
Все, макет нарисован. Он выглядит так как нам нужно.
Следующим шагом, в окне Макет - Область я создаю записи о ранее созданных группировках, попутно указывая значения их параметров. Это выглядит вот так:
Рис.8. Добавлена группировка "СводныйЗаголовок" и заполнены параметры макета для этой группировки.
Рис.9. В группировке "ИтогиТаблицы" используем параметры "КоличествоОборот" и "СтоимостьОборот".
Рис.10. "СтрокаОтчета" - основная группировка отчета - Номенклатура, СтоимостьОборот, КоличествоОборот.
СводныйЗаголовок, ИтогиТаблицы, СтрокаОтчета являются "Макетами группировки". ШапкаМ - это "Макет заголовка группировки", Период - это "Параметр".
Далее, к каждому макету привязываем область (см. рис.10). Область можно "накликать", удерживая кнопку "Ctrl".
К параметру "Период" я привязал целый шаблон.
Так, печатная форма в СКД нарисована, макеты группировок добавлены и их параметры заполнены, области привязаны, протестируем обработку, перейдя к следующему разделу.
Тестирование задачи
Теперь, предлагаю протестировать задачу. В нашем СКД отчете "вшито" две настройки "Основная" и "Основная1" с использованием собственных макетов.
Проверим работоспособной каждой из них:
Запускаем предприятие, выбираем период и формируем отчет в настройке "Основная1" (с макетом), такая картина:
Рис.11. Отчет СКД с использованием макета.
В разрезе периода 01.08.2019 - 04.08.2019 (с общей выручкой), в разрезе касс (по выручке) и что наторговали и за сколько в разрезе каждой кассы.
Перевыбираем вариант настройки "Основная" и получаем уже эти же данные, но в другой компоновке, но без использования макета. Получилось вот так:
Рис.12. Отчет СКД без использования макетов. Период использует шаблон.
Данные совпали, все работает. Переходим к разделу "Выводы".
Выводы
В данной публикации я наглядно показал вам базовый принцип работы с макетами в СКД. Приведенный пример не сложный, но наглядно иллюстрирует алгоритм настройки, позволяющий из одних и тех же данных создать несколько вариантов отчета (в данном случае с использования макета и без него). Так же, пример будет полезен тем, кто хочет научиться строить отчеты в СКД с нуля, дорабатывать их, не разрушая их целостность на корню.
Еще раз хочу отметить, что функционал использования макетов я очень редко встречал в отчетах СКД других программистов. Обычно - это "основная" компоновка, а как она собирается - по каким данным - этого уже никто не помнит. Как смешно не звучит, но это реалии.
Рис.13. Выбор варианта настройки отчета.
Какой вывод можно сделать сразу (я осторожно напишу) - возможный частичный отказ от внешних печатных форм документов. Функционал макетов СКД позволяет создать печатную форму или группу печатных форм для документов конфигурации. Как вариант - это возможно запустить "поток" печатных форм документа или даже нескольких документов разного вида при условии корректного составления запроса или "правильной внешней" таблицы для передачи в СКД.
Отмечу, что макеты "накликиваются" без написания кода. Отсюда делаю еще один вывод - написанный запрос (переданная таблица) в СКД - это уже 90% решения вашей типовой задачи - будь то отчет или "поток" печатных форм.
За исключением запроса (язык запросов) - в примере нет программирования.
Еще один плюс - это возможно "засунуть" в параметр шаблон-конструкцию, как сделано на примере параметра "период", где я использую шаблон из макета.
Так. Пожалуй, Все. Пример использование макетов в СКД я описал из собственного опыта и постарался сделать данный материал как можно подробнее, надеюсь, что он вам будет полезен.
Было бы приятно, чтобы вы поддержали данную статью, в свою очередь постараюсь написать еще что-нибудь полезное и интересное для вас. Пусть эта статья будет для вас своего рода "шпаргалкой" для запоминания этого алгоритма, как и для меня в частности.
Спасибо, что дочитали статью до конца. Всем привет!
Предыдущие материалы
Так же, прошу посмотреть мои предыдущие статьи по использованию системы компоновки данных:
Маленькие хитрости работы с макетами печатных форм в конфигурациях, где БСП позволяет пользователю использовать изменённые макеты. Получение всех параметров общих макетов или макетов из файла mxl Написано на платформе 8.3.6.2363 в конфигурации БП 3.0.42.54 (привязки к БП 3.0 нет, просто текст примера передачи параметров из ПКО БП 3.0) 07.11.2015 - Версия 1.2 исправлена ошибка (не цеплялись параметры в последней ячейке макета), в таблице выделены строки с областями. 21.09.2021 - Версия 1.3 natalika1601 (спасибо за ошибку. ) заметила, что не работает, это исправленная версия
Маленькие хитрости передачи параметров в макеты печатных форм.
Без претензий на изобретение – тут ничего нового, просто накопилось, потому и решил написать эту заметку.
В БСП давно уже появился механизм замены макетов на пользовательские. В результате использования этого механизма периодически возникают клиенты, у которых (ну как водится - после обновления) перестал печататься приходный кассовый ордер (или что–то ещё, вспоминайте сами)…
Первый звонок от клиента на базовой БП вызвал лёгкое недоумение – ежели бы ошибка была в релизе, то шквал звонков был бы практически обеспечен, а тут тишина, только один, но …подключился, посмотрел – действительно, сваливается по ошибке:
В голове сразу мысля - «что за бред, не может быть и т. д. и т.п.»…но оказывается - может. Пользователи (они же юзвери), они ж такие затейники…вот кто их просил лезть в макеты и удалять там параметры, дабы заменить на свой, просто эксклюзивный текст, сохранить всё это безобразие, а потом гордо заявить, что опосля обновления (опять же, когда же ещё?) перестал печататься ПКО?
Первый раз непонятка полная, решается через сим-салабим отладчик (как вернуть стандартный макет - тема не этого романа), но возникает мысль: «А если не пользователю, а мне приспичит заменить стандартный параметр своим текстом, а параметр не нужен ни разу? Что делать?».
Решение – маленькая хитрость, параметр должен остаться в макете, но в печатную форму выводиться не должен. Путей решения увиделось два:
- первый: Спрятать параметр в ОЧЕНЬ узенькое поле макета (совсем не нравится, потом не сразу найдешь эту ячейку, коли понадобится);
- второй: вообще застраховать себя от подобных недоразумений, включив в ячейку ВСЕ возможные параметры, что встречаются в макете, где в свойстве «Заполнение» указать , что это шаблон. Причем ячейку можно не сужать до невозможности, а просто «накрыть» непрозрачной прямоугольной областью (в свойстве «Размещение» не забыть указать «Обрезать»):
Результат – можно писать любой текст, где захочется, главное, чтобы параметр остался в макете:
Дальше возникают всякие «вредные» мысли: если существует вероятность того, что макет может каким-либо «волшебным» образом измениться, зачем заставлять людей мучиться вытворением хитростей, типа описанной выше?
Если рисуем свою печатную форму и знаем, что с макетом может произойти всё, что угодно, то не стоит использовать конструкции вывода параметров типа:
Лучше собрать возможные параметры в структуру и заполнить параметры макета не несколько строк, как выше, а как то так:
Так гораздо проще, тем более, что главное - наличие или отсутствие параметров в макете не вызовет вылет программы по ошибке
Теперь, чтобы быстро использовать эти варианты с заполнением ячейки всеми параметрами формы или создания структуры, родилась идея использовать обработку, которая составит строку для шаблона ячейки параметров, или строку для создания фиксированной структуры для модуля печатной формы.
Параметры шаблона нужны для случаев, когда заполнением параметров напрямую (через структуру) управлять нельзя, например, конфигурация на поддержке, снимать нельзя в силу каких-то вполне объективных причин, а пользователю зачем-то нужно периодически менять макет.
Может быть ещё вариант – есть какой-то макет, в котором туча параметров, пропустить которые по недогляду вполне возможно, но очень не хотелось бы.
По итогам получилась обработка, в которую можно вывести все параметры общего маета, или макета из файла с итоговыми строками параметров и строки, для копипаста в текст конструктора структуры:
Может быть и другая ситуация – есть макет, там туча параметров, и не хочется пропустить какой-нибудь.
Доброго времени суток. Работаю в конфигураторе 1с8. Мне нужно вставить в макет значение реквезита Грузополучатель.Наименование. Грузополучатель имеет тип СправочникСсылка.Контрагенты. Я взял ячейку, нажал правую кнопку мыши, тип заполнения - параметр, параметр - Грузополучатель.Наименование, а ОнО (Конфигуратор) ругается на точку между Грузополучатель и Наименование.
Макет Ворд. Вставить таблицу в xml
На днях узнал, наверное, всем давно известную информацию - что такое формат docx. Оказывается -.
Как Вставить Изображение В Макет Документа
Доброго времени суток. Дали задание написать макет, макет написан от души. Вот только клиент.
Параметр типа булево и макет
Есть справочник Контрагенты, в нем создал реквизит НеПечататьДоговор.(тип булево, т.е. галочка).
Макет СКД. Не выводится параметр заголовка
Создаю отчет на основе ранее созданного(не мной). При создании макета указал в заголовке тип.
Перед выводом секции необходимо заполнить параметр
Например: твой параметр будет называться "Грузополучатель" который находится в секции "Шапка"
Тогда выбрав эту секцию "Шапка = Макет.ПолучитьОбласть("Шапка")" нужно заполнить её параменты.
вариант 1: Шапка.Параметры.Заполнить(Выборка) - Выборка это результат запроса.
вариант 2: Шапка.Параметры. = Контрагент (Грузополучатель у тебя). "Имя параментра" - имя параметра как оно задано в макете.
Надеюсь объяснил достаточно доступно
А где именно надо писать этот код ? Я пишу в модуле формы Документа в обработчике события ГрузополучательПриИзменении, а оно пишет, что переменная Макет не определена
Добавлено через 1 час 24 минуты
Пусть параметр на макете называется . Вот вроде всё правильно написал, но выводить не хочет.
Добавлено через 3 часа 42 минуты
всё разобрался, надо было не в модуль формы, а в модуль документа зайти, в процедуре "Печать" написать как ты говорил.
Макет отчета. Не получается Вывод данных о сумме в макет
Не могу разобраться с применением метода Присоединить к ТабДоку. В частности с выводом данных.
Найти и скопировать параметр и вставить в другой
Здравствуйте, не могу разобраться. Есть несколько строчек <a.
Как в параметр кнопки вставить наш результат из js
Есть форма : <div <span <input.
Используя параметр, введенный с клавиатуры, удалить все файлы, содержащие этот параметр
Задание такое:используя параметр введенный с клавиатуры удалить все файлы содержащие этот параметр.
Как передать параметр из jsp java страницы в функцию javascript и возвратить обратно другой параметр
На jsp странице имеется динамически формируемая таблица с чекбоксами в первой колонке каждой строки.
Объекты: параметр-значение и параметр-переменная
Если сделать код таким: type TPos=object ax,ay:integer; constructor.
В массе своей, в прикладных задачах нужно вывести на печать какие-либо данные оформленные нужным образом (например, счет, торговую накладную, акт сверки и т.п.). Для вывода на печать в 1С 8.3. можно использовать табличные документы. В предыдущей статье я показал, как создать макет табличного документа и как правильно его оформить. Нам осталось научиться заполнять его данными и выводить на просмотр для последующей печати. Материал по выводу табличного документа на печать, я решил разбить на две части. В первой части мы разберем простой пример (я бы назвал его учебным), а во втором случае реализуем пример приближенный к реальному. Эта статья — первая часть, в ней мы реализуем простой пример: будем выводить табличный документ на печать, используя команду управляемой формы. Этот вариант имеет следующий недостаток: нельзя вывести печатную форму из списка документов, можно это сделать, только открыв форму документа. Для того, чтобы можно было вывести печатную форму из списка документов, необходимо создать команду документа. Этот вариант мы рассмотрим в следующей статье.
И так, сам макет документа мы уже создали, как это сделано, вы можете узнать в соответствующей статье.
Сейчас мы получим ранее созданный макет, заполним табличный документ 1С по этому макету, и нам останется вывести табличный документе 1С на просмотр для последующей печати.
Мы сделаем упрощенный (учебный) вариант: формирование всего нашего табличного документа будет осуществляться на модуле управляемой формы. Для этого мы на форме документа создадим команду «ПечатьДокумента», которую разместим в командной панели формы.
Для команды ПечатьДокумента создадим два обработчика в клиентском и серверном контексте.
Серверный обработчик переименуем в функцию, в нем мы создадим программно табличный документ 1С, который она и будет возвращать.
Теперь нужно получить макет, созданный в предыдущей статье, для этого мы будем использовать метод менеджера документа ПолучитьМакет.
Имейте в виду, что метод ПолучитьМакет напрямую доступен только или в модуле документа, или в модуле менеджера документа. Еще этот метод можно применить, используя менеджер конкретного объекта, как я сделал выше. Непосредственно на форме его использовать нельзя!
Алгоритм заполнения табличного документа будет следующим: мы будем получать нужную область макета, если необходимо заполнять эту область какими-нибудь данными, а потом выводить полученную область в табличный документ.
Напомню, что макет у нас имеет четыре области: Шапка, ШапкаТаблицы, СтрокаТаблицы, Подвал. Области Шапка, ШапкаТаблицы и Подвал будут выведены в табличный документ всего один раз, а область СтрокаТаблицы будет выведена столько раз, сколько строк в табличной части обрабатываемого документа.
Весь код ниже я выполняю между кодом получения макета и возвратом табличного документа.
Получим самую первую область макета, при помощи метода ПолучитьОбласть, где в качестве параметра следует указать название получаемой области.
В этой области мы используем шаблон, в котором имеются два параметра: НомерДок и ДатаДок передадим номер документа и дату документа в соответствующие параметры области, используя свойство Параметры нужной нам области. Данное свойство содержит коллекцию параметров табличного документа, и мы можем обращаться к нужному параметру через оператор «.».
Мы закончили с областью Шапка, и нам нужно вывести её в табличный документ, делается это при помощи метода Вывести табличного документа, где в качестве параметра указывается выводимая область.
Точно также получим область, которая соответствует шапке таблицы, заполнять его не нужно, а мы просто выведем его сразу же в табличный документ.
Следующим шагом выведем область СтрокаТаблицы, причем эта область должна быть выведена столько раз, сколько строк в табличной части документа. Поэтому мы сначала получим эту область, а потом циклом будем обходить табличную часть, заполнять параметры области и выводить область в табличный документ.
В коде выше, мы обошли табличную часть документа, обратившись к ней через основной реквизит Объект управляемой формы (основной формы документа).
Обратите внимание, я использовал метод Заполнить, потому что названия параметров макета совпадают с названиями реквизитов табличной части документа.
Нам осталось получить область Подвал и вывести её в табличный документ.
На этом мы закончим работать с функцией на сервере, весь ее код будет выглядеть следующим образом.
Нам осталось доделать клиентскую процедуру ПечатьДокумента: мы будем выводить на просмотр полученный табличный документ при помощи метода табличного документа Показать().
В качестве первого параметра метода Показать, я указал название, которое выйдет на форме табличного документа.
Проверим, как работает наш код.
Напомню, что я рассмотрел самый простой (учебный) пример вывода печатной формы, следующие примеры будут более приближенные к реальным.
Более подробно и основательно разработка в 1С дается в моей книге: «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
Читайте также: