Mxl 1с как создать

Обновлено: 07.07.2024

Версия 5.1 БП 3.0.73.54 стал делать ВПФ, выяснилось (внезапно), что в общем модуле "УправлениеПечатью" процедура "ПодготовитьКоллекциюПечатныхФорм" лишилась "Экспорт", пришлось вставить немного изменённую в модуль формы ВПФ.

Могу добавить только, что для последних версий БСП и, соответственно, конфигураций на управляемых формах, наметилась тенденция выносить процедуры и функции печати из модуля менеджера в общие модули. Поэтому, чаще всего, созданную конструктором ВПФ придётся допиливать, перенося в модуль ВПФ эти самые процедцры и функции из общих модулей.

Инструкция для управляемого приложения

Создадим ВПФ, например, для документа Счет покупателю, печатная форма Счет-заказ (пример делаю на платформе 8.3.8.1784 БП 3.0.43.247 база ДЕМО).

Создание ВПФ

Исхожу из того, что пользоваться конфигуратором, тот, кто создаёт ВПФ умеет, потому картинки оттуда рисовать не будем. Результатом будет внешняя форма, которая ничем не отличается от типовой печатной формы документа.

Итак, по пунктам:

  1. Копируем модуль менеджера документа Счет покупателю, открыв его в Конфигураторе. Копируется весь модуль, например, нажав Ctrl +A, потом Ctrl + С.
  2. Открываем конструктор в режиме учета, выбираем Тип документаСчетНаОплатуПокупателю и нажимаем кнопку Вставить:


  1. Жмём следующую кнопку Анализ. Получаем на закладке Команды и функции список доступных команд печати, список процедур и функций модуля менеджера, и текст выделенных процедур в правом окне. В левом верхнем окне снимаем все галки (кнопки управление вверху) и отмечаем нужную нам печатную форму СчетЗаказ. В левом нижнем окне нужные для печати выбранной формы процедуры будут отмечены зелёным цветом автоматически. Если необходимо, можно отметить и другие процедуры и функции с помощью кнопки нужна\ не нужна, они будут перенесены в итоговую обработку, но использовать автоматически ВПФ их не будет, поэтому подумайте, оно Вам надо? В правом окне можно просмотреть текст выделенных в левом нижнем окне процедур и функций. Текст можно изменить, правда никогда этой возможностью не пользовался, но мало ли кому понадобится?:


  1. Следующая кнопка Сформировать. Создаёт текст модуля обработки ВПФ:


  1. Жмём Скомпилировать – на экране ничего не изменится, просто будет создана ВПФ.
  2. Кнопка Сохранить предложит выбрать путь, куда сохранить созданную обработку и открыть созданную ВПФ для проверки. ВПФ создаётся со встроенной формой обработки, поэтому её можно отлаживать не прибегая к дополнительным средствам. При открытии ВПФ сразу проверяем работоспособность, выбрав документ и сформировав печатную форму:


Как уже говорилось, сейчас она ничем не отличается от типовой, и если нужно что-то изменить, это придётся делать руками, о чём расскажу ниже. Хочется заметить, что указанный порядок формирования ВПФ минимален, остальное пробуйте сами…или не пробуйте. Здесь фактически просто перечислены шаги быстрого создания ВПФ для последующей доработки.

Что удивило, и типовая и внешняя вместо суммы прописью выдают в демке сумму числом:


Изменение полученной ВПФ

Для исправления ситуации, и добавления чего-то своего в ВПФ, начнём вносить изменения:

  1. Вставим макет счета в ВПФ (по умолчанию используется тот же, что и в типовой форме счета). Для этого посмотрим, какой макет используется. В модуле объекта ВПФ :

Из процедуры Печать видим, что нам нужен общий макет ПФ_MXL_СчетЗаказ. Копируем его в конфигураторе. Ветка Общие – Общие макеты:


Затем в обработке встаём на Макеты и вставляем, теперь макет есть в ВПФ, нужно изменить код модуля, чтобы использовать именно его, а не общий макет:


<<?>>ВывестиЗаголовокПредупреждение(СведенияОДокументе.Получатель, ТабличныйДокумент, Макет); (Проверка: Сервер).

