Имя: Пароль:
1C
1С v8
Запрет создания дублей. Сравнение элементов справочника с табличными частями
0 belka4_4
 
24.02.16
21:48
Есть справочник Мероприятие с реквизитами: Наименование, ТипМероприятия, КонтингентСлушалей (ПотокГрупп, Группа, Подгруппа, КоллективЛюдей), Ответственный, КоличествоЧеловек(рассчитывается на основании данных ТЧ). И есть табличная часть (ТЧ), в которой перечислены слушатели (группы, преподаватели или просто имена людей)

Надо чтобы при создании элемента проверялось нет ли в базе такого же. По реквизитам проверку понятно- можно запросом. А как быть с ТЧ? Тем более что порядок слушателей произвольный. Даже если исключить проверку при контингенте = КоллективЛюдей, т.к. тут состав участников в принципе не окончательный, всё равно группы добавляются в ТЧ в произвольном порядке, но от перемены мест слагаемых....
При этом надо текущую форму элемента закрыть, существующую открыть. А если Форма создания была вызвана из формы выбора, то установить указатель на ней.

Насколько реально это сделать? Просто 1с только осваиваю, поэтому знаний так себе((((
1 Garykom
 
гуру
24.02.16
21:57
все же решили сами ваять? или готовое допиливаем?
2 Garykom
 
гуру
24.02.16
21:58
(0) Нужно сделать запрет создания дубля мероприятия с некими людьми, если эти же люди уже ходили на такое же мероприятие?
3 belka4_4
 
24.02.16
22:07
(1)
Готовое я так и не нашла где скачать
Так что изобретаю свой велосипед. К тому же это диплом, так что тут готовое вроде как нельзя использовать, даже допиливая
4 Drac0
 
24.02.16
22:07
(0) Есть два Мероприятия. Одинаково все, кроме того, что в первом есть Вася, а во втором Васи нет. Это разные мероприятия? Может должны быть другие критерии отличия?
5 vadim777
 
24.02.16
22:12
(0) DracO прав, отделяй мух от котлет. Мероприятия  это котлеты, контингент - мухи.
6 belka4_4
 
24.02.16
22:17
(2) и(4)
Сейчас постараюсь пояснить на примере
Мероприятие 1:

Название: ПАС    //это название дисциплины
ТипМероприятия: Лекция   //Из одноимённого перечисления
КонтингентСлушателей: Поток  //Из одноимённого перечисления
ОтветственныйЗаМероприятие: Семёнов В.С. //препод из справочника преподавателей

С Л У Ш А Т Е Л И      - ТЧ
Группа К-7            - Справочник.Группы
Группа К-8
Группа ИИ-23

//ТутЕщёРеквизитФормы - КоличествоСлушателей, но он считается автоматически по данным ТЧ
Количество слушателей:  60
Мероприятие 2:

Название: ПАС    
ТипМероприятия: Лекция  
КонтингентСлушателей: Поток  
ОтветственныйЗаМероприятие: Семёнов В.С.

С Л У Ш А Т Е Л И    
Группа К-8            
Группа К-7
Группа ИИ-23

Количество слушателей:  60

Это одинаковые элементы. В ТЧ может быть один элемент - группа. Могут быть перечислены преподы из справочника или просто имена какие-нибудь(Тип данных составной: группы, преподы, строка - выбирается нужный автоматически в зависимости он контингента слушателей). Но в случае преподов или просто имён думаю такая проверка будет лишней, т.к. это не точный перечень
7 belka4_4
 
24.02.16
22:18
(6)
Немного некрасиво отформатировалось во втором мероприятии
8 vadim777
 
24.02.16
22:21
(6) А что написано в задании?
9 belka4_4
 
24.02.16
22:22
(5)
Я сначала думала отдельной функцией возвращать в какой-нибудь массив элементы, в котором реквизиты такие же.
А потом в основной процедуре для каждого возвращённого элемента сравнить табличные части.
Нашла на форуме сравнение ТЧ:
v8: Как в запросе сравнить табличные части двух документов ?
Но тут всё решается для числовых данных и результат выясняется на основе некоего сворачивания, что в моём случае как я поняла невозможно.
10 Drac0
 
24.02.16
22:25
(9) "Но тут всё решается для числовых данных и результат выясняется на основе некоего сворачивания, что в моём случае как я поняла невозможно."

Почему невозможно? Сворачивание необходимо только для сравнения количество одинаковых строк.
11 Garykom
 
гуру
24.02.16
22:28
(6) пока сути проблемы не понял
ну завели 2 документа и что?

по каким признакам можно догадаться (программа должна) что это дубль?

может начать с формулирования этих признаков?
тогда будет понятно как контролировать
12 Drac0
 
24.02.16
22:31
(11) Когда совпадают и данные шапки и данные ТЧ (состав строк). Типа, когда ЭрастПетрович Бирюлькин ведет матан для групп 202 и 203 и когда он же ведет для групп 202 и 204 - это разные мероприятия, а если введут снова его же для групп 202 и 203 - это дубль. Интересно, а как это учитывает две пары подряд? :)
13 belka4_4
 
24.02.16
22:34
(8)
В задании к диплому?
Тут я расписывала:
График занятости в 1С. Нетипичная для 1С задача

Собственно задачи именно так организовывать мероприятие не стоИт.
Это моя задумка для реализации
Изначально я думала, что в мероприятии будут данные о частоте его проведения, дням недели, номерах пар - чтобы автоматически найти нужные даты. Но потом решила вынести это в саму обработку а за мероприятие принимать именно мероприятие, которое может быть использовано несколько раз. Потому что лекция по ПАСу еженедельно по вторникам - это одна аудитория, а раз в 2 недели по четвергам - уже вполне может быть другая. НО эта лекция по ПАСу - лекция по одной и той же дисциплине, ведётся одним и тем же преподом для одних и тех же студентов.
Т.е. ПАС по неделям в расписании этих групп так:
1. Вторник 1я пара ауд. 1, четверг 3я пара ауд.15
2. Вторник 1я пара ауд. 1
3. Вторник 1я пара ауд. 1, четверг 3я пара ауд.15
4. вторник 1я пара ауд. 1.
Для 1 и 3  недели - это в одном случае поиска выбираем, а для 2 и 4 - уже в другой. По сути их ничего не связывает, только одинаковое мероприятие.
Или можно создать 2 мероприятия для двух графиков проведения:
1.еженедельно (ищем аудиторию на каждый вторник)
2.раз в 2 недели (ищем аудиторию на каждый четверг по чётным неделям)
14 belka4_4
 
24.02.16
22:35
(10)
А, ну это я не знала про сворачивание, просто предположила=)
Спасибо, что сказали)
15 Garykom
 
гуру
24.02.16
22:36
(12) про это и хотел сказать, что не хватает как минимум "времени мероприятия"

а если время разное но хочется чтобы одна и та же группа не изучала дважды одно и то же
то так и сделать проверку именно по группам (по ТЧ) на количество строк с совпадающими реквизитами шапки ))
16 Garykom
 
гуру
24.02.16
22:37
(13) не взлетит
17 belka4_4
 
24.02.16
22:37
(11)
Дубль если совпадают все реквизиты и Данные табличной части, пусть даже они записаны в разном порядке
18 Garykom
 
гуру
24.02.16
22:38
(16)+ система (интерфейс пользователя) получается слишком сложная, на защите диплома завалитесь

и использовать ее не смогут
19 belka4_4
 
24.02.16
22:39
(16)
Т.е. думаете лучше отказаться от этой затеи и создавать под разные дни разные мероприятия?
Нет, вообще, конечно, самое очевидной - выбирать мероприятие из списка. Но это слишком сложно в плане поиска, т.к. Мероприятие ни к чему не привязано и искать в списке из тысяч значений просто просматривая их не реально
20 Drac0
 
24.02.16
22:41
(13) Так как ты будешь сдвоенные лекции вводить, объясни?
21 Garykom
 
гуру
24.02.16
22:41
(17) самое простое писать данные в регистр
реквизиты шапки, группа

и если снова попытка записать ту же строчку-запись (для группы совпало) то дубль

если же нужно отслеживать не для каждой группы в отдельности, а для "набора групп" (пусть и в разном порядке) в ТЧ
то нужен "ключ набора групп" (который не будет зависеть от порядка) и его писать и проверять
22 belka4_4
 
24.02.16
22:42
(18)
Для пользователя по идее видно не будет
Она просто всегда будет создавать мероприятие, заполнять все 5 реквизитов и ТЧ, просто объект новый создаваться не будет

А вот с защитой... Как сказать. В комиссии 99% не будет человека, знающего 1С.
23 Garykom
 
гуру
24.02.16
22:44
(21)+ таким "ключом набора групп" банально может выступать их отсортированный список
т.е. ТЧ забили произвольно а оно автоматом сортируется

или использовать "битовые маски" где каждый бит (или символ) это признак нахождения группы в составе ТЧ
24 Garykom
 
гуру
24.02.16
22:47
(22)
>Для пользователя по идее видно не будет
>Она просто всегда будет создавать мероприятие, заполнять все 5 реквизитов и ТЧ

она не будет создавать мероприятие  - ибо "слишком сложно" ))

если уж пошел учет "по предметам", то придется сразу и учебный план вносить (предмет, препод, группы, кол-во часов) и чтобы по кнопке "рассчитать" оно разбивало по кабинетам и времени ))
25 belka4_4
 
24.02.16
22:47
(20)
2 раза поиск аудитории
Сначала ПАС с графиком еженедельно по вторникам. Выбрали аудиторию - ок, записали
Снова вызвали форму поиска выбрали мероприятие ПАС. Но график указали - раз в 2 недели по четвергам. Нашли аудитории для четверга на это время на все рассчитанные даты
Упрощённо даты планирую считать так:
Есть дата начала, дата окончания и график. В итоге на семестр из 16 недель нужно чтоб аудитория была свободна в указанное время для всех дат (по вторникам начиная с даты начала и по дату окончания)
26 Drac0
 
24.02.16
22:50
(25) Нет, если во вторник должно преподаватель читает ДВЕ лекции по этому предмету этим группам?
27 belka4_4
 
24.02.16
22:54
(24).Не, по предметам учёта нет. Это просто в названии в ручную как правило сокращённо название предмета забивается. Она может даже не знать, что это за предмет и для её задачи это не важно. Важен тип мероприятию и требования к помещению для его проведения.
(21), (23). Идея с регистром интересна. Правда наверное не очень оправданно для такой задачи как запрет дублей аж целый регистр создавать.
А какая тогда структура регистра?
28 Garykom
 
гуру
24.02.16
22:56
(27) структура регистра то что нужно контролировать, логично же
29 belka4_4
 
24.02.16
22:57
(25)
Мы же номер пары указываем ещё. Не только день недели.
Я думала для спаренных пар просто разрешить множественный выбор. Поверхностный поиск по гуглу сказал, что можно выбирать несколько из формы выбора.
Получается ищем по измерениям дата, пара, где мероприятие не заполнено - значит аудитория свободна
Это из регистра сведений "Занятость аудиторий" с измерениями: Дата, пара, аудитория, и ресурс- мероприятие
30 belka4_4
 
24.02.16
22:59
(28). Т.е. я не ошиблась, когда решила, что измерения - это все 5 реквизитов + ТЧ в виде ключа? А ресурс тогда Ссылка на элемент справочника?
31 Garykom
 
гуру
24.02.16
23:06
(30) нет ресурсом можно что угодно, к примеру есть/нет
или сам объект (справочник/документ) который запись сделал
32 belka4_4
 
24.02.16
23:13
(31)
Ну что ж, пожалуй, это действительно лучший вариант. Спасибо за идею
Только вопрос стОит ли овчинка выделки.
По сути пользователь всегда будет заполнять реквизиты. И для неё ничего не изменится.
Это только вопрос оптимизации хранения данных.
С другой стороны у меня при запуске сисетмы постоянно двигается время в РС (дни из прошлого более, чем месячной давности не интересуют нас и они удаляются, новые добавляются - т.о. постоянно поддерживается заполненность регистра пустым мероприятием на пол года вперёд, т.е. поиск аудитории можно осуществить на пол года вперёд). И есть процедура в модуле УП, которая удаляет из справочника неиспользуемые элементы.

Как думаете, стОит ли так усложнять алгоритм и добавлять чисто служебный объект, который больше нигде не будет использоваться ради сокращения количества записей в справочнике?