Имя: Пароль:
1C
 
Версионирование объектов , нужен запрос
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
как сделать что бы в тз попали договора у которых за данный период был нужный мне менеджер и он за этот месяц не менялся ??? (закипаю...)