Поскольку не определена процедура без указания через точку, делам вывод, что она находится в том же общем модуле, что и скопированная нами перед этим функция ПечатьСчетаНаОплату – находим её там, и копируем в модуль ВПФ. И вновь пробуем сохранить. В данном случае нам повезло – ошибок больше нет. В обще-то это редкость, по большому счёту, это самый трудоёмкий момент. Бывает, что может понадобится копирование нескольких процедур и функций, и, может быть, даже не из одного модуля. Главное не просто скопировать, но и правильно их потом вызывать. Универсального рецепта для этого у меня нет.

  • Убираем в процедуре печать строку «ПечатьТорговыхДокументов.» - теперь эта функция будет вызываться из модуля ВПФ.
  • Сохраняем ВПФ, проверяеем в режиме учёта – всё работает, только теперь, всё, что нужно для изменений, у нас находятся в ВПФ. Теперь можно делать необходимые изменения .
  1. Изменяем текст модуля ВПФ:
  • Вызов встроенного макеета вместо общего – находим строку "ОбщийМакет.ПФ_MXL_СчетЗаказ", видим, что находится она в добавленной функции из общего модуля, и не меняя общий модуль ПечатьТорговыхДокументов (сохраняя типовую конфигурацию на полной поддержке) изменяем функцию модуля ВПФ:
  • Исправим сумму прописью – сейчас она почему – то выводится числом, вариантов много, можно, например, использовать форматную строку в ячейке макета СуммаПрописью, но это некрасиво, поэтому попробуем найти место в тексте модуля, где заполняется этот параметр и исправим его. Видим строку:

Отладчиком смотрим, где собака порылась. На вид всё фильдиперсово, однако видим вместо строки число. Видим, что при вызове функции общего модуля ОбщегоНазначенияБПВызовСервера.СформироватьСуммуПрописью в параметре СведенияОДокументе.Валюта пусто. Вариантов исправления много – можно вытащить процедуру СформироватьСуммуПрописью в модуль ВПФ, можно посмотреть заполнение строки СведенияОДокументе и заполнить валюту там, можно проверить заполнение валюты, и если там пусто использовать валюту по умолчанию из константы. Мне лень, поэтому возьмём валюту из договора:


  • Теперь добавим в макет новый параметр, например Комментарий и выведем после итоговой строки (пример условный, просто как пример)))):


Обратите внимание, что параметр находится внутри области макета, создал я его так (профи просьба не читать далее)))), встав на СуммаПрописью правой кнопкой – раздвинуть, потом скопировал СуммаПрописью, вставил в среднюю стоку и поменял в третьей строчке СуммаПрописью на Комментарий.

В тексте модуля делаем следующие изменения:

и четырьмя строчками ниже вставляем строку:

В итоге получим кусок кода:


Заключение

Не претендую на полноту и истину в последней инстанции в изложении. Просто показал на простом примере, как быстро создать и немного изменить внешнюю печатную форму счет на оплату покупателю в БП 3.0. Может кому поможет…

После того как табличный документ сформирован в "1С:Предприятии" и выведен на экран, его можно распечатать и сохранить во внешний файл. Например, для последующей отправки контрагенту-покупателю по электронной почте.

В "1С:Предприятии" имеется возможность сохранить полученный документ в нескольких форматах. В частности, доступны:

  • формат "1С:Предприятие" - табличный документ для версий платформы 7.7 и 8 (файлы с расширением "*.mxl");
  • текстовый формат ("*.txt") с различными кодировками (ANSI, UTF-8);
  • формат HTML различных стандартов ("*.htm");
  • формат MS Excel различных стандартов ("*.xls").

Каждый из форматов является довольно распространенным в компьютерном мире. В частности, формат "1С:Предприятия" ("*.mxl") используется для передачи табличных документов между пользователями платформ 7.7 и 8. Текстовый формат ("*.txt"), как правило, используется для передачи текстовой информации (без форматирования) и может быть прочитан практически на любом компьютерном устройстве. Формат HTML - самый распространенный формат отображения информации в сети Интернет (например, странички и сайты, которые вы просматриваете в Интернете, с большой долей вероятности используют именно формат HTML или его разновидности). А формат MS Excel в комментариях, мы считаем, не нуждается - мало какой компьютер не умеет работать с "офисными" документами.

Для того, чтобы сохранить документ из "1С:Предприятия" в любой из перечисленных выше форматов, достаточно выбрать в меню "Файл" опцию "Сохранить копию…", после чего в появившемся диалоге сохранения файла, в разделе "Тип файла" выбрать нужный нам тип.

Среди всех вышеперечисленных типов файлов, обратим внимание на три самых интересных с практической точки зрения - т. е. те, которые максимально полно сохранят форматирование в табличном документе и в дальнейшем позволят другим пользователям комфортно просматривать то, что мы сохранили, распечатывать это или даже редактировать.

Первый формат - "табличный документ" "1С:Предприятия". Он записывается в файлы с расширением ".mxl" и может быть прочитан и отредактирован только средствами платформы "1С:Предприятие". Открыть такой файл можно программой "1С:Предприятие", установленной на компьютер пользователя или бесплатным редактором файлов форматов 1С "1С:Предприятие-Работа с файлами".

