как добавить реквизиты в печатную форму 1с
Создание печатных форм в 1С 8.2 и 8.3 с помощью конструктора
Рассмотрим настройку и создание новых печатных форм в системе 1С 8.3.
Создание внешних печатных форм для управляемого приложения рассмотрено в отдельной статье.
Самый простой способ создания печатной формы — с помощью встроенного конструктора печатных форм. Рассмотрим пошаговую инструкцию по созданию и настройке печатной формы на примере создания печатной формы «Счет покупателю».
Создание и настройка печатной формы 1С 8.3
Первый шаг — необходимо зайти в палитру свойств нужного нам документа и выбрать Действия — Конструкторы — Конструктор печати:
Первый вопрос системы — выбор варианта работы конструктора. Настройки аналогичны, если у Вас конфигурация работает в управляемом режиме — выберите его, если нет — выберите обычные формы. Мы рассмотрим создание на обычной форме.
Следующий шаг — выбор названия процедуры для печати. Назовём её «Печать счета».
Далее необходимо выбрать реквизиты, которые нужно указать в шапке печатной формы в том порядке, который нам необходим:
После выбора реквизитов шапки печатной формы 1С 8.2 следует сделать выбор данных для табличной части:
Когда и этот шаг сделан, нужно выбрать реквизиты подвала аналогично реквизитам в шапке.
На последней странице можно оставить всё по умолчанию и нажать ОК:
Что получаем в итоге?
Правильно оформленный макет печатной формы:
Процедура, полностью формирующая печатную форму документа:
Которые можно настроить в 1С 8.2, как нужно нам.
Вывод вызова созданной печатной формы 1С
Для вызова созданной печатной формы нужно просто разместить кнопку на форму документа. Это сделать очень просто. Для начала создадим кнопку на форме, назовем её «Печать счета»:
Нажимаем на кнопку «лупы» у действия — мы попадем в модуль формы, где вписываем вызов процедуры печати вновь созданного счета:
Где «ПечатьСчета» — имя нашей процедуры.
Созданная и настроенная печатная форма выглядит так:
Другие статьи по 1С:
В дополнение — наш видеоурок по созданию внешних печатных форм и подключению их на примере конфигурации 1С Бухгалтерии:
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Вывод на печать дополнительных реквизитов
(1) Если создали внешнюю печатную форму, неужели не можете вынести дополнительный реквизит?!
Вы когда запрос писали, в нем нужно было либо реквизит указать, либо после обращаться к нему как ссылка.реквизит.
(4) ЕРП не открывал. Но в КА что почти близко. так можно
Область = Макет.ПолучитьОбласть(«Заголовок»);
Область.Параметры.ТвойРеквизит = Твой реквизит;
(1) или так, т.к. например, в БП 3.0 доп.реквизит может быть табличной частью, как у справочников Номеклатура или Контрагенты, а может храниться в регистре сведений.
вот пример:
Заменить на ВЫРАЗИТЬ(ДополнительныеСведения.Объект КАК Справочник.МойОбъект) = &Ссылка
иначе очень много неявных левых соединений. И проблемы с правами доступа.
ну и это почти тоже самое что в модуле УправлениеСвойствами.
Должно выглядеть как то так:
Либо заморачиваться не искать доп.свойство по наименованию, потому что можно получить все свойства объекта, а после из них найти нужное
Вообще для УТ 11.4 вот таким образом работает для любого дополнительного реквизита документа во внешней печатной форме
ЭлементПВХ = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Серийный номер», Истина);
НайденнаяСтрока = СсылкаНаДокумент.ДополнительныеРеквизиты.Найти(ЭлементПВХ, «Свойство»);
Если не НайденнаяСтрока = Неопределено Тогда
Серийный_номер = НайденнаяСтрока.Значение;
КонецЕсли;
ОбластьЗаголовок.Параметры.СерНомер = Серийный_номер;
Как внести дополнительные реквизиты в 1С: Бухгалтерии предприятия ред. 3.0?
Иногда у пользователя возникает необходимость внести дополнительную информацию об объекте в 1С и он, не зная всех возможностей программы, делает пометки в комментариях, в карточке объекта или приписывает что-то в наименовании. Комментарии в отчетах не видны, а «исковерканные» наименования выглядят не очень привлекательно. Как выйти из ситуации, когда пользователю не хватает стандартных реквизитов в 1С? В этом ему поможет подсистема «Дополнительные реквизиты и сведения». Рассмотрим пошагово на примерах, как работает этот механизм в программе 1С: Бухгалтерия ред. 3.0.
Первичная настройка программы 1С
Шаг 2. Разверните подраздел «Дополнительные реквизиты и сведения» и установите одноименную галочку, разрешающую добавлять реквизиты и сведения к объектам программы.
Для создания дополнительных реквизитов объекта перейдите по гиперссылке «Дополнительные реквизиты».
После его настройки дополнительный реквизит отображается в форме объекта и доступен всем пользователям программы, имеющим доступ к данному объекту.
Настройка дополнительного реквизита 1С к справочнику «Договоры»
Рассмотрим пример: ИП Круглова О.А. оказывает несколько видов услуг: «Услуга №1», «Услуга №2». При поступлении оплаты по договорам хотелось бы видеть, какая из услуг оказанная контрагентом не оплачена, в разрезе договоров. При заполнении данных договора, в нем указана лишь дата и номер. Если изменить наименование договора, оно отобразится в печатных формах, что не очень удобно. Оптимальный вариант решения – это добавление к договору дополнительного реквизита.
Шаг 1. В левой стороне окна выберите нужный объект.
В нашем примере – это справочник «Договор». Нажав кнопку «Добавить», выберите команду – «Новый».
Для нашего примера назовем новый реквизит «Детализация договора».
Шаг 2. Задайте наименование реквизита и установите настройки.
Пользователь может задать любой «Тип значения» из предложенного списка в зависимости от своей задумки.
Остановимся немного на некоторых типах реквизитов:
«Строка» – это поле, в которое вносится информация в произвольном виде. Текстовая информация сохраняется для конкретного элемента;
«Булево» – это установка флажка, означающего «Да» или «Нет»;
Пользователь может задать любой «Тип данных» привязав к нему любой справочник.
В нашем примере выберите «Тип значения» – «Номенклатура».
Установите дополнительные настройки отображения, видимости и заполнения нового реквизита, при необходимости:
При настройке видимости и доступности имеется возможность задавать условия отображения реквизита по кнопке «Добавить условие».
В нашем примере условие не задается.
Шаг 3. Сохраните настройку – «Записать и закрыть».
Проверим, как работает сделанная настройка.
Шаг 4. Реализуем услугу контрагенту и создадим новый договор.
Обратите внимание: в разделе «Дополнительные реквизиты» появился добавленный нами реквизит – «Детализация договора», с возможностью выбора из справочника номенклатура.
Теперь за каждым договором, пользователь может закрепить номенклатуру.
Контрагенту ООО фирма «Меркурий» оказана услуга по доставке. К договору №12 от 02.02.2021 года закреплена детализация в виде номенклатуры «Доставка».
Шаг 5. Сохраните документ реализации и сформируйте отчет «Оборотно-сальдовая ведомость по счету» 62 «Расчеты с покупателями и заказчиками» в разделе «Отчеты».
Выбрав нужный счет, нажмите кнопку «Показать настройки».
Шаг 7. Нажмите «Сформировать». В отчете отдельной строкой видны обороты в разрезе не только договора, но и введенного дополнительного реквизита. В нашем примере к договору закреплена номенклатура «Доставка».
Рассмотрим еще один простой, но интересный пример – использование обычной текстовой строки.
Настройка текстового дополнительного реквизита
в виде комментария к договору
Пример: В течении месяца ИП Круглова О.А. оказывает услуги, которые суммируются за период и в конце месяца выставляется счет. Прикрепить отдельную номенклатуру к договору не получится. Но во избежание разногласий к договору делается «отметка»: перечень выполненной работы, отметки о дате и времени и т.п. Чтобы на вопрос контрагента: «А за что? А когда?» можно было сразу поднять детализацию и посмотреть.
Создайте еще один дополнительный реквизит к договору, как описывалось выше.
Шаг 1. В поле «Наименование» задайте «Описание услуг по договору».
Тип значения укажите – «Строка». Установите переключатель в положение «Многострочное поле ввода» и задайте количество возможны строк. В нашем примере – 10.
Если строки не заданы, то поле получится однострочное.
В двух наших примерах реквизиты не обязательны к заполнению.
В разделе «Дополнительные реквизиты» появилось второе поле, для текстового ввода информации. Пользователь может задавать и использовать сразу несколько дополнительных реквизитов.
В поле «Описание услуг по договору» внесите дополнительную информацию.
Шаг 3. Сохраните документ реализации услуг с новым договором и с отметками.
В окне «Выбор поля группировки» найдите созданный реквизит – «Описание услуг по договору».
С большим количеством детализации для анализа лучше устанавливать дополнительные отборы – закладка «Отбор», выбрав конкретного контрагента.
В нашем примере отбор установлен по контрагенту «Методический центр Дружба».
Шаг 5. Сформируйте отчет. Теперь пользователь видит расшифровку и короткие пояснения к договору, введенные в текстовом формате.
При больших объемах работы, этот вариант удобен, чтобы не вспоминать, за какие именно услуги контрагент не оплатил и что конкретно ему было выполнено.
Такие «эксперименты» с реквизитами можно проводить с любым объектом 1С.
Приведем еще один «ходовой» пример – справочник «Номенклатура».
Настройка дополнительных реквизитов к справочнику «Номенклатура»
У каждого объекта номенклатуры имеется множество различных характеристик, которые пользователь хочет отразить в карточке. Куда их поместить? Здесь также можно воспользоваться механизмом «Дополнительные реквизиты и сведения».
Шаг 2. Задайте наименование дополнительного реквизита. Например, «Цвет».
Пользователь не может к каждому наименованию вводить данные вручную, так как наименования реквизита (цвет) повторяются у разных элементов. Поэтому удобнее их перечислить в справочнике и впоследствии выбирать.
Для этого укажите «Тип значения» – «Дополнительное значение».
Перейдите на закладку «Значения» и перечислите возможные варианты значения реквизита «Цвет». В дальнейшем справочник можно пополнять.
Шаг 3. Нажмите «Создать» и укажите значение дополнительного реквизита «Цвет». В нашем примере, «Белый».
Перечислив значения реквизитов, пользователь может указывать их в карточке к номенклатуре.
Если значений характеристик реквизитов много, их можно объединять в группы – «Создать группу».
Посмотрим настройку в действии.
Шаг 4. Откройте карточку элемента номенклатуры. В разделе «Дополнительные реквизиты» появилось новое поле «Цвет» с возможностью выбора варианта из справочника.
Таким образом, можно создавать любой дополнительный реквизит номенклатуры.
Добавим для примера еще несколько дополнительных реквизитов.
Пользователь может задать производителя товара, задав выбор из справочника «Контрагенты». Например, «Молоко, 3,2%» – производитель МКС – Молочный комбинат «Ставропольский».
Шаг 5. Для этого реквизита установите «Тип значения» – «Контрагент».
Для номенклатуры можно отметить какие-то индивидуальные характеристики. Например, наличие какой-то функции или параметра. Например, отметить есть ли «газ-контроль» на варочной панели или наличие гриля у духовки и т.п. Но как быть, если не все реквизиты подходят к той или иной номенклатуре. Если мы выведем все эти дополнительные реквизиты в карточку, может оказаться, что для одной номенклатуры они актуальны, а для другой не имеют смысла.
В таких примерах можно использовать условия.
Создадим новый реквизит, для отметки наличия функции «Газ-контроль».
Шаг 6. Укажите название реквизита и «Тип значения» задайте «Булево». Т.е. в карточке установится галочка, определяющая имеется в данной модели газ-контроль или нет.
Так, для номенклатуры мы ввели три дополнительных реквизита.
Но так как мы задали условие для одного из реквизитов, для элементов номенклатуры, не входящих в границу условия, этот реквизит в карточке не отображается.
Так, для блендера в разделе «Дополнительные реквизиты» видны лишь:
А для номенклатуры, входящей в группу, заданную условием «Комплект встраиваемой техники Simfer», в карточке отражается дополнительно реквизит – «Газ-контроль».
Так, пользователь может настроить видимость дополнительных реквизитов задав условия для разной номенклатуры.
Дополнительные реквизиты используются в отчетах при группировках и отборах.
Из отчета видно, что в наличии с функцией «Газ-контроль» у нас имеется «Комплект встраиваемой техники Simfer».
Не будучи программистом, пользователь без особого труда может добавить нужный реквизит к любому объекту программы.
Механизм «Дополнительные реквизиты и сведения» имеет огромные возможности. Мы рассмотрели лишь некоторые примеры, чтобы показать, как пользователь может его использовать и получить представление об использовании данного механизма. Добавлять реквизиты можно как к справочникам, так и к документам. Принцип работы – аналогичен.
Автор статьи: Ольга Круглова
Понравилась статья? Подпишитесь на рассылку новых материалов
Алгоритм построения печатных форм в 1С: Управление торговлей 11. Часть 1.
Как и в предыдущей статье (//infostart.ru/public/179398/), для анализа конфигурации я буду использовать ментальные карты. А именно: редактор ментальных карт xMind ( www.xmind.net ) и, собственно для анализа конфигурации, плагин к нему «Анализатор кода 1С» ( www.codeanalyzer.ru ).
Начнём с формулировки задачи. Используем типовую конфигурацию УТ 11.0.7.19.
Зайдём в конфигурацию под администратором. Перейдём в раздел «Продажи» и выберем на панели навигации команду «Документы продажи». Откроется список документов.
Нам необходимо разобраться, как формируется меню «Печать», какие процедуры отвечают за непосредственную печать и как добавить в него внешнюю печатную форму.
Отмечу, что такое же меню отображается в форме документа «Реализация товаров и услуг».
Откроем конфигуратор, найдем документ «РеализацияТоваровУслуг». Видим, что у него есть две параметризуемые им же команды и расположение у них – «Командная панель формы.Печать», т.е. то, где отображаются все печатные формы.
Откроем форму документа. Посмотрим на список параметризуемых объектом глобальных команд. Видим, что помимо команд документа, используются команды обработок « ПечатьОбщихФорм», « ПечатьТранспортнойНакладной» и других. У всех этих команд в качестве параметра присутствует ДокументСсылка.РеализацияТоваровУслуг и в группе указано меню «Печать» командной панели формы.
Также, если мы посмотрим на доступность этих команд по ролям, то увидим, что для роли «ПолныеПрава» (которая назначена администратору) право «Просмотр» установлено.
Два этих фактора определяют тот факт, что команды появляются в подменю печати командной панели формы документа.
Теперь разберёмся с обработчиками. Сначала обобщим рассматриваемые команды печати:
Откроем обработчик любой из этих команд. Увидим схожий вызов УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(…)
Если проанализировать все вызовы этой процедуры, то увидим, что она вызывается практически из всех команд конфигурации, отвечающих за печать. В частности, из обработки «ПечатьОбщихФорм» и нашего документа.
При этом, в качестве параметров «ВыполнитьКомандуПечати()» принимает:
И передает их в вызов «ОткрытьФорму(«ОбщаяФорма.ПечатьДокументов». )»
Посмотрим на модуль общей формы «ПечатьДокументов»
В коде ПриСозданииНаСервере(. ) есть условие, определяющее, что если есть параметр «ИсточникДанных», то печатаем внешнюю печатную форму, иначе – встроенную.
Посмотрим, что вызывается в «УправлениеПечатьюПереопределяемый.ПечатьПоВнешнемуИсточнику(…)»
Таким образом, по переданному параметру «ИсточникДанных» получается объект внешней обработки и затем, вызывается её метод «Печать». Интересен вызов «ПолучитьОбъектВнешнейОбработки()», который приводит нас к справочнику «ДополнительныеОтчетыИОбработки».
Теперь посмотрим на печать встроенной печатной формы (это если параметр «ИсточникДанных» не был передан).
То есть, получаем менеджер объекта и вызываем его метод «Печать».
Менеджер получается вот так:
В итоге видим, что формирование табличного документа по макету происходит в соответствующих процедурах модуля менеджера реализации товаров. Затем табличный документ добавляется в коллекцию печатных форм.
Для общей формы «ПечатьОбщихФорм» модуль менеджера будет выглядеть так:
Теперь вернёмся к общей форме «ПечатьДокументов». При создании на сервере была сформированна коллекция печатных форм. Печать же табличного документа происходит в «ПечатьВыполнить()».
Итак, мы выяснили как формируется список встроенных печатных форм, как происходит формирование и печать этих форм. Так же мы увидели, как происходит печать внешней печатной формы.
О том как добавляются в меню внешние печатные формы и какие требования (и почему) к ним предъявляются будет написано во второй части.
Создание печатной формы 1С 8 пошаговая инструкция
В этой статье подробно будет рассказано, как новичку, плохо знающему 1С 8 создать печатную форму. Для примера возьмем одну из самых распространенных конфигураций 1С 8 — Бухгалтерию 2.0. Создание печатной формы 1С этапы написания:
Создание печатной формы 1С. Постановка задачи
От нас требуется в конфигурации Бухгалтерия 2.0 создать печатную форму к документу Поступление товаров и услуг. В шапке печатной формы вывести следующие данные:
В виде таблицы вывести данные табличной части Товары документа. Таблица должна включать в себя следующие колонки:
Файл внешней обработки
В открывшемся окошке выберем пункт Внешняя обработка.
Далее в поле Имя необходимо вписать название внешней обработки. В нашем случае назовем ее просто: «ПечатнаяФорма», поле синоним при этом заполнится автоматически. Обратите внимание, что в поле Имя, внешней обработки, следует писать название без пробелов и знаков препинания.
Добавим реквизит внешней обработки СсылкаНаОбъект и выберем для него тип ДокументСсылка.ПоступлениеТоваровУслуг. Для этого в дереве метаданных внешней обработки 1С выделим пункт Реквизиты и нажмем кнопку Добавить (кнопка с зеленым плюсом). В правой части экрана откроется окно свойств реквизита, в поле Имя впишем — СсылкаНаОбъект. В поле Тип нажмем кнопку с тремя точками.
В дереве типов раскроем ветку ДокументСсылка, и найдем там элемент ПоступлениеТоваровУслуг, поставим напротив него галочку и нажмем ОК.
Создание макета печатной формы
Приступим к созданию макета печатной формы 1С. Макет служит шаблоном для вывода печатной формы, поэтому если хотите, чтобы ваша печатная форма выглядела хорошо, следует уделить ему внимание.
В дереве метаданных внешней обработки добавим новый макет, в окне конструктора макета ничего менять не будем и нажмем кнопку Готово.
Добавление шапки макета
В первую очередь создадим область Шапка, в нее будут выводится данные для заголовка печатной формы. Для данной области нам потребуется семь строк макета. Выделим их и, как я уже писал выше, нажмем сочетание клавиш Ctrl + Shift + N, в поле Имя напишем «Шапка» и нажмем кнопку ОК.
Заполним область макета нужными нам данными. Обычно ни одна печатная форма не обходится без заголовка, поэтому создадим его и в нашей шапке макета. Так как в заголовке помимо названия печатной формы мы будем выводить еще и номер документа из которого она была напечатана, то текст заголовка в макете мы зададим параметром. Параметр макета — это специально обозначенная ячейка макета, в которую при помощи встроенного языка 1С 8 можно выводить различные данные. Заголовок должен выводится на всю ширину печатной формы, поэтому определимся сколько ячеек макета нам будет достаточно для печати на стандартной альбомной ориентации листа.
Заголовок печатной формы должен выделяться среди прочего текста, поэтому еще раз выделим ячейку и при помощи пиктограмм на панели форматирования макета, поставим выравнивание текста По центру и размер шрифта 14.
После текста заголовка выведем в область Шапка данные о организации, контрагенте, договоре контрагента и дате поступления товара. Так как все эти данные также берутся из документа, также оформим их параметрами. Кроме того перед каждым параметром следует написать поясняющий текст, что бы пользователь легко понял, где организация, а где контрагент и т.д. Все эти действия подобны созданию заголовка поэтому не буду подробно на них останавливаться, приведу лишь рисунок с тем, что должно получиться в итоге.
На рисунке видно, как отличаются параметры макета, от обычного текста.
Добавление шапки таблицы макета
Последнее, что нам необходимо создать в данной области макета — это шапка таблицы, в которую будут выводится данные табличной части Товары. Колонки необходимые для таблицы были описаны в разделе «Постановка задачи». Шапку таблицы также создадим используя объединение ячеек и написания текста (названий колонок). Границы шапки таблицы выделим при помощи инструмента Рамка, который расположен на панели форматирования макета.
Добавление таблицы в макет
Создадим в макете еще одну область — Данные. В нее будет выводится таблица данных табличной части Товары. Для данной области нам понадобится только одна строка макета. Чтобы вывести все строки табличной части в печатную форму мы будем заполнять и выводить данную область нужное количество раз. Колонки в области Данные должны совпадать с колонками шапки таблицы, поэтому заполнить ее не составит труда. Единственное отличие — в области Данные нам нужны параметры, а не просто текст. Также заметьте, что по умолчанию числовые параметры форматируются по правому краю, а текстовые по левому. Для выделения колонок, также необходимо использовать инструмент Рамка.
Добавление подвала в макет
Последняя необходимая нам область макета — это Подвал. В нее будут выводиться итоги по количеству и сумме. Создание аналогично созданию области Данные, но дополнительно следует выделить итоги жирным шрифтом.
В итоге должен получиться макет следующего вида:
Создание печатной формы 1С. Программирование
В модуле объекта внешней печатной формы необходимо создать экспортную функцию Печать().
Обратите внимание, что данная функция является обязательной для внешних печатных форм в конфигурациях использующих обычное приложение. Весь последующий программный код необходимый для вывода печатной формы будем писать внутри этой функции.
Инициализация основных переменных
Создадим переменную ТабДок, в которой будет содержаться табличный документ — именно он и есть печатная форма, в которую мы будем выводить заполненные области макета.
В переменную Макет получим созданный нами макет печатной формы. Для этого используем встроенную функцию ПолучитьМакет( ).
Все области макета получим в переменные. Для этого используем метод макета ПолучитьОбласть( ).
Вывод шапки печатной формы в табличный документ
Все необходимые переменные инициализированы. Приступим к заполнению и выводу областей макета в табличный документ. В первую очередь заполним заголовок печатной формы, для этого нам необходимо передать в параметр ТекстЗаголовка, который мы создали в макете, нужный нам текст. Для заполнения значений параметров у области макета существует специальная коллекция, которая так и называется — Параметры. Из которой через «.» можно получить любой параметр. В текст заголовка передадим текст: «Печатная форма», а также номер документа.
Остальные параметры шапки заполним подобным образом, все необходимые для них значения получим из реквизита СсылкаНаОбъект, в котором содержится ссылка на печатаемый документ.
Все параметры шапки заполнены, выведем ее в созданный нами табличный документ, для этого используем метод Вывести( ).
Написание запроса для печатной форы
Займемся заполнением и выводом области Данные. Создание печатной формы 1С подразумевает и написание запроса, нам он необходим для получения данных табличной части Товары и цен Номенклатуры на текущую дату будем использовать Запрос. Язык запросов 1С 8 похож на SQL, а точнее практически копирует возможности его оператора SELECT, но при этом весь запрос пишется на русском языке. Поэтому если вы хотя бы отдаленно знакомы с SQL, то и язык запросов 1С 8 поймете легко.
В данной печатной форме запрос будет довольно простым и многие скажут, что можно было бы обойтись и без него, но знание языка запросов и умение его грамотно использовать — одно из главных умений программиста 1С. Запросы позволяют используя меньшие ресурсы получать сложнейшие выборки данных, а также в тексте запроса намного легче разобраться, чем в программном коде написанном без использования запроса (или с минимальным его использованием). К тому же, в 1С 8 есть очень хороший конструктор запросов, позволяющий в интерактивном режиме собирать запрос из нужных таблиц.
Создадим переменную, которая будет содержать в себе запрос.
Текст запроса будем составлять при помощи конструктора запросов. Для начала напишем:
Поставим курсор мышки между кавычками, нажмем правую кнопку мыши. В открывшемся контекстном меню выберем пункт Конструктор запроса, он очень поможет нам в создании печатной формы 1С. После этого откроется окно конструктора запроса, оно содержит много вкладок, но для нашего запроса понадобятся только четыре: «Таблицы и поля», «Связи», «Условия», «Объединения / Псевдонимы».
Для нашего запроса нам понадобятся две таблицы: табличная часть Товары документа Поступление товаров и услуг и срез последних на текущую дату регистра сведений Цены номенклатуры.
В левой части окна конструктора найдем столбец База данных. В нем находится дерево всех объектов метаданных, найдем нужные нам. Для этого раскроем ветку Документы и отыщем документ ПоступлениеТоваровУслуг, раскроем его и найдем табличную часть Товары, перетащим ее в столбец конструктора запросов Таблицы. Перетащить можно тремя способами: собственно перетаскиванием, двойным щелчком по таблице или выделив ее и нажав кнопку «>». Раскроем ветку РегистрыСведений и найдем там таблицу ЦеныНоменклатуры.СрезПоследних, также перетащим ее в столбец Таблицы. Этих двух таблиц достаточно для нашего запроса.
Выберем нужные нам поля из полученных таблиц. Для этого в столбце Таблицы раскроем таблицу ПоступлениеТоваровУслугТовары и найдем поля: Номенклатура, Сумма, Цена, Количество и перетащим их в третий столбец конструктора — Поля. Раскроем таблицу ЦеныНоменклатурыСрезПоследних, найдем поле Цена и тоже перетащим его в Поля.
Структура таблиц и полей нашего запроса готова, теперь займемся условиями. Нам необходимо чтобы данные табличной части Товары брались не из всех поступлений, а только из того, которое мы печатаем. Для этого наложим условие на таблицу ПоступлениеТоваровУслугТовары. Перейдем на закладку «Условия» конструктора запросов. В колонке Поля расположены выбранные нами ранее таблицы, для условия нам понадобится поле Ссылка из таблицы ПоступлениеТоваровУслугТовары, перетащим его в окно Условия.
В запросах 1С можно использовать параметры, они нужны для того чтобы передавать в запрос данные. Например, если мы хотим ограничить выборку документов каким то конкретным документом, то можно при помощи параметра передать в запрос ссылку на этот документ и использовать данный параметр в условии. Именно так мы и поступим в нашем запросе.
После того, как в окно Условия мы добавили поле Ссылка, конструктор запросов сам создаст параметр с аналогичным названием и расположит его после знака «=». Данный параметр можно переименовать, если есть желание. В тексте запроса параметры помечаются знаком «&», но в данном случае этого делать не нужно, так как подразумевается, что во второй части условия стоит параметр, это просто надо запомнить. О том как передать значение в параметр запроса 1С будет рассказано ниже.
Так как в запросе мы используем не полную таблицу цен номенклатуры, а виртуальную (срез последних в данном случае), то нам необходимо задать условия формирования этой виртуальной таблицы, в нашем случае это дата среза и условие на тип цен (должны выбираться цены имеющие строго определенный тип цен — тот который задан в документе поступления, который мы выводим на печать).
Для заполнения параметров виртуальной таблицы перейдем на закладку Таблицы и поля конструктора запроса, в колонке Таблицы выделим таблицу ЦеныНоменклатурыСрезПоследних и нажмем кнопку Параметры виртуальной таблицы, расположенную вверху. В открывшемся окне, в поле Период следует задать параметр, в который будет передаваться дата, на которую будет делаться срез цен. В нашем случае это будет текущая дата (то есть сегодня), поэтому и параметр назовем «&ТекущаяДата». В поле условия напишем условия на тип цен, его мы тоже передадим в параметре, который назовем «&ТипЦен». Получившееся условие будет выглядеть следующим образом (где ТипЦен — измерение регистра Цены номенклатуры):
Параметры виртуальной таблицы заполнены, нажмем кнопку ОК.
Теперь, когда мы ограничили выборку только нужным нам документом, создадим связи между таблицами запроса. Если этого не сделать, то цены из таблицы ЦеныНоменклатурыСрезПоследних не будут связаны с номенклатурой из поступления. Перейдем на вкладку Связи конструктора запросов. Создадим связь по полю Номенклатура между двумя нашими таблицами. Для этого нажмем кнопку Добавить, в поле Таблица 1 выберем таблицу ПоступлениеТоваровУслугТовары, а в поле Таблица 2 — ЦеныНоменклатурыСрезПоследних. В условиях связи выберем поля Номенклатура из обоих таблиц.
Также следует заметить, что в выборке запроса нам необходимо получить все строки из табчасти Товары и цены только в том случае, если таковые имеются на текущую дату по типу цен документа. Таким образом данные табчасти Товары являются обязательными, а данные среза цен нет. Поэтому в связях между этими таблицами необходимо использовать так называемое ЛЕВОЕ СОЕДИНЕНИЕ, причем левой (или обязательной) таблицей будет ПоступлениеТоваровУслугТовары, а правой (или необязательной) ЦеныНоменклатурыСрезПоследних. Для того чтобы левое соединение таблиц запроса заработало так как я описал выше необходимо поставить галочку Все после поля Таблица 1.
Запрос практически готов, осталось только немного поработать над псевдонимами полей. Перейдем на закладку Объединения / Псевдонимы и зададим псевдоним для поля ЦеныНоменклатурыСрезПоследних.Цена. Имя псевдонима будет — ЦенаНаСегодня, нужен он для того чтобы имена полей выборки запроса и имена параметров в макете печатной формы совпадали.
Работа в конструкторе запросов на этом закончена, нажмем кнопку ОК. После того, как окно конструктора закроется вы увидите, что строка с текстом запроса заполнена и имеет следующий вид:
Выполнение запроса
Выполним запрос для получения выборки с нужными нам данными. Для этого сначала воспользуемся методом запроса Выполнить(), а затем методом Выбрать().
Заполнение таблицы печатной формы
В итоге, в переменной Выборка будет содержаться выборка результатов запроса, перемещаться по ней можно по при помощи метода Следующий(), а чтобы обойти целиком понадобится цикл Пока. Конструкция получится следующая:
Именно в этом цикле мы будем заполнять и выводить область макета Данные. Но для начала инициализируем две переменные числового типа. В них будем собирать итоги по количеству и сумме, которые нам необходимо вывести в область Подвал.
Вывод подвала печатной формы в табличный документ
Осталось заполнить и вывести последнюю область макета — Подвал. Данные для заполнения мы уже подготовили, заполнение и вывод осуществляем по той же схеме.
Табличный документ полностью заполнен, осталось вывести его на экран, чтобы пользователь мог посмотреть печатную форму и при необходимости распечатать. Но в типовых конфигурациях 1С 8 за вывод внешних печатных форм отвечают процедуры специальных модулей. Поэтому достаточно вернуть из функции Печать() заполненный табличный документ.
На этом этап программирования закончен и создание печатной формы 1с практически завершено. Полный текст функции Печать() здесь приводить не буду, можете посмотреть его в файле печатной формы, скачать который можно внизу статьи.
Создание печатной формы 1С. Параметры авторегистрации
При подключении внешней печатной формы к базе система автоматически не определяет для какого именно документа или справочника предназначена печатная форма, выбирать его приходится вручную. А если писал печатную форму другой человек, а вам поручено только подключить ее, то выбор может стать неоднозначным. Для того чтобы избежать таких проблем, во всех внешних печатных формах необходимо создавать макет с параметрами авторегистрации. Если он создан и правильно оформлен, то система автоматически определяет, какому документу или справочнику предназначена печатная форма.
Делается он следующим образом:
Подключение к базе внешней печатной формы
После этого внешняя печатная форма будет доступна в меню Печать документа Поступление товаров и услуг. Создание печатной формы 1С на этом можно считать завершенным.
Скачать внешнюю печатную форму рассмотренную в статье: Внешняя печатная форма