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