Цепочки документов в 1С 8.3: откуда берутся связи, что рвёт их и как их построить в конфигурации

· 9 мин

Содержание

Связанные документы в 1С 8.3 — это документы, у которых в реквизитах есть ссылка друг на друга: счёт → реализация → счёт-фактура, заказ → поступление → оплата. Посмотреть цепочку можно из формы любого документа командой Связанные документы (в старых релизах и в толстом клиенте она называется «Структура подчинённости»). Сама связь — это не отдельная запись в базе, а обычный реквизит-ссылка, чаще всего «Документ-основание».

Отсюда следуют все практические правила. Связь появляется, когда документ создают на основании другого или вручную выбирают основание в поле. Связь пропадает, когда это поле очищают. А движения по регистрам каждый документ пишет сам за себя, независимо от «родителя».

Как устроена связь между документами в базе

В базе 1С нет общей таблицы «кто с кем связан». Каждый документ хранится в своей таблице, а связь — это значение реквизита, которое указывает на другой документ.

Типичные места, где лежит ссылка:

  • 📎 реквизит шапки «Документ-основание» (ДокументОснование в конфигураторе);
  • 📑 реквизиты со смысловыми именами: «Счёт на оплату», «Договор», «Заказ», «Сделка»;
  • 📋 табличная часть со списком оснований — так устроен счёт-фактура выданный в Бухгалтерии 3.0: один счёт-фактура может ссылаться на несколько документов отгрузки;
  • 🔗 реквизит составного типа, который принимает ссылки на документы разных видов.

Есть и связь «по номеру», которая связью не является. Поле «Входящий номер» или текст «по счёту № 15 от 03.02» в комментарии — просто строка. Программа не знает, что за ней стоит документ, и в цепочке его не покажет.

Вид связиПримерВидна в «Связанных документах»Защищает от удаления основания
Ссылка в реквизите шапкиРеализация → Счёт на оплатуДа, если реквизит включён в настройкуДа
Ссылка в табличной частиСчёт-фактура → несколько реализацийДа, если реквизит включён в настройкуДа
Номер или текст«Вх. № 15» в поступленииНетНет
Регистратор движенияЗапись регистра → документНе как связь, а как движенияДа

Последняя колонка важна. Пока на документ кто-то ссылается, обработка удаления помеченных объектов его не удалит, а покажет, что мешает. Это и есть контроль ссылочной целостности.

Ввод на основании: как появляется цепочка связанных документов

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

Что происходит внутри:

  1. Платформа создаёт пустой объект нового документа.
  2. Вызывает в его модуле обработчик ОбработкаЗаполнения и передаёт туда ссылку на основание.
  3. Код обработчика переносит нужные поля и записывает ссылку в реквизит основания.
  4. Пользователь проверяет данные и записывает документ. До записи связи в базе нет.

Цепочка растёт от одного документа к другому. Пример для продажи в Бухгалтерии 3.0:

  • 🧾 Счёт покупателю;
  • 📦 Реализация (акт, накладная, УПД) на основании счёта;
  • 🧮 Счёт-фактура выданный на основании реализации;
  • 💳 Поступление на расчётный счёт — связь с реализацией или счётом идёт через реквизиты расчётов, а не всегда через «основание».

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

Если документ уже создан «с нуля», связь можно добавить позже: откройте его и выберите основание в соответствующем поле. Цепочка обновится сразу после записи.

Проведение: каждый документ отвечает за свои движения

Проведение не наследуется. Реализация, созданная на основании счёта, при проведении пишет движения от своего имени: регистратором в каждой записи регистра стоит сама реализация, а не счёт.

Отсюда три вывода, которые часто путают:

  • ✅ основание не обязано быть проведённым — счёт на оплату в Бухгалтерии 3.0 вообще не формирует проводок;
  • ✅ проводки и движения смотрите у того документа, который их сделал: кнопка ДтКт в форме документа Бухгалтерии 3.0 показывает именно его записи;
  • ✅ если в основании поменяли сумму, подчинённый документ сам не пересчитается — данные были скопированы в момент создания.

Последний пункт ловит многих. Исправили цену в счёте, а реализация по-прежнему со старой суммой. Подчинённый документ нужно открыть, поправить или перезаполнить и провести заново.

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

Отмена проведения, пометка удаления и разрыв связей

Отмена проведения основания не трогает подчинённые документы. Отменили проведение поступления — счёт-фактура полученный и платёжные документы останутся проведёнными со своими движениями. Цепочку при этом никто не «откатывает».

Как ведут себя связанные документы при разных действиях с основанием:

Действие с основаниемЧто происходит со связаннымиЧто проверить
Отмена проведенияОстаются проведённымиВзаиморасчёты, остатки, НДС
Пометка на удалениеСсылки сохраняются, документы живыНужны ли подчинённые без основания
Удаление помеченныхОснование не удалится, пока на него ссылаютсяСписок объектов, мешающих удалению
Очистка поля основания в подчинённомСвязь рвётся только у этого документаНе потеряется ли счёт-фактура
Повторное проведениеПодчинённые не перепроводятсяДаты и последовательность

