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