Имя: Пароль:
1C
1C 7.7
v7: Как организовать историю статусов
,
0 Stefan
 
06.11.11
03:21
Здравствуйте. Буду краток.
Дано:
1. ТиС дооопииисаааанннааааяяяя
2. К объекту типа "Документ" (не проведенный), "Справочник" и т.д., не важно, могут устанавливаться статусы (например типа "перечисление" -со значениями "новый", "в обработке", "готов" и т.д.)
3. При решении задачи про регистр забыть, т.к. на мысль о новом документе (двигателе регистра) - отказано.

Найти:
1. Для объекта хранить историю изменения статусов в разрезе Объект/Дата/Время/Статус
2. Иметь возможность сделать срез по текущему состоянию объектов по статусу
3. Играться с отчетами вида: а) сколько времени объект находился в каком-либо статусе; б) был ли объект в определенном статусе; в) был ли переход из статуса1 в статус2 в) на какой статус был переход с определенного статуса; г) с какого статуса был переход на определенный статус; д) еще какой-нить ох...ный отчет
Примечания:
Прошу воспринимать не школярной/рабочей задачей, а личным интересом.
Заинтересовал именно вопрос организации хранения и выборки из истории. Регистр сведений из 8 - это, наверное, здорово, однако, тут 7.7 и без регистров.
)
Спасибо.
1 IamAlexy
 
06.11.11
03:39
перейди на 8ку, блеат!
2 IamAlexy
 
06.11.11
03:39
буть мужиком
3 Aleksey
 
06.11.11
03:53
1. Храни во внешней таблицы
2. Документ статус, Вводиться на основании документа и хранит в ТЧ историю статусов. Т.е. каждый раз когда статус изменяется - новая строка
3. Эмулировать РС на Справочнике. Колонка Объект (отбор, сортировка) и статусы твои, тоже с индексами поиграться надо для скорости
4 Aleksey
 
06.11.11
03:57
В принципи можно и 2 справочника замутить. Объект и подчинены статусы (если не будешь прямыми запросами данные таскать, то проще выборку организовывать (использоватьВладельца, ВыбратьЭлементы()))
5 дущ
 
06.11.11
06:44
Ну можно и регистр прикрутить. И не обязательно документ двигатель делать. Добавить в уже существующие документы частичное проведение по этому регистру при смене статуса. Только геморно, очень уж много менять всего.
А так в (3)(4) всё верно.
6 Stefan
 
06.11.11
19:30
(3)(4) эти варианты я прикидывал, спасибо.
(5) а это необычно. Думал все перебрал, но вот проводить "левым" документом регистру, прикольно )
(1) Дело не в 8, но без "срача в каментах" и пост не пост )
Спасибо всем.
7 Азат
 
06.11.11
19:33
(1), (2) сгореть в аду за такие советы не предлагале?
8 aleks-id
 
06.11.11
19:38
замутить справочник состояний объекта с периодическим реквизитом еще не предлагали?
9 skunk
 
06.11.11
19:41
как организовать история страусов? ... зачем страусам история?
10 Aleksey
 
06.11.11
20:25
(8) плохая мысль.
11 Stefan
 
06.11.11
20:27
(8) а как потом запросом "рыться" в периодических реквизитах без прямых запросов или тупо не перебирая?
12 Guk
 
06.11.11
20:31
в 8-ке у меня такое сделано на регистре сведений. логично предположить, что точно такое же в 7-ке можно сделать с помощью любого хранилища, аналогичного восьмерошному регистру сведений...
13 Злопчинский
 
06.11.11
20:57
как правило статусы - \то оперативная деятельность.. спустя неделю - эти статусы ИХ ИСТОРИЯ никого интересовать не будут. важен будет только текущий статус. ну и пройдутся перебором...
14 Guk
 
06.11.11
21:05
(13) не скажи, история статусов позволяет оценивать эффективность подразделений обрабатывающих документы и обнаруживать узкие места этой обработки...
15 Cthulhu
 
06.11.11
22:18
(13): итого.
0. Статус закодировать строкой фикс.длины (1, например), расшифровку по объектам - при необходимости(!) в отдельный справочник.
1. реквизит "АктуальныйСтатус", ясночо.
2. реквизит "СтатусыИстория" - строка длинная такая. В формате со спец.разделителями - хранила чтобы что надо в формате "дата+статус" (количество изменений статусов утвердается приказом, ответственные лица тоже). Доступ - только программый, куда надо прописать что надо для того чтобы показывало как надо и/или позволяло кому надо менять как надо.
16 Torquader
 
07.11.11
01:02
(15) Строки достаточно сложно анализировать, особенно, если захочется делать выборку по дате.
Очень просится справочник - если в наименование запихать дату-время, то останется два реквизита - чей статус и сам статус.
При желании, можно сделать справочник, в котором перечислены статусы, а хранилище статусов сделать подчинённым ему - тогда можно будет делать отбор по двум значениям сразу (определённый статус как отбор, и определённые дату-время как сортировку).
17 Cthulhu
 
07.11.11
01:39
(16): строки заранее отстроенного формата - очень легко анализировать. вне зависимости от построения выборки.
справочник и документ - разнотипные сущности, скрещивать их - плохая идея.
18 FN
 
07.11.11
01:47
Историю проще в mlg писать
19 Азат
 
07.11.11
01:54
(18) отличная тема - анализировать текстовый файл в несколько сот мегабайт...
20 Злопчинский
 
07.11.11
02:20
(14) все зависит от частностей; где-то история статусов может быть основным показателем работы, а где-то - всего лишь оперативным "узким" местом...
21 FN
 
07.11.11
09:57
(19) Ну если анализировать надо не часто, то очень легко делается:

find "OpenSession" 1cv7.mlg >opensession.csv
и получаем файлик в пару мегабайт только с нужными данными.
22 Mikeware
 
07.11.11
09:59
Эмуляция регистра сведений.
И все это работает...
23 Mikeware
 
07.11.11
10:00
(13) Бывает нужно для "разбора полетов"
24 Mikeware
 
07.11.11
10:01
Причем по статусам документов (и ролям пользователя) очень красиво организовывается обработка бизнес-процессов.
25 Ёпрст
 
07.11.11
10:05
(0)
для скуля - своя табличка в скуле
для дбф - своя табличка в sqlite базе или в дбф-файле.

Далее тупо прямым запросом запись  и чтение таблички.
Всё собственно.
26 Mikeware
 
07.11.11
10:09
(25) Собственно, чем "своя табличка" отличается от "дополнительного справочника"? :-)))
27 Ёпрст
 
07.11.11
10:19
(26) в случае дбф-базы прямым запросом не поапдейтишь справочник :(
28 ДенисЧ
 
07.11.11
10:20
927) серёзно?
29 0xFFFFFF
 
07.11.11
10:21
"Здравствуйте. Буду краток. "
День добрый, Владимир Владимирович.
30 Mikeware
 
07.11.11
10:22
(27) Можно. Хотя писать туда я предпочитаю штатными методами...
31 0xFFFFFF
 
07.11.11
10:23
Регистры, какие то отдельные таблицы в СКЛ. Ну насоветовали.
Чем справочник с прямыми запросами то не устраивает?.
32 Mikeware
 
07.11.11
10:34
(13) вот пример анализа: http://zalil.ru/32007272
и такое за каждый день. Можно делать сводный по дням - и сравнивать динамику обработки.
В принципе, вся эта информация есть "на кончике пальцев" у отдела логистики и у  сопровождения продаж, но тут она наглядна...
33 Mikeware
 
07.11.11
10:35
(31) люди путают "сущность" и "реализацию"
34 Ёпрст
 
07.11.11
10:46
(28) вполне.
Апдейтить\инсёртить\удалять можешь через фоксовый провайдер, а у него другой индексный файлик будет..
35 Stefan
 
07.11.11
11:58
Вообще, интересует штатный метод организации\хранения\выборки.

(32) ох...о ) Сколько времени строится отчет?
(22) а можно чуть подробнее
36 Mikeware
 
07.11.11
12:04
(35) 1. чуть более двух секунд.
2. справочник.
37 Stefan
 
07.11.11
12:10
(36) а выборка прямым или штатным запросом или... ?
38 Mikeware
 
07.11.11
12:14
(37) Прямыми, ессно. Я штатными не пользуюсь, ибо они "кривые" :-))
39 Ёпрст
 
07.11.11
12:15
(36) пишешь штатными методами, и.. в какой момент ?
40 Ёпрст
 
07.11.11
12:16
у нас статусы есть, но в самом доке слеплены.
41 Fr1eNd
 
07.11.11
12:16
В 7.7 в отличии от 8 реквезиты объектов могут быть переодическими, вот и храни в них информацию. можно хранить для каждого измерения свой реквезит, а можно просто в один строчный собирать разделяя из ";" типа: "Объект;Дата;Время;Статус". А в отчетах просто получать данные хоть запросом хоть через объектную модель, хоть всё в таблицу значений грузить и дальше все что угодно можно делать.
42 Fr1eNd
 
