Как реализовать автоматический вывод реквизита справочника на форму в 1С 7.7

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

При разработке интерфейсов в среде 1С:Предприятие 7.7 часто возникает задача динамического обновления данных. Типичный сценарий: пользователь выбирает в поле ввода контрагента, сотрудника или исполнителя, и система должна мгновенно отобразить в соседнем поле связанные данные, например, фамилию руководителя, ИНН или юридический адрес. В отличие от версии 8.х, где существуют события "ПриИзменении", в 7.7 механизм взаимодействия с формой строится на свойствах "Формула". Проанализируем, как это сделать правильно и эффективно.

Метод 1: Использование программной процедуры в поле ввода

Рассмотрим основной способ решения задачи, который подходит в тех случаях, когда полученное значение (например, фамилию директора) нужно не только показать, но и, возможно, сохранить в дальнейшем или дать пользователю возможность его отредактировать. Разберем по шагам алгоритм настройки:

  1. Откроем форму отчета или документа в конфигураторе.
  2. Найдем реквизит, в который пользователь выбирает значение (например, Исполнитель с типом Справочник.Исполнители).
  3. Зайдем в свойства этого поля ввода, перейдем на закладку "Дополнительно".
  4. В поле "Формула" впишем имя процедуры, которая будет вызываться при каждом изменении значения, например: ПриВыбореИсполнителя().
  5. Перейдем в модуль формы и опишем эту процедуру.

Проанализируем правильный код для этой процедуры. Важно понимать, что нам не нужно заново создавать объект справочника через СоздатьОбъект, так как выбранный элемент уже доступен через имя реквизита формы.


Процедура ПриВыбореИсполнителя()
    // Проверяем, выбрано ли значение в поле Исполнитель
    Если Исполнитель.Выбран() = 1 Тогда
        // Присваиваем реквизиту формы "Директор" значение из справочника
        Директор = Исполнитель.Директор;
    Иначе
        // Если исполнитель не выбран, очищаем поле директора
        Директор = "";
    КонецЕсли;
    
    // Принудительно обновляем форму, чтобы данные отобразились сразу
    Форма.Обновить(0);
КонецПроцедуры

Выясним причину, по которой иногда поле остается пустым даже после выполнения кода. В 1С 7.7 переменные на форме могут не перерисовываться мгновенно. Использование команды Форма.Обновить(0) гарантирует, что пользователь сразу увидит изменения в интерфейсе.

Метод 2: Автоматический вывод через текстовый элемент (без кода в модуле)

Если нам нужно просто показать фамилию директора для справки (без возможности редактирования этого поля прямо на форме), мы можем воспользоваться "легким" способом. Этот метод не требует написания кода в модуле и работает быстрее.

Рассмотрим алгоритм реализации:

  1. Разместим на форме элемент типа "Текст" (не путать с полем ввода).
  2. В свойствах текста на закладке "Дополнительно" найдем поле "Формула".
  3. Впишем туда выражение, которое будет вычисляться автоматически.

Посмотрим на пример формулы, которую можно использовать в текстовом поле:

?(Исполнитель.Выбран() = 1, Исполнитель.Директор, "Исполнитель не выбран")

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

Метод 3: Работа с периодическими реквизитами

В типовых конфигурациях 1С 7.7 (например, "Бухгалтерия" или "ЗиК") такие данные, как "Директор" или "Оклад", часто являются периодическими. Это означает, что их значение зависит от даты. Если мы просто напишем Исполнитель.Директор, система вернет значение на текущую рабочую дату. Однако в отчетах или документах нам часто нужно знать, кто был директором на конкретную дату в прошлом.

Рассмотрим подробнее, как получить данные на нужную дату. Для этого используется метод Получить(Дата):


Процедура ПриВыбореИсполнителя()
    Если Исполнитель.Выбран() = 1 Тогда
        // Предположим, у нас на форме есть реквизит ДатаДок или ДатаОтчета
        НужнаяДата = РабочаяДата(); // или ДатаДок
        Директор = Исполнитель.Директор.Получить(НужнаяДата);
    Иначе
        Директор = "";
    КонецЕсли;
КонецПроцедуры

Важно помнить: если попытаться вызвать метод Получить() у обычного (не периодического) реквизита, программа выдаст ошибку. Поэтому перед написанием кода обязательно проверьте свойства реквизита в Конфигураторе.

Типичные ошибки и нюансы

Проанализируем ситуацию, с которой часто сталкиваются начинающие разработчики. Попытка использовать СоздатьОбъект("Справочник.Исполнители") внутри процедуры обновления формы — это избыточное действие. Когда пользователь выбирает элемент в поле ввода Исполнитель, в этой переменной уже содержится ссылка на объект. Мы можем обращаться к его реквизитам напрямую через точку.

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

Подведем итог: для реализации автоматического вывода реквизитов в 1С 7.7 достаточно связать поле выбора с процедурой через "Формулу" или использовать вычисляемое текстовое поле. Выбор метода зависит от того, требуется ли дальнейшее редактирование выводимых данных пользователем.

← На главную