Как разработать внешнюю печатную форму для реестра документов в 1С 8.3

Программист 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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

Метод 1: Создание внешней печатной формы (ВПФ) через механизм БСП

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

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


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидДополнительнойОбработкиПечатнаяФорма();
    ПараметрыРегистрации.Назначение.Добавить("Документ.СчетФактураВыданный");
    ПараметрыРегистрации.Наименование = "Реестр счетов-фактур (особый)";
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    ПараметрыРегистрации.Версия = "1.0";
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Реестр документов (внешний)";
    НоваяКоманда.Идентификатор = "РеестрСчетовФактур";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    НоваяКоманда.Модификатор = "ПечатьMXL";
    
    Возврат ПараметрыРегистрации;
КонецФункции

Обратите внимание на ТипКоманды. Если мы хотим, чтобы форма логически отделялась от печати обычных первичных документов, в БСП можно использовать модификатор СозданиеРеестра. Это сгруппирует вашу команду в соответствующем меню формы списка.

Во-вторых, необходимо реализовать экспортную процедуру Печать(), которая принимает массив ссылок на объекты. Именно здесь происходит основная магия формирования макета.


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "РеестрСчетовФактур");
    Если ПечатнаяФорма <> Неопределено Тогда
        ПечатнаяФорма.ТабличныйДокумент = СформироватьРеестр(МассивОбъектов);
        ПечатнаяФорма.СинонимМакета = "Реестр документов";
    КонецЕсли;
    
КонецПроцедуры

Проблема получения всех документов из списка (без выделения)

При использовании стандартной ВПФ в параметр МассивОбъектов попадают только те строки, которые пользователь выделил в списке (например, через Ctrl+A). Однако бухгалтеры привыкли, что реестр формируется по всем документам, попавшим в текущий отбор (фильтр) формы. Выясним, как решить эту проблему.

Существует два основных подхода:

  1. Ручное выделение: Самый простой путь — проинструктировать пользователя выделять все документы перед нажатием кнопки печати. Это работает "из коробки" и не требует сложного кода.
  2. Программное получение отборов: Более профессиональный метод заключается в передаче параметров компоновки данных из формы списка в обработку. В управляемых формах 1С 8.3 можно получить настройки динамического списка через ЭтаФорма.Список.КомпоновщикНастроек.Настройки. Если передать эти настройки во внешнюю форму, можно выполнить запрос к базе данных с аналогичными фильтрами, не заставляя пользователя ничего выделять.

Метод 2: Использование расширений конфигурации

Если версия платформы и режим совместимости позволяют, использование Расширений является наиболее современным и "чистым" методом. Рассмотрим, почему это удобно:

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

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

Метод 3: Внешний отчет как альтернатива реестру

Иногда создание именно печатной формы избыточно. Рассмотрим вариант создания внешнего отчета. Это решение имеет ряд преимуществ для реестров:

Итоги и рекомендации

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

Помните, что при работе в 1С 8.3 (особенно в облачных сервисах типа 1С:Фреш) крайне важно соблюдать требования БСП к безопасным режимам и использованию разрешений во внешних обработках. Всегда тестируйте свои разработки на копии базы перед передачей бухгалтеру.

← На главную