Как создать внешнюю печатную форму счета в 1С:Управление торговлей 10.3, настроить экспорт в Excel и обойти предупреждения безопасности

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Нам часто приходится сталкиваться с задачами, когда типовой функционал конфигурации «Управление торговлей», редакция 10.3 (УТ 10.3) требует доработки. Одной из самых частых задач является создание внешней печатной формы (ВПФ) для счета на оплату покупателю, а также организация его выгрузки в формат Excel (XLS/XLSX) для отправки клиентам. Давайте подробно разберем, как правильно реализовать данный механизм, обойти ограничения безопасности платформы 1С:Предприятие 8.3 и решить проблему с блокировкой копирования ячеек табличного документа.

Развеиваем мифы: Почему БСП не подходит для УТ 10.3

Часто на форумах начинающим разработчикам советуют использовать «Библиотеку стандартных подсистем» (БСП) для создания внешних обработок. Выясним, почему это грубейшая ошибка.

Конфигурация УТ 10.3 разработана на старой архитектуре обычного приложения (обычных формах). БСП современных версий (начиная с 2.x и 3.x) создана исключительно для управляемого приложения (управляемых форм), используемых в современных решениях вроде УТ 11, БП 3.0, ERP 2.0. Механизмы интеграции внешних печатных форм в них кардинально различаются. В УТ 10.3 нет общих модулей БСП для регистрации обработок. Попытка внедрить туда шаблон кода для БСП приведет к ошибкам компиляции. Нам потребуется использовать классический механизм регистрации обычного приложения.

Пошаговое руководство: Создание ВПФ для УТ 10.3 (Обычные формы)

Разберем по шагам процесс создания внешней печатной формы счета:

  1. Создание внешней обработки в Конфигураторе. Запустим Конфигуратор, выберем в меню Файл -> Новый, укажем тип файла «Внешняя обработка». Сохраним ее под понятным именем, например, ПечатьСчетаВXLS.epf.
  2. Создание обязательного реквизита. Для того чтобы платформа понимала, из какого документа вызывается печать, нам необходимо добавить в обработку обязательный реквизит. Создадим реквизит с именем СсылкаНаОбъект. Тип реквизита должен строго соответствовать документу-источнику. В нашем случае это ссылка на документ заказа или счета: ДокументСсылка.ЗаказПокупателя или ДокументСсылка.СчетНаОплатуПокупателю. Для универсальности можно выбрать составной тип данных, включающий оба эти документа.
  3. Написание экспортной функции в Модуле объекта. Перейдем в модуль объекта нашей обработки (не путать с модулем формы!). Нам нужно написать экспортную функцию Печать(). Платформа при вызове внешней печатной формы ищет именно эту функцию. Она должна сформировать и вернуть табличный документ. Посмотрим на пример базового шаблона кода:
    
    Функция Печать() Экспорт
        
        ТабДокумент = Новый ТабличныйДокумент;
        
        // Получаем макет нашей печатной формы
        Макет = ПолучитьМакет("МакетСчета");
        
        // Получаем данные из документа-источника через СсылкаНаОбъект
        ДокументОбъект = СсылкаНаОбъект.ПолучитьОбъект();
        
        // Заполняем параметры макета данными из документа
        ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
        ОбластьШапка.Параметры.НомерДокумента = ДокументОбъект.Номер;
        ОбластьШапка.Параметры.ДатаДокумента = ДокументОбъект.Дата;
        ОбластьШапка.Параметры.Контрагент = ДокументОбъект.Контрагент;
        
        ТабДокумент.Вывести(ОбластьШапка);
        
        // Здесь также выводим строки табличной части (товары, услуги) и подвал
        
        // Разрешаем пользователю выделять и копировать данные
        ТабДокумент.ТолькоПросмотр = Истина;
        ТабДокумент.Защита = Ложь;
        
        Возврат ТабДокумент;
        
    КонецФункции
    
  4. Добавление макета. Добавим в нашу внешнюю обработку макет типа «Табличный документ» с именем МакетСчета. Сверстаем в нем привычную форму счета с областями «Шапка», «Строка» и «Подвал».
  5. Подключение ВПФ в режиме "1С:Предприятие". Запустим базу в пользовательском режиме. Перейдем в меню Сервис -> Дополнительные отчеты и обработки -> Дополнительные внешние печатные формы. Добавим новый элемент, укажем наш файл .epf и привяжем его к нужному типу документа.

