Имя: Пароль:
1C
1C 7.7
v7: Прошу совета: как хранить историю изменения значений реквизита справочника
,
0 america2013
 
14.11.13
15:15
Приветствую Вас, уважаемые форумчане!
Прошу дельного совета в таком деле, если в кратце: есть конфа 7.7; есть справочник Сотрудники с реквизитом Подразделение (не периодический); есть отчет с параметрами дата и подразделения, выводящий данные по сотрудникам; подсчеты ведутся на основании выбранного сотрудника и подразделения.

Идея доработки: результат отчета зависит от выбранного подразделения; суть в том, что период может быть разным и в течении времени подразделение у сотрудника может смениться, поэтому необходимо хранить историю изменения подразделения у сотрудника, чтобы при формировании отчета подразделение указывалось не выбранное в реквизите сейчас, а на дату отчета.

Можно конечно сделать реквизит Подразделение в справочнике у Сотрудника периодическим, но тогда я предвижу, что везде, где используется этот реквизит Подразделение нужно будет указывать дату, на которую нужно выбирать значение. Где это может встретиться - не известно.

Надеюсь изложил доступно.

Порекомендуйте, как быть? Заранее благодарен.
1 sapphire
 
14.11.13
15:19
(0) Создать точно такой же реквизит, только периодический и назвать его например "ПодразделениеПериодический".
При изменении реквизита "Подразделение" писать инфо и в "ПодразделениеПериодический".
2 Chum
 
14.11.13
15:20
(1) +1
3 america2013
 
14.11.13
15:23
(1) Да, решение достойное. Спасибо!

Я было ещё думал о том, чтобы создать Справочник (реквизиты Подразделение, Сотрудник и Дата) и использовать его как регистр сведений в 8, но это конечно выглядит как изврат, поэтому и решил спросить мнение у более опытных.

Есть ли ещё варианты реализации?
4 alex74
 
14.11.13
15:24
(3) новое подраздееление в карточку заносится вручную или документом о переводе?
5 mikecool
 
14.11.13
15:25
(3) подчиненный справочник к сотрудникам с полями дата и подразделение
6 america2013
 
14.11.13
15:27
(4) Вот это конечно стоит ещё выяснить..... а то догадываюсь, что изменения будут срабатывать, только при ручном вводе.
7 alex74
 
14.11.13
15:28
(6) если документом - ничего дорабатывать не надо, бери историю из документов.
8 america2013
 
14.11.13
15:30
(7) А если из документов и вручную, то брать оба значения и сравнивать какое свежее?
9 alex74
 
14.11.13
15:32
(8) тогда дорабатывай документы чтобы они изменяли периодический реквизит тоже, и отчет строй по реквизиту.
Или по подчиненному справочнику из (5), потому что периодические реквизиты в семерке придумали извращенцы.
10 Господин ПЖ
 
14.11.13
15:33
перейти на 8-ку
11 Господин ПЖ
 
14.11.13
15:33
периодика в клюшках - чудо враждебной техники
12 Chum
 
14.11.13
15:35
(3) периодический реквизит 7-ки это что-то вроде аналога регистра сведений 8-ки.

(8) если допускается изменение реквизита вручную, тогда запрос по документам как в (7) тебе ничего не даст. здесь без периодики не обойдешься.

(11) отчасти согласен, сильно тупит при обращении к периодике в циклах. особенно в ЗиК-е. приходится предварительно формировать таблицу с актуальными данными и потом обращаться к ней, а не к периодике. работает в разы быстрее.
13 Mikeware
 
14.11.13
15:43
(1) штатная периодика - зло.
хотя - просто и дешево.
----------
лучше дополнительный справочник, и в ПриЗаписи пробегать все реквизиты, сравнивать с объектом  в базе, и при различиях - писать в справочник  кортеж ДатаВремя-Подьзователь-Реквизит-СтароеЗначение-НовоеЗначение
14 alex74
 
14.11.13
15:47
(13) топикстартер замахается отслеживать все программные изменения справочника.
15 Mikeware
 
14.11.13
15:50
(14) это да.
16 america2013
 
14.11.13
15:52
Удалось выяснить, что Подразделение у Сотрудника никаким документами не меняется, только ручками, но это была только беседа с бухом, а не допрос, что означает, что где-то может и выстрелить документ ; ))) Отсюда следует, что больше подходит вариант создать копию реквизита Подразделение, но уже периодический и брать историю с него. Начну работу в этом направлении, но тему какое-то время продолжу монеторить, если вдруг будут ещё предложения.


(10) Об этом у бухов нет и речи : ) Но на будущее конечно стоит учесть : )))

(13) Если создать ещё справочник, опосаюсь, что база ещё больше раздуется, кто знает, как часто туда буду вестись записи...

