Как автоматически подставлять Счет на оплату в основание печати УПД в 1С:УНФ

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

При работе в 1С:Управление нашей фирмой (УНФ) 3.0, особенно если база развернута в облачном сервисе 1С:Фреш, пользователи часто сталкиваются с жесткой логикой заполнения печатных форм. Одной из таких проблем является автоматическое заполнение строки «Основание» в Универсальном передаточном документе (УПД). По умолчанию система подставляет туда данные действующего договора, а если договор не указан — оставляет поле пустым. Однако во многих бизнес-процессах, особенно при работе через Заказ-наряд, требуется, чтобы в печатной форме фигурировал именно Счет на оплату.

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

Почему 1С:УНФ выбирает Договор, а не Счет?

Проанализируем ситуацию с точки зрения методологии программы. В системе 1С Договор является юридическим основанием для возникновения обязательств. Счет на оплату — это лишь документ-намерение, предложение произвести платеж. С точки зрения Гражданского кодекса, именно договор (или заказ, выполняющий роль оферты) является первичным. Поэтому разработчики заложили логику: если в документе отгрузки (например, Расходная накладная или Заказ-наряд) заполнен реквизит Договор, он приоритетно попадает в печатную форму УПД.

Ситуация осложняется тем, что Заказ-наряд сам по себе является комплексным документом, который объединяет функции заказа, акта выполненных работ и счета. Если вы создаете Счет на оплату на основании Заказ-наряда, то в структуре подчиненности Заказ-наряд является «родителем». Типовой алгоритм печати не всегда может однозначно определить, какой именно из нескольких возможных счетов нужно вывести в строку основания.

Способ 1. Использование внешних печатных форм (для 1С:Фреш)

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

Внешняя печатная форма — это отдельный файл (обработка), который подключается в разделе Дополнительные отчеты и обработки — для этого отлично подойдёт комплект внешних печатных форм для 1С:УНФ. Готовые решения, такие как Счет и УПД №1096, позволяют полностью переопределить логику заполнения любого поля документа.

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

  1. Программа получает ссылку на текущий документ (например, Заказ-наряд).
  2. Выполняется запрос к критерию отбора СвязанныеДокументы, чтобы найти все созданные на его основании счета.
  3. Если счет найден, его номер и дата преобразуются в строку.
  4. Полученная строка передается в область макета УПД, отвечающую за основание.

Пример программного кода для поиска счета на основании текущего документа:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
    |	СвязанныеДокументы.Ссылка КАК Счет
    |ИЗ
    |	КритерийОтбора.СвязанныеДокументы(&Основание) КАК СвязанныеДокументы
    |ГДЕ
    |	СвязанныеДокументы.Ссылка ССЫЛКА Документ.СчетНаОплату
    |УПОРЯДОЧИТЬ ПО
    |	СвязанныеДокументы.Ссылка.Дата УБЫВ";

Запрос.УстановитьПараметр("Основание", ДокументСсылка);
РезультатЗапроса = Запрос.Выполнить();

Важно помнить, что во Фреше любая внешняя обработка, например УПД в редакции №1096, должна пройти аудит безопасности. Это значит, что код должен соответствовать стандартам разработки 1С (отсутствие небезопасных вызовов, использование только разрешенных методов).

Способ 2. Использование расширения конфигурации

Расширение — это еще один мощный инструмент, доступный в облаке. В отличие от внешней печатной формы, расширение может модифицировать поведение существующих кнопок печати, не создавая новых пунктов меню.

С помощью расширения мы можем перехватить процедуру ПечатьУПД в модуле менеджера документа и внести изменения в структуру ДанныеПечати. Рассмотрим последовательность действий:

  1. Создаем новое расширение в базе.
  2. Заимствуем в него нужный документ (например, Заказ-наряд) и менеджер печати.
  3. Используем аннотацию &Вместо или &После для процедуры заполнения параметров печати.
  4. Вставляем логику: «Если поле Договор пустое или требуется приоритет счета — найти последний Счет на оплату и заполнить текст основания» .

Преимущество этого метода в том, что пользователю не нужно выбирать специальную «внешнюю» форму — он продолжает нажимать на привычную кнопку печати УПД, но результат формируется по вашим правилам.

Способ 3. Ручная корректировка в реквизитах печати

Если автоматизация пока недоступна, разберем типовой механизм ручного управления. В 1С:УНФ в документах отгрузки предусмотрена вкладка (или отдельная форма в меню «Еще») под названием «Реквизиты печати».

Рассмотрим, как это работает:

  1. Откройте документ (например, Расходная накладная или Заказ-наряд).
  2. Перейдите по ссылке «Реквизиты печати» (обычно находится в нижней части формы или на вкладке «Дополнительно»).
  3. Найдите поле «Документ-основание».
  4. Введите туда текст вручную: «Счет на оплату №... от...».

Важный нюанс: Текст, введенный в это поле, имеет наивысший приоритет. Программа сначала проверит это поле, и если оно заполнено, проигнорирует и договор, и другие автоматические связи. Минус этого способа очевиден — необходимость ручного ввода данных для каждого документа.

Способ 4. «Хитрый» метод через наименование договора

Если вы не ведете сложный учет по договорам и используете их только ради формальности в печатных формах, можно воспользоваться особенностью работы справочника Договоры.

Выясним причину, по которой это работает: УНФ выводит в УПД именно Наименование договора. Рассмотрим порядок действий:

  1. В карточке договора в поле «Наименование» впишите текст вида «Счет на оплату №123 от 01.01.2023».
  2. При печати УПД система возьмет эту строку и подставит её в графу основания.

Этот метод не требует программирования, но крайне неудобен при большом потоке документов, так как приводит к созданию огромного количества фиктивных договоров в справочнике, что затрудняет последующий анализ взаиморасчетов.

Резюме и рекомендации

Проанализировав все варианты, можно сделать следующие выводы:

Если вы решили внедрять автоматизацию, рекомендуем использовать механизм КритерииОтбора.СвязанныеДокументы, так как он работает быстрее, чем прямой поиск по метаданным, и гарантирует корректное нахождение всех цепочек документов в 1С:УНФ.

← На главную