Перейти к содержимому

Перейти
Перейти

Загрузил

Тема поддержки файла Информация

  • Загружен: Mar 02 2014 06:00
  • Последнее обновление: Mar 02 2014 06:00
  • Размер: 6.38К
  • Просмотров: 261
  • Скачан: 2

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

- - - - -



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

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

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

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

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

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

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

//fixin 20081124
//Функция позволяет получить путь к новым данным в форме

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



Администрация не несет ответственности за возможный вред, причиненный этим материалом.





  • 8622 Всего файлов
  • 9 Всего категорий
  • 48 Всего авторов
  • 23740 Всего загрузок
  • 1С:Предприятие 7.7 Последний файл
  • kondor_max Последний автор

1 посетителей за последние 15 минут

0 пользователей, 1 гостей, 0 анонимных