Правильный порядок, если нужно убрать всю цепочку: идите снизу вверх. Сначала отмените и пометьте на удаление последний документ (счёт-фактуру), потом реализацию, потом счёт. Затем запустите удаление помеченных объектов.

Перед массовым удалением помеченных объектов сделайте резервную копию базы . Удаление необратимо, а в файловой базе обработка ещё и требует, чтобы другие пользователи вышли.

Обработка удаления помеченных есть в Главное меню → Все функции → Стандартные → Удаление помеченных объектов. Если пункта «Все функции» не видно, включите его в Сервис и настройки → Параметры.

Если основание удалили «в обход» — например, прямым удалением без контроля ссылок, — в подчинённых документах вместо названия появится <Объект не найден> с кодом в скобках. Документ продолжает работать, но печатные формы и отчёты могут выводить пустоту там, где раньше был номер счёта.

Как посмотреть связанные документы и разобрать цепочку

Основной инструмент — команда Связанные документы. Её ищут в форме документа на командной панели (иконка с деревом) или в меню Ещё. Открывается дерево: сверху основания, внизу подчинённые, текущий документ выделен.

Что умеет окно связанных документов:

  • 🔍 открыть любой документ цепочки двойным щелчком;
  • 📌 показать признак проведения и пометку удаления у каждого документа;
  • 🔄 перестроить дерево от выбранного документа, чтобы пройти цепочку дальше вверх или вниз.

Когда дерево не показывает то, что ожидали, проверьте вторым способом — поиском ссылок. Команда Главное меню → Все функции → Стандартные → Поиск ссылок на объект находит все объекты, в реквизитах которых указан выбранный документ. Она смотрит шире: ещё и справочники, регистры и документы, которых нет в настройке связанных документов.

Для аналитики по многим документам сразу дерево не годится. Здесь помогает запрос: например, все реализации без счёта-фактуры или все счета без отгрузки. Пример для консоли запросов (имена объектов и реквизитов подставьте из своей конфигурации):

ВЫБРАТЬ
	Счет.Ссылка КАК Счет,
	Счет.Дата,
	Счет.Контрагент
ИЗ
	Документ.СчетНаОплатуПокупателю КАК Счет
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК Реализация
		ПО Реализация.ДокументОснование = Счет.Ссылка
			И Реализация.Проведен
ГДЕ
	НЕ Счет.ПометкаУдаления
	И Реализация.Ссылка ЕСТЬ NULL
УПОРЯДОЧИТЬ ПО
	Счет.Дата

Запрос вернёт счета, по которым нет ни одной проведённой реализации со ссылкой на них. В Бухгалтерии 3.0 похожие проверки уже встроены: в списке счетов на оплату есть состояние оплаты и отгрузки, а для счетов-фактур есть отдельная обработка формирования по документам периода.

Настройка связанных документов в конфигураторе

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

1. Разрешить ввод на основании

Откройте свойства нового (подчинённого) документа, вкладку Ввод на основании. В списке «Вводится на основании» добавьте документы-основания. Флаг «Создавать на основании» в той же группе формирует команду в интерфейсе. Для типового кода там же есть конструктор ввода на основании — он сгенерирует обработчик заполнения.

2. Написать заполнение

Обработчик живёт в модуле объекта подчинённого документа:

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)

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

КонецПроцедуры

Тот же обработчик вызывается, если документ создают кодом: НовыйДок = Документы.РеализацияТоваров.СоздатьДокумент(); НовыйДок.Заполнить(Заказ);. Так ввод на основании одинаково работает и из интерфейса, и из обработок.

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

3. Показать связь в дереве

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

В типовых конфигурациях изменения в критерий отбора и модули документов удобнее вносить через расширение. Тогда обновление типового релиза не сотрёт доработку.

4. Защитить цепочку (по желанию)

Если бизнес-правило запрещает отменять проведение основания, пока есть проведённые подчинённые, проверку делают в модуле основания:

Процедура ОбработкаУдаленияПроведения(Отказ)

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

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

КонецПроцедуры

Имена документов и реквизитов здесь условные. Подставьте свои и проверьте на копии базы.

Почему связь не видна или ведёт себя странно

Диагностика: выберите симптом

Частые вопросы

Можно ли связать документ с основанием, если он уже создан?
Да. Откройте документ и выберите основание в его поле (например, «Документ-основание» или «Счёт»). После записи связь появится в дереве связанных документов.
Можно ли у одного документа несколько оснований?
Если в документе есть табличная часть со списком оснований — да, так устроен счёт-фактура выданный в Бухгалтерии 3.0. Реквизит шапки хранит только одну ссылку.
Влияют ли связанные документы на проводки?
Сама связь — нет. Проводки формирует каждый документ при своём проведении. Основание влияет только на то, какими данными подчинённый документ заполнился.
Переносятся ли связи при обмене между базами?
Да, если в правилах обмена переносятся оба документа и реквизит со ссылкой. Если основание в другую базу не выгружается, в приёмнике в поле окажется пустое значение или «Объект не найден».
Почему «Связанные документы» долго открываются в большой базе?
Дерево строится поиском по реквизитам из критерия отбора. Чем больше документов и реквизитов в его составе, тем дольше поиск. Помогает проверка индексов и удаление из критерия лишних реквизитов.