Имя: Пароль:
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
Всё, нашел ошибку! Параметр по умолчанию "СобственныеКонтрагенты" неправильно написал и СКД не смогла его найти!
Зато теперь умею устанавливать корректно границу периода!
Всем спасибо!
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn