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


Загрузил

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

  • Загружен: Mar 02 2014 06:00
  • Последнее обновление: Mar 02 2014 06:00
  • Размер: 6.38К
  • Просмотров: 222
  • Скачан: 2
Услуги программиста 1С
Профессиональные программисты 1С.
Весь комплекс услуг сопровождения 1С.

Курсы 1С
Бухгалтерам, менеджерам
и программистам.
Бесплатно!
Живое индивидуальное обучение по 1С.

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

- - - - -



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

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

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

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

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

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

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

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

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



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





  • 8618 Всего файлов
  • 9 Всего категорий
  • 45 Всего авторов
  • 22868 Всего загрузок
  • Акт списания ТМЦ Последний файл
  • kozavva Последний автор

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

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


Yandex (1)