Как сделать, чтобы один документ проводился только после другого документа?

Программист 1С v8.3 (Управляемые формы) Управленческий учет Промышленность, строительство и АПК
← На главную

При разработке учетных систем на платформе 1С часто возникает бизнес-задача: соблюдение строгой хронологии или логической последовательности действий. Например, документ Работы по вагону не может быть проведен, если документ Приемка вагона еще не проведен или отсутствует. Давайте разберем, какими способами можно реализовать такое ограничение.

Метод 1: Программная проверка в модуле объекта

Это самый оперативный способ решения задачи. Мы можем внедрить проверку непосредственно в событие ОбработкаПроведения. Логика заключается в том, чтобы проверить состояние реквизита, содержащего ссылку на документ-основание, и при необходимости установить параметр Отказ в значение Истина.

Рассмотрим пример реализации:


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

Важное примечание: Старайтесь избегать попыток принудительного проведения документа-основания прямо из процедуры проведения текущего документа. Это может привести к рекурсивным вызовам и серьезным проблемам с блокировками данных в транзакции. Лучше информировать пользователя о необходимости ручного проведения основания.

Метод 2: Использование подписки на событие

Если документов, требующих контроля, много, или вы хотите централизовать логику, чтобы не менять код каждого объекта, воспользуйтесь Подписками на события. Вы можете создать подписку на событие ОбработкаПроведения для группы документов.

  1. Создайте новую подписку на событие в конфигураторе.
  2. В качестве источника выберите документы, которые нужно контролировать (например, РаботыПоВагону).
  3. Укажите обработчик, в котором пропишите логику проверки состояния документа-основания.

Этот подход делает систему более гибкой и позволяет управлять бизнес-логикой из одного места, не затрагивая модули самих объектов.

Метод 3: Использование механизмов последовательностей

Если задача требует строгого хронологического учета, штатный механизм Последовательности является наиболее профессиональным архитектурным решением. Он позволяет платформе 1С автоматически отслеживать нарушение хронологии.

Когда вы включаете документы в Последовательность:

Рекомендации по реализации

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

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

← На главную