Как добавить или изменить форму документа в УТ 10 через расширение конфигурации?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При работе со старыми конфигурациями, такими как Управление торговлей 10.3, работающими на обычных формах (ОФ), программисты часто сталкиваются с проблемой: при попытке добавить форму документа в расширение визуальный редактор и модуль формы оказываются недоступны для редактирования. Давайте подробно разберем, почему так происходит, и какие существуют методы решения этой задачи, чтобы не снимать основную конфигурацию с поддержки.

Выясняем причину ограничения платформы

Для начала проанализируем ситуацию с точки зрения архитектуры платформы 1С:Предприятие 8.3. Механизм расширений изначально создавался и затачивался под управляемое приложение и управляемые формы. Несмотря на то что современные версии платформы позволяют подключать расширения к старым конфигурациям, существует жесткое ограничение: обычные формы не являются расширяемыми объектами.

Когда мы пытаемся добавить обычную форму в расширение, конфигуратор позволяет создать объект типа Форма, однако он не может инициализировать для нее редактор форм и редактор модуля, так как они технологически не поддерживают работу в слое расширения. Именно поэтому вы видите форму в дереве объектов расширения, но "модуль нельзя открыть".

Проверяем режим совместимости

Прежде чем приступать к реализации обходных путей, нам необходимо убедиться, что база вообще готова к работе с расширениями. Проанализируем настройки основной конфигурации. Для корректной работы расширений режим совместимости должен быть установлен в значение не ниже 8.3.6, а для использования современных аннотаций, таких как &Вместо, &Перед или &После, требуется версия 8.3.10 и выше.

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

Решение №1: Использование управляемых форм в обычном приложении

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

Выполним следующие шаги:

  1. В расширении создадим новую форму документа, но выберем тип Управляемая форма.
  2. В свойствах конфигурации (как в основной, так и в расширении) убедимся, что установлена галочка Использовать управляемые формы в обычном приложении.
  3. Поскольку обычное приложение не «подхватит» новую форму автоматически как основную, нам придется вызвать ее программно.

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


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

Решение №2: Изменение бизнес-логики через модуль объекта

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

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

Например, проанализируем ситуацию, когда нам нужно добавить проверку при записи документа в УТ 10.3 через расширение:


&Перед("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если Не ЗначениеЗаполнено(ЭтотОбъект.Склад) Тогда
        Сообщить("Внимание: Склад не заполнен, но мы разрешим запись для черновика.");
    КонецЕсли;
КонецПроцедуры

Решение №3: Подмена обработчиков через общие модули

Рассмотрим более сложный, но эффективный метод. Если в УТ 10.3 логика работы формы вынесена в Общий модуль (что часто встречается в типовых решениях для процедур заполнения или расчета налогов), мы можем расширить именно этот общий модуль.

Посмотрим на алгоритм действий:

  1. Найдем в модуле формы вызов процедуры из общего модуля.
  2. Добавим этот общий модуль в расширение.
  3. Используем аннотацию &Вместо, чтобы изменить поведение кода, который вызывается из формы.

Таким образом, мы меняем поведение формы, вообще не трогая саму форму в расширении. Это "чистый" способ, позволяющий сохранить типовую конфигурацию в неизменном виде.

Особенности работы с данными: Числа и строки

В процессе обсуждения на форумах часто возникает вопрос о представлении данных, например, влияет ли наличие пробелов в числе (типа 31 000 138) на работу программы. Выясним этот момент, так как он важен при написании кода в расширениях.

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


Если Число1 = 31000138 Тогда
    // Это условие сработает, даже если на форме число отображается как "31 000 138"
КонецЕсли;

Однако будьте внимательны при получении данных из внешних источников (Excel, текстовые файлы). Если вы получаете "31 000 138" как строку, то функция Число() может выдать ошибку или неверный результат из-за неразрывных пробелов. В таких случаях перед преобразованием строки в число необходимо удалять все пробелы символом СтрЗаменить(Стр, Символы.НПП, "").

Заключение и рекомендации

Подведем итог нашему анализу работы расширений в УТ 10.3:

  1. Визуально изменить обычную форму нельзя. Конфигуратор не откроет редактор модуля или формы в расширении.
  2. Новые интерфейсы — только на управляемых формах. Если нужно добавить окно, делайте его управляемым и вызывайте программно через ОткрытьФорму().
  3. Используйте расширение модулей объектов. Почти любую логику, привязанную к событиям формы, можно перехватить на уровне модуля объекта документа или справочника.
  4. Соблюдайте режим совместимости. Убедитесь, что версия платформы и настройки базы позволяют использовать механизм расширений.

Работая таким образом, мы сохраняем возможность легкого обновления УТ 10.3, при этом гибко настраивая систему под нужды бизнеса, используя современные инструменты платформы 1С.

← На главную