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