Связь между документами 1С 8.3: основание, расчёты, обмен и код
Содержание
Связать документы
в 1С 8.3 можно тремя способами: создать новый документ командой Создать на основании из уже существующего, вручную выбрать документ в поле-ссылке («Основание», «Документ расчетов», «Сделка») или установить ссылку программно. Проверить, что связь появилась, проще всего через Структуру подчиненности — она показывает цепочку «счёт → реализация → счёт-фактура → оплата».
Какой способ выбрать? Если второго документа ещё нет — только ввод на основании: 1С сама перенесёт контрагента, договор, товары и суммы. Если оба документа уже есть и их нужно сцепить задним числом — правка поля-ссылки и перепроведение. Код нужен, когда связывать приходится сотни документов или связь живёт в нетиповом реквизите.
Как устроена связь документов в 1С
Связь между документами — это не отдельная «нитка» в базе, а обычный реквизит одного документа, в котором хранится ссылка на другой. У счёта-фактуры это табличная часть с документами-основаниями, у оплаты — документ расчетов в расшифровке платежа, у реализации в УТ 11 — заказ клиента .
Из этого следуют три практических вывода:
- 🔗 связь всегда направленная: подчинённый документ «знает» основание, а основание о подчинённом не хранит ничего;
- 🔍 структура подчинённости строится поиском: платформа ищет документы, у которых в определённых реквизитах стоит ссылка на текущий;
- 🧩 если ссылка лежит в реквизите, который не включён в этот поиск, документ «выпадет» из цепочки, хотя ссылка в нём есть.
В типовых конфигурациях на БСП поиск идёт по критерию отбора СвязанныеДокументы. В его состав разработчики включили реквизиты-основания, расчётные документы и ссылки на заказы. Отсюда частая ситуация: связь есть в данных, но в структуре её не видно — к этому вернёмся в разделе про ошибки.
Где увидеть связанные документы
Откройте документ и найдите в командной панели формы кнопку Структура подчиненности (значок иерархии; если панели не хватает места, команда уходит в меню Ещё). В отчёте текущий документ выделен жирным, выше стоят основания, ниже — подчинённые документы. Любой документ из дерева открывается двойным щелчком.
Структура подчинённости открывается и из списка документов: выделите строку и вызовите ту же команду. Удобно, когда нужно быстро проверить несколько накладных подряд.
Связать документы вручную: ввод на основании и поле «Основание»
Способ 1. Создать документ на основании
Это основной и самый надёжный способ. Связь возникает сама, а реквизиты переносятся без ошибок набора.
- Откройте документ-основание, например
Счет покупателюв БП 3.0. - Нажмите в командной панели кнопку
Создать на основании. - Выберите нужный документ из списка — например,
Реализация (акт, накладная, УПД). - Проверьте заполненные поля: контрагент, договор, склад, количество, цены.
- Проведите документ.
Список документов, которые можно ввести на основании, задан в конфигурации. Если нужного варианта нет в выпадающем списке, связь этим способом не предусмотрена — переходите к способу 2.
Типовые цепочки, которые чаще всего строят через ввод на основании:
| Основание | Что создают на его основании |
|---|---|
| Счёт покупателю | Реализация, поступление на расчётный счёт |
| Реализация | Счёт-фактура выданный, возврат от покупателя |
| Поступление (акт, накладная, УПД) | Платёжное поручение, счёт-фактура полученный, возврат поставщику |
| Платёжное поручение | Списание с расчётного счёта |
Счёт-фактуру к реализации в БП 3.0 удобнее выписать ссылкой внизу формы самого документа реализации. Это тот же ввод на основании, только в один клик.
Способ 2. Выбрать основание в существующем документе
Подходит, когда оба документа уже созданы: например, реализацию оформили «с нуля», а счёт выставили отдельно.
- Откройте подчинённый документ.
- Найдите поле со ссылкой на другой документ. Его название зависит от вида документа: «Основание», «Счет на оплату», «Заказ», «Сделка». Поле может быть на вкладке
Дополнительноили в подвале формы. - Нажмите кнопку выбора и найдите документ в списке. Отберите список по контрагенту и дате, чтобы не перебирать сотни строк.
- Нажмите
Провести и закрыть.
Если поле влияет на движения (расчёты, резервы, заказы), документ нужно перепровести — иначе связь будет только в реквизите, а остатки по счетам и регистрам останутся старыми.
Как 1С связывает документы сама: расчёты, счета-фактуры, заказы
Часть связей 1С ставит без участия пользователя. Чтобы они работали предсказуемо, полезно знать, какая настройка за них отвечает.
Оплата и документ расчётов
В БП 3.0 в документах Поступление на расчетный счет и Списание с расчетного счета в расшифровке платежа есть поле «Способ погашения задолженности»:
- ⚙️ Автоматически — программа сама закрывает самый ранний долг по договору (по методу FIFO). Документ расчётов в строке не указывается, связь определяется при проведении;
- 📌 По документу — появляется поле «Документ расчетов», в нём выбирают конкретную реализацию или поступление;
- 🚫 Не погашать — сумма уходит в аванс, даже если долг есть.
Нужна жёсткая связь «эта оплата — за эту накладную» — ставьте «По документу». Это важно для сверки по конкретным сделкам и при расчётах в разрезе документов.
Если оплата прошла автоматически, а потом задним числом добавили документ отгрузки с более ранней датой, распределение сместится. Перепроведите банковские выписки за период — или используйте групповое перепроведение документов.
Счёт-фактура и его основания
Счёт-фактура выданный в БП 3.0 хранит документы-основания в отдельной табличной части. Один счёт-фактура можно связать с несколькими реализациями одного контрагента: добавьте их строками в список оснований. Связь нужна для книги продаж — без основания счёт-фактура не сформирует запись правильно.
Заказы в УТ 11 и КА 2
В УТ 11 реализация, введённая на основании заказа клиента, связывается с ним через реквизит заказа. Один заказ может закрываться несколькими отгрузками, и одна отгрузка может закрывать несколько заказов одного клиента. Состояние заказа («к отгрузке», «закрыт») рассчитывается по этим связям.
Связь документов из разных баз при обмене
Документ из другой информационной базы выбрать в поле «Основание» нельзя: ссылка живёт только внутри своей базы. Связь между базами сохраняется лишь тогда, когда оба документа переносятся обменом.
Что происходит при синхронизации данных:
- Каждый объект выгружается с уникальным идентификатором (УИД).
- В базе-приёмнике обмен ищет объект с тем же УИД или сопоставляет его по ключевым полям.
- Если основание уже загружено, ссылка в подчинённом документе восстанавливается. Если нет — ссылка останется пустой или укажет на объект, созданный только по ключевым полям; он дозаполнится, когда основание придёт следующим обменом.
Отсюда правила для межбазового связывания:
- 🔁 выгружайте основание не позже подчинённого документа или в том же сеансе обмена;
- 🧾 не создавайте основание в приёмнике вручную, если оно придёт обменом, — получится дубль, и связь «уедет» на копию;
- 📎 если документ-основание в обмен не входит (например, счёт остался в УТ, а в БП переходит только реализация), фиксируйте связь текстом: номер и дату основания в комментарии или дополнительном реквизите.
При обмене по правилам Конвертация данных перенос ссылки на основание задаётся в правилах конвертации реквизитов. Если в приёмнике основание пустое, первым делом проверьте, выгружается ли этот реквизит вообще.
Входящие электронные документы из ЭДО тоже связывают с учётом: при получении УПД его сопоставляют с уже существующим документом поступления или создают новый. Если сопоставить с неверным документом, связь придётся переустанавливать вручную в карточке электронного документа.
Почему документы не связываются: ошибки и решения
Ещё одна ловушка — копирование документа. Копия часто наследует ссылку на основание исходного документа. В результате к одному счёту «привязываются» две реализации. После копирования всегда проверяйте поле-основание и при необходимости меняйте его.
Программное связывание документов (для разработчиков)
Ввод на основании в конфигураторе
Чтобы документ можно было создать из другого, нужны два шага:
- В свойствах подчинённого документа, на закладке
Ввод на основании, добавьте документ-основание в список «Вводится на основании». - В модуле объекта подчинённого документа заполните реквизиты в обработчике
ОбработкаЗаполнения.
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказПоставщику") Тогда
Основание = ДанныеЗаполнения;
Контрагент = ДанныеЗаполнения.Контрагент;
Договор = ДанныеЗаполнения.Договор;
Для Каждого СтрокаОснования Из ДанныеЗаполнения.Товары Цикл
НоваяСтрока = Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаОснования);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Имена документов и реквизитов здесь условные — подставьте свои.
Создать связанный документ из кода
Метод Заполнить() вызывает тот же обработчик ОбработкаЗаполнения, поэтому документ заполнится так же, как при ручном вводе на основании:
НовыйДокумент = Документы.ПоступлениеТоваров.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДатаСеанса();
НовыйДокумент.Заполнить(СсылкаНаЗаказ);
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
Найти все документы, связанные с основанием
Если нужен список подчинённых документов в отчёте или обработке, достаточно запроса по реквизиту-основанию:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Док.Ссылка КАК Документ,
| Док.Дата КАК Дата
|ИЗ
| Документ.ПоступлениеТоваров КАК Док
|ГДЕ
| Док.Основание = &Основание
| И НЕ Док.ПометкаУдаления
|УПОРЯДОЧИТЬ ПО
| Дата";
Запрос.УстановитьПараметр("Основание", СсылкаНаЗаказ);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Строка(Выборка.Документ));
КонецЦикла;
Массовую перепривязку оснований в рабочей базе запускайте только после резервной копии и на тестовой копии сначала. Изменение реквизита без перепроведения не меняет движения, а перепроведение сотен документов закрытого периода может сдвинуть остатки и сломать сданную отчётность.
Связи в нетиповой и доработанной конфигурации
В самописной или сильно доработанной базе связь документов приходится проектировать самому. Минимальный набор:
- 📄 реквизит-ссылка на основание — тип
ДокументСсылка.<Имя>или составной тип, если оснований может быть несколько видов; - ⚙️ ввод на основании — свойство «Вводится на основании» и обработчик
ОбработкаЗаполнения; - 🌳 критерий отбора — чтобы новая связь появилась в структуре подчинённости, реквизит включают в состав критерия
СвязанныеДокументы(а в «чистой» конфигурации без БСП — создают такой критерий самостоятельно); - 🛡️ проверка при записи — например, запрет выбирать основание другого контрагента.
Если база стоит на поддержке и снимать её нельзя, доработку делают расширением конфигурации. В расширении добавляют собственный документ или обработку и подписываются на события заимствованных объектов. Это сохраняет возможность обновлять типовую часть без ручного сравнения.
Когда программиста нет, а связь нужна «для себя» — для поиска и сверки, а не для движений, — хватит дополнительного реквизита. В типовых конфигурациях на БСП они настраиваются в Администрирование → Общие настройки → Дополнительные реквизиты и сведения. В такой реквизит можно записать номер и дату связанного документа, а потом отбирать по нему список.