При разработке или модификации конфигураций на платформе 1С:Предприятие 7.7 программисты часто сталкиваются с системным сообщением "Неверное имя реквизита". Эта ошибка может возникать как в момент открытия формы документа, так и при выполнении определенных действий, например, при нажатии на кнопки или пересчете табличной части. Особенность данной ошибки в 7.7 заключается в том, что система не всегда указывает на конкретную строку кода, что затрудняет диагностику.
В этой статье мы подробно разберем, почему возникает данная проблема, проанализируем типичные ошибки при написании кода и выясним, как правильно синхронизировать визуальные элементы формы с программным модулем.
Проанализируем ситуацию: вы добавили новые реквизиты в табличную часть документа (например, СтавкаНДС, СуммаБНДС и СуммаСНДС) и написали процедуру их пересчета. Однако при попытке изменения значений в колонках программа выдает ошибку. В 90% случаев это происходит потому, что имя реквизита в метаданных и идентификатор элемента на форме различаются.
Рассмотрим пример кода, который часто становится источником проблемы:
Процедура Перерасчет()
Если (Форма.ТекущаяКолонка() = "СтавкаНДС") Тогда
НДС = ОКР(СуммаБНДС * СтавкаНДС.Ставка / 100,2);
СуммаСНДС = СуммаБНДС + НДС;
ИначеЕсли Форма.ТекущаяКолонка() = "СуммаБНДС" Тогда
НДС = ОКР(СуммаБНДС * СтавкаНДС.Ставка / 100,2);
СуммаСНДС = СуммаБНДС + НДС;
КонецЕсли;
КонецПроцедуры
В данном фрагменте метод ТекущаяКолонка() возвращает строковый идентификатор колонки, который задан в свойствах элемента формы. Если в конфигураторе для колонки «Ставка НДС» в поле «Идентификатор» написано Ставка, а в коде вы проверяете "СтавкаНДС", система может не выдать ошибку сразу, но при попытке обращения к СтавкаНДС.Ставка она «споткнется», если реквизита с таким именем не существует в контексте формы.
Чтобы устранить ошибку, нам необходимо выполнить тщательную ревизию формы. Рассмотрим этот процесс по шагам:
Форма.Еще один важный момент связан с определением типов данных. Рассмотрим ситуацию, когда вы добавляете реквизит типа «Справочник». Если в свойствах реквизита указан просто общий тип Справочник без уточнения его вида (например, Справочник.СтавкиНДС), система может некорректно обрабатывать обращение к его атрибутам через точку.
Проанализируем пример:
Если СтавкаНДС определена как неопределенный справочник, то конструкция СтавкаНДС.Ставка может вызвать ошибку, так как система «не знает», есть ли у выбранного элемента справочника реквизит Ставка до момента фактического обращения. Всегда старайтесь указывать конкретный вид справочника в метаданных.
Часто ошибка "Неверное имя реквизита" прячется в поле «Формула». В 1С 7.7 текстовые поля на форме или колонки могут содержать исполняемый код или имена функций. Выясним, на что стоит обратить внимание:
Если вы переименовали реквизит в дереве метаданных, 1С не обновит его имя в поле «Формула» на форме автоматически. Вам нужно вручную просмотреть свойства всех элементов (особенно текстовых полей, выводящих итоги) и обновить там устаревшие имена. Также проверьте, что все функции, указанные в формулах колонок, существуют в модуле формы и их имена написаны без ошибок.
В старых конфигурациях 7.7 крайне распространена проблема «смешанных» алфавитов. Визуально буквы «С» (русская) и «C» (английская) идентичны, но для компилятора это абсолютно разные символы. Проанализируем ситуацию: если в идентификаторе формы используется латинская «C», а в коде модуля — русская, вы гарантированно получите ошибку «Неверное имя реквизита».
Совет: Если вы не можете найти визуальную ошибку, попробуйте полностью стереть идентификатор в свойствах формы и имя в коде, после чего заново переписать их, используя только одну раскладку клавиатуры (желательно русскую для кириллических конфигураций).
Рассмотрим еще одну распространенную ситуацию. Ошибка может возникать при попытке обратиться к реквизиту табличной части из процедуры, которая не понимает текущую строку. Или наоборот — при обращении к реквизиту шапки, когда имя совпадает с именем колонки.
Посмотрим на этот пример кода в процедуре ПриОткрытии():
Процедура ПриОткрытии()
// Попытка программного управления элементом формы
Форма.КоррСчет.ВыборГруппы(0);
// Если элемента с Идентификатором "КоррСчет" нет на форме,
// будет выдана ошибка "Неверное имя реквизита"
КонецПроцедуры
Если в коде присутствует Форма.ИмяЭлемента, то на форме обязательно должен быть элемент с таким Идентификатором (не путать с именем реквизита в конфигурации). Если вы используете слои (Форма.ИспользоватьСлой), убедитесь, что элемент, к которому вы обращаетесь, существует на активном слое или является общим.
Для исправления ошибки "Неверное имя реквизита" в 1С 7.7 мы рекомендуем придерживаться следующего алгоритма:
Идентификатор на форме = Имя в коде.Данные элемента формы выбран существующий реквизит метаданных.Применяя эти методы, вы сможете быстро локализовать и устранить причину сбоя, обеспечив стабильную работу документа «Авансовый отчет» или любого другого объекта конфигурации.