Как реализовать печать договора поставки из документа Заказ поставщику в 1С:УНФ 1.6

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

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

Анализ проблемы: почему готовой формы нет на Инфостарте?

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

Способ №1: Использование штатного механизма «Шаблоны документов» (рекомендуемый)

Проанализируем самый простой и эффективный способ, не требующий программирования — использование шаблонов в формате MS Word (.docx) или OpenOffice (.odt). Этот функционал позволяет «втянуть» данные из заказа в готовый текст договора.

Пошаговая инструкция по настройке:

  1. Перейдем в раздел Настройки — Почта, рассылки и SMS — Шаблоны документов.
  2. Создадим новый шаблон и в качестве Владельца шаблона выберем тип документа Заказ поставщику.
  3. Загрузим заранее подготовленный файл договора в формате Word.
  4. В правой части окна настройки мы увидим список доступных параметров. Проанализируем, какие данные мы можем подтянуть автоматически:
    • [Организация] — ваши реквизиты.
    • [Контрагент] — наименование поставщика.
    • [СуммаДокумента] — итоговая сумма сделки.
    • [Товары] — табличная часть заказа, которая может выступать в роли спецификации.
  5. Для того чтобы добавить в договор ФИО подписанта со стороны поставщика, рекомендуем использовать механизм Дополнительных реквизитов для документа Заказ поставщику. После создания доп. реквизита «Подписант поставщика», он также станет доступен для выбора в шаблоне.

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

Способ №2: Создание внешней печатной формы (ВПФ) на базе MXL

Если нам требуется строгая форма в формате табличного документа 1С (MXL) или сложная логика заполнения, которую нельзя реализовать в Word, рассмотрим вариант создания ВПФ. Как отмечалось в обсуждении на форуме, за основу можно взять любую печатную форму для заказа и заменить в ней макет.

Проанализируем техническую реализацию. Нам необходимо создать внешнюю обработку, которая подключается через механизм Дополнительные отчеты и обработки. Рассмотрим пример кода, который формирует данные для печати:


// В модуле объекта внешней обработки
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ДоговорПоставки");
    Если ПечатнаяФорма <> Неопределено Тогда
        ПечатнаяФорма.ТабличныйДокумент = СформироватьПечатнуюФормуДоговора(МассивОбъектов, ОбъектыПечати);
    КонецЕсли;
    
КонецПроцедуры

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

Главное преимущество этого метода — возможность программно склонять ФИО подписантов и преобразовывать суммы в текст («Сумма прописью»), используя встроенные функции 1С:УНФ.

Способ №3: Использование расширений конфигурации

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

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

  1. Обновления программы проходят в штатном режиме.
  2. Пользователь видит кнопку печати договора прямо в документе, а не в отдельном списке обработок.
  3. Можно перехватить процедуру формирования данных и добавить туда информацию из контактных лиц контрагента.

Рассмотрим ситуацию, когда данных в заказе недостаточно. Мы можем через расширение добавить в форму заказа гиперссылку на создание Договора контрагента, если он еще не создан, и автоматически заполнить его данными из текущего заказа. Это восстановит логическую цепочку «Заказ -> Договор», о которой спорили участники форума.

Практические советы по наполнению формы

Независимо от выбранного технического метода, выясним, какие нюансы важно учесть при создании формы договора для поставщика:

Подведем итог: если вам нужна оперативная печать, лучше всего воспользоваться встроенными Шаблонами документов с форматом Word. Если же требуется сложная автоматизация и интеграция в интерфейс — выбирайте создание ВПФ или Расширения с использованием программного кода для вывода данных из документа ЗаказПоставщику в макет.

← На главную