07.11.11
12:17
как раз и без регистров, и возможности 7.7 задействуешь, которых в 8 нет))))
43 viktor_vv
 
07.11.11
12:18
(41) Уже писали. Периодика хранится в обной таблице, зачем туда всю эту хрень писать. Строку потом замаешься парсить при обработке, плюс отборов не будет.
44 Mikeware
 
07.11.11
12:19
(39) В момент обработки соответсвующего шага БП.
(при выборе пункта меню, или при сканировании заявки, или при создании подчиненных документов)
45 Mikeware
 
07.11.11
12:19
(41) Нахрена плодить тормоза?
46 viktor_vv
 
07.11.11
12:20
Делал тоже через справочник. Правда у меня требования попроще были, особого анализа не надо было. В основном для разборок между отделом сбыта и снабжения.
47 Mikeware
 
07.11.11
12:20
Тьфуты, это 1986....
48 0xFFFFFF
 
07.11.11
12:21
(42) чего чего нет? Периодических реквизитов? Так это не "возможность", это кривой костыль.
49 Mikeware
 
07.11.11
12:22
(48) см (47)
50 Fr1eNd
 
07.11.11
12:24
(43) Что там сложного парсить, написал функции и она за тебя все делает.
Ну ещё 1 вариант, просто пиши и читай данные в отдельную dbf таблицу. И работает все быстро и парсить ничего не надо.
(47) Толсто
51 Fr1eNd
 
07.11.11
12:25
(48) Пользователям все равно им главное чтоб работало.
52 viktor_vv
 
07.11.11
12:26
(50) Написать-то несложно, только вот работать это все медленно будет, плюс в запросе нормально условия не наложишь.
53 Stefan
 
07.11.11
12:28
Коллеги, а прямой запрос формально считается штатным?
54 Fr1eNd
 
07.11.11
12:29
да работать не очень быстро будет наверное, хотя на sql версии несколько раз писал такие конструкции работало приемлемо и данных прилично
(53) нет
55 0xFFFFFF
 
07.11.11
12:29
(50) ЗА-ЧЕМ?
Штатно - справочник без всяких периодических реквизитов с индексами несколько десятков тыс элементов потянет даже без прямых запросов...
Нафига эти костыли с переброской периодики в ДБФ и прочим?
56 Ёпрст
 
07.11.11
12:30
(53) да.
57 0xFFFFFF
 
07.11.11
12:31
+(55) а если делать своевременную очистку старых периодов, то количество этих записей и не будет превышать сотню тыс записей.
58 pzk2
 
07.11.11
12:39
(0) т.к. в 7ке толку от запросов особо нету я сделал бы рекв. строка у документа неогр. и на форме таблица значений с колонками дата;статус приоткрыттии тз ЗначениеИзСтроки - призаписи -ЗначениеВСтроку. в отчетах скорость конечно просядет. А так если выписать для себя под это дело несколько функций по типу СколькоВиселВСтатусе(док.ссылка,"В ремонте") итд то можно лепить суперпупер  атчоты
59 viktor_vv
 
07.11.11
12:45
(58) Че-то мне имхается, это еще более кривое решение, чем периодика. А по запросам к справочнику присоединюсь к (55), даже штатные вполне себе пойдут до определенного предела по объему, причем объеи этот достаточно приличный.
60 Mikeware
 
07.11.11
12:45
(56) cпорный вопрос. Вообще, "штатным", наверное, могут считаться только некоторые конфы от 1С. :-) Даже в зике были какие-то заплатки для багофичей...
61 Mikeware
 
07.11.11
12:46
(59) тут даже трудно сравнивать - "более кривое" или "менее"...
62 viktor_vv
 
07.11.11
12:47
(61) Ну я помягче решил выразиться :).
63 Stefan
 
07.11.11
12:48
(54)(56) прям голосование ) по (53)

Короче, история статусов, в общем случае - справочник&прямой запрос.
...вот так вот простенько и без вые..ов )
64 Mikeware
 
07.11.11
12:52
(63) даже, как говорят, не обязательно прямой - можно и кривым....
Суть в том, что это периодика с отборами. В клюшках штатно она не реализуется. в снеговике это регистр сведений. Собственно, суть одна и та же - таблица. А уж как конкретно ее сделать - дело десятое... Лишь бы работало быстро и без ошибок...
65 viktor_vv
 
07.11.11
12:53
(63) Не, ну можешь туда еще блэк-джек и женщин легкого поведения прикрутить :)).
66 viktor_vv
 
07.11.11
12:54
(63) Для начала можно штатными попробовать, а походу дела определишься по скорости.
67 Mikeware
 
07.11.11
12:54
(65) Если нормально спроектировать - потребность в них появляется очень быстро...
68 viktor_vv
 
07.11.11
12:55
(67) В ком именно, в блек-джеке или женщинах легкого поведения :))) ?
69 Mikeware
 
07.11.11
13:00
(68) в обоих... типо, "и какая же [женщина л.п.] обрабатывала этот документ так, что он ..."
70 viktor_vv
 
07.11.11
13:04
(67) Согласен. Тут определиться какую инфу считать, писать в момент записи статуса, какую на этапе обработки. Например, время нахождения в конкрентом статусе можно считать в момент смены статуса, и писать в рекизит, а можно на этапе формирования отчета. Или, например, предыдущий статус тоже хранить в реквизите справочника . Больше места займет хранение и больше время записи, но быстрее и проще обработка и выборка будет.
Это уже ТС определять.
71 Mikeware
 
07.11.11
13:11
(70) "предыдущий статус тоже хранить в реквизите справочника . Больше места займет хранение" - тебе жалко 9 байт? :-)))
Вообще-то, я храню для контроля прохождения бизнеспроцесса...
Но вообще, зависит от задач...
72 viktor_vv
 
07.11.11
13:14
(71) Мне не жалко :)), я наоборот за такой вариант. Это как пример различной реализации одного и того же.
73 FN
 
07.11.11
13:29
(63) можно и без прямого запроса - штатными выборками из справочника будет быстро.
74 anddro
 
07.11.11
13:30
(0) в постановке задачи ты сам фактически дал ответы.
У тебя есть 2 разные задачи:
п.2: отчеты по текущему состоянию и итогам по ведущему объекту.
п.3: отчеты по смене состояний
При этом языку запросов 7.7 очень далеко до 8.*

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

Что хранить в справочниках, а что рассчитывать в запросах - тебе самому решать. Иногда быстрее расчеты делать при записи документа (одна запись на каждый переход), чем каждый раз при формировании отчета. Все зависит от того, что у тебя чаще выполняется и что критичнее.
Периодические реквизиты - имхо здесь зло.
75 FN
 
07.11.11
13:44
достаточно 1 справочник с реквизитами
-Код
-Объект (только для групп) с отбором
-Статус (для групп и элементов)
-Время/дата в удобном формате
Для удобства построения последующих отчетов по анализу можно добавить реквизиты.
-прошлый статус
-времянахождениявстатусе


На каждый объект делаем группу, внутри группы сама история.

Текущее состояние получаем:

спр.ВыбратьЭлементыПоРеквизиту("объект",объект,0,1)
актЭлемент=спр.ТекущийЭлемент();
актстатус=актЭлемент.статус;


историю получаем:

Спр.Использоватьродителя(актЭлемент);
спр.ПорядокКодов();
спр.ОбратныйПорядок(1); // тут изменяем хронологию
спр.ВыбратьЭлементы();
Пока спр.ПолучитьЭлемент()=1 Цикл
   Сообщить(""+спр.Код+" "+...);
КонецЦикла;
76 Mikeware
 
07.11.11
13:46
(74) что есть "заранее рассчитанную информацию по переходам между состояниями"?
Текущее состояние - еще понятно (это если не хочется делать общий реквизит)
"При этом языку запросов 7.7 очень далеко до 8.*" - потому и применяем прямые запросы...
77 Mikeware
 
07.11.11
13:56
(75) Неудобно, если нужно делать отборы по статусу...
78 FN
 
07.11.11
13:57
(77) ну добавить отбор/сортировку на "Статус" и "прошлыйстатус" - тут уж по желанию
79 anddro
 
07.11.11
14:00
(75) это очень хорошо, если надо получить данные по одному объекту. А если надо быстро отчетом по большому числу объектов - то уже не вариант.
(76) при прямых запросах можно вообще сделать полный аналог РС, тогда и тему поднимать не зачем.
"заранее рассчитанная" - зависит от требований отчетов: суммарное время в состоянии "В обработке", признак нарушения регламента по времени, и т.п. - т.е. то, что можно получить перебирая и анализируя историю состояний, но с целью ускорения отчетности вычисляется сразу при смене состояния.
80 FN
 
07.11.11
14:02
(79) Если отчет по большому числу объектов, то реквизит Объект делать не только для групп, но и для элементов + запросы/выборки для отчетов делать "без групп"
81 Mikeware
 
07.11.11
14:05
(79) Это во второй писать надо, припереходе состояния...
82 anddro
 
07.11.11
14:09
(80) тут надо определиться - что важнее: сэкономить дисковое место или повысить скорость отчетов
(81) то что длительность одного стояния должна быть во втором, это очевидно. Но в состоянии "В обработке" документ может находиться несколько раз. И для этого часть информации (которая нужна очень часто и получить можно перебором истории состояний) надо дублировать в первом (в котором записей столько, сколько ведущих объектов, а не сколько всего переходов).
83 Fr1eNd
 
07.11.11
14:11
Вообщем самое правильное в твоем случае садиться и писать исходя из того варианта который тебе наиболее всего понравился.
84 Злопчинский
 
07.11.11
14:18
(32) красиво! ;-)
а какой практический смысл такого анализа статусов...?
у меня в принципе тоже статусы пишутся/регистрируются, но пока что надобности в анализе таком не возникало.. потому как абсолютно по барабану в каком статусе заявка находится и вся предыдущая статстистика тоже - заявка выданная вовремя - должна быть собрана к требуемому времени. А выполнение этого условия никаким образом не зависит ни от истории статусов, ни от длительности этапов БП - все упирается в тупую статистику - а от нее - определение временных норм... так что единственный (вроде как) польза от таких красивых картинок - это определение технологических норм на ту или иную операцию/статус и обеспчение потребного количества людей/исполнителей... как-то так...
.
вот, например, у меня "статистика" нахождения заявки в статусе "отбор с мест хранения"
http://s017.radikal.ru/i412/1110/8d/9808a220197c.jpg
.
сами статусы по каждому объекту - пишу в табличную часть документа-регистратора - в котором фиксируется история "жизни" заявки...
85 Злопчинский
 
07.11.11
14:22
86 Злопчинский
 
07.11.11
14:26
http://s43.radikal.ru/i101/1111/96/b4e775c800ee.jpg
/
в итоге? надо сильно думать для чего нужны статусы, какая в будущем будет обработка этих статусво и прочее...
87 Mikeware
 
07.11.11
14:32
(84) По этим отчетам и наличию людей зачастую идет заказ дополнительного персонала ("временные работники" типа студенческого отряда)
(86)при "разборе полетов" - "почему затянут вывоз" - видно, в каком месте скапливались заявки - и соответственно, ответсвенное подразделение получает "по шапке"
88 Mikeware
 
07.11.11
14:34
+(87) слил.ру не работает почему-то, закинуть скрины не могу
89 Mikeware
 
07.11.11
14:40
радикал тоже не пашет, млин..
90 Mikeware
 
07.11.11
14:47
заработали, вроде...
У меня есть, допустим, такие отчеты - обновляются каждые 30 секунд:
http://s017.radikal.ru/i427/1111/99/0555b017e1cc.jpg
Именно по ним принимается решение по привлечению дополнительных грузчиков.
Или такие журналы:
http://s017.radikal.ru/i416/1111/74/b2a199233803.jpg
по ним видно, что сейчас в сборке, кто собирает, что собрано, что подготовлено к отгрузке (готов пакет документов) и т.п.
91 Злопчинский
 
07.11.11
15:10
(87) угумс... у планирую сигнализировать о нехватке "ресурсов" не постфактум, а еще на этапе запуска "заявки" в систему - если "не влазит" по ресурсам - то тут даже считать не надо - на графике ПОТОМ будет видно, что возник затык... ;-)
.
(9) у меня мониторчик не такой красивый... ;-) вскорости буду переписывать... на выдачу более развернутой инфы.. но подход немного другой будет... от крупных кнопок к детализации только при необходимости...
92 Mikeware
 
07.11.11
18:11
(91) У нас сложнее - вывоз заявки могут отменить из-за превышения дебиторки/просрочки. Поэтому заявки прилетают в течение дня, маршрутизируются после закрытия приема, а собираются выборочно (в зависимости от того, может быть "закрыт" клиент, или нет)
"мониторчик" тоже детализирует - окна "динамические". Хотя спорить с тобой по проработке интерфейса - бессмысленно... порвешь как тузик грелку... :-))
Закон Брукера: Даже маленькая практика стоит большой теории.