При изучении программирования в 1С начинающие разработчики часто сталкиваются с ошибкой Поле объекта не обнаружено при попытке обращения к данным табличной части. Давайте подробно разберем, почему возникает такая ситуация и как правильно реализовать автоматический расчет суммы в строке документа.
Когда вы обращаетесь к коду вида СтрокаТабличнойЧасти.Сумма = ... и получаете сообщение о том, что поле не обнаружено, это чаще всего указывает на одну из следующих проблем:
Чтобы понять, какие именно данные доступны в текущий момент выполнения программы, мы будем использовать отладчик. Это незаменимый инструмент в работе разработчика 1С.
Выполним следующие шаги:
F9) на строке, где происходит обращение к Элементы.Материалы.ТекущиеДанные.СтрокаТабличнойЧасти и нажмем Shift+F9 (вычислить выражение).Сумма там нет — значит, проблема в структуре объекта или обновлении конфигурации.Для корректной работы автоматического расчета нам необходимо разместить код в обработчике события ПриИзменении для полей Количество и Цена. Это обеспечит пересчет суммы при редактировании любого из этих параметров.
Рассмотрим пример кода, который необходимо разместить в модуле формы:
&НаКлиенте
Процедура МатериалыКоличествоПриИзменении(Элемент)
РассчитатьСуммуСтроки();
КонецПроцедуры
&НаКлиенте
Процедура МатериалыЦенаПриИзменении(Элемент)
РассчитатьСуммуСтроки();
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьСуммуСтроки()
ТекущаяСтрока = Элементы.Материалы.ТекущиеДанные;
Если ТекущаяСтрока <> Неопределено Тогда
ТекущаяСтрока.Сумма = ТекущаяСтрока.Количество * ТекущаяСтрока.Цена;
КонецЕсли;
КонецПроцедуры
При написании кода всегда учитывайте контекст выполнения. Элементы.Материалы.ТекущиеДанные возвращает данные текущей строки формы. Обязательно добавляйте проверку на Неопределено, чтобы избежать ошибок, если пользователь по какой-то причине выделил пустую строку или снял выделение.
Также помните о необходимости регулярного обновления конфигурации базы данных (клавиша F7). После каждого добавления новых реквизитов в конфигуратор, платформа должна перестроить физическую структуру таблиц. Без этого действия даже самый правильный код будет выдавать ошибку Поле объекта не обнаружено, так как на уровне СУБД поле еще не существует.
Следуя этим простым правилам и используя возможности отладки, вы сможете быстро локализовать и устранить любую ошибку в ваших разработках!