Программу "1С:Предприятие-Работа с файлами" можно бесплатно скачать по адресу http://v8.1c.ru/metod/fileworkshopdownload.htm, описание программы и примеры работы можно увидеть по адресу http://v8.1c.ru/metod/fileworkshop.htm. Данный редактор позволяет открывать и редактировать различные форматы файлов, которые могут быть созданы средствами платформы "1С:Предприятия". Поддерживаются следующие форматы:

  • текстовые документы различных кодировок ("*.txt");
  • табличные документы версий платформы 7.7 и 8 ("*.mxl");
  • HTML-документы ("*.htm, *.html");
  • графические схемы ("*.grs");
  • географические схемы ("*.geo").

По сути, используя эту программу, вы получаете все возможности по работе с этими файлами, доступные в любой другой версии платформы "1С:Предприятие" версии 8. Кроме, собственно, редактирования и просмотра файлов, "1С:Предприятие-Работа с файлами" позволяет проводить сравнение файлов встроенными в платформу 8 возможностями. Поддерживается сравнение двух текстовых файлов("*.txt"), двух табличных документов в формате 1С ("*.mxl") или двоичное сравнение. Для использования этой возможности, достаточно в меню "Файл" выбрать пункт "Сравнить файлы", а в появившемся диалоге выбрать тип сравнения и указать два файла, которые будем сравнивать (см. рис. 1). Если файлы не идентичны, то будет открыто окно, наглядно отображающее, чем файлы друг от друга отличаются (см. рис. 2). Причем, как видно из рисунка, можно быстро перемещаться по всем обнаруженным различиям, по позиции в одном документе попадать в ту же позицию другого. Все различия наглядно помечены цветом. В результате вы всегда имеете под рукой мощный механизм сравнения, который позволит быстро выявить различия, например в однотипных документах или отчетах, что может существенно ускорить работу с ними.

В заключение стоит упомянуть, что в программу "1С:Предприятие-Работа с файлами" встроены также календарь и калькулятор, уже знакомые многим по платформе 1С версии 8.

Второй полезный многим формат - "Лист Excel" ("*.xls"). Заметим, что в версии 8.1 платформы "1С:Предприятие 8", появилась поддержка формата Excel97 (подробнее см. здесь), который позволяет корректно сохранять разнообразное форматирование, группировку, примечания и т. п. Благодаря поддержке этого формата, вы может сохранить и передать, например, своему контрагенту расходную накладную ТОРГ-12, в формате Excel без каких-либо потерь в форматировании этого документа. Т. е. получатель откроет в своей программе Excel файл и увидит его ровно таким, каким он был создан в программе 1С.

Третий формат, на который хотелось бы обратить ваше внимание - "Документ HTML" ("*.htm"). Пожалуй, это самый распространенный формат в Интернет. Польза для нас в том, что документ этого формата может быть открыт массой WEB-браузеров, например, Internet Explorer, Mozilla, Firefox, Opera и т. п. То есть на компьютере пользователя, которому вы отправляем документ в формате HTML, вообще могут отсутствовать программы 1С.

В заключение, хочется отметить развитые возможности программ "1С:Предприятие" по экспорту своих данных в другие форматы. Это реализовано с целью упростить и облегчить процесс обмена рабочими данными и документами между разнородным программным обеспечением различных организаций.

Примечание:
* Группа компаний "Блик", г. Королев, Октябрьский б-р, д. 14, оф. 9, тел (495) 585-06-80.

БСП — библиотека стандартных подсистем, на которой основаны типовые конфигурации 1С на управляемых формах.
В состав БСП входит и подсистема «Дополнительные отчеты и обработки»», которая определяет правила создания и подключения к конфигурациям дополнительных ВНЕШНИХ отчетов и обработок различного назначения.

В БСП для дополнительных внешних отчетов и обработок (далее ДВОО) предусмотрен справочник "ДополнительныеОтчетыИОбработки". Кроме того, для каждой ДВОО предусмотрено три способа вызова:
- вызов серверного метода;
- вызов клиентского метода;
- открытие формы.
Вызов обработок из справочника и так сильно затрудняет отладку в управляемом приложении, а ту еще и разные способы вызова.

Но если над всем этим подумать, то при открытии формы сначала на сервере вызывается обработчик события "ПриСозданииНаСервере. В нем можно вызвать любую серверную процедуру, и если форма не нужна, то "Отказ=Истина;" и все. Получаем тот же вызов серверного метода.
Затем при создании формы вызывается обработчик "ПриОткрытии", уже на клиенте. В нем можно вызвать клиентский метод формы, и если сама форма не нудна, то "Отказ=Истина;" и все. Получаем вызов клиентского метода.
Ну и наконец, если мы не отказываемся создать и открыть форму, то форма и откроется. Получаем вызов ДВОО способом "Открытие формы".

То есть я хочу сказать, что все ДВОО надо делать со способом вызова "Открытие формы".

Рассуждаем дальше. Открытие формы есть открытие формы. То есть, делается это в конфигурации БСП или просто через главное меню "Файл / Открыть", управление попадает в метод формы "ПриСозданииНаСервере". То есть такую обработку очень легко отлаживать. Запускаем через "Файл / Открыть" и отлаживаем. А потом подключаем в конфигурацию и она должна работать так же.

Рассуждаем дальше. БСП при вызове разных типов обработок (печатные формы, обработки заполнения объекта и т.д.) передает им дополнительные параметры. Эти параметры можно отобразить на открываемой форме, чтобы задавать их в режиме отладки. Тем более, что не трудно определить, открывается форма через "Файл / Открыть" или штатным для БСП способом через справочник "ДополнительныеОтчетыИОбработки" и скрывать эти реквизиты при штатной работе и показывать при отладке.

Следующая мысль. Обработки часто используются чисто в серверном контексте, когда создается объект обработки, заполняются его реквизиты и вызываются ее методы, которые выполняют какие-то действия. Та же схема может быть реализована при использовании метода «ОткрытьФорму»: создаем обработку, вызываем открытие формы, передавая в форму все нужные параметры, в форме в процедуре «ПриСозданииНаСервере» выполняем все нужные действия и «Отказ=Истина». То есть реквизиты у внешних отчетов и обработок использовать тоже не нужно. Все данные передаются и хранятся в параметрах и реквизитах формы. Зато это наверное ускорит выполнение метода «л_ОбработкаОбъект = РеквизитФормыВЗначение(«Объект»);». Этой командой мы фактически инициализируем модуль обработки, чтобы воспользоваться его процедурами и функциями. То есть обработка как бы является внешним общим модулем, которые мы загружаем из внешнего файла.

Перейдем к практике.

2. Внешняя печатная форма.
Итак:
Во-первых, хочется, чтобы печатная форма в результате показывалась в специальной общей форме "ПечатьДокументов", предусмотренной в БСП для вывода печатных форм.
Во-вторых, хочется иметь возможность простой отладки.
В-третьих, иногда перед печатью формы хочется запросить у пользователя дополнительную информацию.
В этой части статьи остановимся на простой печатной форме, без запроса дополнительной информации.

Файл печатной формы — АЦРК_ДополнительнаяВнешняяПечатнаяФорма_ПечатьКомментария_х_х_ххх.epf

2.1 Модуль обработки.
Модуль обработки содержит процедуру СведенияОВнешнейОбработке с двумя служебными процедурой и функцией.

И кроме того, в модуле находится экспортная процедура Печать(п_МассивОбъектовНазначения, п_КоллекцияПечатныхФорм, п_ОбъектыПечати, п_ПараметрыВывода), которая должна сформировать табличные документы и поместить их в коллекцию печатных форм, а так же заполнить список значений «ОбъектыПечати» и связать их с областями сформированного табличного документа через имена областей. Это требование БСП.
Процедура вызывается из общей формы БСП «Печать документов».
Ну и далее могут быть процедуры и функции, которые вызываются из процедуры Печать.

2.2 Форма обработки
Параметры.
Определены 4 параметра, которые БСП передает в открываемую форму:
- ДополнительнаяОбработкаСсылка
- ИдентификаторКоманды
- ИмяФормы
- ОбъектыНазначения
У ОбъектыНазначения тип «Произвольный», а передается в него массив объектов назначения.

Реквизиты.
Четыре реквизита (рф_ДополнительнаяОбработкаСсылка, рф_ИдентификаторКоманды, рф_ИмяФормы, рф_СписокОбъектовНазначения) соответствуют параметрам, чтобы можно было параметры на форме отобразить, а в режиме отладки и заполнить.
Важно! Реквизит рф_СписокОбъектовНазначения имеет тип СписокЗначение и тип значения ЛюбаяСсылка, потому что может работать с любыми объектами базы.

Реквизит рф_ИмяЭтойОбработки предназначен для открытия других форм этой обработки командой ОткрытьФорму("ВнешняяОбработка."+рф_ИмяЭтойОбработки+".Форма. ". );
В данном простом примере эта возможность не используется.

Реквизит рф_РежимОтладки предназначен для хранения признака запуска обработки в режиме отладки. Режимом отладки будем считать запуск обработки через «Файл/Открыть» или установка признака отладки при подключении внешней обработки. Во втором случае режим отладки будет означать только то, что откроется форма обработки и покажет полученные параметры, отладку в конфигураторе такой режим не обеспечит.

Реквизит рф_ТаблицаКоманд предназначен для получения таблицы команд из сведений о внешней обработке. При желании его можно поместить на форму, чтобы посмотреть эти команды. А сам список команд из таблицы переносится в список значений для поля ввода для идентификатора команды (рф_ИдентификаторКоманды), так что все команды будут видны в списке выбора.

2.3 Модуль формы
Процедура ПриСозданииНаСервере.
Из параметров регистрации получаем таблицу команд.
Затем устанавливаем режим отладки и переносим значения из параметров в реквизиты формы.
При запуске через «Файл/Открыть» никакие параметры не передаются. Поэтому признаком запуска через «Файл/Открыть» выберем отсутствие параметра рф_ДополнительнаяОбработкаСсылка. Но при этом мы можем получить ссылку на нашу обработку в справочнике дополнительных отчеты и обработок, если мы ее туда помещали, хотя она нам и не нужна в режиме отладки. При первичной отладке мы проверяем правильное формирование табличных документов, котрые будут просто показаны в виде табличных документов, а не в форме «ПечатьДокументов».

Процедура ПриОткрытии.
В режиме отладки отрываем для редактирования список объектов назначения. Устанавливаем в качестве выполняемой команды первую команду из таблицы команд.
Если запуск производится в штатном режиме, то параметры редактировать не надо, только смотрим. И сразу имитируем выполнение переданной команды. Ну и поскольку в данном примере дополнительных запросов мы делать не будем, то форму открывать не надо, а значит Отказ = Истина;

Процедура ВыполнитьКоманду.
Преобразуем список объектов назначения в массив (при штатной работе через БСП в процедуру печати объекты назначения передаются именно в виде массива) и выполняем формирование печатных форм.

Процедура ПечатьМакетаMXL
В режиме отладки мы не обращаемся к БСП и ее форме ПечатьДокументов, потому что БСП будет вызывать нашу обработку через справочник ДополнительныеОтчетыИОбработки и мы не сможе отладить серверную процедуру Печать. Поэтому мы подготавливаем параметры и вызываем нашу процедуру Печать сами, чтобы можно было пройти ее отладчиком. А потом просто показываем сформированные табличные документы методом Показать.
А вот в штатном режиме мы вызываем стандартную форму БСП ПечатьДокументов так же, как это делается в БСП, предварительно подготовив нужные параметры. То есть при штатной работе БСП создает внешнюю обработку из справочника ДополнительныеОтчетыИОбработки, которая должна использовать вызов серверного метода, готовит параметры и вызывает форму ПечатьДокументов, которая уже вызывает метод Печать из модуля созданной обработки. Ну а мы вызовем форму Печать документов напрямую, передав ей ссылку на нашу обработку, обойдя проверку на использование вызова серверного метода. И получится, что наша обработка используется через ОткрытиеФормы, но печатная форма появится в форме ПечатьДокумента! Что вообще-то в БСП не предусмотрено.

Процедура рф_ИдентификаторКомандыПриИзменении
Обеспечивает изменение заголовка кнопки выполнения команды при выборе команды.

Функция ОтладкаФормированияПечатнойФормыНаСервере.
Процедура формирует парамеры для серверной процедуры Печать, как это делается при штатной работе через БСП, вызывает процедуру Печать и потом извлекает сформированные табличные документы из полученной коллекции печатных форм.

Попробуйте подключить к своей конфигурации — должна работать с любым объектом, для которого предусмотрено подключение внешних печатных форм и есть реквизит Комментарий. В том числе должно работать и для списка объектов.

3. Как из этого образца делать свою форму.

3.1 Модуль объекта
Сокращаем количество типов объектов, для которых форма будет работать, в процедуре СведенияОВнешнейОбработке.

Изменяем список команд.

Переделываем процедуру Печать и вызываемые процедуры и функции. Если форма создается на основе имеющейся в конфигурации, можно и нужно вызывать процедуры из менеджеров соответствующих объектов. Или перенести такие процедуры в модуль, если нужно внести в них изменения.

3.2 Форма
Ограничить тип значения реквизита рф_СписокОбъектовНазначения в соответствии с теми типами, которые перечислены в процедуре СведенияОВнешнейОбработке в модуле.

3.3 Модуль формы
Ничего менять не нужно.

3.4 Макеты
Добавляете свои макеты. Стандарт БСП предполагает, чтобы имена MXL-макетов начинались с “ПФ_MXL_”.

В этой статье мы научимся создавать внешнюю печатную форму для "1С: Бухгалтерия предприятия 3.0". Причем создавать с нуля, не используя так называемые шаблоны. Вы сами научитесь создавать шаблоны внешних печатных форм.

Все это делается довольно просто))

И так, создадим новую обработку.

Мы будем создавать внешний счет на оплату покупателю, поэтому обработку так и назовем: «СчетНаОплатуВнешний».


Сохраним ее на жесткий диск.

Зайдем в модуль обработки, и создадим экспортную функцию СведенияОВнешнейОбработке.

Внутри этой функции создадим структуру ПараметрыРегистрации, которая будет содержать определенный список полей. Каждое поле мы разберем в отдельности.

Создадим первый элемент структуры, он будет иметь ключ с название «Вид».

Значением данной связки КлючИЗначение идет одна из строк:

  • «ДополнительнаяОбработка»
  • «ДополнительныйОтчет»
  • «ЗаполнениеОбъекта»
  • «Отчет»
  • «ПечатнаяФорма»
  • «СозданиеСвязанныхОбъектов»

В нашем случае должна быть строка "ПечатнаяФорма".

Следующий элемент структуры должен иметь ключ с названием Назначение.

В качестве значения данного элемента должен выступать массив, где перечислены будут все документы или справочники, в которых будет выходить данная печатная форма.

Они должны иметь тип строка, и быть в следующем формате:

Документ."НазваниеДокумента"

Справочник."НазваниеСправочника"

У нас этот массив будет возвращать отдельная функция ПолучитьНазначениеОбработки.

Допишем созданный последним элемент структуры.

Создадим новый элемент структуры, ключ которого будет называться «Наименование», а в значении будет содержаться наименование обработки, которое будет отображаться в справочнике "Дополнительные внешние печатные формы".

Следующий элемент структуры будет иметь название «Версия», значением данного элемента будет версия обработки. Задается программистом на его усмотрение.

Следующий элемент имеет название «Информация», который содержит краткую информацию по обработке.

Следующий элемент имеет название «БезопасныйРежим», его необходим устанавливать в значение истина или ложь, в зависимости от того необходимо устанавливать или отключать безопасный режим во время выполнения обработки. Мы установим значение Истина.

И в последнем параметре необходимо добавить команды, которые будут поставляться обработкой. Для этого нам необходимо создать и заполнить таблицу команд. Разработаем функцию, которая создает и возвращает таблицу с определенным набором полей. Делать это будем в функции ПолучитьТаблицуКоманд.

Создадим функцию и таблицу значений внутри нее.

Теперь создадим пять колонок этой таблицы.

И первая колонка – Представление (тип строка).

Эта колонка – представление команды в пользовательском интерфейсе, т.е. то, что пользователь увидит при нажатии меню"Печать" в документе или справочнике.

Вторая колонка – Идентификатор.

Это может быть любая текстовая строка, уникальная в пределах данной обработки.

Третья колонка – Использование.

Параметр данной колонки типа строка, должен принимать одно из четырех значений –

  • ОткрытиеФормы – Открывает форму обработки.
  • ВызовКлиентскогоМетода – будет вызвана клиентская процедура из модуля формы обработки.
  • ВызовСерверногоМетода - будет вызвана серверная процедура из модуля обработки.
  • СценарийВБезопасномРежиме – тоже будет вызвана серверная процедура из модуля обработки в безопасном режиме.

Конкретно мы будем использовать вызов серверного метода.

Следующая колонка – показывать оповещение. Принимает значение истина или ложь, в зависимости от того надо показывать оповещение или нет.

И последняя колонка – модификатор. Это дополнительный модификатор команды. В нашем случае будет иметь название ПечатьXML.

Теперь создадим процедуру, которая будет заполнять данную таблицу значений.

В данном коде все понятно.

В функции СведенияОВнешнейОбработке создадим команду и заполним ее.

Создаем таблицу значений:

Теперь заполним ее.

Еще раз пройдемся по параметрам.

  • Первый параметр, непосредственно таблица команд вновь созданная.
  • Второй параметр, как будет отображаться команда пользователю на форме (документа, справочника).
  • Третий – уникальный идентификатор команды, запомните его, он нам еще пригодится!
  • Четвертый параметр – использование, что вызовет Ваша команда.
  • Пятый параметр – показывать оповещение, мы не будем это делать.
  • Шестой параметр – модификатор, в нашем случае он всегда один ПечатьXML.

Теперь передадим вновь созданную таблицу команд в структуру ПараметрыРегистрации.

И пусть наша функция СведенияОВнешнейОбработке возвращает данную структуру.

Все теперь наша обработка будет передавать нужные параметры регистрации, которые будут необходимы при создании элемента справочника дополнительные печатные формы и обработки. Обращаю ваше внимание, что название всех полей в структуре Параметры регистрации, а также название и типы всех колонок в таблице команд, должны быть те которые приведены в примере, иначе Ваша обработка не зарегистрируется.

Теперь в модуле объекта создадим процедуру Печать. Это процедура с четырьмя параметрами: МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода.

И вот начинается самое интересное, теперь вам необходимо войти в аналогичную процедуру в менеджере объекта счет на оплату покупателю, или в обработке, которая, по сути, является менеджером печати.

Как узнать, где находится нужная нам функция?