Обход "Предупреждения безопасности" в платформе 8.3

При запуске внешних обработок в новых версиях платформы 1С:Предприятие 8.3 (начиная с версии 8.3.9 и выше) часто возникает окно «Предупреждение безопасности». Платформа блокирует выполнение внешнего кода, защищая систему от потенциально опасных действий. Проанализируем три способа решения этой проблемы:

Способ 1. Отключение защиты для конкретного пользователя.
В режиме Конфигуратора откроем меню Администрирование -> Пользователи. Найдем пользователя, под которым работает менеджер или бухгалтер, откроем его свойства. На вкладке «Основные» снимем флажок «Защита от опасных действий». Это самый простой способ для локальной работы.

Способ 2. Глобальное отключение через файл настроек conf.cfg.
Если пользователей много, мы можем отключить проверку безопасности на уровне всей платформы для определенных баз. Для этого найдем конфигурационный файл платформы conf.cfg (в Windows он обычно находится в папке C:\Program Files\1cv8\conf\). Добавим в него строчку, отключающую защиту: DisableUnsafeActionProtection=.*. Вместо регулярного выражения .* можно прописать путь к конкретной базе.

Способ 3. Отключение безопасного режима при регистрации обработки.
При регистрации внешней печатной формы в справочнике дополнительных обработок убедимся, что снят флажок «Безопасный режим». Если этот флажок установлен, платформа жестко ограничивает работу обработки (например, запрещает вызовы внешних COM-объектов или запись файлов на локальный диск).

Решение проблемы с копированием и сохранением данных в Excel (XLS / XLSX)

Выясним причину, почему в типовых печатных формах 1С при выводе документа на экран контекстное меню «Копировать» по правой кнопке мыши оказывается неактивным. Разработчики типовой конфигурации УТ 10.3 в целях защиты документов от случайного изменения пользователями перед печатью устанавливают у табличного документа свойство Защита = Истина. Из-за этого платформа полностью блокирует выделение и копирование ячеек в буфер обмена.

Решение для пользователя (без программирования):
Когда печатная форма счета уже выведена на экран, пользователю достаточно перейти в главное меню программы по пути: Таблица -> Вид -> Редактирование. После этого защита временно деактивируется, ячейки можно выделять, а в контекстном меню появится активная кнопка «Копировать» (или сработает привычное сочетание клавиш Ctrl+C).

Решение для разработчика (в коде ВПФ):
Чтобы избавить пользователей от рутинных действий, мы можем программно управлять поведением табличного документа в коде функции Печать(). Установим свойства следующим образом:


ТабДокумент.ТолькоПросмотр = Истина; // Пользователь не сможет редактировать ячейки напрямую
ТабДокумент.Защита = Ложь;           // Защита снята: выделение и копирование ячеек разрешено!
Также убедимся, что свойство Вывод табличного документа установлено в значение Разрешить, иначе сохранение и печать будут заблокированы на уровне прав пользователя.

Как сохранить счет напрямую в Excel из 1С:
Платформа 1С:Предприятие 8.3 обладает встроенным механизмом сохранения любых табличных документов в форматы XLS и XLSX. Для этого после формирования счета на экране нужно выполнить следующие действия:

  1. Перейти в главное меню программы: Файл -> Сохранить как... (или нажать на пиктограмму дискеты на панели инструментов).
  2. В открывшемся диалоговом окне в поле Тип файла выбрать «Лист Excel (*.xls)» или «Документ Excel 2007-... (*.xlsx)».
  3. Указать путь для сохранения на диске и нажать кнопку Сохранить. Полученный файл готов к отправке клиенту по электронной почте.
← На главную