Динамическая модификация форм в расширении

05.04.21

Разработка - Механизмы платформы 1С

Пример динамического изменения форм расширением конфигурации без заимствования формы.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
(только для физ. лиц)
Динамическая модификация форм в расширении :
.cfe 5,70Kb
1 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

Рассмотрим такое решение на конкретном примере. ( Управление предприятием ERP 2.4. )

От производства поступила заявка - в  АРМ  "Выполнение этапов"  добавить колонку с указанием получателя   продукции. Стандартными средствами программы настроить такой вывод нельзя, нужные данные находятся в табличной части "Выходные изделия"  документа "Этап производства". Для решения задачи требуется модификация динамического списка формы. Вносить изменения в основную конфигурацию не хочется , а с применением расширения  необходимо добавить  форму и зависимые объекты, что тоже, в перспективе обновления релизов, несет потенциальные проблемы. 

Рассмотрим вариант динамического изменения формы нашей обработки. В процедуре ПриСозданииНаСервере() модуля формы присутствует вызов методов из общих  модулей, в том числе цепочка серверных вызовов с передачей в качестве параметра  нашей формы.

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

Итак, для решения задачи нужно создать расширение, добавить  в него общий модуль МодификацияКонфигурацииПереопределяемый и разместить  процедуру:

&После("ПриСозданииНаСервере")

Процедура Расш1_ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
    Если Форма.ИмяФормы = "Обработка.ВыполнениеЭтаповПроизводства.Форма.Форма" Тогда
        
    // Изменение запроса динамического списка модифицируемой формы
    // Добавление вложенного запроса, выполняющего выборку данных ("Получатель")из
    // ТЧ "ВыходныеИзделия"
    
        Форма.Список.ТекстЗапроса= СтрЗаменить(Форма.Список.ТекстЗапроса,
        
        "Документ.ЭтапПроизводства2_2 КАК ЭтапыПереопределяемый",
        
        "Документ.ЭтапПроизводства2_2 КАК ЭтапыПереопределяемый
        |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
        |            ВыходныеИзделия.Ссылка КАК Ссылка,
        |            ВыходныеИзделия.Получатель КАК Получатель
        |        ИЗ
        |            Документ.ЭтапПроизводства2_2.ВыходныеИзделия КАК ВыходныеИзделия
        |        ГДЕ ВыходныеИзделия.НомерСтроки =1 )
        | КАК ВложенныйЗапрос
        |    ПО ЭтапыПереопределяемый.Ссылка = ВложенныйЗапрос.Ссылка
        |"
        );
        
        Форма.Список.ТекстЗапроса= СтрЗаменить(Форма.Список.ТекстЗапроса,
        
        "ЭтапыПереопределяемый.Распоряжение.Очередь КАК ОчередьРаспоряжения",
        
        "ЭтапыПереопределяемый.Распоряжение.Очередь КАК ОчередьРаспоряжения,
        |    ВложенныйЗапрос.Получатель КАК Получатель");

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

В результате получаем отображение формы с требуемым результатом.

 

Прилагаемое к публикации расширение содержит опубликованный выше код, тестировалось на конфигурации 1C:ERP Управление предприятием  2.4.11.43.

Вступайте в нашу телеграмм-группу Инфостарт

УФ расширение ERP программирование обновление модификация

См. также

Механизмы платформы 1С Работа с интерфейсом Программист Стажер 1С v8.3 Бесплатно (free)

Про ООП в 1С и о том, как сделать свой код более кратким и выразительным при помощи использования текучего интерфейса (fluent interface).

03.02.2025    8887    bayselonarrend    126    

63

Механизмы платформы 1С Программист 1С v8.3 Бесплатно (free)

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    13498    dsdred    73    

118

Механизмы платформы 1С Программист Стажер 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    16548    bayselonarrend    21    

166

Механизмы платформы 1С Программист Стажер 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    9533    dsdred    18    

83

Механизмы платформы 1С Программист Стажер 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    35826    YA_418728146    35    

75
Оставьте свое сообщение