Почему при изменении табличной части не устанавливается признак модифицированности формы?

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

При разработке механизмов автоматической печати чеков часто возникает необходимость определить, изменились ли данные в документе перед выполнением записи. Многие разработчики сталкиваются с тем, что при редактировании табличной части формы Модифицированность остается в значении Ложь. Давайте разберем, как устроена работа этого механизма и как заставить форму «понимать», что данные были изменены.

Понимание механизма модифицированности

В управляемых формах 1С свойство Модифицированность автоматически управляется платформой. По умолчанию, если элемент управления связан с полем основного объекта (реквизитом типа ДокументОбъект), система самостоятельно фиксирует изменения. Однако, если мы работаем с дополнительными реквизитами, таблицами значений или динамическими списками, эта связь может быть разорвана.

Основная причина, по которой форма «не чувствует» изменений, заключается в настройках свойств данных, привязанных к элементам управления на форме. Давайте рассмотрим пошагово, как это исправить.

Решение 1: Использование свойства «Сохраняемые данные»

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

  1. Откройте форму документа в Конфигураторе.
  2. Перейдите на вкладку Реквизиты.
  3. Найдите тот реквизит, который является источником данных для вашей таблицы (например, ТЧТовары).
  4. В палитре свойств этого реквизита найдите флаг Сохраняемые данные.
  5. Установите этот флаг в значение Истина.

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

Решение 2: Принудительное управление модифицированностью

Если вы выполняете сложные манипуляции с данными программно или стандартные механизмы по каким-то причинам не срабатывают, вы можете управлять признаком напрямую через код. Это полезно в случаях, когда изменение данных в ТЧ происходит не через прямое редактирование ячеек, а через сторонние команды.

Для этого в обработчиках событий изменения элементов формы (например, в событии ПриИзменении для колонок таблицы) необходимо явно менять статус формы:


&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
    // Устанавливаем модифицированность принудительно
    ЭтаФорма.Модифицированность = Истина;
КонецПроцедуры

Используя такой подход, вы даете платформе явную инструкцию, что текущее состояние формы отличается от сохраненного в базе данных, что заставит систему корректно обработать последующие действия пользователя (например, при нажатии кнопки «Провести» или «Печать»).

Рекомендации по реализации проверки перед печатью

Для решения вашей задачи с печатью чеков недостаточно просто знать, что форма «модифицирована». Необходимо также учитывать, были ли изменения существенными для печатной формы. Мы рекомендуем рассмотреть следующие подходы:

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

← На главную