Откроем модуль менеджера документа Счет на оплату покупателю.


И найдем процедуру ДобавитьКомандыПечати, которая заполняет список команд .

В этой процедуре найдем код, где добавляется команда для нужной нам печатной формы (список команд добавляется в таблицу значений КомандыПечати). И обратим внимание на свойство МенеджерПечати. Если этому свойству присваивается какое-нибудь значение - это путь к объекту метаданных, как правило к обработке, то значит при выводе нужной печатной формы будет отработан код в процедуре Печать, которая находится в модуле менеджере этого объекта (в обработке). А если это свойство в принципе не фигурирует при заполнении команды печати, то значит будет отработан код в процедуре Печать, которая находится в модуле менеджера нашего основного объекта (в нашем случае это документ СчетНаОплатуПокупателю)

Посмотрим на процедуру ДобавитьКомандыПечати в модуле менеджера документа "Счет на оплату покупателя".


Поскольку мы делаем внешнюю печатную форму счета на оплату, то нас интересует первое добавление в таблицу значений (см. свойство Представление), и мы видим, что в этом случае заполнено свойство МенеджерПечати, где указан объект Обработка.ПечатьСчетаНаОплату. Это значит, что нам нужно найти процедуру Печать в модуле менеджера обработки ПечатьСчетаНаОплату.

А если бы мы решили сделать внешнюю печатную форму договора счета на оплату (второе добавление в таблицу значений КомандыПечати), то нам нужно было бы найти процедуру Печать в модуле менеджера документа СчетНаОплатуПокупателя.

Откроем модуль менеджера обработки ПечатьСчетаНаОплату.


И раскроем процедуру Печать.


Нас интересует второе условие (где фигурирует строка "СчетЗаказ", см. идентификатор нужной команды в процедуре ДобавитьКомандыПечати модуля менеджера документа), скопируем это условие в процедуру Печать нашей внешней обработки.

Внимание! Копировать напрямую процедуру Печать из модуля менеджера (без разницы обработка это, документ или справочник) не следует. Поскольку у них отличается количество параметров, в последствие это приводит к ошибкам при работе.

Так же из модуля менеджера обработки скопируем процедуру СформироватьПечатнуюФорму.

В этом коде есть строка, где заполняется таблица сведений счета на оплату.

Эта таблица получается при помощи функции модуля менеджера объекта (в нашем случае это документ СчетНаОплатуПокупателю). Найдем эту функцию в модуле менеджера документа СчетНаОплатуПокупателю.


И скопируем её в модель нашей внешней обработки.

А сам код процедуры СформироватьПечатнуюФорму в модуле внешней обработки исправим, убрав все не нужное от туда.

Если мы сейчас сделаем проверку модуля внешней обработки, то выйдет две ошибки. Первая, что не определена переменная ПараметрыПечати в процедуре Печать, и, что не найдена функция ПолучитьТекстЗапросаДляФормированияТаблицыСведенийСчетаНаОплату в функции ПолучитьТаблицуСведенийСчетаНаОплату.

Создадим переменную ПараметрыПечати в процедуре Печать. Это будет простая структура.

А потом найдем функцию ПолучитьТекстЗапросаДляФормированияТаблицыСведенийСчетаНаОплату в модуле менеджера документа СчетНаОплатуПокупателю и скопируем её в модуль внешней обработки.


Должен получится следующий состав процедур и функций модуля внешней обработки (для удобства я разделил их на две области).


Еще раз делаем проверку модуля. Ошибок не обнаружено.

Продолжаем, теперь нам необходимо, что бы брался наш макет, и печатался по нашей команде.

Нас интересует процедура СформироватьПечатнуюФорму, а в ней мы уделим внимание методу ПечатьСчетаНаОплату общего модуля ПечатьТорговыхДокументов.


Очевидно, она непосредственно формирует табличный документ. Перейдем в этот общий модуль, и скопируем функцию ПечатьСчетаНаОплату в модуль нашей внешней обработки.


Делаем проверку модуля внешней обработки. Ругается на несуществующие методы ВывестиЗаголовокПредупреждение и НомерСчетаНаОплату.


Переходим в общий модуль, от куда мы взяли функцию ПечатьСчетаНаОплату, находим процедуру ВывестиЗаголовокПредупреждение , и копируем ее в модуль внешней обработки.


А функция НомерСчетаНаОплату в общем модуле ПечатьТорговыхДокументов экспортная, поэтому мы просто исправим код в процедуре ПечатьСчетаНаОплату, где используется проблемная функция, сделав вызов этой функции из вышеупомянутого общего модуля.

Проверяем еще раз ошибки. Все нормально.

Не забудем в процедуре СформироватьПечатнуюФорму убрать вызов метода ПечатьСчетаНаОплату из общего модуля.

