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