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