|
Версионирование объектов , нужен запрос | ☑ | ||
---|---|---|---|---|
0
Tarlich
29.04.17
✎
09:38
|
Есть договор , реквизит менеджер.
Хочу отчет по менеджерам за месяц о взаиморасчетах где в договорах.менеджер= &Менеджер в середине месяца договор.менеджер может поменяться механизм версионирования включен Так вот хочу тогда что бы если поменяли на другого менеджера то только с &НачалаМесяца по &ДатаКогдаПоменяли а если другого менеджера поменяли на &Менеджера тогда с &ДатаКогдаПоменяли по &КонецМнсяца Подскажите набросок хлть. спасибо! |
|||
1
Tarlich
29.04.17
✎
09:40
|
а еще получается что могли поменять 2 раза менеджера (т.е он был менеджером с 8.03.2017 по 24.03.2017)
тогда надо с &8.03.2017 по &24.03.2017 |
|||
2
Tarlich
29.04.17
✎
09:43
|
а может и на оборот - в начале был ОН , потом 10 дней другой, потом опять он..
|
|||
3
Tarlich
29.04.17
✎
09:45
|
трудность в том что не могу вносить изменения в конфу , а то бы сделал в документе или регистре запись о тек менеджере..
|
|||
4
MrStomak
29.04.17
✎
09:46
|
Кто-нибудь что-нибудь понял?
Версионирование реквизиты сохраняет в fastinfoset двоичные данные, запросом не доберешься. Только распаковывать все версии, помещать в тз и далее во временную таблицу запроса. |
|||
5
Flip
29.04.17
✎
09:53
|
(0) Если версионирование (как подсистима прикладного решения, а не платформеннное), включено, то можно в конфе отфильтровать метаданные по этой подсистеме, посмотреть в какие регистры пишутся данные, ну и по составу регистров уже писать запрос.
Если в регистрах есть период записи, то запрос в СКД будет строится по принципу "получить курсы валют на каждый день". |
|||
6
Tarlich
29.04.17
✎
09:55
|
(5) понял - брать не месяц а каждый день....
|
|||
7
Aleksey
29.04.17
✎
11:27
|
(5) Там же XML структура с данными. Т.е. запросом ты ничего не вытащишь. Нужно каждую запись разворачивать и смотреть реквизиты
|
|||
8
Flip
29.04.17
✎
11:44
|
(7) Эм, чего-то не очень понимаю о чем речь, я просто переносил из УПП 2.1 эту подсистему, и там вполне себе есть регистр:
http://radikal.ru][img]http://s008.radikal.ru/i303/1704/b4/03e5ef9ca8d5.jpg Или может в новых конфигурациях подсистема версионирования по другому реализована? |
|||
9
Flip
29.04.17
✎
11:45
|
||||
10
Галахад
гуру
29.04.17
✎
12:03
|
(9) Вот и вопрос, как запросом понять, какой из реквизитов объекта изменился?
|
|||
11
Aleksey
29.04.17
✎
12:05
|
(9) Все так. У тебя Измерения - ссылка на текущий объект и номер версии. А сами изменения хранятся в Ресурсе - версия объекта. И тип у него "ХранилищеЗначения" (ХЗ). С комментарием "Представление объекта в виде Fast InfoSet". Т.е. сериализация объекта в XML с сохранением этой строки в ХЗ.
И как ты предлагаешь делать запрос к строке хранящейся в ХЗ? МенеджерЗаписи.ВерсияОбъекта = Новый ХранилищеЗначения(ДанныеДляХранения(Объект.Ссылка), Новый СжатиеДанных(9)); |
|||
12
Aleksey
29.04.17
✎
12:06
|
Т.е.
Функция СериализоватьОбъект(Объект) Экспорт ЗаписьXML = Новый ЗаписьFastInfoset; ЗаписьXML.УстановитьДвоичныеДанные(); ЗаписьXML.ЗаписатьОбъявлениеXML(); ЗаписатьXML(ЗаписьXML, Объект, НазначениеТипаXML.Явное); Возврат ЗаписьXML.Закрыть(); КонецФункции |
|||
13
Tarlich
29.04.17
✎
12:08
|
Может как то в начале получу таблицу нужных договоров где будет 4 колонки : Договор, менеджер, ДатаС , датаПо?
|
|||
14
Aleksey
29.04.17
✎
12:11
|
(13) см (4)
|
|||
15
Flip
29.04.17
✎
12:25
|
Ага, теперь понятно, сам просто никогда такой задачей не занимался, поэтому подумалось, что в теории это просто будет, в том случае если объект - это составной тип, беру свои рекомендации назад...
ТС, сори что ввел в заблуждение :) |
|||
16
Klesk666
29.04.17
✎
12:33
|
Если УТ 11, то частично наверно может помочь реквизит "Автор", в заказе клиента
|
|||
17
Tarlich
29.04.17
✎
12:36
|
(16) "Автор" - это оператор а "Менеджер" - Это менеджер
|
|||
18
Flip
29.04.17
✎
13:28
|
(0) Как вариант, попробовать вот такой запрос (заказ надо поменять на менеджера), так ты увидишь в разрезе договора, по дням, как менялся менеджер:
ВЫБРАТЬ ВерсииОбъектов.Объект, НАЧАЛОПЕРИОДА(ВерсииОбъектов.ДатаВерсии, ДЕНЬ) КАК Период, ВЫРАЗИТЬ(ВерсииОбъектов.Объект КАК Документ.ЗаказПокупателя).ДоговорКонтрагента КАК Договор ПОМЕСТИТЬ ДатыИзменения ИЗ РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов ГДЕ ВерсииОбъектов.Объект ССЫЛКА Документ.ЗаказПокупателя И ВерсииОбъектов.ДатаВерсии >= &Нач И ВерсииОбъектов.ДатаВерсии <= &Кон СГРУППИРОВАТЬ ПО ВерсииОбъектов.Объект, НАЧАЛОПЕРИОДА(ВерсииОбъектов.ДатаВерсии, ДЕНЬ), ВЫРАЗИТЬ(ВерсииОбъектов.Объект КАК Документ.ЗаказПокупателя).ДоговорКонтрагента ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, ДЕНЬ) КАК ДатаКалендаря ПОМЕСТИТЬ Календарь ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь ГДЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря >= &Нач И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= &Кон ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДатыИзменения.Договор КАК Договор, Календарь.ДатаКалендаря КАК ДатаКалендаря, ДатыИзменения.Объект КАК Объект ИЗ Календарь КАК Календарь ЛЕВОЕ СОЕДИНЕНИЕ ДатыИзменения КАК ДатыИзменения ПО Календарь.ДатаКалендаря >= ДатыИзменения.Период ИТОГИ ПО Договор |
|||
19
Flip
29.04.17
✎
13:30
|
Но вот как дальше сделать так чтобы, таблица была до даты изменения менеджера договора, хз, можно наверное сделать 2 набора данных и объединить их по датам, может и проканает ... :)
|
|||
20
Tarlich
11.05.17
✎
00:29
|
Зашел в тупик :
Количество договоров огромное) //Второй запрос Запрос = новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВерсииОбъектов.Объект КАК Объект, | ВерсииОбъектов.НомерВерсии КАК НомерВерсии, | ВерсииОбъектов.ВерсияОбъекта КАК ВерсияОбъекта, | ВерсииОбъектов.ДатаВерсии КАК ДатаВерсии, | ВЫРАЗИТЬ(ВерсииОбъектов.Объект КАК Справочник.ДоговорыКонтрагентов) КАК Дог |ИЗ | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов |ГДЕ | ВерсииОбъектов.ДатаВерсии МЕЖДУ &ДатаС И &ДатаПо | И ТИПЗНАЧЕНИЯ(ВерсииОбъектов.Объект.Ссылка) = ТИП(справочник.ДоговорыКонтрагентов) | |УПОРЯДОЧИТЬ ПО | ДатаВерсии" ; Запрос.УстановитьПараметр("ДатаС",ЭтаФорма.Отчет.ДатаС); Запрос.УстановитьПараметр("ДатаПо",КонецДня(ЭтаФорма.Отчет.ДатаПо)); |
|||
21
Tarlich
11.05.17
✎
00:30
|
Запрос то работает.
задействовал типовые механизмы что бы разложить: Функция ПолучитьОтветственногоПоВерсии(об,версия) ОписаниеОбъекта =ВерсионированиеОбъектов.РазборВерсии(Об,версия); ТабличныеДокументы = ОписаниеОбъекта.реквизиты; Для Каждого ЭлементСтруктуры Из ТабличныеДокументы Цикл если ЭлементСтруктуры.НаименованиеРеквизита = "Ответственный" тогда Возврат ЭлементСтруктуры.ЗначениеРеквизита; КонецЕсли; КонецЦикла; КонецФункции то же работает |
|||
22
Tarlich
11.05.17
✎
00:33
|
как сделать что бы в тз попали договора у которых за данный период был нужный мне менеджер и он за этот месяц не менялся ??? (закипаю...)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |