Имя: Пароль:
1C
1С v8
Воспрос -Запрос ))
,
0 Baglandir
 
25.10.12
23:06
Вобщим ситуация следующая

Предисловие
В документе сделка, - в регистре взаиморасчеты у нас есть поле торговая точка.  
За каждой торговой точкой закреплен свой менеджер.
Меняется менеджер документом, и история по менеджерам ведется в регистре сведений.

У меня сейчас стоит задача сделать отчет в котором будет отображатся актуальный менеджер на дату.

К примеру - на 01.01.2012 за торговой точкой был закреплен "Вася пупкин"

А на 10.01.2012 за ТТ закрепили "Дмитрия Цветкова"

Внимание вопрос : Как вывести поле в запросе с данным менеджером ?


Мой запрос который есть сейчас :

ВЫБРАТЬ
   Взаиморасчеты.Регистратор,
   Взаиморасчеты.ДоговорКонтрагента,
   Взаиморасчеты.Сделка,
   Взаиморасчеты.Организация,
   Взаиморасчеты.Контрагент,
   Взаиморасчеты.СуммаВзаиморасчетовНачальныйОстаток,
   Взаиморасчеты.СуммаВзаиморасчетовПриход,
   Взаиморасчеты.СуммаВзаиморасчетовРасход,
   Взаиморасчеты.СуммаВзаиморасчетовКонечныйОстаток,
   МенеджерыПоТТ.Менеджер
ИЗ
   (ВЫБРАТЬ
       ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Сделка.Подразделение КАК СделкаПодразделение,
       ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента,
       ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Сделка КАК Сделка,
       ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Организация КАК Организация,
       ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Сделка.ТорговаяТочка КАК СделкаТорговаяТочка,
       ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Контрагент КАК Контрагент,
       ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор КАК Регистратор,
       ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовНачальныйОстаток КАК СуммаВзаиморасчетовНачальныйОстаток,
       ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовПриход КАК СуммаВзаиморасчетовПриход,
       ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовРасход КАК СуммаВзаиморасчетовРасход,
       ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток КАК СуммаВзаиморасчетовКонечныйОстаток
   ИЗ
       РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&ДатаНачала, &ДатаКонца, Регистратор, , ) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты) КАК Взаиморасчеты
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
           СрезПоследних.Период КАК Период,
           СрезПоследних.Регистратор КАК Регистратор,
           СрезПоследних.ТорговаяТочка КАК ТорговаяТочка,
           СрезПоследних.Менеджер КАК Менеджер
       ИЗ
           (ВЫБРАТЬ
               МенеджерыПоТорговымТочкамСрезПоследних.Период КАК Период,
               МенеджерыПоТорговымТочкамСрезПоследних.Регистратор КАК Регистратор,
               МенеджерыПоТорговымТочкамСрезПоследних.ТорговаяТочка КАК ТорговаяТочка,
               МенеджерыПоТорговымТочкамСрезПоследних.Менеджер КАК Менеджер
           ИЗ
               РегистрСведений.МенеджерыПоТорговымТочкам.СрезПоследних(&ДатаНачала, ) КАК МенеджерыПоТорговымТочкамСрезПоследних) КАК СрезПоследних
       
       ОБЪЕДИНИТЬ ВСЕ
       
       ВЫБРАТЬ
           МенеджерыПоТорговымТочкам.Период,
           МенеджерыПоТорговымТочкам.Регистратор,
           МенеджерыПоТорговымТочкам.ТорговаяТочка,
           МенеджерыПоТорговымТочкам.Менеджер
       ИЗ
           РегистрСведений.МенеджерыПоТорговымТочкам КАК МенеджерыПоТорговымТочкам
       ГДЕ
           МенеджерыПоТорговымТочкам.Период МЕЖДУ &ДатаНачала И &ДатаКонца) КАК МенеджерыПоТТ
       ПО Взаиморасчеты.СделкаТорговаяТочка = МенеджерыПоТТ.ТорговаяТочка
           И Взаиморасчеты.Сделка.Дата < МенеджерыПоТТ.Период



Также я думал вывести непосредственно в поле "Менеджер" результат среза последних  по торговой точке
вот таким образом
ВЫБРАТЬ
   МенеджерыПоТорговымТочкамСрезПоследних.Менеджер
ИЗ
   РегистрСведений.МенеджерыПоТорговымТочкам.СрезПоследних(Взаиморасчеты.Сделка.Дата,МенеджерыПоТорговымТочкамСрезПоследних.ТорговаяТочка = Взаиморасчеты.СделкаТорговаяТочка ) КАК МенеджерыПоТорговымТочкамСрезПоследних