Теперь зайдем в скопированную функцию ПечатьСчетаНаОплату, и посмотрим, где в ней подтягивается макет.


Находим данный макет в общих макетах и копируем его в макеты нашей обработки.


Исправляем выделенный код, где подтягивается макет, следующий образом.

Теперь зайдем в наш скопированный макет, и сделаем какое-нибудь изменение, чтобы вы видели, что команда подтянула именно макет из внешней обработки.


Вернемся обратно в процедуру Печать нашей внешней обработки.

И теперь осталась одна небольшая хитрость, без которой ваш внешний отчет не будет работать. Необходимо текст "СчетЗаказ" (это идентификатор типовой печатной формы).


Заменить на название идентификатора команды ("СчетНаОплатуВнешний").

Все, сохраняем данную обработку. И запускаем "1С: Предприятие" из конфигуратора.

Идем в администрирование. В дополнительные отчеты и обработки.

Нажимаем на кнопку "Добавить из файла" и выбираем нашу созданную обработку.

Разместил: E_Migachev  Версии: | 7.x | 8.x | 8.2 УП |  Дата: 28.02.2011   Прочитано: 54915

Распечатать

Похожие FAQ

Excel файл как Внешний источник данных  14
Подключимся и загрузим из файла Excel данные в таблицу значений 1С. Сделать теперь это очень просто. 1. В конфигурации добавляет новый объект метаданных типа " Внешние источники данных" и назовем его просто " Excel" . https://helpf.pro/uploads/img Активация открытой книги Excel для корректировки  0
Нужно было получить для изменения уже открытую книгу Excel, а если она закрыта, то открыть и изменять. Ниже код, который данную задачу решает. Попытка Эксель = Неопределено; Книга = Неопределено; Лист = Неопределено; Состояние(" Выполняется Быстрая загрузка данных большого размера файла Excel в многомерный Массив  0
// OldthiefXXX Перем СерверExcel; Процедура КнопкаВыполнитьНажатие(Кнопка) ФайлХЛС=СерверExcel.Application.Workbooks.Open(ДокументХЛС); КонечнаяСтрокаДанных=ФайлХЛС.ActiveSheet.UsedRange.Rows.Count; КоличествоКолонокДанных=ФайлХЛС.ActiveSheet Быстрая функция чтения данных с листа Excel  9
При чтении файла Excel я использую вариантный массив. Он позволяет быстро получить ВСЮ таблицу листа в память, а также получать данные массива целыми колонками. Тем самым время на чтение области файла Excel в таблицу значений сокращается в десятки ра Вставить формулу, функцию в ячейку Excel  0
Ячейка = Лист.Cells(1,8); Ячейка.Formula=" =SUM(R11C:R C)" ; Процедура Сформировать() Перем Кат,Шаб; Ехсел=СоздатьОбъект(" Excel.Application" ); Книга=Ехсел.Workbooks; Если ФС.ВыбратьФайл(0,Кат,Шаб," Выбери файл Еxcel" ,," *.xls" ,)=1 Тогда Посмотреть все результаты поиска похожих

Еще в этой же категории

Как сформировать документ в Word из 1С? (Active Document)  14
ВНИМАНИЕ! При использовании кодов описанных ниже, уберите символ _ Давайте рассмотрим на примерах как это делается! =) Мне известно 2 способа: 1. Путем замены шаблонного текста в макете Wordа. 2. Путем вставки текста с помощью закладок в Wo Как в excel сохраненный из 1С вставить новый лист?  13
Я думаю, все сталкивались с однолистовым excel файлом из 1С, у которого на первый взгляд, нет возможности добавить листы. Все не так страшно - их просто скрыли или, что чаще всего - даже не отображали (обусловлено созданием файла из стороннего прил Экспорт и Импорт данных 1С - Microsoft Excel  12
Экспорт Процедура ОсновныеДействияФормыЭкспорт(Кнопка) - выгружает из указанного справочника данные в режиме экспорта в файл в формате Microsoft Excel с указанным именем, используя преобразование данных к типу число и типу строка; Процедура Основ Выгрузка данных в Excel с установкой разных параметров  9
// Процедура выгружает из указанного справочника данные в режиме экспорта в файл в формате Microsoft Excel // с указанным именем, используя преобразование данных к типу число и типу строка; Процедура ОсновныеДействияФормыЭкспорт(Кнопка) Попытка Быстрая функция чтения данных с листа Excel  9
При чтении файла Excel я использую вариантный массив. Он позволяет быстро получить ВСЮ таблицу листа в память, а также получать данные массива целыми колонками. Тем самым время на чтение области файла Excel в таблицу значений сокращается в десятки ра Посмотреть все в категории Работа с Microsoft Office и OpenOffice

Читайте также: