31.03.2016 Сергей Семенов 16979
Реализация множественных значений в табличной...
  Предположим, в табличной части документа есть реквизит, который допускает наличие нескольких значений одновременно. К примеру, в учебном плане вуза есть реквизит Компетенция, привязанный к реквизиту Дисциплина. Для компетенций в этом реквизите должно храниться несколько значений из справочника Компетенции. Один из способов реализации этого механизма состоит в том, чтобы определить составной тип данных для реквизита Компетенции (Строка, СправочникСсылка. Компетенции).

В случае единственного значения в реквизите будет храниться элемент справочника Компетенции. В случае множественного значения – строка, содержащая представление списка компетенций.

Для редактирования реквизита Компетенции можно использовать событие «Начало выбора», в котором открыть соответствующую форму выбора и сформировать представление списка компетенций. Кроме того, потребуется определить еще одну табличную часть Компетенции, в которой для строки с указанным ключом нужно создать строки для каждой компетенции. Далее при редактировании реквизита Компетенции нужно соответственно корректировать табличную часть Компетенции. Фактически мы вручную создаем реляционную модель данных и должны вручную выполнять операции выборки, соединения и модификации данных.

Существенным минусом такого способа представления компетенций является неактуальность представления компетенций при изменении названия компетенции или удалении ее из справочника компетенций.
 
     
  В 1С помимо реляционной модели данных реализована реляционно-иерархическая модель данных, то есть модель, допускающая вид связи «один-ко-многим». Примером объекта, реализующего такую модель, является справочник с табличной частью. Можно создать справочник КомпетенцииДисциплин, подчиненный справочнику Дисциплины.

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

Наименование справочника КомпетенцииДисциплин должно формироваться в событии «перед записью» из списка компетенций в табличной части. Изменение представления компетенций по дисциплине можно выполнить, например, с помощью подписки на события «при изменении компетенции». При этом нужно только изменить наименование элементов справочника, у которых в табличной части имеется данная компетенция. Для этого можно использовать соответствующий критерий отбора. В первом способе привести представления компетенций к актуальному виду сложнее, так как нужно анализировать все документы, в которых содержатся измененные компетенции, а их может быть очень много.

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

 
 
&НаСервере

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

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

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

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

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

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

           Иначе

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

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

           КонецЕсли;

    КонецЦикла;

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

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

 
 
&НаКлиенте

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

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

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

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

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

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

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

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

    |ИЗ

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

    |ГДЕ

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

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

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

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

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

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

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

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

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

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

              Иначе

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

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

               КонецЕсли;

           КонецЦикла;

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

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

      КонецЦикла;

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

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

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

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

 

Наши проекты

ООО "АСК ИНЖИНИРИНГ"
ООО "АСК ИНЖИНИРИНГ"

Отрасль:
Машиностроение, приборостроение

Внедренное типовое решение:
1С:Документооборот ПРОФ

Делопроизводство
Учет и хранение документов
Ведение номенклатуры дел
...

Внедрение «1С:Зарплата и управление персоналом 8 КОРП» в компании «ПБК»
ООО «Партнер Бухгалтер Консультант»

Отрасль:
Бухгалтерские услуги

Внедренное типовое решение:
1С:Зарплата и управление персоналом

- Интеграция продукта с базой данных оперативного учета Axapta;
- Доработка фу...

Апгрейд 1С:Бухгалтерия 8 ПРОФ (USB) до версии 1С:Бухгалтерия 8 КОРП (USB)
ООО «Ява Строй»

Отрасль:
Строительство

Внедренное типовое решение:
1С:Бухгалтерия 8 КОРП (USB)

- Создание чистых конфигураций. Внесение изменений в БД ЗУП и новая расчетна...

ФГУП «Почта России»
ФГУП «Почта России»

Отрасль:
Почта, доставка

Внедренное типовое решение:
1С:Зарплата и управление персоналом

- Бухгалтерский учет
- Расчет зарплаты и кадровый учет
- Налоговый учет ...

Разработка функциональных требований к информсистеме на базе «1С:Управление холдингом 8»
ФГУП «СВЯЗЬ-безопасность»

Отрасль:
Охранные услуги

Внедренное типовое решение:
1С:Управление холдингом

- Зафиксировали процессы по блокам бухгалтерского, налогового учета, казнач...

ОАО «Интер РАО – Электрогенерация»
ОАО «Интер РАО – Электрогенерация»

Отрасль:
Электрогенерация

Внедренное типовое решение:
1С:Управление производственным предприятием

Для работы 2500 пользователей в 9 часовых поясах организована территориально-...

ЗАО «Инвестгеосервис»
ЗАО «Инвестгеосервис»

Отрасль:
Нефтесервис

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

Объемно-календарное планирование производства Автоматизация бизнес-проце...

Оптимизация производительности системы
ЗАО ИД «Комсомольская правда»

Отрасль:
Медиа

Внедренное типовое решение:
1С:Бухгалтерия

- Оптимизация производительности системы, в том числе сервера Postgre. ...

Внедрение ПП "1С:Корпоративный инструментальный пакет 8" в ООО «Торговый Дом Факел»
ООО «Торговый Дом Факел»

Отрасль:
Производство

Внедренное типовое решение:
1С:Предприятие 8. ERP Управление предприятием 2

Различная отраслевая специфика:
- Переработка давальческого сырья
- Уче...

ЗАО «Многопрофильная формирующая авиагруппа» (ЗАО МФГ)
ЗАО «Многопрофильная формирующая авиагруппа» (ЗАО МФГ)

Отрасль:
Оптовая торговля транспортными средствами и оборудованием

Внедренное типовое решение:
1С:Бухгалтерия ПРОФ

- Финансы, управленческий учет, мониторинг показателей
- Бухгалтерский уче...

ХИТЕК-ГРУП
ХИТЕК-ГРУП

Отрасль:
Продажа парикмахерского инструмента и аксессуаров

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

Документооборот (ECM)
• Делопроизводство
Управление бизнес-процессами и И...

ООО “РТИТС”
ООО “РТИТС”

Отрасль:
Транспортные системы

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

Блок регламентированного кадрового учета и расчета заработной платы в 1С:ERP;...

Наши соц. сети

Telegram-канал «Koderline 1С» Группа в Вконтакте «Кодерлайн КОРП» Rutube

Остались вопросы - обратитесь к нам!

Впишите свои Имя и Телефон, чтобы мы ответили на все интересующие Вас вопросы.
ФИО*
E-mail*
Телефон*
Сообщение