Имя: Пароль:
1C
1С v8
СКД. Запрос. Выбор из регистра за период
0 Альбатрос
 
04.10.12
07:14
Привет всем! Есть запрос:
1 ZanderZ
 
04.10.12
07:15
хороший запрос
2 Альбатрос
 
04.10.12
07:15
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ТаблКонтрагенты.Контрагент,
   ТаблПродажи.Номенклатура,
   ТаблПродажи.Период
ПОМЕСТИТЬ ВТПродажи
ИЗ
   (ВЫБРАТЬ
       Контрагенты.Ссылка КАК Контрагент
   ИЗ
       Справочник.Контрагенты КАК Контрагенты
   ГДЕ
       Контрагенты.Ссылка В(&СписокКонтрагентов)) КАК ТаблКонтрагенты
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           Продажи.Номенклатура КАК Номенклатура,
           Продажи.Период КАК Период,
           Продажи.Контрагент КАК Контрагент
       ИЗ
           РегистрНакопления.Продажи КАК Продажи
       ГДЕ
           Продажи.Контрагент В(&СписокКонтрагентов)
       
       СГРУППИРОВАТЬ ПО
           Продажи.Период,
           Продажи.Номенклатура,
           Продажи.Контрагент) КАК ТаблПродажи
       ПО ТаблКонтрагенты.Контрагент = ТаблПродажи.Контрагент

СГРУППИРОВАТЬ ПО
   ТаблКонтрагенты.Контрагент,
   ТаблПродажи.Период,
   ТаблПродажи.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВТПродажи.Контрагент,
   ВЫБОР
       КОГДА МАКСИМУМ(ВТПродажи.Период) ЕСТЬ NULL
           ТОГДА ЛОЖЬ
       ИНАЧЕ ИСТИНА
   КОНЕЦ КАК БылиСделки
ПОМЕСТИТЬ ВТБылиСделки
ИЗ
   ВТПродажи КАК ВТПродажи

СГРУППИРОВАТЬ ПО
   ВТПродажи.Контрагент
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВТПродажи.Контрагент,
   ВТПродажи.Номенклатура,
   ВТПродажи.Период,
   ВТБылиСделки.БылиСделки КАК БылиСделки
ИЗ
   ВТПродажи КАК ВТПродажи
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТБылиСделки КАК ВТБылиСделки
       ПО ВТПродажи.Контрагент = ВТБылиСделки.Контрагент

Как в Регистре продажи задать период выборки?
3 Альбатрос
 
04.10.12
07:15
(1) Действия опережают мысль )
4 rphosts
 
04.10.12
07:19
зачем у регистра запросов в 1 запросе пакета стоит Продажи.Контрагент В(&СписокКонтрагентов) если ты регистр соединяешь левым соединением с контрагентами причём слева контрагенты!

ты это из условия убери и добавь условие на период
5 rphosts
 
04.10.12
07:20
регистра запросов = регистра продажи
6 Альбатрос
 
04.10.12
07:23
(4) Запрос не мой. Разве это не означает, что мы выбрали контрагентов из списка, а потом по этому списку соединяем с регистром продаж? Чтоб не попали ненужные нам контрагенты.
7 Альбатрос
 
04.10.12
07:24
(4) А все, понял, про что вы
8 Альбатрос
 
04.10.12
07:25
(5) Не понял, как это условие впихать
9 rphosts
 
04.10.12
07:28
(8) ГДЕ  Продажи.Период> &Дата1 и Продажи.Период< &Дата2
10 Живой Ископаемый
 
04.10.12
07:46
Простите, я пропустил наверное что-то, Когда мы отмечаем день, с которого уже лучше условие писать не в параметрах виртуальной таблицы?
11 Живой Ископаемый
 
04.10.12
07:49
или задача действительно состоит в том, чтобы получить каждую запись регистра?

ИЗ
           РегистрНакопления.Продажи КАК Продажи
       ГДЕ
           Продажи.Контрагент В(&СписокКонтрагентов)

Но нет, дальше идет группировка, значит все-таки не нужны отдельные записи... Или все-таки нужны?
12 rphosts
 
04.10.12
07:51
(11) ну мы-же не знаем каике там измерения в регистре... такие выверты иногда встречал... а что делать - хрень уже давно в эксплуатации
13 Живой Ископаемый
 
04.10.12
07:53
(0) Автор, Контрагенты и номенклатура - это реквизиты или измерения?
то что Период - измерение мы все-таки знаем.
14 rphosts
 
04.10.12
07:58
(13) кста, встречал такое что контрагенты были в реквизитах....
15 Альбатрос
 
