KoderLine
Обслуживание
и внедрение
Наш Facebook Наш Instagram Наш YouTube
+7 (495) 374 55 29 Обратный звонок
Кодерлайн приглашает на День Бухгалтерии в Большом Московском цирке
Реализация множественных значений в табличной...

Реализация множественных значений в табличной части

0
2206
31.03.2016 Сергей Семенов
  Предположим, в табличной части документа есть реквизит, который допускает наличие нескольких значений одновременно. К примеру, в учебном плане вуза есть реквизит Компетенция, привязанный к реквизиту Дисциплина. Для компетенций в этом реквизите должно храниться несколько значений из справочника Компетенции. Один из способов реализации этого механизма состоит в том, чтобы определить составной тип данных для реквизита Компетенции (Строка, СправочникСсылка. Компетенции). В случае единственного значения в реквизите будет храниться элемент справочника Компетенции. В случае множественного значения – строка, содержащая представление списка компетенций. Для редактирования реквизита Компетенции можно использовать событие «Начало выбора», в котором открыть соответствующую форму выбора и сформировать представление списка компетенций. Кроме того, потребуется определить еще одну табличную часть Компетенции, в которой для строки с указанным ключом нужно создать строки для каждой компетенции. Далее при редактировании реквизита Компетенции нужно соответственно корректировать табличную часть Компетенции. Фактически мы вручную создаем реляционную модель данных и должны вручную выполнять операции выборки, соединения и модификации данных. Существенным минусом такого способа представления компетенций является неактуальность представления компетенций при изменении названия компетенции или удалении ее из справочника компетенций.  
     
  В 1С помимо реляционной модели данных реализована реляционно-иерархическая модель данных, то есть модель, допускающая вид связи «один-ко-многим». Примером объекта, реализующего такую модель, является справочник с табличной частью. Можно создать справочник КомпетенцииДисциплин, подчиненный справочнику Дисциплины. Для справочника КомпетенцииДисциплин нужно еще определить реквизит Специальность, так как набор компетенций определяется специальностью и дисциплиной. При открытии формы элемента справочника нужно еще делать отбор в табличной части справочника по специальности, выбранной в учебном плане. Наименование справочника КомпетенцииДисциплин должно формироваться в событии «перед записью» из списка компетенций в табличной части. Изменение представления компетенций по дисциплине можно выполнить, например, с помощью подписки на события «при изменении компетенции». При этом нужно только изменить наименование элементов справочника, у которых в табличной части имеется данная компетенция. Для этого можно использовать соответствующий критерий отбора. В первом способе привести представления компетенций к актуальному виду сложнее, так как нужно анализировать все документы, в которых содержатся измененные компетенции, а их может быть очень много.

 
     
  Итак, создадим справочники Дисциплины, Компетенции и КомпетенцииДисциплин, подчиненный справочнику Дисциплины. В справочнике КомпетенцииДисциплин добавим табличную часть Компетенции с единственным реквизитом Компетенция (СправочникСсылка.Компетенции). Для простоты специальность рассматривать не будем. Создадим также документ АУП с табличной частью Дисциплины. В табличной части добавим реквизиты Дисциплина и Компетенция. В связях параметров выбора для реквизита Компетенция укажем Отбор.Владелец(Дисциплины.Дисциплина).  
     
  В форме элемента справочника КомпетенцииДисциплин можно определить событие «перед записью»:

 
 
&НаСервере

Процедура КомпетенцииПриИзмененииНаСервере()

    Представление = "";

    Первая = Истина;

    Для Каждого ТекСтр Из Объект.Компетенции Цикл

          Если Не Первая Тогда

                Представление = Представление + ";" + ТекСтр.Компетенция;

           Иначе

                Представление = ТекСтр.Компетенция.Наименование;

                Первая = Ложь;

           КонецЕсли;

    КонецЦикла;

    Объект.Наименование = Представление;

КонецПроцедуры

 
 
&НаКлиенте

Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) КомпетенцииПриИзмененииНаСервере();

КонецПроцедуры

 
  В форме элемента справочника Компетенции определим событие «после записи на сервере»  
 
&НаСервере

Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)

    Запрос = Новый Запрос;

    Запрос.Текст =

    "ВЫБРАТЬ РАЗЛИЧНЫЕ

    |      КомпетенцииДисциплинКомпетенции.Ссылка КАК Ссылка

    |ИЗ

    |      Справочник.КомпетенцииДисциплин.Компетенции КАК КомпетенцииДисциплинКомпетенции

    |ГДЕ

    |      КомпетенцииДисциплинКомпетенции.Компетенция = &Компетенция";

     Запрос.УстановитьПараметр("Компетенция", ТекущийОбъект.Ссылка);

     Выборка = Запрос.Выполнить().Выбрать();

     Пока Выборка.Следующий() Цикл

          ВыборкаОбъект = Выборка.Ссылка.ПолучитьОбъект();

          Представление = "";

          Первая = Истина;

          Для Каждого ТекСтр Из ВыборкаОбъект.Компетенции Цикл

              Если Не Первая Тогда

                   Представление = Представление + ";" + ТекСтр.Компетенция;

              Иначе

                    Представление = ТекСтр.Компетенция.Наименование;

                    Первая = Ложь;

               КонецЕсли;

           КонецЦикла;

           ВыборкаОбъект.Наименование = Представление;

           ВыборкаОбъект.Записать();

      КонецЦикла;

КонецПроцедуры 

 
   
  Теперь наименование компетенций будет актуально как при изменении наименования самой компетенции, так и при изменении состава компетенций для дисциплины. А механизмы реализации стали проще и надежнее.

Если есть вопросы по материалу - обращайтесь!
 
   

Сергей Семенов,
    разработчик 1С ООО «Кодерлайн»

 
Задать вопрос автору статьи
Тема вопроса*
Ваше имя*
E-mail или телефон*
Ваш вопрос*
 

Добавить комментарий
Текст сообщения*
Защита от автоматических сообщений
 
Теги
#1С: CRM #1С: ERP #1С: ERP Управление строительной организацией #1С: ERP. Управление буровой компанией #1С: WMS Управление складом #1С: Аренда и управление недвижимостью #1С: БУХ #1С: Договорчики #1С: Документооборот #1С: ЗУП #1С: Интеграция #1С: КА #1С: Колледж #1С: Конвертация данных #1С: Платформа #1С: Розница #1С: Сценарное тестирование #1С: ТОИР #1С: УАТ #1С: УКФ #1С: Университет #1С: УНФ #1С: УПП #1С: Управление строительной организацией #1С: УТ #1С: УХ #ADO #APACHE #API #com-объекты #Excel #GoogleDrive #HTTP #ITIL #Koderline: Управление медиа-холдингом #Koderline: Управление проектами строительства скважин #LINUX #MS SQL Server #WEB #WEB-сервисы 1С #Word #XML #Администрирование 1С #Безопасность сервера #Бесшовная интеграция #БИТ.Финанc #Битрикс24 #Блокировки в 1С #БСП #БУ #Бурение скважин #Бюджетирование #Внедрение #Внедрение ERP #Закрытие месяца #Запросы 1С #Интеграция 1С #Как сделать в 1С #Конвертация данных #Корпоративное сопровождение #Лизинг #Лицензии 1С #Моделирование #МСФО #Налоги #Обмен между базами #Обновления #Оптимизация #Отпуск #Отчетность #Отчеты в 1С #Оценка задач #Перенос данных #Планирование #Полезные обработки #Правила обмена #Проводки 1С #Программирование в 1С #Программные права #Продажи #Производство #Расширение конфигурации #РСБУ #СКД #Сравнение конфигураций #Тестирование 1С #Техническое задание #Торговое оборудование #Транспортная логистика #Управление проектами #Финансовый учет #Ценообразование #Экзамен 1С #Яндекс.Касса Email или телефон
Услуги программиста 1С
Получите специалиста  
для решения всех задач
в области 1С
Программы 1С
Цены и подробное описание программ 1С:Предприятие 8.
Яндекс.Метрика