Для продвинутых пользователей: Кастомизация создания учетного документа в Доки | Помощь Астрал
Техподдержка:
Отдел продаж
График работы

Доки: Кастомизация создания учетного документа

Автор Прошин Алексей

Автор: Прошин Алексей

06.10.2025
13
Из статьи вы узнаете:

1. Зачем это может понадобиться?

Начиная с версии 1.0.108 расширение «Доки» позволяет добавлять собственную логику при отражении электронных документов в учете (т. е. при создании учетных документов в 1С). Благодаря этому вам будет доступно:

  • Добавление реквизитов из ЭДО: перенос дополнительных полей из электронного документа (например, номер и дата заказа из ИнфПолФХЖ1) в созданный учетный документ.
  • Автоматическое заполнение: при создании документов автоматически подставлять значения, которые важны конкретному клиенту (например, код подразделения или комментарий).
  • Изменение стандартного поведения: можно переопределить, как именно «Доки» формирует учетный документ, не ломая основной код расширения.

Таким образом, кастомизация помогает интеграторам обеспечить корректное заполнение учетных документов без изменения самого расширения «Доки».

2. Как это использовать?

Шаг 1. Создать собственное расширение

Через Конфигуратор создайте новое расширение информационной базы, либо можете использовать готовый «каркас» расширения (скачать файл).

Шаг 2. Добавить модуль кастомизации

В расширении создайте общий модуль с именем: ДокиКастом_Экспорт

Шаг 3. Реализовать процедуру

В модуле реализуется процедура:

Процедура ДобавитьДопСведенияПослеСозданияДокумента(ОбъектУчета, ИнфПолФХЖ1) Экспорт

Параметры процедуры:

  • ОбъектУчета — ссылка на созданный учетный документ 1С;
  • ИнфПолФХЖ1 — массив дополнительных свойств из тега ИнфПолФХЖ1. Каждый элемент массива содержит:
    • ИмяПоля — имя свойства (строка);
      Значение — значение свойства (строка).

Внутри процедуры разработчик получает доступ к дополнительным свойствам документа и может:

  • перенести значения из ИнфПолФХЖ1 в дополнительные сведения документа;
  • изменить реквизиты документа (например, заполнить дату заказа, если её не было).

Шаг 4. Автоматический вызов

При создании учетного документа расширение «Доки»:

  • проверяет наличие общего модуля ДокиКастом_Экспорт;
  • вызывает процедуру ДобавитьДопСведенияПослеСозданияДокумента, передавая ей ссылку на документ и список полей ИнфПолФХЖ1.

Таким образом, интегратор может внедрить дополнительную бизнес-логику заполнения документа.

3. Требования к дополнительному модулю

  • Имя модуля должно быть строго ДокиКастом_Экспорт.
  • Процедура ДобавитьДопСведенияПослеСозданияДокумента должна быть экспортной.
  • Код внутри процедуры не должен нарушать целостность документа (например, записывать несоответствующие типы данных).
  • Для работы с дополнительными свойствами используйте стандартные методы (УправлениеСвойствами.СвойстваОбъекта, УправлениеСвойствами.ЗаписатьСвойстваУОбъекта и др.).

4. Пример: перенос всех дополнительных сведений из ИнфПолФХЖ1

Ниже приведен рабочий пример, в котором значения из ИнфПолФХЖ1 переносятся в учетный документ, если название дополнительного сведения совпадает с именем поля:

Процедура ДобавитьДопСведенияПослеСозданияДокумента(ОбъектУчета, ИнфПолФХЖ1) Экспорт
      
ТаблицаСвойств = Новый ТаблицаЗначений;
ТаблицаСвойств.Колонки.Добавить("Свойство");
ТаблицаСвойств.Колонки.Добавить("Значение");
      
СвойстваОбъекта = УправлениеСвойствами.СвойстваОбъекта(ОбъектУчета);
ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(СвойстваОбъекта, "ИдентификаторДляФормул, Наименование, ТипЗначения");

Для Каждого КлючИЗначение Из ЗначенияРеквизитов Цикл
       Свойство = КлючИЗначение.Ключ;
       ЗначениеРеквизитов = КлючИЗначение.Значение;
       Для Каждого ДопСведение Из ИнфПолФХЖ1 Цикл
               Если НРег(ДопСведение.ИмяПоля) = НРег(ЗначениеРеквизитов.Наименование)
                      Или НРег(ДопСведение.ИмяПоля) = НРег(ЗначениеРеквизитов.ИдентификаторДляФормул) Тогда
                             
                      НормализованноеЗначение = СокрЛП(ДопСведение.Значение);
                             
                      Если ЗначениеРеквизитов.ТипЗначения.СодержитТип(Тип("Дата")) Тогда
                              ЗначениеСвойства = ПреобразоватьКДате(НормализованноеЗначение);
                      Иначе
                              ЗначениеСвойства = НормализованноеЗначение;
                      КонецЕсли;
                             
                      Если ЗначениеЗаполнено(ЗначениеСвойства) Тогда
                              НоваяСтрока = ТаблицаСвойств.Добавить();
                              НоваяСтрока.Свойство = Свойство;
                              НоваяСтрока.Значение = ЗначениеСвойства;
                      КонецЕсли;
               КонецЕсли;
       КонецЦикла;
КонецЦикла;
      
Если ТаблицаСвойств.Количество() > 0  Тогда
       УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ОбъектУчета, ТаблицаСвойств);
КонецЕсли;
      
КонецПроцедуры

Функция ПреобразоватьКДате(Значение)
      
Попытка
       Результат = СтроковыеФункцииКлиентСервер.СтрокаВДату(Значение, ЧастиДаты.ДатаВремя);
Исключение
       Результат = Дата(1, 1, 1);
КонецПопытки;
      
Возврат Результат;
      
КонецФункции
Комментарии для сайта Cackle

Хотите разобраться
в сервисах Астрал?

Подробные инструкции,
решения проблем
и ответы на вопросы
в Базе знаний

Получите электронную подпись для работы на госпорталах, для участия в торгах и ЭДО
Опубликован законопроект о налоговых изменениях: обзор ключевых положений (НДС, УСН, акцизы). Читайте разбор законопроекта
autohello-finger