Но понятное дело таким образом оно не дает заполнить поле.

Если есть идеи - пишите :)
1 Baglandir
 
25.10.12
23:11
Получается мне необходимо по каждой строке сделать что-то типа среза последних на дату документа
2 Baglandir
 
25.10.12
23:11
помню когда-то запрос делал с курсами валют там какая то очень похожая задача стояла - но не помню как сделал...
3 zladenuw
 
25.10.12
23:22
так тут был не 1 раз. что бы получить срез последних на дату. думаю сможешь прикруть что бы был к ссылке. по щукай
4 AlexNew
 
25.10.12
23:41
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МенеджерыПоТорговымТочкам КАК МенеджерыПоТорговымТочкам
ПО МенеджерыПоТорговымТочкам.Период <= Взаиморасчеты.Период
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МенеджерыПоТорговымТочкам КАК МенеджерыПоТорговымТочкамМакс
ПО МенеджерыПоТорговымТочкам.Период < МенеджерыПоТорговымТочкамМакс.Период
ГДЕ МенеджерыПоТорговымТочкамМакс.Период ЕСТЬ NULL
5 zladenuw
 
26.10.12
00:24
(0) мозг рулит
6 zladenuw
 
26.10.12
00:24
(5) опятка (0) на  (4)
7 Baglandir
 
26.10.12
00:52
(4) не могу понять ... Если можно детальней.. спасибо
8 zladenuw
 
26.10.12
01:03
давай 100500. будет детальней. блин надо яндекс кошелек
9 Baglandir
 
26.10.12
11:02
задача продолжает быть актуальной...
10 DexterMorgan
 
26.10.12
11:12
Баянистый баян...
У тебя есть таблица Менеджер, Дата. Чтобы получить срез последних на каждую дату нужно соединить ее с реальной таблицы регистра сведений по условию (ДатаТвоейТаблицы >= ПолеПериодРЕгистра И Менедежер = Менеджер) и сгруппировать Макс(ПолеПериодРЕгистра). Таким образом ты получишь даты регистра, остается по этим датам получить значения из регистра (опять соединение с реальной таблицей)
11 Baglandir
 
26.10.12
15:17
(10) Спасибо - получил менеджеров актуальных на дату документа, теперь думаю как их связать с взаиморачетами.
Если добавить поле в запросе по связке менеджеров - запрос некорректоно работает

ВЫБРАТЬ
   МенеджерыПоТорговымТочкам.Менеджер,
   ПериодПоТТ.СделкаТорговаяТочка,
   ПериодПоТТ.Период1
ИЗ
   (ВЫБРАТЬ
       взаиморачеты.СделкаТорговаяТочка КАК СделкаТорговаяТочка,
       МенеджерПоТТ.ТорговаяТочка КАК ТорговаяТочка,
       МАКСИМУМ(МенеджерПоТТ.Период1) КАК Период1
   ИЗ
       (ВЫБРАТЬ
           ВзаиморасчетыСКонтрагентами.Регистратор КАК Регистратор,
           ВзаиморасчетыСКонтрагентами.Сделка.ТорговаяТочка КАК СделкаТорговаяТочка,
           КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВзаиморасчетыСКонтрагентами.Период) КАК Период
       ИЗ
           РегистрНакопления.ВзаиморасчетыСКонтрагентами КАК ВзаиморасчетыСКонтрагентами
       ГДЕ
           ВзаиморасчетыСКонтрагентами.Период МЕЖДУ &датанач И &датакон
       
       СГРУППИРОВАТЬ ПО
           ВзаиморасчетыСКонтрагентами.Регистратор,
           ВзаиморасчетыСКонтрагентами.Сделка.ТорговаяТочка) КАК взаиморачеты
           ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
               МенеджерыПоТорговымТочкам.Период КАК Период1,
               МенеджерыПоТорговымТочкам.ТорговаяТочка КАК ТорговаяТочка
           ИЗ
               РегистрСведений.МенеджерыПоТорговымТочкам КАК МенеджерыПоТорговымТочкам) КАК МенеджерПоТТ
           ПО взаиморачеты.СделкаТорговаяТочка = МенеджерПоТТ.ТорговаяТочка
               И взаиморачеты.Период <= МенеджерПоТТ.Период1
   
   СГРУППИРОВАТЬ ПО
       взаиморачеты.СделкаТорговаяТочка,
       МенеджерПоТТ.ТорговаяТочка) КАК ПериодПоТТ
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.МенеджерыПоТорговымТочкам КАК МенеджерыПоТорговымТочкам
       ПО ПериодПоТТ.Период1 = МенеджерыПоТорговымТочкам.Период
           И ПериодПоТТ.СделкаТорговаяТочка = МенеджерыПоТорговымТочкам.ТорговаяТочка


