Динамические данные формы

10.02.12

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

В 1С можно создавать новые элементы управления. Но нельзя создавать для них новые реквизиты формы. Поэтому удобство работы с новыми элементами управления существенно ниже. Однако существует хитрый метод добавления любого количества реквизитов в форму.

Файлы

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

Наименование Скачано Купить файл
down.zip
.zip 6,38Kb
21 2 500 руб. Купить

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

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

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

 

Для этого используется объект Построитель. В форму добавляется единственный реквизит с типом построитель, назовем его, например, ДинамическиеДанные. В поле ДинамическиеДанные.Отбор можно добавлять любое число реквизитов, и использовать их в качестве данных для новых элементов управления. Реквизиты могут быть произвольного типа, причем содержать даже такие экзотические типы, как Форма или ЭлементУправления.

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

В результате работы обработки в Поле2 проставляется путь к данным Данные1, ссылающимся на Поле1 через Форму, а в Поле3 и в Поле4 устанавливается одинаковый путь к данным Данные2. Соответственно, в Поле1 и Поле2, в Поле3 и Поле4 выводятся одинаковые данные.

Библиотека выглядит так:

//fixin 20081124
//Функция позволяет добавить новые данные в форму
Функция ДобавитьДинамическиеДанныеПоЗначению(Форма, ИмяРеквизитаДД = "ДинамическиеДанные", ИмяДанных, Значение) Экспорт
    
    //Определяем тип значения
    Т = ТипЗнч(Значение);
    МТ = Новый Массив();
    МТ.Добавить(Т);
    ОписаниеТипов = Новый ОписаниеТипов(МТ);
    ТекОтбор = ДобавитьДинамическиеДанныеПоТипу(Форма, ИмяРеквизитаДД, ИмяДанных, ОписаниеТипов);
    ТекОтбор.Значение = Значение;
    
    Возврат ТекОтбор;
    
КонецФункции

Функция ДобавитьДинамическиеДанныеПоТипу(Форма, ИмяРеквизитаДД = "ДинамическиеДанные", ИмяДанных, ОписаниеТипов) Экспорт
    
    //Сначала добавляем в поля
    ТекПоляПостроителя = Форма[ИмяРеквизитаДД].ДоступныеПоля;
    ТекПоле = ТекПоляПостроителя.Найти(ИмяДанных);
    Если ТекПоле <> Неопределено Тогда
        //Если поле есть, то его удаляем
        ТекПоляПостроителя.Удалить(ТекПоле);
    КонецЕсли;
    ТекПоле = ТекПоляПостроителя.Добавить(ИмяДанных, ИмяДанных, ОписаниеТипов);
    ТекПоле.Отбор = истина;
    
    //Затем добавляем в отбор
    ТекОтборПостроителя = Форма[ИмяРеквизитаДД].Отбор;
    ТекОтбор = ТекОтборПостроителя.Найти(ИмяДанных);
    Если ТекОтбор = Неопределено Тогда
        ТекОтбор = ТекОтборПостроителя.Добавить(ИмяДанных);
    КонецЕсли;
    
    Возврат ТекОтбор;
    
КонецФункции

//fixin 20081124
//Функция позволяет удалить добавленные новые данные в форме
Функция УдалитьДинамическиеДанные(Форма, ИмяРеквизитаДД = "ДинамическиеДанные", ИмяДанных) Экспорт
    
    //Сначала удаляем из построителя
    ТекОтборПостроителя = Форма[ИмяРеквизитаДД].Отбор;
    ТекОтбор = ТекОтборПостроителя.Найти(ИмяДанных);
    Если ТекОтбор <> Неопределено Тогда
        ТекОтборПостроителя.Удалить(ТекОтборПостроителя.Индекс(ТекОтбор));
    КонецЕсли;
    
    //Затем удаляем из доступных полей
    ТекПоляПостроителя = Форма[ИмяРеквизитаДД].ДоступныеПоля;
    ТекПоле = ТекПоляПостроителя.Найти(ИмяДанных);
    Если ТекПоле <> Неопределено Тогда
        ТекПоляПостроителя.Удалить(ТекПоле);
    КонецЕсли;
    
КонецФункции

//fixin 20081124
//Функция позволяет получить путь к новым данным в форме
Функция ПолучитьПутьДинамическихДанных(ИмяРеквизитаДД = "ДинамическиеДанные", ИмяДанных) Экспорт
    
    Возврат ИмяРеквизитаДД + ".Отбор." + ИмяДанных + ".Значение";
    
КонецФункции

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

См. также

SALE! %

Мастера заполнения Поиск данных База данных Инструментарий разработчика Корректировка данных Универсальные функции Механизмы платформы 1С Подбор и обработка объектов 1С 8.3 1С 8.5 Платные (руб)

Infostart MagicInput улучшает подбор в полях ввода 1С: ищет по любой части названия и по нескольким ключевым фрагментам, распознаёт ввод в другой раскладке и показывает иконки/статусы объектов прямо в списке. Поддерживает вставку навигационной ссылки/представления документа для автоподбора; для разработчиков доступны поиск по GUID и полному имени предопределённого. Работает в управляемых формах и подключается в большинстве конфигураций 1С 8.3/8.5.

5000 4000 руб.

25.02.2026    1944    9    1    

11

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

Разберем 15 мифов о работе платформы «1С:Предприятие 8» – как распространенных, так и малоизвестных. Начнем с классики: «Код, написанный в одну строку, работает быстрее, чем многострочный». Так ли это на самом деле?

16.07.2025    30168    TitanLuchs    106    

149

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

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

03.02.2025    16466    bayselonarrend    127    

68

Механизмы платформы 1С Программист 1С:Предприятие 8 Бесплатно (free)

В этой статье подробно рассматривается работа с JSON в XDTO в 1С:Предприятие. Вы узнаете, как сериализовать и десериализовать объекты XDTO в JSON, интегрировать 1С с веб-сервисами и API, а также корректно обрабатывать данные при обмене. Разбираются особенности работы с коллекциями, использование функций восстановления и частые ошибки при работе с JSON и XDTO.

30.01.2025    19662    user2122906    9    

66

Механизмы платформы 1С Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 Бесплатно (free)

Этот материал познакомит вас с механизмом XDTO (XML Data Transfer Objects) в 1С и научит эффективно использовать его возможности. Мы разберёмся, как работать с XML-схемами, создавать модели данных, манипулировать объектами XDTO, а также сериализовать и десериализовать их в XML. Вы узнаете, как использовать XDTO для интеграции с внешними системами, избегать типичных ошибок и оптимизировать код. К концу вы будете уверенно применять XDTO для решения сложных задач обмена данными и автоматизации процессов.

17.01.2025    33928    user2122906    12    

61

Механизмы платформы 1С WEB-интеграция Программист 1С:Предприятие 8 Бесплатно (free)

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

14.01.2025    30644    dsdred    100    

147

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

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

23.06.2024    27174    bayselonarrend    22    

176
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Поручик 4607 10.02.12 10:36 Сейчас в теме
(0) Код можно разукрасить (с) alexk-is
http://infostart.ru/public/19856/
2. fixin 4332 10.02.12 10:57 Сейчас в теме
(1) ссори, некогда разукрашивать... хочу тег CODE от администрации
Для отправки сообщения требуется регистрация/авторизация