Как автоматически подтянуть номер договора в служебную записку в 1С:Документооборот

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

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

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

Метод 1: Использование скрипта в правилах автозаполнения шаблонов

Если ваша задача — увидеть номер договора непосредственно в тексте файла (например, в формате Microsoft Word), который прикреплен к служебной записке, мы воспользуемся механизмом «Настройки заполнения файлов». Проанализируем алгоритм создания такого скрипта.

Рассмотрим порядок действий:

  1. Перейдем в настройки шаблона документа «Служебная записка» и откроем правила автозаполнения.
  2. Добавим новое поле и выберем для него вариант «Скрипт для формирования значения».
  3. В редакторе скрипта напишем запрос, который найдет актуальный договор по контрагенту, указанному в текущей служебной записке.

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


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

Запрос.УстановитьПараметр("Контрагент", Объект.Контрагент);
// Необходимо указать конкретную ссылку на вид документа "Договор"
Запрос.УстановитьПараметр("ВидДоговора", Справочники.ВидыВнутреннихДокументов.НайтиПоНаименованию("Договор"));

РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
    Выборка = РезультатЗапроса.Выбрать();
    Выборка.Следующий();
    Результат = Выборка.Номер;
Иначе
    Результат = "Договор не найден";
КонецЕсли;

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

Метод 2: Настройка связей и дополнительных реквизитов

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

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

  1. В настройках связей между видами документов установим тип связи (например, «Основание») между «Служебной запиской» и «Договором».
  2. Установим признак «Обязательная связь». Это заставит пользователя выбрать договор при создании документа, что гарантирует корректность данных.
  3. В настройках вида документа включим опцию «Отображать связи в списке» или выведем их на главную панель карточки.

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

Важные нюансы при работе с запросами

Рассмотрим подробнее критерии поиска, которые мы применили в первом методе. При написании скриптов в 1С:Документооборот важно учитывать следующее:

Таким образом, комбинируя возможности автозаполнения шаблонов и стандартные настройки связей, мы можем добиться автоматизации даже в версии ПРОФ, не прибегая к помощи программистов для изменения конфигурации через Конфигуратор.

← На главную