Цепочки документов в 1С 8.3: откуда берутся связи, что рвёт их и как их построить в конфигурации
Содержание
Связанные документы в 1С 8.3 — это документы, у которых в реквизитах есть ссылка друг на друга: счёт → реализация → счёт-фактура, заказ → поступление → оплата. Посмотреть цепочку можно из формы любого документа командой Связанные документы (в старых релизах и в толстом клиенте она называется «Структура подчинённости»). Сама связь — это не отдельная запись в базе, а обычный реквизит-ссылка, чаще всего «Документ-основание».
Отсюда следуют все практические правила. Связь появляется, когда документ создают на основании другого или вручную выбирают основание в поле. Связь пропадает, когда это поле очищают. А движения по регистрам каждый документ пишет сам за себя, независимо от «родителя».
Как устроена связь между документами в базе
В базе 1С нет общей таблицы «кто с кем связан». Каждый документ хранится в своей таблице, а связь — это значение реквизита, которое указывает на другой документ.
Типичные места, где лежит ссылка:
- 📎 реквизит шапки «Документ-основание» (
ДокументОснованиев конфигураторе); - 📑 реквизиты со смысловыми именами: «Счёт на оплату», «Договор», «Заказ», «Сделка»;
- 📋 табличная часть со списком оснований — так устроен счёт-фактура выданный в Бухгалтерии 3.0: один счёт-фактура может ссылаться на несколько документов отгрузки;
- 🔗 реквизит составного типа, который принимает ссылки на документы разных видов.
Есть и связь «по номеру», которая связью не является. Поле «Входящий номер» или текст «по счёту № 15 от 03.02» в комментарии — просто строка. Программа не знает, что за ней стоит документ, и в цепочке его не покажет.
| Вид связи | Пример | Видна в «Связанных документах» | Защищает от удаления основания |
|---|---|---|---|
| Ссылка в реквизите шапки | Реализация → Счёт на оплату | Да, если реквизит включён в настройку | Да |
| Ссылка в табличной части | Счёт-фактура → несколько реализаций | Да, если реквизит включён в настройку | Да |
| Номер или текст | «Вх. № 15» в поступлении | Нет | Нет |
| Регистратор движения | Запись регистра → документ | Не как связь, а как движения | Да |
Последняя колонка важна. Пока на документ кто-то ссылается, обработка удаления помеченных объектов его не удалит, а покажет, что мешает. Это и есть контроль ссылочной целостности.
Ввод на основании: как появляется цепочка связанных документов
Самый частый способ связать документы
— создать новый на основании существующего. В форме документа или в списке нажмите Создать на основании и выберите вид нового документа. Программа откроет его уже заполненным: контрагент, договор, товары, суммы и ссылка на основание.
Что происходит внутри:
- Платформа создаёт пустой объект нового документа.
- Вызывает в его модуле обработчик
ОбработкаЗаполненияи передаёт туда ссылку на основание. - Код обработчика переносит нужные поля и записывает ссылку в реквизит основания.
- Пользователь проверяет данные и записывает документ. До записи связи в базе нет.
Цепочка растёт от одного документа к другому. Пример для продажи в Бухгалтерии 3.0:
- 🧾 Счёт покупателю;
- 📦 Реализация (акт, накладная, УПД) на основании счёта;
- 🧮 Счёт-фактура выданный на основании реализации;
- 💳 Поступление на расчётный счёт — связь с реализацией или счётом идёт через реквизиты расчётов, а не всегда через «основание».
Вид документа появляется в меню Создать на основании только тогда, когда разработчик разрешил такой ввод. Если нужного пункта нет, это не сбой, а настройка конфигурации — о ней ниже.
Если документ уже создан «с нуля», связь можно добавить позже: откройте его и выберите основание в соответствующем поле. Цепочка обновится сразу после записи.
Проведение: каждый документ отвечает за свои движения
Проведение не наследуется. Реализация, созданная на основании счёта, при проведении пишет движения от своего имени: регистратором в каждой записи регистра стоит сама реализация, а не счёт.
Отсюда три вывода, которые часто путают:
- ✅ основание не обязано быть проведённым — счёт на оплату в Бухгалтерии 3.0 вообще не формирует проводок;
- ✅ проводки и движения смотрите у того документа, который их сделал: кнопка
ДтКтв форме документа Бухгалтерии 3.0 показывает именно его записи; - ✅ если в основании поменяли сумму, подчинённый документ сам не пересчитается — данные были скопированы в момент создания.
Последний пункт ловит многих. Исправили цену в счёте, а реализация по-прежнему со старой суммой. Подчинённый документ нужно открыть, поправить или перезаполнить и провести заново.
Часть конфигураций проверяет состояние основания при проведении. Например, не даёт провести документ , если основание помечено на удаление. Такие проверки пишет разработчик, сама платформа их не навязывает.
Отмена проведения, пометка удаления и разрыв связей
Отмена проведения основания не трогает подчинённые документы. Отменили проведение поступления — счёт-фактура полученный и платёжные документы останутся проведёнными со своими движениями. Цепочку при этом никто не «откатывает».
Как ведут себя связанные документы при разных действиях с основанием:
| Действие с основанием | Что происходит со связанными | Что проверить |
|---|---|---|
| Отмена проведения | Остаются проведёнными | Взаиморасчёты, остатки, НДС |
| Пометка на удаление | Ссылки сохраняются, документы живы | Нужны ли подчинённые без основания |
| Удаление помеченных | Основание не удалится, пока на него ссылаются | Список объектов, мешающих удалению |
| Очистка поля основания в подчинённом | Связь рвётся только у этого документа | Не потеряется ли счёт-фактура |
| Повторное проведение | Подчинённые не перепроводятся | Даты и последовательность |
Правильный порядок, если нужно убрать всю цепочку: идите снизу вверх. Сначала отмените и пометьте на удаление последний документ (счёт-фактуру), потом реализацию, потом счёт. Затем запустите удаление помеченных объектов.
Перед массовым удалением помеченных объектов сделайте резервную копию базы . Удаление необратимо, а в файловой базе обработка ещё и требует, чтобы другие пользователи вышли.
Обработка удаления помеченных есть в Главное меню → Все функции → Стандартные → Удаление помеченных объектов. Если пункта «Все функции» не видно, включите его в Сервис и настройки → Параметры.
Если основание удалили «в обход» — например, прямым удалением без контроля ссылок, — в подчинённых документах вместо названия появится <Объект не найден> с кодом в скобках. Документ продолжает работать, но печатные формы и отчёты могут выводить пустоту там, где раньше был номер счёта.
Как посмотреть связанные документы и разобрать цепочку
Основной инструмент — команда Связанные документы. Её ищут в форме документа на командной панели (иконка с деревом) или в меню Ещё. Открывается дерево: сверху основания, внизу подчинённые, текущий документ выделен.
Что умеет окно связанных документов:
- 🔍 открыть любой документ цепочки двойным щелчком;
- 📌 показать признак проведения и пометку удаления у каждого документа;
- 🔄 перестроить дерево от выбранного документа, чтобы пройти цепочку дальше вверх или вниз.
Когда дерево не показывает то, что ожидали, проверьте вторым способом — поиском ссылок. Команда Главное меню → Все функции → Стандартные → Поиск ссылок на объект находит все объекты, в реквизитах которых указан выбранный документ. Она смотрит шире: ещё и справочники, регистры и документы, которых нет в настройке связанных документов.
Для аналитики по многим документам сразу дерево не годится. Здесь помогает запрос: например, все реализации без счёта-фактуры или все счета без отгрузки. Пример для консоли запросов (имена объектов и реквизитов подставьте из своей конфигурации):
ВЫБРАТЬ
Счет.Ссылка КАК Счет,
Счет.Дата,
Счет.Контрагент
ИЗ
Документ.СчетНаОплатуПокупателю КАК Счет
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК Реализация
ПО Реализация.ДокументОснование = Счет.Ссылка
И Реализация.Проведен
ГДЕ
НЕ Счет.ПометкаУдаления
И Реализация.Ссылка ЕСТЬ NULL
УПОРЯДОЧИТЬ ПО
Счет.Дата
Запрос вернёт счета, по которым нет ни одной проведённой реализации со ссылкой на них. В Бухгалтерии 3.0 похожие проверки уже встроены: в списке счетов на оплату есть состояние оплаты и отгрузки, а для счетов-фактур есть отдельная обработка формирования по документам периода.
Настройка связанных документов в конфигураторе
Разработчику нужно настроить три вещи: какие документы вводятся на основании, как они заполняются и какие связи видны пользователю.
1. Разрешить ввод на основании
Откройте свойства нового (подчинённого) документа, вкладку Ввод на основании. В списке «Вводится на основании» добавьте документы-основания. Флаг «Создавать на основании» в той же группе формирует команду в интерфейсе. Для типового кода там же есть конструктор ввода на основании — он сгенерирует обработчик заполнения.
2. Написать заполнение
Обработчик живёт в модуле объекта подчинённого документа:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
ДокументОснование = ДанныеЗаполнения;
Контрагент = ДанныеЗаполнения.Контрагент;
Договор = ДанныеЗаполнения.Договор;
Для Каждого СтрокаЗаказа Из ДанныеЗаполнения.Товары Цикл
НоваяСтрока = Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаЗаказа);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Тот же обработчик вызывается, если документ создают кодом: НовыйДок = Документы.РеализацияТоваров.СоздатьДокумент(); НовыйДок.Заполнить(Заказ);. Так ввод на основании одинаково работает и из интерфейса, и из обработок.
При копировании документа реквизит основания копируется вместе с остальными. Если копия не должна наследовать связь, очистите его в обработчике ПриКопировании.
3. Показать связь в дереве
Чтобы документ появлялся в окне связанных документов, его реквизит со ссылкой должен входить в общий критерий отбора СвязанныеДокументы. Откройте ветку Критерии отбора в дереве конфигурации, свойство «Состав» и отметьте реквизиты. Включаемые реквизиты должны быть проиндексированы — без индекса конфигуратор не даст добавить реквизит
в критерий отбора.
В типовых конфигурациях изменения в критерий отбора и модули документов удобнее вносить через расширение. Тогда обновление типового релиза не сотрёт доработку.
4. Защитить цепочку (по желанию)
Если бизнес-правило запрещает отменять проведение основания, пока есть проведённые подчинённые, проверку делают в модуле основания:
Процедура ОбработкаУдаленияПроведения(Отказ)
Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1
| Реализация.Ссылка
|ИЗ
| Документ.РеализацияТоваров КАК Реализация
|ГДЕ
| Реализация.ДокументОснование = &Основание
| И Реализация.Проведен");
Запрос.УстановитьПараметр("Основание", Ссылка);
Если НЕ Запрос.Выполнить().Пустой() Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Есть проведённая реализация по этому заказу. Сначала отмените её проведение.";
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Имена документов и реквизитов здесь условные. Подставьте свои и проверьте на копии базы.