Как связать новый элемент формы справочника с его реквизитом в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При переходе на платформу 1С:Предприятие 7.7 разработчики часто сталкиваются с ошибкой «Неправильный идентификатор» при попытке настроить форму элемента справочника или документа. Типичная ситуация: разработчик добавляет на форму стандартное поле ввода и пытается прописать в его свойстве «Идентификатор» имя реквизита объекта метаданных. Давайте разберем, почему возникает эта ошибка и как правильно выводить реквизиты объекта на форму диалога.

Выясним причину ошибки «Неправильный идентификатор»

Проанализируем внутреннее устройство платформы 1С 7.7. В отличие от более поздних версий системы (1С 8.х), в «семерке» отсутствует концепция свойства «Данные» или «Путь к данным». В платформе 7.7 реквизиты метаданных объекта (справочника или документа) и реквизиты самого диалога — это принципиально разные сущности:

  1. Реквизиты метаданных уже неявно объявлены в общем пространстве имен модуля формы объекта.
  2. Обычное поле ввода, добавленное вручную на диалог, создает локальную переменную формы диалога.
  3. Попытка присвоить такой локальной переменной идентификатор, в точности совпадающий с именем существующего реквизита справочника, приводит к конфликту имен в модуле. В результате конфигуратор выдает системное предупреждение «Неправильный идентификатор».
  4. Кроме того, ошибка может возникать из-за наличия пробелов в начале или конце имени, использования дефисов или попытки применить системные зарезервированные слова (например, Контекст, Форма, ТекущийЭлемент).

Таким образом, вручную привязать созданное поле ввода к существующему реквизиту через окно свойств невозможно. Способ привязки жестко определяется в момент первоначального добавления элемента на форму.

Основное решение: штатное добавление реквизита на форму

Разберем правильный порядок действий для размещения реквизита на форме справочника.

  1. Удалим с формы ошибочно созданный элемент диалога (обычное поле ввода), который вызвал конфликт.
  2. Убедимся, что нужный реквизит уже создан и сохранен в дереве метаданных в структуре справочника.
  3. Откроем редактор диалога формы справочника.
  4. Воспользуемся главным меню программы: выберем пункт «Вставить» — «Реквизиты».
  5. В открывшемся списке доступных реквизитов выделим необходимый реквизит и нажмем кнопку вставки.

Рассмотрим альтернативный и наиболее быстрый способ вставки — через панель инструментов (тулбар редактора форм):

  1. Найдем внизу панели инструментов визуального редактора выпадающий список или кнопку со списком неразмещенных реквизитов объекта.
  2. Выберем нужный реквизит и перетащим его курсором мыши на поле диалога (или щелкнем на свободное место формы).

Обратим внимание на поведение платформы: при таком способе 1С 7.7 автоматически создает связанную пару элементов — текстовую надпись с синонимом и правильное поле ввода данных, автоматически настроенное на тип, длину и точность реквизита метаданных. Повторно разместить один и тот же реквизит штатным методом платформа не позволит — он исчезнет из списка доступных для вставки.

Альтернативный вариант: программная синхронизация через модуль формы

Иногда требуется использовать именно независимый элемент диалога, не связанный жестко с базой данных (например, для сложной предварительной проверки данных, реализации пользовательских масок ввода или временных расчетов). В таком случае связь между элементом диалога и реквизитом справочника реализуется программно.

Разберем по шагам, как настроить такую схему:

  1. Создадим на форме справочника обычное поле ввода.
  2. В свойствах элемента зададим уникальный идентификатор, не совпадающий с реквизитами справочника, например: ВремЗначениеРеквизита.
  3. Откроем модуль формы справочника и свяжем значение переменной диалога с реквизитом при открытии и сохранении объекта.

Посмотрим на пример программного кода в модуле формы:


Процедура ПриОткрытии()
    // Считываем значение из реквизита справочника в элемент диалога
    ВремЗначениеРеквизита = ИмяРеквизита;
КонецПроцедуры

Процедура ПриЗаписи()
    // Передаем измененное значение обратно в реквизит объекта перед записью
    ИмяРеквизита = ВремЗначениеРеквизита;
КонецПроцедуры

Если же поле предназначено исключительно для вывода информационных или расчетных показателей без непосредственного редактирования пользователем в базе, рекомендуется использовать элемент формы типа «Текст», указав в поле «Формула» имя соответствующей функции или переменной модуля формы.

← На главную