Как связать документы разных типов без изменения конфигурации в 1С

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

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

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

Проблема использования уникальных номеров и префиксов

Первое, что часто пробуют разработчики — это «зашивать» номер документа-основания в номер подчиненного документа. Рассмотрим, почему это плохой путь:

  1. Ограничение длины: В типовых решениях длина номера документа жестко ограничена (например, 11 символов). Попытка втиснуть туда сложный префикс и номер другого документа часто приводит к нарушению уникальности.
  2. Риск дублирования: При программном формировании номера Перемещение.Номер = "ПР-" + Сред(Реализация.Номер, 1, 5)... велик шанс получить номер, который уже существует в базе, что вызовет ошибку при записи.
  3. Сложность в запросах: Синтаксис запросов 1С ограничен в работе со строками. Конструкции типа ПОДСТРОКА работают медленно и не позволяют использовать индексы таблиц, что приведет к деградации производительности при росте базы.

Решение через механизм Дополнительных сведений

Наиболее правильным и «чистым» способом связки объектов в 1С без изменения конфигурации является использование регистра сведений ДополнительныеСведения. Этот механизм входит в состав Библиотеки Стандартных Подсистем (БСП) и доступен практически во всех современных конфигурациях.

Преимущества этого метода:

Шаг 1. Настройка дополнительного сведения в режиме Предприятие

Прежде чем писать код во внешней обработке, необходимо создать само «свойство», которое будет хранить связь. Проанализируем, как это сделать:

  1. Перейдем в раздел Администрирование — Общие настройки — Дополнительные реквизиты и сведения.
  2. Убедимся, что флаг «Дополнительные реквизиты и сведения» включен.
  3. Перейдем по ссылке «Дополнительные сведения».
  4. Найдем в списке документ Перемещение товаров и добавим новое свойство.
  5. В качестве типа значения выберем Документ ссылка: Реализация товаров и услуг.

Теперь у документа ПеремещениеТоваров появилось скрытое поле, в которое можно записать ссылку на реализацию.

Шаг 2. Программная запись связи во внешней обработке

При создании перемещения во внешней обработке нам нужно не только заполнить реквизиты документа, но и создать запись в регистре сведений. Рассмотрим пример кода:


// Предположим, ОбъектПеремещение — это созданный и записанный документ ПеремещениеТоваров
// СсылкаНаРеализацию — это документ-основание РеализацияТоваровУслуг

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

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

Шаг 3. Получение связи в запросе

Теперь проанализируем, как быстро вытянуть все перемещения, созданные на основании конкретной реализации. Благодаря тому, что данные хранятся в индексированном регистре, запрос будет работать мгновенно.


ВЫБРАТЬ
    Реализация.Ссылка КАК Реализация,
    Перемещение.Ссылка КАК Перемещение
ИЗ
    Документ.РеализацияТоваровУслуг КАК Реализация
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДопСведения
        ПО ДопСведения.Значение = Реализация.Ссылка
        И ДопСведения.Свойство = &СвойствоСвязи
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК Перемещение
        ПО ДопСведения.Объект = Перемещение.Ссылка
ГДЕ
    Реализация.Ссылка В (&МассивРеализаций)

В данном запросе &СвойствоСвязи — это ссылка на элемент плана видов характеристик, который мы создали ранее.

Альтернативный метод: Использование поля Комментарий

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

Пример записи идентификатора:


Перемещение.Комментарий = "[ID:" + Реализация.УникальныйИдентификатор() + "] " + СтандартныйКомментарий;

Для поиска в запросе используем функцию ВЫРАЗИТЬ, которая позволяет превратить поле неограниченной длины в индексируемую строку (до 1000 символов в 1С):


ВЫБРАТЬ
    Перемещение.Ссылка
ИЗ
    Документ.ПеремещениеТоваров КАК Перемещение
ГДЕ
    ВЫРАЗИТЬ(Перемещение.Комментарий КАК СТРОКА(100)) ПОДОБНО "[ID:" + &СтрокаУИД + "]%"

Однако помните, что поиск по подстроке (ПОДОБНО) всегда медленнее, чем прямое соединение по ссылке в регистре сведений.

Использование регистра «Соответствия объектов информационных баз»

Еще один продвинутый способ — использовать системный регистр РегистрСведений.СоответствияОбъектовИнформационныхБаз. Несмотря на то, что он предназначен для обменов, программно в него можно записать любую пару объектов.

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

Резюме

Мы проанализировали несколько подходов к связке документов. Наиболее рекомендуемым для 1С:Бухгалтерия 3.0 является метод с Дополнительными сведениями. Он полностью соответствует стандартам разработки фирмы 1С, не требует изменения конфигурации и обеспечивает высокую скорость работы отчетов и запросов.

← На главную