Почему «Форма.Прочитать()» в ERP рабочий, если кажется некорректным?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Почему «Форма.Прочитать()» в ERP рабочий, если кажется некорректным?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #38368
      Фото аватараOdineski
      Участник

        В штатной ERP ОбщийМодуль.ДействияСогласованиеУХКлиент 5 раз встречается Форма.Прочитать() разве этот код рабочий? и почему тогда он до сих пор в ERP

      • #38369
        bot_avaOdin — Одинэсник
        Участник

          В ERP (например, в типовой конфигурации 1С:ERP Управление предприятием) в общем модуле с клиентским контекстом (ОбщийМодуль.ДействияСогласованиеУХКлиент) действительно можно встретить вызовы вида:

          |Форма.Прочитать()

          Это выглядит странно, потому что объект Форма — это обычно переменная, указывающая на экземпляр формы, а не глобальный объект. Если в коде просто стоит «Форма.Прочитать()», без предварительного присвоения или получения объекта формы, то такой вызов должен приводить к ошибке.

          Почему же этот код «рабочий» и почему он до сих пор в ERP?

          1. Контекст исполнения и область видимости
          В общем модуле с директивой &НаКлиенте, как правило, есть локальная переменная или параметр с именем «Форма», которая передается в процедуры или функции. В таком случае «Форма.Прочитать()» — это вызов метода объекта формы, который реально существует в контексте вызова. Если же «Форма» не определена, то будет ошибка.

          2. Код может быть частью шаблона или заготовки
          Иногда в типовых модулях встречаются участки кода, которые вызываются только в определенных условиях, где «Форма» гарантированно определена. В других случаях этот код может быть «заглушкой» или устаревшим, но оставленным для обратной совместимости.

          3. Использование в обработчиках событий формы
          В некоторых случаях общий модуль вызывается из модуля формы, где «Форма» — это ссылка на текущую форму, передаваемая в параметры. Тогда вызов «Форма.Прочитать()» корректен.

          4. Платформа 1С допускает динамическое разрешение имен
          Если в момент вызова «Форма» — это объект формы, то метод «Прочитать()» существует и вызывается. Если нет — будет ошибка. В типовой конфигурации такие вызовы обычно защищены проверками или вызываются в контексте, где «Форма» определена.

          5. Почему не удалили?
          — Код может быть частью сложной логики, где «Форма» передается явно или неявно.
          — Удаление или изменение кода может повлиять на совместимость или вызвать ошибки в других местах.
          — Разработчики ERP часто оставляют такие вызовы, чтобы обеспечить гибкость и возможность расширения.

          Если хотите проверить, где именно вызывается «Форма.Прочитать()» и как определяется «Форма», посмотрите модуль на предмет параметров процедур или локальных переменных с таким именем.

          Пример:

          |Процедура НекотораяПроцедура(Форма)
          | Форма.Прочитать();
          |КонецПроцедуры

          Если «Форма» — параметр, то вызов корректен.

          Если же вызов стоит в общем модуле без контекста, то это ошибка или устаревший код.

          Итог:
          Код с «Форма.Прочитать()» в общем модуле ERP рабочий, если «Форма» — это объект формы, переданный в процедуру или определенный локально. Он не удален, потому что используется в контексте, где «Форма» существует, либо для обратной совместимости.

          Рекомендую открыть модуль и посмотреть, как именно определяется «Форма» в местах вызова «Форма.Прочитать()». Это даст точный ответ по конкретному случаю.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С