Как объединить печать УПД (статус 1 и 2) в одну команду внешней печатной формы в 1С:Бухгалтерии 3.0?

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

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

Шаг 1: Оптимизация регистрации команды

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

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


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

Шаг 2: Реализация логики автоматического определения статуса

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

В 1С:Бухгалтерии статус 1 означает, что УПД заменяет собой и первичный документ, и счет-фактуру. Если счет-фактуры нет, используется статус 2. Давайте разберем, как проанализировать это программно:


Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    // 1. Анализируем массив объектов
    ЕстьСчетФактура = Ложь;
    Для каждого Объект Из МассивОбъектов Цикл
        Если ТипЗнч(Объект) = Тип("ДокументСсылка.СчетФактураВыданный") Тогда
            ЕстьСчетФактура = Истина;
            Прервать;
        КонецЕсли;
    КонецЦикла;

    // 2. Выбираем нужный идентификатор макета из таблицы
    // Предположим, что вы используете логику из стандартного модуля печати
    ТаблицаМакетов = УчетНДС.ТаблицаМакетовУПД();
    ИдентификаторМакета = "";
    
    Для каждого Макет Из ТаблицаМакетов Цикл
        // Логика выбора: если есть счет-фактура -> ищем статус 1, иначе -> статус 2
        Если ЕстьСчетФактура И Макет.Статус = "1" Тогда
            ИдентификаторМакета = Макет.ИДМакета;
            Прервать;
        ИначеЕсли НЕ ЕстьСчетФактура И Макет.Статус = "2" Тогда
            ИдентификаторМакета = Макет.ИДМакета;
            Прервать;
        КонецЕсли;
    КонецЦикла;

    // 3. Формируем табличный документ, используя найденный идентификатор
    // Используйте стандартные методы БП3 для формирования печатной формы
    // ... логика вызова УчетНДС.ПечатьУниверсальныхПередаточныхДокументов
КонецПроцедуры

Почему это удобно?

  1. Чистый интерфейс: Пользователь не должен думать, какой статус выбрать. При нажатии на кнопку система анализирует контекст (наличие счета-фактуры) и сама подставляет верный шаблон.
  2. Меньше ошибок: Исключается человеческий фактор, когда пользователь по ошибке выбирает не тот статус, что приводит к некорректному оформлению документации.
  3. Гибкость: Если в будущем законодательство изменится или потребуется добавить еще один тип макета (например, для прослеживаемых товаров), вы сможете легко расширить логику внутри одной функции Печать, не затрагивая настройки регистрации команд.

Важные замечания

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

Использование этого алгоритма позволит вам сделать работу в 1С более профессиональной и ориентированной на удобство конечного пользователя!

← На главную