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

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

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

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

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

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

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

 
 
&НаСервере

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

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

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

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

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

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

           Иначе

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

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

           КонецЕсли;

    КонецЦикла;

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

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

 
 
&НаКлиенте

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

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

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

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

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

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

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

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

    |ИЗ

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

    |ГДЕ

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

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

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

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

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

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

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

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

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

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

              Иначе

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

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

               КонецЕсли;

           КонецЦикла;

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

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

      КонецЦикла;

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

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

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

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

 

Наши проекты

ООО «Лаборатория успеха»
ООО «Лаборатория успеха»

Отрасль:
Общественное и плановое питание, гостиничный бизнес, туризм

Внедренное типовое решение:
1С:Зарплата и управление персоналом 8. КОРП

Кадровый учет;
Расчет зарплаты;...

ПЭК
ПЭК

Отрасль:
Грузоперевозки

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

- Перевод зарплатных баз с версии ЗУП 2.5 на версию ЗУП 3.1.
- Сопровождение в п...

Автоматизация учета на базе ПП "1С:Комплексная автоматизация 8" в ЗАО "Крюгер-Гранд"
ЗАО «Крюгер-Гранд»

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

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

- Создание интерфейсов и наборов прав пользователей;
- Отражению временных ...

ООО «ПраксисКом»
ООО «ПраксисКом»

Отрасль:
Аутсорсинг бухгалтерских услуг

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

- Бухгалтерский учет:
Банк и касса
Завершение периода
Нематериальные ...

1с-РАРУС МСК
1с-РАРУС МСК

Отрасль:
Разработка компьютерного программного обеспечения

Внедренное типовое решение:

- Совместная работа по внедрению разных решений, в том числе «1С:ERP Управление...

Автоматизация системы учета продаж газа на базе «1С:ERP Управление предприятием 2.0»
ООО «Эйр Продактс Газ»

Отрасль:
Производство промышленных газов

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

- Расчеты с контрагентами;
- Производственные операции;
- Управление скла...

СТС-Медиа
СТС-Медиа

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

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

- Бухгалтерский учет;
- Налоговый учет;
- МСФО (GAAP/управленческий учет);
- ...

Автоматизация подсистемы учета взаиморасчетов с агентами и интернет-магазинами на базе «1С:Управление холдингом 8»
ОАО «Фрейт Линк»

Отрасль:
Логистика и грузоперевозки

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

– Оформление заказов поставщикам;
– Управление отношениями с поставщика...

ООО «Стейдж Энтертейнмент Россия»
ООО «Стейдж Энтертейнмент Россия»

Отрасль:
Театральная деятельность

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

Реализован процесс трансформации данных бухгалтерского учета по РСБУ в дан...

Госкорпорация «Ростех»
Госкорпорация «Ростех»

Отрасль:
Производство, ТЭК >> Машиностроение, приборостроение

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

Специалисты «Кодерлайн» помогли разработать и внедрить автоматизированную...

Автоматизация производственного планирования нефтесервисной компании на базе 1С:ЕРП 2.0
ЗАО «Инвестгеосервис»

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

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

- Блок планирования проектов (процессы объемно-календарного планирования пр...

Установка программного продукта БИТ.Финанс для 1С:Бухгалтерия 8
ООО «Джи Эй Си Шиппинг энд Лоджистикс»

Отрасль:
Транспорт

Внедренное типовое решение:
БИТ.Финанс

Построение единого информационного пространства финансовой службы;
Учет ...

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

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

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

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