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