(14) и (15) Расшифруйте пожалуйста, Ваш сленг ; )
17 alex74
 
14.11.13
15:58
(16) в семерке чтобы отследить что справочник меняется вручную - есть процедура "ПриЗаписи()", которая вызывается из формы элемента, и из формы списка справочника (т.е. тебе надо будет дублировать и там и там). Но если справочник меняется программно - например документом "кадровое перемещение" или обработкой, то эта процедура не запускается. В этих случаях тебе надо дописывать документ или обработку, чтобы они делали нужные изменения.
18 america2013
 
18.11.13
14:55
Работу продолжил. Добавил рядом с Подразделением ещё реквизит ПодразделениеПериодическое (конечно, периодический).

В ходе работы столкнулся с применением такого реквизита. Прошу подскажите, как теперь в запросе (уже имеющемся) выбрать не Подразделение, а ПодразделениеПериодическое (у сотрудника)?  
Имею код:

    "//{{ЗАПРОС(Сформировать1)
    |с НачДата по КонДата;
    |ОбрабатыватьДокументы Проведенные;
    |Подразделение  = Документ.ВедомостьНачислений.Сотрудник.Подразделение;
    |Организация = Документ.ВедомостьНачислений.Организация;
    |Оклад             = Документ.ВедомостьНачислений.Оклад;
    |Дополнительные = Документ.ВедомостьНачислений.Дополнительные;
    |Функция СуммаНачислено = Сумма(Оклад+Дополнительные);
    |Функция НачисленоДополнительно = Сумма(Дополнительные);
    |Условие (Организация = ВыбОрганизация);
    |Группировка Подразделение упорядочить по Подразделение.Код Без Групп;
    |Без итогов;
    
    |"//}}ЗАПРОС
    ;
19 america2013
 
18.11.13
15:00
Вариант, типа...

|Подразделение  = Документ.ВедомостьНачислений.Сотрудник.ПодразделениеПериодическое.Получить(НачДата);

...не работает : (((
20 Mikeware
 
18.11.13
15:00
(16) Ну, как мнеять будут. у меня логи ручных изменений - одни из самых больших таблиц в базе (почти 7 гигов - лог изменений документов).
21 alex74
 
18.11.13
15:05
|Подразделение  = Документ.ВедомостьНачислений.Сотрудник.ПодразделениеПериодическое ;
22 america2013
 
18.11.13
15:06
(21) И все? Простите, но как, если вкратце, система узнает, что мне необходимо значение на начальную дату отчета?
23 alex74
 
18.11.13
15:08
(22) система вернет значение на КонДата
24 america2013
 
18.11.13
15:10
(23) А на НачДата возможно реализовать?
25 1dvd
 
18.11.13
15:10
(24) Да, если строить запрос
Период с НачДата по КонДата;
26 1dvd
 
18.11.13
15:12
тьфу...
Период с НачДата по НачДата;
27 america2013
 
18.11.13
15:15
(26) Нет, так не подойдет, тогда и значения в запрос будут попадать только за 1 день : (((
28 ЧеловекДуши
 
18.11.13
15:27
(1) Оно и так периодическое :)
29 ЧеловекДуши
 
18.11.13
15:28
(0) Слышь, соколик, таки у тебя что за конфигурация?
30 ЧеловекДуши
 
18.11.13
15:28
(27) А периодичность в лице 1С, по их Черным запросам, всегда рассматривается в пределе конечной даты :)
31 ЧеловекДуши
 
18.11.13
15:29
+(27) Либо ты пишешь прямой запрос...
Либо, как все, через Цикл в Цикле :)
32 america2013
 
18.11.13
15:36
(29)
ТиС (7.7)
7.70.009

Реквизит и отчет добавлены самостоятельно.

(30) Понятно с запросом, согласую этот момент, что бы так оставить не переделывая:
Подразделение  = Документ.ВедомостьНачислений.Сотрудник.ПодразделениеПериодическое;

Но вот есть ещё вопрос: если значение ПодразделениеПериодичес - пустое, как это проверить? И если пустое, то выбрать
Подразделение  = Документ.ВедомостьНачислений.Сотрудник.Подразделение;
33 america2013
 
18.11.13
15:54
Прошу, гуру, не покидайте! Нужна помощь: если значение ПодразделениеПериодическое - пустое, как это проверить? И если пустое, то выбрать
Подразделение  = Документ.ВедомостьНачислений.Сотрудник.Подразделение;
34 alex74
 
18.11.13
15:55
(33) получай в цикле и то и то.
35 america2013
 
18.11.13
16:12
(34) Понятно.

Благодарю всех за участие!!!!!!
Удачи и успехов!!!