Мне необходимо привязать их к типовым взаиморасчетам. Вопрос как ?
12 Baglandir
 
26.10.12
15:20
(11) Добавить поле Регистратор
13 hhhh
 
26.10.12
15:20
(11) заведите отдельный регистр "ВзаиморасчетыПоМенеджерам". Чего вы паритесь?
14 Baglandir
 
26.10.12
15:44
(13) я подумаю над этим предложением. Спасибо

финальный запрос выглядит так :


                              ВЫБРАТЬ
   ФинальнаяМенеджераПоТТ.СделкаТорговаяТочка,
   ФинальнаяМенеджераПоТТ.Менеджер,
   ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор,
   ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента,
   ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Сделка,
   ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Организация,
   ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Контрагент,
   ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовНачальныйОстаток,
   ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовПриход,
   ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовРасход,
   ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток
ИЗ
   РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, Движения, ) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           МенеджерыПоТорговымТочкам.Менеджер КАК Менеджер,
           ПериодПоТТ.СделкаТорговаяТочка КАК СделкаТорговаяТочка,
           ПериодПоТТ.Регистратор КАК Регистратор
       ИЗ
           (ВЫБРАТЬ
               взаиморачеты.СделкаТорговаяТочка КАК СделкаТорговаяТочка,
               МенеджерПоТТ.ТорговаяТочка КАК ТорговаяТочка,
               МАКСИМУМ(МенеджерПоТТ.Период1) КАК Период1,
               взаиморачеты.Регистратор КАК Регистратор
           ИЗ
               (ВЫБРАТЬ
                   ВзаиморасчетыСКонтрагентами.Регистратор КАК Регистратор,
                   ВзаиморасчетыСКонтрагентами.Сделка.ТорговаяТочка КАК СделкаТорговаяТочка,
                   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВзаиморасчетыСКонтрагентами.Период) КАК Период
               ИЗ
                   РегистрНакопления.ВзаиморасчетыСКонтрагентами КАК ВзаиморасчетыСКонтрагентами
               ГДЕ
                   ВзаиморасчетыСКонтрагентами.Период МЕЖДУ &НачалоПериода И &КонецПериода
               
               СГРУППИРОВАТЬ ПО
                   ВзаиморасчетыСКонтрагентами.Регистратор,
                   ВзаиморасчетыСКонтрагентами.Сделка.ТорговаяТочка) КАК взаиморачеты
                   ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                       МенеджерыПоТорговымТочкам.Период КАК Период1,
                       МенеджерыПоТорговымТочкам.ТорговаяТочка КАК ТорговаяТочка
                   ИЗ
                       РегистрСведений.МенеджерыПоТорговымТочкам КАК МенеджерыПоТорговымТочкам) КАК МенеджерПоТТ
                   ПО взаиморачеты.СделкаТорговаяТочка = МенеджерПоТТ.ТорговаяТочка
                       И взаиморачеты.Период <= МенеджерПоТТ.Период1
           
           СГРУППИРОВАТЬ ПО
               взаиморачеты.СделкаТорговаяТочка,
               МенеджерПоТТ.ТорговаяТочка,
               взаиморачеты.Регистратор) КАК ПериодПоТТ
               ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.МенеджерыПоТорговымТочкам КАК МенеджерыПоТорговымТочкам
               ПО ПериодПоТТ.Период1 = МенеджерыПоТорговымТочкам.Период
                   И ПериодПоТТ.СделкаТорговаяТочка = МенеджерыПоТорговымТочкам.ТорговаяТочка
       
       СГРУППИРОВАТЬ ПО
           ПериодПоТТ.СделкаТорговаяТочка,
           МенеджерыПоТорговымТочкам.Менеджер,
           ПериодПоТТ.Регистратор) КАК ФинальнаяМенеджераПоТТ
       ПО (ФинальнаяМенеджераПоТТ.СделкаТорговаяТочка = ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Сделка.ТорговаяТочка)
           И ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор = ФинальнаяМенеджераПоТТ.Регистратор

УПОРЯДОЧИТЬ ПО
   ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Период

Спасибо всем кто помогал !
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший