Имя: Пароль:
1C
1С v8
Хранение массива в ТЧ справочника/документа
,
0 bahtik
 
11.08.14
23:24
Здравствуйте!
Подскажите, пожалуйста, как правильно решить такую задачу. Есть справочник "Технологические операции", у него есть ТЧ "Персонал" с полями "Должность", "Навыки", "Количество", в которой перечисляется необходимый персонал для выполнения данной технологической операции. Поле навыки должно содержать массив значений типа "СправочникСсылка.Навыки". Как это реализовать примерно таким образом, как, например, в конфигураторе указывается составной тип значения (т.е. при начале выбора открывается список с пометками, а при сохранении отображается строка, в которой выбранные значения перечислены через запятую)?
1 MadHead
 
11.08.14
23:31
Сделать такое поведение "в один клик" не получится.
Для хранения навыков нужно будет добавлять либо РС либо ТЧ. И уже при выводе заполнять чудо реквизит, для редактирования так же нужно будет подменять стандартный обработчик и открывать свою форму.
2 bahtik
 
11.08.14
23:36
(1) Т.е., напрмер, делаю РС с измерениями "ТехОперация, Должность, Навык" (без ресурсов), а в ТЧ справочника строковый реквизит неограниченной длины?
3 bahtik
 
11.08.14
23:38
А реквизит типа ХранилищеЗначений не подойдет вместо РС?
4 MadHead
 
11.08.14
23:45
(3) это будет не прозрачно и не оптимально. Если задумаете построить отчет или отбор по навыкам
5 bahtik
 
11.08.14
23:54
(4) Понятно. А вариант из (2) насколько адекватный? Хранение строк неограниченной длины в ТЧ это нормально?
6 MadHead
 
11.08.14
23:56
(не надо нечего хранить строки неораниченной длинны.
В ТЧ данные вы только отображаете, а храните в РС
7 MadHead
 
11.08.14
23:56
то есть в таб части не должно быть реквизита "навыки", а только поле на форме
8 bahtik
 
12.08.14
00:00
(7) Изначально я так даже и начал делать, но потом столкнулся с проблемой заполнения этого самого элемента формы.
9 bahtik
 
12.08.14
00:08
И еще один нюанс. Например, для выполнения какой-либо операции необходимо 3 специалиста одной должности (например, оператор установки), но при этом достаточно, чтобы только один из них имел определенный навык (сертификат). В этом случае получается, что мне нужно 2 строки в ТЧ, в одной из которых я указываю Должность - Оператор установки,  навыки - пусто, количество - 2. А во второй строке Должность - Оператор установки, навыки - сертификат "А", количество - 1. В этом случае РС уже не получится делать такой структуры, как я описал - измерение должность не подходит, т.к. может повторяться. Номер строки - тоже пока не совсем понимаю, как потом обрабатывать изменения в ТЧ (удалили строку, заново ввели и т.п.)
10 Torquader
 
12.08.14
00:10
(8) Если сделать табличную часть с реквизитом, то заполняться она будет автоматически системой, только вот связь двух табличных частей будет не очевидна.
ТЧ1:Должность,Навыки,Количество,КлючУникальностиПеречисленияНавыков
ТЧ2:КлючУникальностиПеречисленияНавыков,Навык
11 bahtik
 
12.08.14
00:10
В общем, я догадываюсь, что оно должно делаться "как-то так", через РС или еще одну ТЧ... Но вот как конкретно реализовать, пока не пойму.
12 Torquader
 
12.08.14
00:11
(9) Тогда нужно две графы - количество и количество сертификатов.
13 bahtik
 
12.08.14
00:11
(10) Вот, вот! КлючУникальностиПеречисленияНавыков - это как раз то, о чем я говорю. Оно мне и надо ) Только как этот ключ формировать?
14 MadHead
 
12.08.14
00:13
(9) в таком случае строки будут уникальными.
15 bahtik
 
12.08.14
00:15
(12) Это будет крайне неудобно: в дальнейшем планируется использовать этот справочник в документе планирования проектных работ, и для каждой строки указывать конкретного работника.
16 bahtik
 
12.08.14
00:16
(10) Все таки, что должен представлять из себя реквизит "КлючУникальностиПеречисленияНавыков"?
17 bahtik
 
12.08.14
00:18
(16) Сделать в документе реквизит, в котором хранить счетчик, который будет увеличиваться каждый раз при добавлении новой строки?
18 MadHead
 
12.08.14
00:20
(16) а зачем ключ уникальности?
Должно          Навык              Ко-во
Рубитель березы Игра на балалайке  3
Рубитель березы пусто              2

В регистре все будет ок
19 bahtik
 
12.08.14
00:22
(17) ... Тогда можно будет сделать РС (или ТЧ2) с измерениями "ТехОперация", "Ключ" (этот самый счетчик), "Навык".
20 Torquader
 
12.08.14
00:22
(18) Если Рубитель берёзы,Игра на балалайке+Игра на фортепиано, 2 шт.
То есть, если требуется одновременно несколько навыков.

Хотя, очень непонятно, от одного рабочего навыки или от двух ?
21 bahtik
 
12.08.14
00:23
(18) Не совсем понятно. Задача - три рубителя березы, и чтобы один из них обязательно играл на балалайке. В приведенном примере все получается аж 5 рабочих, вместо 3...
22 MadHead
 
12.08.14
00:24
(20)
Должно            Навык              Ко-во
Рубитель березы   Игра на балалайке   3
Рубитель березы   пусто               2
Рубитель березы   Игра фортепиано     2
23 MadHead
 
12.08.14
00:25
(20)хотя признаю, не прав
24 bahtik
 
12.08.14
00:25
(22) А это уже целых 7 человек! ))
25 bahtik
 
12.08.14
00:25
Откуда я столько людей возьму? ))
26 bahtik
 
12.08.14
00:25
Мне надо три.
27 MadHead
 
12.08.14
00:26
Тогда да в сроку ТЧ и измерение нужно засунуть guid
28 Torquader
 
12.08.14
00:27
Мне кажется:

таблица 1:
1) Должность (Рубитель берёзы)
2) Ключ уникальности (1)
3) Количество (3)

Таблица 2:
1) Ключ уникальности (1)
2) Навык (игра на балалайке)
3) Количество (1)
1) Ключ уникальности (1)
2) Навык (игра на фортепиано)
3) Количество (1)
29 bahtik
 
12.08.14
00:27
Нужно, чтобы потом при планировании было две строчки: в первой - рубители березы без навыков и в ней нужно будет указать подходящих двух сотрудников. И вторая - рубитель березы с навыком игры на балалайке, и в нем указать одного подходящего сотрудника (не совпадающего с предыдущими двумя, т.к. всего должно быть трое).
30 Torquader
 
12.08.14
00:28
(27) Не обязательно GUID - можно число, только в новую строку писать число, больше максимального или ноль.
Можно глянуть как в УТ или рознице серийные номера вводятся - там как раз "ключ уникальности" есть.
31 Torquader
 
12.08.14
00:29
(29) Мне кажется, что в документе должна быть - одна строка - один сотрудник.
32 bahtik
 
12.08.14
00:30
(30) Ну я ж говорю в (17), можно сделать счетчик.
33 bahtik
 
12.08.14
00:30
(31) почему так?
34 Torquader
 
12.08.14
00:31
(32) Вполне можно.
Сейчас остался вопрос - как описать навыки и их количество.
35 Torquader
 
12.08.14
00:31
(33) Если сотрудник выбирается, то выбирать его в табличной части проще всего.
36 bahtik
 
12.08.14
00:34
(34) А, ну, в принципе, да, это да. В документе планирования так и надо будет сделать, согласен. Только вот меня смущает структура хранения в справочнике (28)
37 bahtik
 
12.08.14
00:36
Она, как раз не очень прозрачная. Если например, мне надо одного с навыками "А" и "Б", а второго с навыками "Г" и "Д". То в такой структуре уже непонятно, у кого чего должно быть...
38 Torquader
 
12.08.14
00:36
(36) Просто она позволит не уточнять, если нужны два навыка на трёх рабочих - должно быть два рабочих каждый со своим навыком или один из трёх - с двумя.
Если такой ситуации нет, то можно во второй табличной части количество убрать и пользовать дублирование строк.
39 Torquader
 
12.08.14
00:38
(37) см (38) Если навыки нужны "обобщённо", то будет (28).
Если навыки указываются точно:
три рабочих - один играет на балалайке и на фортепиано, а два - так пришли, то количество навыков всегда будет 1 и его можно не писать.
40 Torquader
 
12.08.14
00:38
Однако, я бы его оставил, чтобы можно было указать общий случай.
41 bahtik
 
12.08.14
00:40
(40) Да, идея заманчивая, но усложнит и восприятие (читабельность) для юзера, и дальнейшую обработку... Лучше все же без количества сделаю, наверное. С дублированием строк.
42 bahtik
 
12.08.14
00:40
В общем, вроде все прояснил, всем спасибо! ))
43 Torquader
 
12.08.14
00:43
(42) В справочнике можно "сляпать" ТЗ и кинут её на форму - стока для выбора навыков - неограниченной длины, где навыки перечисляют через запятую (и ещё одну колонку, где будет жить список, чтобы хранить ссылки на навыки).
В общем, если постараться можно сделать так, что пользователи и не заметят, что табличных части две.
44 bahtik
 
12.08.14
00:48
(43) Строкой через запятую не подойдет: навыки - это элементы справочника "Навыки". И еще есть регистр сведений "Навыки сотрудников" с двумя измерениями "Сотрудник", "Навык" (без ресурсов). Потом в документе планирования нужно будет проверять соответствие выбранного работника на соответствие всем требованиям.
45 bahtik
 
12.08.14
00:58
Так что итоговый вариант я пока вижу такой:
В изначальную ТЧ (назовем ее ТЧ1) добавляем реквизит "КлючДанныхСтроки", в шапку справочника добавляем реквизит "СчетчикКлючей". При добавлении новой строки в ТЧ1 будем увеличивать "СчетчикКлючей" на 1, и присваивать полученное значение реквизиту ТЧ1 "СчетчикКлючейДанных". Ну и при выборе поля ТЧ1 "Навыки" открывать отдельную форму - список элементов справочника "Навыки" с пометками, и реализовать запись помеченных элементов в ТЧ2, имеющую структуру "КлючДанныхСтроки, Навык". Вроде и вся идея, основанная на полученных советах. Теперь осталась рутина все это сделать удобно и красиво.
46 bahtik
 
12.08.14
01:01
Хотя еще остался вопрос с отображением этих навыков в ТЧ1 справочника (да и потом в ТЧ документа планирования). Ведь ТЧ2 - чисто служебная и не должна быть видна.
47 bahtik
 
12.08.14
01:10
А, ну, вроде понял: надо добавить реквизит формы типа "Табличная часть" с колонками "КлючДанных, НавыкиСтрокой", где "НавыкиСтрокой" - строка неограниченной длины. Заполнять ее при открытии формы ну и обрабатывать при изменении ТЧ1...
48 bahtik
 
12.08.14
01:13
(47) Не, не получается. Путь к данным у ТЧ объекта нельзя указывать к другому реквизиту формы... ((
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.