Содержание:
1. Для чего необходимо создавать внешние печатные формы в 1С
2. Использование Замера производительности
3. Изменение обработки после создания внешней печатной формы
1. Для чего необходимо создавать внешние печатные формы в 1С
Добрый день! В этой статье мы рассмотрим создание внешней печатной формы «Авансовый отчёт» на основании имеющейся «Авансовый отчёт (АО-1)» с помощью одной интересной и полезной функции 1С, «Замера производительности». Она позволяет, в том числе, отследить, какие блоки кода скомпилировались в ходе работы той или иной функции или процедуры. Преимущество внешних печатных форм заключается в том, что их можно настраивать или дорабатывать, изменять для конкретных нужд, в отличие от неизменяемой стандартной печатной формы.
Для начала, поскольку мы, всё-таки, создаём внешнюю печатную форму, потребуется создание внешней обработки. В левом верхнем углу ищем «Файл», далее «Новый» и жмём «Внешняя обработка» (рис. 1). Описанные ниже действия стандартны для создания внешней обработки.
Рисунок 1 Создание внешней обработки
Назначим нашей обработке имя и синоним и перейдём в модуль внешней обработки. Для этого снизу в меню процедуры нажмём на кнопку «Действия → Открыть модуль объекта» (рис. 2).
Рисунок 2 Открытие модуля объекта при создании внешней обработки
Затем в модуле объекта пропишем ряд типовых для всех внешних обработок функций и процедур (рис. 3-4).
Рисунок 3 Код в модуле объекта при создании внешней обработки
Рисунок 4 Пример кода в модуле объекта при создании внешней обработки
Сохраним полученную процедуру (нажмём сочетание клавиш Ctrl + S или перейдём в «Файл → Сохранить»).
Рисунок 5 Сохранение при создании внешней обработки
Выбираем нужную локацию и сохраняем.
Далее начинается самое интересное. Вернёмся к нашему модулю объекта. Поставим точку останова (нажав F9) около любой строки кода в модуле объекта и начинаем отладку (нажав F5 или через «Отладка → Начать отладку») (рис. 6).
Рисунок 6 Запуск отладки – первый шаг при создании внешней печатной формы
После этого открываем нужный нам объект, для которого мы создаём данную обработку. В нашем случае это документ «Авансовые отчёты».
2. Использование Замера производительности
При всё также запущенной программе 1С:Предприятие 8 переключаемся в режим Конфигуратора. Всё в том же меню «Отладка» жмём «Замер производительности» (рис. 7).
Рисунок 7 Запуск Замера производительности
Затем переходим обратно на уже запущенный режим версии 1С:Предприятия 8, жмём пункт «Печать» и выбираем ту стандартную обработку, на основе которой будет создаваться наша. В нашем случае это «Авансовый отчёт АО-1» (рис. 8). Жмём на неё.
Рисунок 8 Стандартная обработка Авансового отчета АО-1
Открылась стандартная (встроенная) печатная форма (рис. 9).
Рисунок 9 Печатная форма Авансового отчета АО-1
Снова, не закрывая режим конфигурации 1С:Предприятия 8, переходим в режим Конфигуратора. Также как включали режим Замера производительности (рисунок 7), выключаем его.
Откроется таблица со всеми выполненными процедурами и функциями (рис. 10).
Рисунок 10 Результат замера производительности
Отсортируем результаты запроса по модулю – кликнем по любой строке и откроем модуль Менеджера нашего документа. Именно здесь, в основном, и формируются все необходимые процедуры и функции.
Найдём здесь процедуру, содержащую код запроса (обычно именно через код запроса формируется то, что будет на печатной форме). В данном случае она называется «ПечатьАвансовогоОтчета» (рис. 11). Откомпилированные процедуры и функции помечаются серым значком слева.
Рисунок 11 Функция ПечатьАвансовогоОтчета в программе 1С:Предприятие 8
Копируем её в нашу обработку (рис. 12), кроме последних строк. В данном случае они нам не пригодятся (рис. 13).
Рисунок 12 Функция ПечатьАвансовогоОтчета в программе 1С:Предприятие 8 в нашей обработке
Рисунок 13 Строки кода из ПечатьАвансовогоОтчета не для копирования
Теперь всё в том же модуле менеджера найдём процедуру, ответственную за непосредственно вывод на печать (рис. 14). Здесь нас интересует блок печати авансового отчёта М4.
Рисунок 14 Печать Авансового отчета АО-1
Копируем и вставляем в нашу обработку эту процедуру, убрав из передаваемых значений ПараметрыПечати (это важно!), оставляем только блок авансового отчёта (рис. 15)
Рисунок 15 Блок АвансовыйОтчет в программе 1С:Предприятие 8
Далее заменим имя макета «Аванс_Отчет» на то имя макета, который прописали в своей обработке. Ищем функцию «СведенияОВнешнейОбработке», в ней – пункт «ДобавитьКоманды» и наш идентификатор. Это прописанная слитно, с заглавными буквами фраза (рис. 16).
Рисунок 16 Задаем имя макета в программе 1С:Предприятие 8
Оттуда же берём синоним макета (фраза с пробелами, скобками) (рис. 17), которым мы заменяем фразу «Авансовый отчет» в процедуре «Печать».
Рисунок 17 В данном случае синонимом макета является фраза «Авансовый отчёт (внешняя обработка)»
Вот так наш изменённый блок кода выглядит в процедуре «Печать» теперь (рис. 18).
Рисунок 18 Текущий код в процедуре печать в программе 1С:Предприятие 8
Как мы видим, процедура «Печать» также обращается к некоему макету «ПФ.MXL_АвансовыйОтчет». Найдём его в нашем конфигураторе в макетах документа АвансовыйОтчет (рис. 19).
Рисунок 19 Макет «ПФ.MXL_АвансовыйОтчет» у документа «АвансовыйОтчет»
Теперь просто скопируем (перетащим) макет с документа в нашу обработку (рис. 20).
Рисунок 20 Перенесённый макет документа при создании внешней печатной формы в 1С
Затем «отсоединим» в нашей обработке (рис. 21) макет от документа, сделав его независимым (в противном случае наша обработка будет всегда обращаться только к макету в конфигурации, игнорируя наш, измененные / добавленные поля там и проч). Для этого в процедуре «Печать» просто убираем фразу «Документ.АвансовыйОтчет» (рис. 22).
Рисунок 21 Неизменная процедура при создании внешней печатной формы в 1С
Рисунок 22 Итоговая процедура при создании внешней печатной формы
Сохраняем обработку (Ctrl+S). Как мы видим, сохраниться не даёт ошибка (рис. 23) о том, что не хватает процедуры «ПолучитьДанныеДокументов».
Рисунок 23 Ошибка об отсутствии процедуры или функции при создании внешней печатной формы
Найдём её в модуле менеджера документа «Авансовый отчёт» (рис. 24) и скопируем в нашу обработку. Сохраняем обработку (Ctrl+S).
Рисунок 24 Функция ПолучитьДанныеДокумента в программе 1С:Предприятие 8
Теперь нам нужно добавить в обработку реквизит (в нашем случае он называется «СсылкаНаОткрываемыйДокумент»). Важно, чтобы его длина не была неограниченной – ставим 30 символов. Тип – «ДокументСсылка». Далее требуется добавить форму и вывести созданный реквизит на форму, далее – создать команду (у нас это «Открыть документ») и также вынести её на форму. Зачем это нужно? В дальнейшем это позволит открывать созданную процедуру в программе 1С:Предприятие 8 через «Файл → Открыть», что гораздо быстрее, чем регистрировать её в разделе «Администрирование» после каждого внесённого изменения.
В итоге у нас получилась форма с реквизитом и кнопкой-командой (рис. 25).
Рисунок 25 Итог создания печатных форм
Создадим действие команды (на клиенте и процедуру на сервере) (рис. 26).
Рисунок 26 Создание команд при создании печатных форм в 1С
Перейдём в модуль формы, где пропишем следующий код:
Рисунок 27 Код в модуле при создании печатной формы в 1С
Теперь для создания внешней печатной формы в 1С 8.3 остаётся добавить ссылку на формируемый массив объектов. За это ответственна функция «ПечатьАвансовогоОтчета», которую нам нужно будет немного подправить.
Уберём «ОбъектыПечати» (иначе обработка будет ругаться на слишком большое количество передаваемых элементов), а также сделаем функцию экспортной (чтобы код из модуля объекта мог обращаться к ней).
Рисунок 28 Изменения в функции при создании внешних печатных форм
И допишем наш код из рисунка 27 (рис. 29).
Рисунок 29 Итоговый код при создании внешних печатных форм в 1С 8.3
Сохраняем процедуру (Ctrl+S), снимаем точки останова в модуле объекта, которые мы ставили ранее (рис. 30).
Рисунок 30 Удаление точек останова при создании внешних печатных форм
В запущенном режиме программы 1С:Предприятия 8 откроем нашу процедуру, притом не долгим путём (через регистрацию в Администрировании), а через «Файл → Открыть» (рис27). Открываем обработку из той локации, где мы её сохранили.
Рисунок 31 Открытие созданной обработки в программе 1С:Предприятие 8
Игнорируем предупреждение безопасности, жмём «Да» (рис. 32).
Рисунок 32 Предупреждение безопасности в программе 1С:Предприятие 8
Выберем нужный документ (рис. 33), жмём кнопку «Открыть документ».
Рисунок 33 Выбор нужного документа в программе 1С:Предприятие 8
3. Изменение обработки после создания внешней печатной формы
Вуаля! Наша обработка полностью повторяет стандартную (рис. 34), однако стандартную мы менять не можем, а созданную нами – можем.
Рисунок 34 Документ выведенный на печать в программе 1С:Предприятие 8
После всех изменений и создание внешней печатной формы в 8.3, которые будут внесены в код обработки, изменений макета и прочих действий, нужных при решении конкретных задач, обработку можно будет «встроить» в 1С. Сначала, в главном меню обработки, отключим форму обработки, нажав на крестик справа (рис. 35-36).
Рисунок 35 Отключение формы обработки в программе 1С:Предприятие 8
Рисунок 36 Отключение формы обработки
После этого в меню слева спускаемся вниз до вкладки «Администрирование». В меню «Настройки программы» ищем пункт «Печатные формы, отчёты и обработки» (рис. 37).
Рисунок 37 Печатные формы, отчеты и обработки
Потом переходим на вкладку «Дополнительные отчёты и обработки» (рис. 38).
Рисунок 38 Дополнительные отчеты и обработки в программе 1С:Предприятие 8
Здесь сохранены все имеющиеся внешние обработки. Загрузим нашу обработку, нажав «Добавить из файла» (рис. 39).
Рисунок 39 Загрузка файла в программе 1С:Предприятие 8
Игнорируем предупреждние безопасности (рис 40) и заходим в локацию, где мы сохранили нашу обработку, дважды кликаем по ней.
Рисунок 40 Предупреждение о безопасности в 1С:Предприятие, редакция 3.0
Жмём «Записать и закрыть» (рис. 41).
Рисунок 41 Обработка перед записью в программе 1С:Предприятие 8
Далее её можно будет вызвать из меню «Печать» у документа (в нашем случае «Авансового отчёта») (рис. 42).
Рисунок 42 Вызываем обработку после создания внешней печатной формы в 1С 8.3
Рисунок 43 Итоговая обработка после создания внешней печатной формы в 1С
Специалист компании «Кодерлайн»
Тимур Тютеньков