Содержание:
1. Конструктор печатных форм
2. Работа с макетом печатных форм 1С
3. Алгоритм создания печатных форм
1. Конструктор печатных форм
Доброго времени суток, уважаемый читатель! В данной публикации я хочу рассмотреть такой аспект работы программиста 1С как создание печатных форм 1С. Статья может помочь начинающим разработчикам лучше понять основные принципы и механизмы, используемые при создании печатных форм.
В первую очередь стоит сказать, что самый простой способ начать делать печатную форму для документа 1С – воспользоваться конструктором печатных форм. Сделать это можно, зайдя в палитру свойств нужного документа (Рисунок 1).
Рисунок 1
Следующий шаг при создании печатных форм в 1С 8.3 — выбор названия процедуры для печати. Назовём её «Печать акта об оказании услуг» (Рисунок 2).
Рисунок 2
Далее конструктор предложит выбрать реквизиты, которые будут находиться в шапке, табличной части и подвале печатной формы 1С. Выбирать какие-либо реквизиты не обязательно, но я советую выбрать реквизиты для шапки и табличной части, так как в таком случае будет немного проще писать код.
Пример созданного макета печатной формы в 1С 8.3 представлен Рисунком 3.
Рисунок 3
2. Работа с макетом печатных форм 1С
С макетами печатных форм 1С программный код работает при помощи областей. По умолчанию создается от 0 до 5 областей в зависимости от того, что выбиралось в конструкторе. Обратите внимание, что при разработке сложных форм может потребоваться и больше областей. Для управления областями используются кнопки, выделенные на рисунке 4.
Рисунок 4
Чтобы добавить область печатной формы документа, необходимо выбрать нужные строки и нажать «Назначить имя». Если имя новой области будет совпадать с именем другой области, то система предложит удалить старую область или не создавать новую.
Перейдем к ячейкам. Они могут содержать:
• простой текст, не содержащий в себе значений, которые нужно выводить из документа (не меняется);
• параметр, который выводятся из документа (меняются каждый раз в зависимости от данных документа и обозначаются треугольными скобками <>);
• шаблон, содержащий в себе и текст, и параметры; параметры при использовании шаблона обозначаются в квадратных скобках [].
После изменения макет будет выглядеть так, как показано на Рисунке 5.
Рисунок 5
По завершении работы с макетом печатной формы необходимо отредактировать программный код 1С, созданный конструктором печатных форм.
3. Алгоритм создания печатных форм
1. Сперва делается запрос, получающий необходимые данные:
2. Получаем области которые ранее создавали в макете:
3. Обходим выборку и заполняем параметры печатной формы 1С удобным способом. Если параметры совпадают с результатом запроса 1С 8.3 по имени, можно воспользоваться функцией Параметры.Заполнить(Выборка). Можно также и прямо указать, чему равен тот или иной параметр печатной формы 1С через ИмяОбласти.Параметры.ИмяПараметра = Значение
4. После заполнения параметров в области ее необходимо вывести с помощью ТабДок.Вывести(ИмяОбласти).
В нашем случае необходимо лишь отредактировать запрос, добавив в него необходимые поля, после чего заполнить параметры полученными значениями и вывести все в табличный документ 1С 8.
Результат нашей работы будет выглядеть следующим образом:
Специалист компании «Кодерлайн»
Айдар Фархутдинова
В случае, если необходимо добавить какую-либо печатную форму в систему, то отличным вариантом это сделать является создание дополнительной печатной формы. При использовании дополнительной печатной формы нет никакой необходимости вносить изменения в конфигурацию.
Часто пользователям необходимо внести небольшие изменения в печатную форму, уже существующую. В этом случае также лучше использовать дополнительную форму, а не вносить поправки в стандартную, т.к. при последующих обновлениях системы могут возникнуть серьёзные проблемы.
Для примера возьмём печатную форму «Унифицированная форма №Т-61» или по-другому «Записка-расчет при прекращении (расторжении) трудового договора с работником (увольнении)». Будем использовать конфигурацию 1С Управление производственным предприятием.
Пользователи попросили добавить в документ «Увольнение из организаций» данную печатную форму. Рассмотрим процесс создания печатной формы, заполнение её макета и подключения печатной формы.
Для создания новой обработки в 1С необходимо запустить 1С в режиме «Конфигуратор».
В Конфигураторе в меню «Файл» необходимо выбрать пункт «Новый», так же можно воспользоваться комбинацией клавиш Ctrl+N или кнопкой на панели быстрого доступа.
По сути внешняя печатная форма – это внешняя обработка, предназначенная для формирования печатной формы, поэтому в появившемся окне выбираем вариант «Внешняя обработка» и нажимаем «ОК».
В открывшемся окне новой обработки необходимо задать ей имя. Назовём нашу обработку «УвольнениеТ61», автоматически формируется синоним, который будет виден пользователям.
Добавим реквизит «СсылкаНаОбъект» и укажем тип «ДокументСсылка.УвольнениеИзОрганизаций» т.к. мы собираемся подключать обработку именно к данному документу.
Теперь необходимо создать форму для нашей обработки. Выбираем в списке «Формы» и нажимаем «Добавить».
В появившемся окне формы выбираем параметры для формы нашей обработки. Тип формы установим «Форма обработки», проконтролируем флаг «Назначить форму основной». Можно задать форме имя, но мы оставим стандартное. В данном примере оно не играет никакой роли. Нажимаем «Далее».
На данной вкладке установим флаг у реквизита «СсылкаНаОбъект» для того, чтобы он появился на форме, затем нажимаем «Готово».
Нажимаем правой кнопкой мыши на кнопку «Выполнить» и выбираем пункт «КнопкаВыполнитьНажатие».
В процедуру выполнить нажатие добавим следующий код:
Так же нам понадобятся две переменные «ВалютаРегламентированногоУчета» и «ВалютаУправленческогоУчёта».
В модуле формы больше никакого кода писать не нужно. Следующим шагом создадим макет печатной формы. Выберем «Макет» и нажмём кнопку «Добавить»
В появившемся окне необходимо установить имя макета. Назовём макет «Т_61» и установим тип макета «Табличный документ».
Перед нами откроется окно пустого табличного документа, которое необходимо заполнить в соответствии с внешним видом «Унифицированной формы №Т-61». Опустим шаги по заполнению макета, покажем только конечный результат.
Заполнение макета печатной формы
Код для заполнения макета необходимо расположить в «Модуле объекта». Для этого нажмём на кнопку «Действия» нашей обработки и выберем пункт «Открыть модуль объекта».
Процесс написания кода аналогичен процессу заполнения обычного табличного документа, поэтому приведём готовый листинг кода, разобраться в котором начинающим программистам не составит никакого труда.
Перем мДлинаСуток;
// Механизм исправлений
Перем мВосстанавливатьДвижения;
Перем мСоответствиеДвижений;
Перем мИсправляемыйДокумент;
Функция СформироватьЗапросДляПечати(Режим)
Запрос = Новый Запрос;
// Установим параметры запроса
Запрос.УстановитьПараметр(«ДокументСсылка», СсылкаНаОбъект.Ссылка);
Запрос.УстановитьПараметр(«ДатаДокумента», СсылкаНаОбъект.Дата);
Запрос.УстановитьПараметр(«Организация», СсылкаНаОбъект.Организация);
Если Режим = «ПоРеквизитамДокумента» Тогда
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр(«СтруктурнаяЕдиница»,СсылкаНаОбъект.Организация);
Запрос.Текст = ФормированиеПечатныхФормЗК.ПолучитьТекстЗапросаПоОтветственнымЛицам(
«ДатаДокумента»,
«ОтветственноеЛицо = ЗНАЧЕНИЕ(Перечисление.ОтветственныеЛицаОрганизаций.Руководитель)
|И СтруктурнаяЕдиница = &Организация»);
Запрос.Выполнить();
Запрос.Текст =
«ВЫБРАТЬ РАЗРЕШЕННЫЕ
| УвольнениеИзОрганизаций.Номер КАК НомерДок,
| УвольнениеИзОрганизаций.Дата КАК ДатаДок,
| УвольнениеИзОрганизаций.Организация.НаименованиеПолное КАК НазваниеОрганизации,
| УвольнениеИзОрганизаций.Организация.КодПоОКПО КАК КодПоОКПО,
| ОтветственныеЛицаОрганизаций.Должность КАК ДолжностьРуководителя,
| ОтветственныеЛицаОрганизаций.НаименованиеОтветственногоЛица КАК ФИОРуководителя,
| УвольнениеИзОрганизаций.Организация.Префикс
|ИЗ
| Документ.УвольнениеИзОрганизаций КАК УвольнениеИзОрганизаций
| ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеОбОтветственномЛице КАК ОтветственныеЛицаОрганизаций
| ПО УвольнениеИзОрганизаций.Организация = ОтветственныеЛицаОрганизаций.СтруктурнаяЕдиница
|ГДЕ
| УвольнениеИзОрганизаций.Ссылка = &ДокументСсылка»;
ИначеЕсли Режим = «ПоТабличнойЧастиДокумента» Тогда
Запрос.УстановитьПараметр(«ГоловнаяОрганизация», ОбщегоНазначенияЗК.ГоловнаяОрганизация(СсылкаНаОбъект.Организация));
Запрос.УстановитьПараметр(«ПустаяОрганизация» , Справочники.Организации.ПустаяСсылка());
Запрос.Текст =
«ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЕСТЬNULL(ФИОФизЛицСрезПоследних.Фамилия + «» «» + ФИОФизЛицСрезПоследних.Имя + «» «» + ФИОФизЛицСрезПоследних.Отчество, УвольнениеИзОрганизацииРаботники.Сотрудник.Наименование) КАК Работник,
| УвольнениеИзОрганизацииРаботники.Физлицо.Пол,
| УвольнениеИзОрганизацииРаботники.Сотрудник.ДатаДоговора КАК ТрудовойДоговорДата,
| УвольнениеИзОрганизацииРаботники.Сотрудник.НомерДоговора КАК ТрудовойДоговорНомер,
| УвольнениеИзОрганизацииРаботники.НомерСтроки КАК НомерСтроки,
| УвольнениеИзОрганизацииРаботники.ДатаУвольнения,
| УвольнениеИзОрганизацииРаботники.СтатьяТКРФ.Наименование КАК СтатьяТКРФ,
| УвольнениеИзОрганизацииРаботники.СтатьяТКРФ.ТекстОснования,
| УвольнениеИзОрганизацииРаботники.ОснованиеУвольнения КАК ОснованиеУвольнения,
| ВЫБОР
| КОГДА Работники.ПериодЗавершения <= УвольнениеИзОрганизацииРаботники.ДатаУвольнения
| И Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА Работники.ПодразделениеОрганизацииЗавершения
| ИНАЧЕ Работники.ПодразделениеОрганизации
| КОНЕЦ КАК Подразделение,
| ВЫБОР
| КОГДА Работники.ПериодЗавершения <= УвольнениеИзОрганизацииРаботники.ДатаУвольнения
| И Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА Работники.ОЦРВ_ПодразделениеОрганизацииЗавершения
| ИНАЧЕ Работники.ОЦРВ_ПодразделениеОрганизации
| КОНЕЦ КАК ОЦРВ_Подразделение,
| ВЫБОР
| КОГДА Работники.ПериодЗавершения <= УвольнениеИзОрганизацииРаботники.ДатаУвольнения
| И Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА Работники.ДолжностьЗавершения
| ИНАЧЕ Работники.Должность
| КОНЕЦ КАК Должность,
| УвольнениеИзОрганизацииРаботники.Сотрудник.Код КАК ТабельныйНомер,
| УвольнениеИзОрганизацииРаботники.РабочийГодС,
| УвольнениеИзОрганизацииРаботники.РабочийГодПо,
| УвольнениеИзОрганизацииРаботники.ДнейЧасовКомпенсацииУдержанияОтпуска КАК Компенс,
| УвольнениеИзОрганизацииРаботники.ПризнакКомпенсацииОтпуска
|ИЗ
| Документ.УвольнениеИзОрганизаций.РаботникиОрганизации КАК УвольнениеИзОрганизацииРаботники
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| СписокДат.Сотрудник КАК Сотрудник,
| РаботникиОрганизации.ПодразделениеОрганизации.Наименование КАК ПодразделениеОрганизации,
| РаботникиОрганизации.Должность.Наименование КАК Должность,
| РаботникиОрганизации.ПодразделениеОрганизацииЗавершения.Наименование КАК ПодразделениеОрганизацииЗавершения,
| РаботникиОрганизации.ОЦРВ_ПодразделениеОрганизации.Наименование КАК ОЦРВ_ПодразделениеОрганизации,
| РаботникиОрганизации.ОЦРВ_ПодразделениеОрганизацииЗавершения.Наименование КАК ОЦРВ_ПодразделениеОрганизацииЗавершения,
| РаботникиОрганизации.ДолжностьЗавершения.Наименование КАК ДолжностьЗавершения,
| РаботникиОрганизации.ПериодЗавершения КАК ПериодЗавершения
| ИЗ
| (ВЫБРАТЬ
| РаботникиВнутри.Сотрудник КАК Сотрудник,
| МАКСИМУМ(РаботникиВнутри.Период) КАК ДатаПоследнегоИзменения
| ИЗ
| РегистрСведений.РаботникиОрганизаций КАК РаботникиВнутри
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.УвольнениеИзОрганизаций.РаботникиОрганизации КАК Док
| ПО РаботникиВнутри.Период <= Док.ДатаУвольнения
| И РаботникиВнутри.Сотрудник = Док.Сотрудник
| ГДЕ
| Док.Ссылка = &ДокументСсылка
| И НЕ Док.Сторно
|
| СГРУППИРОВАТЬ ПО
| РаботникиВнутри.Сотрудник) КАК СписокДат
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизации
| ПО СписокДат.ДатаПоследнегоИзменения = РаботникиОрганизации.Период
| И СписокДат.Сотрудник = РаботникиОрганизации.Сотрудник) КАК Работники
| ПО УвольнениеИзОрганизацииРаботники.Сотрудник = Работники.Сотрудник
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(
| &ДатаДокумента,
| Физлицо В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| УвольнениеИзОрганизацииРаботники.Сотрудник.Физлицо
| ИЗ
| Документ.УвольнениеИзОрганизаций.РаботникиОрганизации КАК УвольнениеИзОрганизацииРаботники
| ГДЕ
| УвольнениеИзОрганизацииРаботники.Ссылка = &ДокументСсылка)) КАК ФИОФизЛицСрезПоследних
| ПО УвольнениеИзОрганизацииРаботники.Сотрудник.Физлицо = ФИОФизЛицСрезПоследних.ФизЛицо
|ГДЕ
| УвольнениеИзОрганизацииРаботники.Ссылка = &ДокументСсылка
| И НЕ УвольнениеИзОрганизацииРаботники.Сторно
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки»;
Иначе
Возврат Неопределено;
КонецЕсли;
Возврат Запрос.Выполнить();
КонецФункции
Функция ПечатьТ61() Экспорт
ТабДокумент = Новый ТабличныйДокумент;
// получаем данные для печати
ВыборкаДляШапки = СформироватьЗапросДляПечати(«ПоРеквизитамДокумента»).Выбрать();
ВыборкаРаботники = СформироватьЗапросДляПечати(«ПоТабличнойЧастиДокумента»).Выбрать();
// Начинаем формировать выходной документ
Пока ВыборкаРаботники.Следующий() Цикл
Макет = ПолучитьМакет(«Т_61»);
ТабДокумент.ПолеСверху = 0;
ТабДокумент.ПолеСлева = 0;
ТабДокумент.ПолеСнизу = 0;
ТабДокумент.ПолеСправа = 0;
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
//Получаем области макета
СекцияРасчетСреднего = Макет.ПолучитьОбласть(«РасчетСреднего»);
СекцияДополнительнаяСтрокаЗаработка = Макет.ПолучитьОбласть(«ДополнительнаяСтрокаЗаработка»);
СекцияЛицеваяСторона = Макет.ПолучитьОбласть(«ЛицеваяСторона»);
СекцияРасчетСреднегоИтого = Макет.ПолучитьОбласть(«РасчетСреднегоИтого»);
СекцияПодвал = Макет.ПолучитьОбласть(«Подвал»);
// выводим данные о руководителях организации
Если ВыборкаДляШапки.Следующий() Тогда
СекцияЛицеваяСторона.Параметры.Заполнить(ВыборкаДляШапки); // Шапка документа.
СекцияЛицеваяСторона.Параметры.НазваниеОрганизации = СокрЛП(СекцияЛицеваяСторона.Параметры.НазваниеОрганизации);
СекцияПодвал.Параметры.Заполнить(ВыборкаДляШапки); // Для подвала.
НомерДокДляПечати = ВыборкаДляШапки.НомерДок;
СекцияЛицеваяСторона.Параметры.НомерДокумента = НомерДокДляПечати;
СекцияЛицеваяСторона.Параметры.ДатаДокумента = ВыборкаДляШапки.ДатаДок;
ВыводитьДатуОзнакомленияСПриказом = ПроцедурыУправленияПерсоналом.ЗначениеУчетнойПолитикиПоПерсоналуОрганизации(глЗначениеПеременной(«глУчетнаяПолитикаПоПерсоналуОрганизации»), СсылкаНаОбъект.Организация, «ПроставлятьАвтоматическиДатуОзнакомленияВКадровыхПриказах»);
КонецЕсли;
// Каждый приказ на отдельной странице.
Если ТабДокумент.ВысотаТаблицы > 0 Тогда
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПредставлениеДатыДоговора = Формат(ВыборкаРаботники.ТрудовойДоговорДата, «ДЛФ=DD»);
ПредставлениеДатыУвольнения = Формат(ВыборкаРаботники.ДатаУвольнения, «ДЛФ=DD»);
СекцияЛицеваяСторона.Параметры.ДатаУвольнения = ?(ЗначениеЗаполнено(ВыборкаРаботники.ДатаУвольнения), ПредставлениеДатыУвольнения, » «);
СекцияЛицеваяСторона.Параметры.ОснованиеУвольнения = ?(ВыборкаРаботники.СтатьяТКРФ = NULL, «», ВыборкаРаботники.СтатьяТКРФ) + «. » + ВыборкаРаботники.СтатьяТКРФТекстОснования;
СекцияЛицеваяСторона.Параметры.ТабельныйНомер = ВыборкаРаботники.ТабельныйНомер;
СекцияЛицеваяСторона.Параметры.ФИО = ВыборкаРаботники.Работник;
СекцияЛицеваяСторона.Параметры.Подразделение = ВыборкаРаботники.Подразделение;
СекцияЛицеваяСторона.Параметры.Должность = ВыборкаРаботники.Должность;
СекцияЛицеваяСторона.Параметры.РабочийГодС = ВыборкаРаботники.РабочийГодС;
СекцияЛицеваяСторона.Параметры.РабочийГодПо = ВыборкаРаботники.РабочийГодПо;
Если ВыборкаРаботники.ПризнакКомпенсацииОтпуска = Истина Тогда
СекцияЛицеваяСторона.Параметры.ДнейКомпенсации = ВыборкаРаботники.Компенс;
Иначе
СекцияЛицеваяСторона.Параметры.ДнейУдержания = ВыборкаРаботники.Компенс;
КонецЕсли;
ТабДокумент.Вывести(СекцияЛицеваяСторона);
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ТабДокумент.Вывести(СекцияРасчетСреднего);
ТабДокумент.Вывести(СекцияДополнительнаяСтрокаЗаработка);
ТабДокумент.Вывести(СекцияПодвал);
КонецЦикла;
Возврат ТабДокумент;
КонецФункции // ПечатьТ61()
Функция Печать(КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт
ТабДокумент = ПечатьТ61();
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, , );
КонецФункции
// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
мДлинаСуток = 86400; // в секундах
мСведенияОВидахРасчета = Новый Соответствие;
мУдержаниеЗаОтпускУменьшаетНалоги = Неопределено;
Сохраняем нашу готовую печатную форму на диск и запускаем 1С в режиме «Предприятие».
Подключение внешней печатной формы к документу
Подключение внешней печатной формы производится аналогично подключению внешней обработки.
В меню «Операции» выберем пункт «Справочник».
В открывшемся окне выберем справочник «Внешние обработки».
В данном справочнике хранятся все внешние обработки, внешние отчеты и внешние печатные формы, добавленные в систему. Нажмём кнопку добавить на панели справочника.
В появившемся окне нового элемента справочника необходимо указать вид элемента. Выбираем значение «Печатная форма».
Выбираем файл нашей печатной формы
Имя печатной формы в 1С заполнилось автоматически. Теперь необходимо указать «Принадлежность печатной формы». Нажимаем кнопку «Добавить».
Выбираем документ «Увольнение из организаций» и нажимаем «ОК».
Сохраняем нашу внешнюю печатную форму и открываем документ «Увольнение из организаций». В кнопке «Печать» добавился новый пункт с нашей печатной формой «Форма Т-61 (внешняя печатная форма)».
Как оптимизировать работу с программой?
Кроме установки и настройки программы, существует также необходимость обновления 1С, подключение программы к периферическим устройствам и много других задач, отнимающих время ваших сотрудников и замедляющих рабочие процессы.
Даже если у вас есть программисты 1С, мы предлагаем оставить за ними важные стратегические задачи, а за сопровождением 1С к профессионалам, в компанию «ПРОГРАММЫ 93».
Почему нас выбирают?
ООО «ПРОГРАММЫ 93» — это компания с большим штатом сотрудников, в который входят не только специалисты 1С, но и бухгалтера, кадровики, юристы и другие эксперты. Вы больше не зависите от одного сотрудника, вам не нужно тратить деньги на приглашенных специалистов для решения каждой задачи и переживать насчет того, что у вас не хватает компетенции для проверки работы сотрудника. Для вас работает целая команда, любая задача дополнительно проверяется, а заболевший специалист тут же заменяется другим незаметно для вас.
Мы рады предложить вам:
- доработку программы под ваши нужды;
- поддержку продуктов 1С;
- интеграцию программы с сайтом;
- внедрение других продуктов 1С;
- сопровождение бухгалтерского и налогового учета.
Позвоните по номеру телефона, указанному на сайте, или заполните форму обратной связи, чтобы мы могли ответить на все возникающие вопросы и рассказать о том, как начать сотрудничество!
В 1С Бухгалтерия 3.0 можно создавать свои печатные формы к справочникам и документам 1С (с релиза 3.0.113). Расскажем, как создать новые формы для печати без помощи программиста.
Принцип работы функционала
Функционал создания новых печатных форм реализован через специальный Конструктор создания печатных форм. Те, кто работает с конфигурацией, уже знакомы с этим функционалом и знают, что в каждом объекте Конфигуратора есть команда создания макета печати. По заложенному алгоритму программисты создают печатные бланки в форме, указывая какие реквизиты справочника или документа пойдут в Шапку, строчную часть Таблицы и Подвал макета.
Что-то похожее реализовано сейчас в 1С Бухгалтерия 3.0 в пользовательском режиме.
Функционал размещается в разделе Администрирование — Внешние печатные формы, отчеты и обработки — Макеты печатных форм:
При открытии формы макетов открывается список документов и справочников 1С с установленными типовыми печатными формами:
Чтобы создать свою печатную форму к определенному объекту конфигурации, найдите его в этом списке, установите курсор на нужной строке и нажмите кнопку Создать:
Программа откроет специальный инструмент — Конструктор создания печатных форм. Перейдите в него, предварительно задав имя новой печатной формы:
В левой части Конструктор создания печатных форм располагается окно макета печатной формы (на этом этапе пустое), в правой части — список доступных реквизитов для использования в печатной форме:
Конструктор создания печатных форм сегодня работает только на создание новых печатных форм. Изменить типовые печатные формы, находящиеся в списке макетов Бухгалтерия 3.0, без доработки типового функционала 1С не получится. Но можно создать новую печатную форму и загрузить в нее скопированный в буфер типовой макет печатной формы. С таким макетом можно работать как с новым и использовать все возможности типового функционала создания новых печатных форм.
Принцип работы Конструктор создания печатных форм рассмотрим на примере создания новой печатной формы Дополнительная информация для справочника Сотрудники.
Создание новой печатной формы
Требуется создать печатную форму к справочнику Сотрудники, где была бы информация по личным данным физического лица и дополнительным сведениям, которые указаны в дополнительных реквизитах к справочнику Сотрудники:
- ФИО;
- Дата рождения;
- Место проживания;
- ИНН;
- Банковский счет;
- Категория;
- Аттестация;
- Медосмотр;
- Замещает сотрудника;
- Повышение квалификации.
Дополнительная информация для сотрудников заведена в Дополнительных реквизитах и сведениях раздела Администрирование — Общие настройки — Дополнительные реквизиты и сведения. В типовые отчеты мы не можем без программиста вставить дополнительные реквизиты и сведения, но в Конструкторе создания печатных форм нам подвластно и это.
Пошаговая инструкция создания печатной формы Дополнительная информация:
- Откройте макеты печатных форм объектов 1С в разделе Администрирование — Внешние печатные формы, отчеты и обработки — Макеты печатных форм.
- Найдите в списке объектов строчку Сотрудники, установите на нее курсор и нажмите кнопку Создать.
- В открывшемся окне введите наименование объекта Дополнительная информация:
Так в списке печатных форм будет называться новая печатная форма.
- В форме Конструктора создания печатных форм в правом окне найдите нужные реквизиты для переноса в макет:
- Аттестация;
- Замещает сотрудника;
- Категория;
- Медосмотр;
- Повышение квалификации;
- Физическое лицо;
- Определитесь со структурой печатной формы. В нашем примере личные данные сотрудника мы выводим в таблицу печатной формы, а дополнительную информацию — построчно.
- В левом окне вручную введите название Дополнительная информация и перетяните из правого окошка в левое ссылку Физическое лицо. Чтобы выделить заголовок жирным шрифтом и увеличить буквы, используйте командную панель редактирования «Увеличить шрифт» и «Жирный шрифт»:
- Нарисуйте таблицу для расположения в ней личных данных сотрудника: День рождения, ИНН, Место проживания и Банковский счет. В нашем примере сотрудник получает зарплату на карточку:
Для прорисовки таблицы используйте соответствующую кнопку командной панели. Разместите в Шапке заголовки колонок и перетащите в каждую колонку нужную информацию из данных ссылки Физическое лицо:
Чтобы строки не обрезались, а автоматически переносились в колонке, если не помещаются полностью, можно использовать вызов команды правой кнопки мыши Свойства — Размещение — Переносить:
- Расположите дополнительную информацию по сотруднику, перетянув нужные данные из правого окна в макет:
Для красивого размещения данных вызовите правой кнопкой мыши команду контекстного меню Объединить:
Можно использовать все кнопки командной панели редактирования: раскрашивать макет, увеличивать и уменьшать шрифт, располагать текст в центре или сбоку — тут огромный простор для творчества.
- Сохраните макет по кнопке Записать и закрыть. В списке макетов появится неактивный новый макет Дополнительная информация. Установите флаг доступности печатной формы для активации ее в справочнике Сотрудники:
После записи новой печатной формы в списке доступных печатных форм справочника Сотрудники добавится созданная форма Дополнительная информация:
- Откройте справочник Сотрудники и протестируйте работу новой печатной формы:
См. также:
- Путеводитель по заполнению документов
- Загрузка данных из табличного документа 1С 8.3
- История изменения объектов
- Подписи на электронных документах
Если Вы еще не подписаны:
Активировать демо-доступ бесплатно →
или
Оформить подписку на Рубрикатор →
После оформления подписки вам станут доступны все материалы по 1С:Бухгалтерия, записи поддерживающих эфиров и вы сможете задавать любые вопросы по 1С.
Помогла статья?
Получите еще секретный бонус и полный доступ к справочной системе Бухэксперт на 8 дней
бесплатно
В этой статье мы научимся создавать внешнюю печатную форму для управляемого приложения 1С 8.3, которое написано на БСП («1С: Бухгалтерия предприятия 3.0», «1С: Управление торговлей 11»). Причем создавать с нуля, не используя так называемые шаблоны. Вы сами научитесь создавать шаблоны внешних печатных форм.
Все это делается довольно просто))
И так, создадим новую обработку 1С.
Мы будем создавать внешний счет на оплату покупателю, поэтому обработку так и назовем: «СчетНаОплатуВнешний».
Сохраним ее на жесткий диск.
Регистрация внешней обработки или отчета в базе 1С осуществляется на основании сведений, которые поставляет сама обработка. Поэтому эти сведения должны быть описаны в обработке. Осуществляется это с помощью структуры, которая имеет определенный набор полей, и которая возвращается экспортной функций СведенияОВнешнейОбработке.
Зайдем в модуль обработки, и создадим экспортную функцию СведенияОВнешнейОбработке.
Функция СведенияОВнешнейОбработке() Экспорт КонецФункции
Внутри этой функции создадим структуру ПараметрыРегистрации, которая будет содержать определенный список полей. Каждое поле мы разберем в отдельности.
Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; КонецФункции
Создадим первый элемент структуры, он будет иметь ключ с название «Вид».
ПараметрыРегистрации = Новый Структура; ПараметрыРегистрации.Вставить("Вид",);
Значением данной связки КлючИЗначение идет одна из строк:
- «ДополнительнаяОбработка»
- «ДополнительныйОтчет»
- «ЗаполнениеОбъекта»
- «Отчет»
- «ПечатнаяФорма»
- «СозданиеСвязанныхОбъектов»
В нашем случае должна быть строка «ПечатнаяФорма».
ПараметрыРегистрации = Новый Структура; ПараметрыРегистрации.Вставить("Вид","ПечатнаяФорма");
Следующий элемент структуры должен иметь ключ с названием Назначение.
ПараметрыРегистрации.Вставить("Вид","ПечатнаяФорма"); ПараметрыРегистрации.Вставить("Назначение",);
В качестве значения данного элемента должен выступать массив, где перечислены будут все документы или справочники, в которых будет выходить данная печатная форма.
Они должны иметь тип строка, и быть в следующем формате:
Документ.»НазваниеДокумента»
Справочник.»НазваниеСправочника»
У нас этот массив будет возвращать отдельная функция ПолучитьНазначениеОбработки.
Создадим ее.
Функция ПолучитьНазначениеОбработки() Массив = Новый Массив; Массив.Добавить("Документ.СчетНаОплатуПокупателю"); Возврат Массив; КонецФункции
Допишем созданный последним элемент структуры.
ПараметрыРегистрации.Вставить("Назначение",ПолучитьНазначениеОбработки());
Создадим новый элемент структуры, ключ которого будет называться «Наименование», а в значении будет содержаться наименование обработки, которое будет отображаться в справочнике «Дополнительные внешние печатные формы».
ПараметрыРегистрации.Вставить("Вид","ПечатнаяФорма"); ПараметрыРегистрации.Вставить("Назначение",ПолучитьНазначениеОбработки()); ПараметрыРегистрации.Вставить("Наименование","Счет на оплату ВНЕШНИЙ");
Следующий элемент структуры будет иметь название «Версия», значением данного элемента будет версия обработки. Задается программистом на его усмотрение.
ПараметрыРегистрации.Вставить("Вид","ПечатнаяФорма"); ПараметрыРегистрации.Вставить("Назначение",ПолучитьНазначениеОбработки()); ПараметрыРегистрации.Вставить("Наименование","Счет на оплату ВНЕШНИЙ"); ПараметрыРегистрации.Вставить("Версия","1.0");
Следующий элемент имеет название «Информация», который содержит краткую информацию по обработке.
ПараметрыРегистрации.Вставить("Вид","ПечатнаяФорма"); ПараметрыРегистрации.Вставить("Назначение",ПолучитьНазначениеОбработки()); ПараметрыРегистрации.Вставить("Наименование","Счет на оплату ВНЕШНИЙ"); ПараметрыРегистрации.Вставить("Версия","1.0"); ПараметрыРегистрации.Вставить("Информация","Счет на оплату (внешняя печатная форма)");
Следующий элемент имеет название «БезопасныйРежим», его необходим устанавливать в значение истина или ложь, в зависимости от того необходимо устанавливать или отключать безопасный режим во время выполнения обработки. Мы установим значение Истина.
ПараметрыРегистрации.Вставить("Вид","ПечатнаяФорма"); ПараметрыРегистрации.Вставить("Назначение",ПолучитьНазначениеОбработки()); ПараметрыРегистрации.Вставить("Наименование","Счет на оплату ВНЕШНИЙ"); ПараметрыРегистрации.Вставить("Версия","1.0"); ПараметрыРегистрации.Вставить("Информация","Счет на оплату (внешняя печатная форма)"); ПараметрыРегистрации.Вставить("БезопасныйРежим",Истина);
И в последнем параметре необходимо добавить команды, которые будут поставляться обработкой. Для этого нам необходимо создать и заполнить таблицу команд. Разработаем функцию, которая создает и возвращает таблицу с определенным набором полей. Делать это будем в функции ПолучитьТаблицуКоманд.
Создадим функцию и таблицу значений внутри нее.
Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; КонецФункции
Теперь создадим пять колонок этой таблицы.
И первая колонка – Представление (тип строка).
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Эта колонка – представление команды в пользовательском интерфейсе, т.е. то, что пользователь увидит при нажатии меню»Печать» в документе или справочнике.
Вторая колонка – Идентификатор.
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Это может быть любая текстовая строка, уникальная в пределах данной обработки.
Третья колонка – Использование.
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Параметр данной колонки типа строка, должен принимать одно из четырех значений –
- ОткрытиеФормы – Открывает форму обработки.
- ВызовКлиентскогоМетода – будет вызвана клиентская процедура из модуля формы обработки.
- ВызовСерверногоМетода — будет вызвана серверная процедура из модуля обработки.
- СценарийВБезопасномРежиме – тоже будет вызвана серверная процедура из модуля обработки в безопасном режиме.
Конкретно мы будем использовать вызов серверного метода.
Следующая колонка – показывать оповещение. Принимает значение истина или ложь, в зависимости от того надо показывать оповещение или нет.
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
И последняя колонка – модификатор. Это дополнительный модификатор команды. В нашем случае будет иметь название ПечатьMXL.
Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")); Возврат Команды; КонецФункции
Теперь создадим процедуру, которая будет заполнять данную таблицу значений.
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "") НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = Представление; НоваяКоманда.Идентификатор = Идентификатор; НоваяКоманда.Использование = Использование; НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение; НоваяКоманда.Модификатор = Модификатор; КонецПроцедуры
В данном коде все понятно.
В функции СведенияОВнешнейОбработке создадим команду и заполним ее.
Создаем таблицу значений:
//.... ПараметрыРегистрации.Вставить("БезопасныйРежим",Истина); Команды = ПолучитьТаблицуКоманд();
Теперь заполним ее.
Команды = ПолучитьТаблицуКоманд(); ДобавитьКоманду(Команды,"Счет на оплату (внешняя печатная форма)", "СчетНаОплатуВнешний", "ВызовСерверногоМетода", Ложь, "ПечатьMXL");
Еще раз пройдемся по параметрам.
- Первый параметр, непосредственно таблица команд вновь созданная.
- Второй параметр, как будет отображаться команда пользователю на форме (документа, справочника).
- Третий – уникальный идентификатор команды, запомните его, он нам еще пригодится!
- Четвертый параметр – использование, что вызовет Ваша команда.
- Пятый параметр – показывать оповещение, мы не будем это делать.
- Шестой параметр – модификатор, в нашем случае он всегда один ПечатьMXL.
Теперь передадим вновь созданную таблицу команд в структуру ПараметрыРегистрации.
И пусть наша функция СведенияОВнешнейОбработке возвращает данную структуру.
ПараметрыРегистрации.Вставить("Команды",Команды); Возврат ПараметрыРегистрации;
Все теперь наша обработка будет передавать нужные параметры регистрации, которые будут необходимы при создании элемента справочника дополнительные печатные формы и обработки. Обращаю ваше внимание, что название всех полей в структуре Параметры регистрации, а также название и типы всех колонок в таблице команд, должны быть те которые приведены в примере, иначе Ваша обработка не зарегистрируется.
Теперь в модуле объекта создадим процедуру Печать. Это процедура с четырьмя параметрами: МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода.
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт КонецПроцедуры
И вот начинается самое интересное, теперь вам необходимо войти в аналогичную процедуру в менеджере объекта счет на оплату покупателю, или в обработке, которая, по сути, является менеджером печати.
Как узнать, где находится нужная нам функция?
Откроем модуль менеджера документа Счет на оплату покупателю.
И найдем процедуру ДобавитьКомандыПечати, которая заполняет список команд .
В этой процедуре найдем код, где добавляется команда для нужной нам печатной формы (список команд добавляется в таблицу значений КомандыПечати). И обратим внимание на свойство МенеджерПечати. Если этому свойству присваивается какое-нибудь значение — это путь к объекту метаданных, как правило к обработке, то значит при выводе нужной печатной формы будет отработан код в процедуре Печать, которая находится в модуле менеджере этого объекта (в обработке). А если это свойство в принципе не фигурирует при заполнении команды печати, то значит будет отработан код в процедуре Печать, которая находится в модуле менеджера нашего основного объекта (в нашем случае это документ СчетНаОплатуПокупателю)
Посмотрим на процедуру ДобавитьКомандыПечати в модуле менеджера документа «Счет на оплату покупателя».
оскольку мы делаем внешнюю печатную форму счета на оплату, то нас интересует первое добавление в таблицу значений (см. свойство Представление), и мы видим, что в этом случае заполнено свойство МенеджерПечати, где указан объект Обработка.ПечатьСчетаНаОплату. Это значит, что нам нужно найти процедуру Печать в модуле менеджера обработки ПечатьСчетаНаОплату.
А если бы мы решили сделать внешнюю печатную форму договора счета на оплату (второе добавление в таблицу значений КомандыПечати), то нам нужно было бы найти процедуру Печать в модуле менеджера документа СчетНаОплатуПокупателя.
Откроем модуль менеджера обработки ПечатьСчетаНаОплату.
И раскроем процедуру Печать.
Нас интересует второе условие (где фигурирует строка «СчетЗаказ», см. идентификатор нужной команды в процедуре ДобавитьКомандыПечати модуля менеджера документа), скопируем это условие в процедуру Печать нашей внешней обработки.
Внимание! Копировать напрямую процедуру Печать из модуля менеджера (без разницы обработка это, документ или справочник) не следует. Поскольку у них отличается количество параметров, в последствие это приводит к ошибкам при работе.
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетЗаказ") Тогда СформироватьПечатнуюФорму(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, "СчетЗаказ", "Счет на оплату", ОбъектыПечати, ПараметрыВывода); КонецЕсли;
Так же из модуля менеджера обработки скопируем процедуру СформироватьПечатнуюФорм
Процедура СформироватьПечатнуюФорму(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ИмяМакета, СинонимМакета, ОбъектыПечати, ПараметрыВывода) ТипыОбъектов = ОбщегоНазначенияБП.РазложитьСписокПоТипамОбъектов(МассивОбъектов); Для каждого ОбъектыТипа Из ТипыОбъектов Цикл МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ОбъектыТипа.Значение[0]); ДокументыБезСчетовНаОплату = Неопределено; ТаблицаСведенийСчетНаОплату = МенеджерОбъекта.ПолучитьТаблицуСведенийСчетаНаОплату(ОбъектыТипа.Значение, ДокументыБезСчетовНаОплату); Если ЗначениеЗаполнено(ДокументыБезСчетовНаОплату) Тогда Если ПараметрыПечати.Свойство("СокращенноеСообщениеОбОшибке") Тогда ВывестиСообщениеНеУказанСчетНаОплату(ДокументыБезСчетовНаОплату, ПараметрыПечати.СокращенноеСообщениеОбОшибке); Иначе ВывестиСообщениеНеУказанСчетНаОплату(ДокументыБезСчетовНаОплату); КонецЕсли; КонецЕсли; УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, ИмяМакета, СинонимМакета, ПечатьТорговыхДокументов.ПечатьСчетаНаОплату(ТаблицаСведенийСчетНаОплату, ОбъектыПечати, ПараметрыПечати),,"ОбщийМакет.ПФ_MXL_СчетЗаказ"); КонецЦикла; ПараметрыВывода.Вставить("ФормироватьЭД", Истина); ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); КонецПроцедуры
В этом коде есть строка, где заполняется таблица сведений счета на оплату.
ТаблицаСведенийСчетНаОплату = МенеджерОбъекта.ПолучитьТаблицуСведенийСчетаНаОплату(ОбъектыТипа.Значение, ДокументыБезСчетовНаОплату);
Эта таблица получается при помощи процедуры модуля менеджера объекта (в нашем случае это документ СчетНаОплатуПокупателю). Найдем эту процедуру в модуле менеджера документа СчетНаОплатуПокупателю.
И скопируем её в модель нашей внешней обработки.
А сам код процедуры СформироватьПечатнуюФорму в модуле внешней обработки исправим, убрав все не нужное от туда.
Процедура СформироватьПечатнуюФорму(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ИмяМакета, СинонимМакета, ОбъектыПечати, ПараметрыВывода) ТипыОбъектов = ОбщегоНазначенияБП.РазложитьСписокПоТипамОбъектов(МассивОбъектов); Для каждого ОбъектыТипа Из ТипыОбъектов Цикл ТаблицаСведенийСчетНаОплату = ПолучитьТаблицуСведенийСчетаНаОплату(ОбъектыТипа.Значение); УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, ИмяМакета, СинонимМакета, ПечатьТорговыхДокументов.ПечатьСчетаНаОплату(ТаблицаСведенийСчетНаОплату, ОбъектыПечати, ПараметрыПечати),,"ОбщийМакет.ПФ_MXL_СчетЗаказ"); КонецЦикла; ПараметрыВывода.Вставить("ФормироватьЭД", Истина); ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); КонецПроцедуры
Если мы сейчас сделаем проверку модуля внешней обработки, то выйдет две ошибки. Первая, что не определена переменная ПараметрыПечати в процедуре Печать, и, что не найдена функция ПолучитьТекстЗапросаДляФормированияТаблицыСведенийСчетаНаОплату в функции ПолучитьТаблицуСведенийСчетаНаОплату.
Создадим переменную ПараметрыПечати в процедуре Печать. Это будет простая структура.
Процедура СформироватьПечатнуюФорму(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ИмяМакета, СинонимМакета, ОбъектыПечати, ПараметрыВывода) ТипыОбъектов = ОбщегоНазначенияБП.РазложитьСписокПоТипамОбъектов(МассивОбъектов); Для каждого ОбъектыТипа Из ТипыОбъектов Цикл ТаблицаСведенийСчетНаОплату = ПолучитьТаблицуСведенийСчетаНаОплату(ОбъектыТипа.Значение); УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, ИмяМакета, СинонимМакета, ПечатьТорговыхДокументов.ПечатьСчетаНаОплату(ТаблицаСведенийСчетНаОплату, ОбъектыПечати, ПараметрыПечати),,"ОбщийМакет.ПФ_MXL_СчетЗаказ"); КонецЦикла; ПараметрыВывода.Вставить("ФормироватьЭД", Истина); ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); КонецПроцедуры
А потом найдем функцию ПолучитьТекстЗапросаДляФормированияТаблицыСведенийСчетаНаОплату в модуле менеджера документа СчетНаОплатуПокупателю и скопируем её в модуль внешней обработки.
Должен получится следующий состав процедур и функций модуля внешней обработки (для удобства я разделил их на две области).
Еще раз делаем проверку модуля. Ошибок не обнаружено.
Продолжаем, теперь нам необходимо, что бы брался наш макет, и печатался по нашей команде.
Нас интересует процедура СформироватьПечатнуюФорму, а в ней мы уделим внимание методу ПечатьСчетаНаОплату общего модуля ПечатьТорговыхДокументов.
Очевидно, она непосредственно формирует табличный документ. Перейдем в этот общий модуль, и скопируем функцию ПечатьСчетаНаОплату в модуль нашей внешней обработки.
Делаем проверку модуля внешней обработки. Ругается на несуществующие методы ВывестиЗаголовокПредупреждение и НомерСчетаНаОплату.
Переходим в общий модуль, от куда мы взяли функцию ПечатьСчетаНаОплату, находим процедуру ВывестиЗаголовокПредупреждение , и копируем ее в модуль внешней обработки.
А функция НомерСчетаНаОплату в общем модуле ПечатьТорговыхДокументов экспортная, поэтому мы просто исправим код в процедуре ПечатьСчетаНаОплату, где используется проблемная функция, сделав вызов этой функции из вышеупомянутого общего модуля.
НомерДокумента = ПечатьТорговыхДокументов.НомерСчетаНаОплату(СведенияОДокументе.ГосударственныйКонтракт, СведенияОДокументе.НомерДокумента);
Проверяем еще раз ошибки. Все нормально.
Не забудем в процедуре СформироватьПечатнуюФорму убрать вызов метода ПечатьСчетаНаОплату из общего модуля.
Процедура СформироватьПечатнуюФорму(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ИмяМакета, СинонимМакета, ОбъектыПечати, ПараметрыВывода) ТипыОбъектов = ОбщегоНазначенияБП.РазложитьСписокПоТипамОбъектов(МассивОбъектов); Для каждого ОбъектыТипа Из ТипыОбъектов Цикл ТаблицаСведенийСчетНаОплату = ПолучитьТаблицуСведенийСчетаНаОплату(ОбъектыТипа.Значение); УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, ИмяМакета, СинонимМакета, ПечатьСчетаНаОплату(ТаблицаСведенийСчетНаОплату, ОбъектыПечати, ПараметрыПечати),,"ОбщийМакет.ПФ_MXL_СчетЗаказ"); КонецЦикла; ПараметрыВывода.Вставить("ФормироватьЭД", Истина); ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); КонецПроцедуры
Теперь зайдем в скопированную функцию ПечатьСчетаНаОплату, и посмотрим, где в ней подтягивается макет.
Находим данный макет в общих макетах и копируем его в макеты нашей обработки.
Исправляем выделенный код, где подтягивается макет, следующий образом.
Макет = ПолучитьМакет("ПФ_MXL_СчетЗаказ");
Теперь зайдем в наш скопированный макет, и сделаем какое-нибудь изменение, чтобы вы видели, что команда подтянула именно макет из внешней обработки.
Вернемся обратно в процедуру Печать нашей внешней обработки.
И теперь осталась одна небольшая хитрость, без которой ваш внешний отчет не будет работать. Необходимо текст «СчетЗаказ» (это идентификатор типовой печатной формы).
Заменить на название идентификатора команды («СчетНаОплатуВнешний»).
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт ПараметрыПечати = Новый Структура; Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетНаОплатуВнешний") Тогда СформироватьПечатнуюФорму(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, "СчетНаОплатуВнешний", "Счет на оплату", ОбъектыПечати, ПараметрыВывода); КонецЕсли; КонецПроцедуры
Все, сохраняем данную обработку. И запускаем «1С: Предприятие» из конфигуратора 1С.
Идем в администрирование. В дополнительные отчеты и обработки.
Нажимаем на кнопку «Добавить из файла» и выбираем нашу созданную обработку.
Записываем. И смотрим, как выходит наша печатная форма.
Ссылка на дубль статьи на Инфостарте. В конце этой статьи приведены примеры внешних печатных форм счета на оплату, ТОРГ 12, ПКО , М11 и Требование накладная в одной обработке (документ Требование накладная). Все внешние печатные формы сделаны для конфигурации «1С: Бухгалтерия предприятия» (релиз 3.0.67.67).
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Вступайте в мои группы:
Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009