При разработке механизмов автоматической печати чеков часто возникает необходимость определить, изменились ли данные в документе перед выполнением записи. Многие разработчики сталкиваются с тем, что при редактировании табличной части формы Модифицированность остается в значении Ложь. Давайте разберем, как устроена работа этого механизма и как заставить форму «понимать», что данные были изменены.
В управляемых формах 1С свойство Модифицированность автоматически управляется платформой. По умолчанию, если элемент управления связан с полем основного объекта (реквизитом типа ДокументОбъект), система самостоятельно фиксирует изменения. Однако, если мы работаем с дополнительными реквизитами, таблицами значений или динамическими списками, эта связь может быть разорвана.
Основная причина, по которой форма «не чувствует» изменений, заключается в настройках свойств данных, привязанных к элементам управления на форме. Давайте рассмотрим пошагово, как это исправить.
Это самый правильный и «чистый» способ решения задачи в рамках архитектуры управляемых форм. Платформа предоставляет возможность явно указать, что изменения в конкретном реквизите формы должны приводить к установке признака Модифицированность.
ТЧТовары).После включения этой опции любое интерактивное изменение в табличной части, привязанной к этому реквизиту, будет автоматически переводить форму в состояние модифицированности. Платформа будет считать, что объект требует сохранения.
Если вы выполняете сложные манипуляции с данными программно или стандартные механизмы по каким-то причинам не срабатывают, вы можете управлять признаком напрямую через код. Это полезно в случаях, когда изменение данных в ТЧ происходит не через прямое редактирование ячеек, а через сторонние команды.
Для этого в обработчиках событий изменения элементов формы (например, в событии ПриИзменении для колонок таблицы) необходимо явно менять статус формы:
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
// Устанавливаем модифицированность принудительно
ЭтаФорма.Модифицированность = Истина;
КонецПроцедуры
Используя такой подход, вы даете платформе явную инструкцию, что текущее состояние формы отличается от сохраненного в базе данных, что заставит систему корректно обработать последующие действия пользователя (например, при нажатии кнопки «Провести» или «Печать»).
Для решения вашей задачи с печатью чеков недостаточно просто знать, что форма «модифицирована». Необходимо также учитывать, были ли изменения существенными для печатной формы. Мы рекомендуем рассмотреть следующие подходы:
ДанныеБылиИзменены. Устанавливайте её в Истина в обработчиках событий изменения строк.Комбинируя использование свойства Сохраняемые данные с явной проверкой состояния реквизитов, вы сможете добиться максимально надежной работы механизма печати чеков, исключая лишние действия кассира и дублирование документов в регистре сведений.