Имя: Пароль:
1C
1С v8
Результат исполнения запроса и результат СКД
0 al_zzz
 
09.06.12
11:58
Хочу получить с помощью СКД продажи оптовых складов:
ВЫБРАТЬ
   ПродажиОбороты.Номенклатура,
   ПродажиОбороты.КоличествоОборот
ИЗ
   РегистрНакопления.Продажи.Обороты(
           &НачалоПериода,
           &КонецПериода,
           Регистратор,
           Номенклатура <> &ПустоеЗначение
               И (НЕ Контрагент В ИЕРАРХИИ (&СобственныеКонтрагенты)) {Номенклатура.*, (ДокументПродажи.Склад).* КАК Склад}) КАК ПродажиОбороты
Задаю отбор ДокументПродажи.Склад.ВидСклада = Перечисления.ВидыСкладов.Оптовый.
Некоторые позиции не выводятся, в то время, как запрос:
ВЫБРАТЬ
   ПродажиОбороты.Номенклатура,
   ПродажиОбороты.КоличествоОборот
ИЗ
   РегистрНакопления.Продажи.Обороты(
           &НачалоПериода,
           &КонецПериода,
           Регистратор,
           Номенклатура <> &ПустоеЗначение
               И (НЕ Контрагент В ИЕРАРХИИ (ы)) И Номенклатура=&Номенклатура и ДокументПродажи.Склад.ВидСклада = &Вид) КАК ПродажиОбороты
в консоли считает верно.
В чем разница между исполнением данных запросов? Почему так получается?
1 Cube
 
09.06.12
12:04
(0) Уверен, что период одинаковый указал? :)
2 Cube
 
09.06.12
12:04
+(1) Сто пудово не попадают позиции с временем 23:59:59... :)
3 ChAlex
 
09.06.12
12:04
(0) Внимательно смотрите какие условия и где накладываете. Выводить будет точно одно и тоже, если все правильно укажете. может вы условие указываете на уровне группировки, ане отчета. Может не включен доступ к выбору реквизитов полей (ведь скалад.видсклада - реквизит поля) и т.п.
4 ChAlex
 
09.06.12
12:05
(+2) - поддерживаю
5 ChAlex
 
09.06.12
12:06
(2) -более того весь день, а не секунда :)
6 al_zzz
 
09.06.12
12:08
(5) Подскажите, как сделать, чтоб весь день попал?
7 al_zzz
 
09.06.12
12:10
(5)В параметрах СКД стоит КонецПериода(&КонецПериода,"День"). Но дело точно не в этом - продажа в середине периода.
8 ChAlex
 
09.06.12
12:11
(7) - вы наверное в запрос тогда не тот период устанавливаете - и получаете разный результат.
9 ChAlex
 
09.06.12
12:12
(7) - суть в том, что запрос элементарно простой и голову здесь ломать сильно негде. Все работате - это точно. А вот что вы в ограничения и параметры устанавливаете в обоих случаях - это уже вопрос другой и основной
10 al_zzz
 
09.06.12
12:14
(8) Нет, период точно верный. Причем, когда в отборе выбираю вид склада "Розничный", то отрабатывает корректно. А вот по оптовым не хочет
11 Cube
 
09.06.12
12:15
(6) Так весь последний день не попадает?
Как устанавливаешь период в СКД? Программно? Код в студию!
12 MrStomak
 
09.06.12
12:16
В СКД отбор проставится не только на Склад в ДокументПродажи, но и на Склад в Регистраторе
13 Нуф-Нуф
 
09.06.12
12:17
скд можно выполнить в консоли скд и посмотреть результирующий запрос со всеми отборами. и сравнить
14 al_zzz
 
09.06.12
12:18
(11)НачалоПериода = ЭтаФорма.ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НачалоПериода"));
   НачалоПериода.Использование = Истина;
   НачалоПериода.Значение = НачалоМесяца(ТекущаяДата())-60*60*24*366;
   КонецПериода = ЭтаФорма.ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецПериода"));
   КонецПериода.Использование = Истина;
   КонецПериода.Значение = НачалоМесяца(ТекущаяДата()) - 1;
Это при открытии.
Период точно корректен, так как данные за год беру, а продажа в середине периода была.
15 MrStomak
 
09.06.12
12:18
Во всяком случае тут синоним "Склад" задан для поля "ДокументПродажи.Склад", попробуй задать уникальный синоним и ставить отбор по нему
16 Cube
 
09.06.12
12:21
(14) Красавчик!))

Вместо: КонецПериода.Значение = НачалоМесяца(ТекущаяДата()) - 1;
пиши: КонецПериода.Значение = Новый Граница(КонецДня(НачалоМесяца(ТекущаяДата()) - 1), ВидГраницы.Включая);
17 al_zzz
 
09.06.12
12:23
(16) Ок! :)
(15) Убрал "Как Склад" - не помогло.
18 Cube
 
09.06.12
12:23
(14) "а продажа в середине периода была" - опа, не заметил.... Всё равно, ты где-то напутал)
19 Нуф-Нуф
 
09.06.12
12:25
посмотри в отладчике скомпонованный запрос у скд
20 MrStomak
 
09.06.12
12:26
(16) Не просто убрать "как склад" а поставить уникальный синоним типа "СкладПродажи" и отбор ставить на него - тогда ты гарантируешь что СКД не найдёт больше нигде поля Склад и не проставит отбор.
21 al_zzz
 
09.06.12
12:26
(19) Я нуб, не очень понимаю, как это сделать...
22 MrStomak
 
09.06.12
12:27
(16) А помоему надо просто НачалоМесяца(ТекущаяДата()), потому что это будет как раз то же самое что Новый Граница(КонецДня(НачалоМесяца(ТекущаяДата()) - 1), ВидГраницы.Включая)
23 Нуф-Нуф
 
09.06.12
12:28
в модуле отчета создай процеду ПриКомпоновкеРезультата, поставь там точку остановка и посмотри что в схеме и в настройках,
поидее там уже должно быть все готово для вывода, если не ошибаюсь
24 Cube
 
09.06.12
12:29
(22) Нет, не то же...
25 MrStomak
 
09.06.12
12:29
(23) Там еще нет скомпонованного макета компоновки, его надо программно компоновать через процессор компоновки...
26 MrStomak
 
09.06.12
12:32
(24) Когда мы говорим о границы на основании даты, а не о границе на основании момента времени, то разницы нет - в 0 секунд следующего дня не попадают докуметы, проведенные в 00:00:00, так же как в 23:59:59 не попадают документы, проведенные в 23:59:59
27 Нуф-Нуф
 
09.06.12
12:33
автор, выполни свой отчет в консоли скд и посмотри результирующий запрос
28 Cube
 
09.06.12
12:33
(26) Хм, возможно... Проверять лень)
29 Нуф-Нуф
 
09.06.12
12:34
а вообще это спасет http://www.spec8.ru/kurs-po-skd-besplatno
30 al_zzz
 
09.06.12
12:45
(19) Запрос в макете компановки:
"ВЫБРАТЬ¶    ПродажиОбороты.Номенклатура КАК Номенклатура,¶    ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,¶    ПродажиОбороты.Номенклатура.ABCКлассификация КАК НоменклатураABCКлассификация,¶    ПродажиОбороты.Номенклатура.Код КАК НоменклатураКод,¶    ПродажиОбороты.Номенклатура.XYZКлассификация КАК НоменклатураXYZКлассификация,¶    ПродажиОбороты.Номенклатура.Ликвидность КАК НоменклатураЛиквидность,¶    ПродажиОбороты.Номенклатура.Наименование КАК НоменклатураНаименование,¶    ПродажиОбороты.Номенклатура.НомерПозиции КАК НоменклатураНомерПозиции¶ИЗ¶    РегистрНакопления.Продажи.Обороты(¶            &П,¶            &П2,¶            Регистратор,¶            ((Номенклатура <> &ПустоеЗначение¶                И (НЕ Контрагент В ИЕРАРХИИ (&СобственныеКонтрагенты))) И ДокументПродажи.Склад.ВидСклада = &П3) И Номенклатура = &П4) КАК ПродажиОбороты"
(29) Проходил. Возможно, стоит ещё на раз, но пока нет времени на это.
31 al_zzz
 
09.06.12
12:48
(30) + Решительно ни чем не отличается запрос, от того, который формируется, если по розничным делать.
32 MrStomak
 
09.06.12
12:54
Попробуй убрать остальные отборы, кроме вида склада - остануться ли различия. То есть убрать все периоды, контрагента и номенклатуру - в поля результата выводи количествооборот и сравнивай
33 ChAlex
 
09.06.12
12:57
(6) - в оборотах период интервала дат включается в выборку и не надо ничего мутить. и если время начала периода 00:00:00 а время окончания периода 23:59:59 то документы в выборку и со временем 00:00:00 попадут и со временем 23:59:59
34 ChAlex
 
09.06.12
13:00
(33) - не (6) а (26) :)
35 ChAlex
 
09.06.12
13:02
(31) - по-моему ваша проблемеа лежит не в тексте запроса, а в интерактивном моементе формирования макета и установки отборов. Отбор, установленный на весь отчет или на группировку - отличается. Нужно анализировать логу отборов, что получаете, на каком этапе фильтруете и т.д.
36 ChAlex
 
09.06.12
13:03
сомнение в периоде - отключите всякие филтры и выведите детальные записи. потом по-одному включайте отборы и анализируйте - и найдете момент, в котором ваши действия расходятся с логикой запроса
37 al_zzz
 
09.06.12
13:10
Продажа попадает куда нужно, когда отключаю условие:
(НЕ Контрагент В ИЕРАРХИИ (&СобственныеКонтрагенты)).
Однако, контрагент, по которому данная продажа, не в иерархии группы "Собственные контрагенты".
Чушь какая-то...
38 al_zzz
 
09.06.12
13:12
(37) Как такое возможно?
39 MrStomak
 
09.06.12
13:28
(38) Например, если в СобственныхКонтрагентах есть пустая ссылка
40 MrStomak
 
09.06.12
13:32
+ посмотреть контрагента именно в движении по регистру, т.к. отбор на это поле стоит, а не на то, что в документе продажи
41 al_zzz
 
09.06.12
13:32
Всё, нашел ошибку! Параметр по умолчанию "СобственныеКонтрагенты" неправильно написал и СКД не смогла его найти!
Зато теперь умею устанавливать корректно границу периода!
Всем спасибо!
Программист всегда исправляет последнюю ошибку.