04.10.12
08:13
(13) Щас гляну. Тут как бэ вообще сложный для меня отчет на СКД, я его расколупать пытаюсь...
16 Живой Ископаемый
 
04.10.12
08:15
2(15) просто вполне возможно его упростить, если сделать по-человечески
17 Альбатрос
 
04.10.12
08:19
По ходу дела, запрос не тот ))))
Вот основной запрос по основной СКД:

ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ТаблКонтрагенты.Контрагент,
   ТаблКонтрагенты.ОтделПродаж,
   ТаблКонтрагенты.Регион,
   ТаблКонтрагенты.ОсновнойМенеджерПокупателя,
   ЕСТЬNULL(СтадииВзаимоотношенийСПокупателямиСрезПоследних.Стадия, ЗНАЧЕНИЕ(Перечисление.СтадииВзаимоотношенийСПокупателями.ПустаяСсылка)) КАК СтадияВзаимоотношений,
   ЕСТЬNULL(ПланыПродаж.План, ЗНАЧЕНИЕ(Перечисление.Планы.ПустаяСсылка)) КАК План,
   НЕОПРЕДЕЛЕНО КАК БылиСделки,
   ТаблКонтрагенты.Контрагент.ОсновнойВидДеятельности КАК ОсновнойВидДеятельности,
   ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) КАК ПокупаемаяНоменклатура,
   ЕСТЬNULL(ВнешниеДанныеОКонтрагентахОборудованиеИТехника.Ссылка, "") КАК СсылкаОборудованиеИТехника,
   ЕСТЬNULL(ВнешниеДанныеОКонтрагентахОборудованиеИТехника.ДатаАктуальности, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаАктуальностиОборудованиеИТехника,
   ЕСТЬNULL(ВнешниеДанныеОКонтрагентахПотребляемыеСмазочныеМатериалы.Ссылка, "") КАК СсылкаПотребляемыеСмазочныеМатериалы,
   ЕСТЬNULL(ВнешниеДанныеОКонтрагентахПотребляемыеСмазочныеМатериалы.ДатаАктуальности, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаАктуальностиПотребляемыеСмазочныеМатериалы,
   ЕСТЬNULL(ВнешниеДанныеОКонтрагентахСтруктураПредприятия.Ссылка, "") КАК СсылкаСтруктураПредприятия,
   ЕСТЬNULL(ВнешниеДанныеОКонтрагентахСтруктураПредприятия.ДатаАктуальности, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаАктуальностиСтруктураПредприятия,
   ДАТАВРЕМЯ(1, 1, 1) КАК ПериодСделок
ИЗ
   (ВЫБРАТЬ
       Контрагенты.Ссылка КАК Контрагент,
       Контрагенты.ОтделПродаж КАК ОтделПродаж,
       Контрагенты.Регион КАК Регион,
       Контрагенты.ОсновнойМенеджерПокупателя КАК ОсновнойМенеджерПокупателя
   ИЗ
       Справочник.Контрагенты КАК Контрагенты
   ГДЕ
       НЕ Контрагенты.ЭтоГруппа
       И Контрагенты.Покупатель
       И НЕ Контрагенты.ПометкаУдаления
   {ГДЕ
       Контрагенты.ОтделПродаж.*,
       Контрагенты.Регион.*,
       Контрагенты.ОсновнойМенеджерПокупателя.*}) КАК ТаблКонтрагенты
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтадииВзаимоотношенийСПокупателями.СрезПоследних(, {(Контрагент)}) КАК СтадииВзаимоотношенийСПокупателямиСрезПоследних
       ПО ТаблКонтрагенты.Контрагент = СтадииВзаимоотношенийСПокупателямиСрезПоследних.Контрагент
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ПланыПродажОбороты.Контрагент КАК Контрагент,
           ПланыПродажОбороты.Сценарий.План КАК План
       ИЗ
           РегистрНакопления.ПланыПродаж.Обороты(
                   ,
                   ,
                   Запись,
                   Сценарий.План <> ЗНАЧЕНИЕ(Перечисление.Планы.ПустаяСсылка)
                       И Сценарий.Назначение = ЗНАЧЕНИЕ(Перечисление.НазначенияПлановПродаж.Рабочий) {(Контрагент)}) КАК ПланыПродажОбороты
       ГДЕ
           ВЫБОР
                   КОГДА ПланыПродажОбороты.Сценарий.Периодичность = ЗНАЧЕНИЕ(Перечисление.Периодичность.Квартал)
                       ТОГДА НАЧАЛОПЕРИОДА(&РабочаяДата, КВАРТАЛ) <= ПланыПродажОбороты.Период
                   ИНАЧЕ ВЫБОР
                           КОГДА ПланыПродажОбороты.Сценарий.Периодичность = ЗНАЧЕНИЕ(Перечисление.Периодичность.Месяц)
                               ТОГДА НАЧАЛОПЕРИОДА(&РабочаяДата, МЕСЯЦ) <= ПланыПродажОбороты.Период
                           ИНАЧЕ ВЫБОР
                                   КОГДА ПланыПродажОбороты.Сценарий.Периодичность = ЗНАЧЕНИЕ(Перечисление.Периодичность.Неделя)
                                       ТОГДА НАЧАЛОПЕРИОДА(&РабочаяДата, НЕДЕЛЯ) <= ПланыПродажОбороты.Период
                                   ИНАЧЕ ЛОЖЬ
                               КОНЕЦ
                       КОНЕЦ
               КОНЕЦ
       
       СГРУППИРОВАТЬ ПО
           ПланыПродажОбороты.Контрагент,
           ПланыПродажОбороты.Сценарий.План) КАК ПланыПродаж
       ПО ТаблКонтрагенты.Контрагент = ПланыПродаж.Контрагент
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВнешниеДанныеОКонтрагентах КАК ВнешниеДанныеОКонтрагентахОборудованиеИТехника
       ПО ТаблКонтрагенты.Контрагент = ВнешниеДанныеОКонтрагентахОборудованиеИТехника.Контрагент
           И (ВнешниеДанныеОКонтрагентахОборудованиеИТехника.ТипДанных = ЗНАЧЕНИЕ(Перечисление.ТипыВнешнихДанныхОКонтрагентах.ОборудованиеИТехника))
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВнешниеДанныеОКонтрагентах КАК ВнешниеДанныеОКонтрагентахПотребляемыеСмазочныеМатериалы
       ПО ТаблКонтрагенты.Контрагент = ВнешниеДанныеОКонтрагентахПотребляемыеСмазочныеМатериалы.Контрагент
           И (ВнешниеДанныеОКонтрагентахОборудованиеИТехника.ТипДанных = ЗНАЧЕНИЕ(Перечисление.ТипыВнешнихДанныхОКонтрагентах.ПотребляемыеСмазочныеМатериалы))
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВнешниеДанныеОКонтрагентах КАК ВнешниеДанныеОКонтрагентахСтруктураПредприятия
       ПО ТаблКонтрагенты.Контрагент = ВнешниеДанныеОКонтрагентахСтруктураПредприятия.Контрагент
           И (ВнешниеДанныеОКонтрагентахОборудованиеИТехника.ТипДанных = ЗНАЧЕНИЕ(Перечисление.ТипыВнешнихДанныхОКонтрагентах.СтруктураПредприятия))
18 Альбатрос
 
04.10.12
08:20
+(17) Зачем нужна была схема из (2) я так и не понял
19 Альбатрос
 
04.10.12
08:21
Моя задача: Выбрать контрагентов, у которых были/не были продажи за какой-то период + по конкретной номенклатуре
20 Альбатрос
 
04.10.12
08:22
что означает сия строчка: ДАТАВРЕМЯ(1, 1, 1) КАК ПериодСделок?
21 Живой Ископаемый
 
04.10.12
08:26
2(19) А что такое "были продажи"? То есть оборот по РН (внимание на название регистра) ПЛАНЫПРОДАЖ?
22 Живой Ископаемый
 
04.10.12
08:28
Короче, гна твой вопрос ответит запрос типа:

ВЫБРАТЬ
           Продажи.Номенклатура КАК Номенклатура,
           Продажи.Период КАК Период,
           Продажи.Контрагент КАК Контрагент
       ИЗ
           РегистрНакопления.Продажи.Обороты(Задать Условие по периоду и конкретной номенклатуре здесь, в параметрах виртуальной таблицы) КАК Продажи

Он вернет контрагентов у которых были продажи. По все остальные которые есть в справочнике Контрагенты, продаж не было
23 Альбатрос
 
04.10.12
09:19
(22) Это да, но как это прекрутить к СКЛ с запросом из (17)? Причем период, как я понял должен определяться через "ДАТАВРЕМЯ(1, 1, 1) КАК ПериодСделок"
24 Живой Ископаемый
 
04.10.12
09:43
2(23) Тогда сформулируй задачу полностью, а не как в (19)
25 Альбатрос
 
04.10.12
10:23
(24) Охх... В принципе, в (19) сформулировано правильно, остается добавить что продажи нужно дернуть из регистра продажи, а не планы продаж...Просто тут нужно видеть всю картину целиком, и настройки СКД, и отборы, и модуль отчета, а не только запрос. Вообщем, спасибо за отклики и помощь. Попытаюсь сам раскопать как-нибудь.