Имя: Пароль:
1C
1С v8
почему возникаект такая разница в данных
0 LivingStar
 
26.06.13
06:20
Открываю просматриваю результат в консоле запросов, выгружаю в .xls, там одни данные. В коде выгружаю результат запроса в таблицу значений, так же сохраняю в .xls, и просматриваю ТЗ.Итог("Поле1"), там другие данные, на несколько разнится сумма, да же по первой строке что в .xls. Почему так может быть? Запрос же один и тодже, почему разница в выбираемых им данных в консоле запросов и в коде, при выгрузке в таблицу значений?

           ТекстЗапроса = "
               |ВЫБРАТЬ
               |    Продажи.Номенклатура КАК Номенклатура,
               |    ВЫРАЗИТЬ(ЕСТЬNULL(Продажи.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) КАК ЧИСЛО(15, 3)) КАК Коэффициент,
               |    СУММА(ЕСТЬNULL(Продажи.Количество, 0)) КАК Количество,
               |    СУММА(ВЫРАЗИТЬ(ЕСТЬNULL(Продажи.Количество, 0) / ЕСТЬNULL(Продажи.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) КАК ЧИСЛО(15, 3))) КАК Поле1
               |ИЗ
               |    РегистрНакопления.Продажи КАК Продажи
               |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
               |        ПО Продажи.Регистратор.ТорговаяТочка = КонтактнаяИнформация.Объект
               |ГДЕ
               |    (Продажи.Регистратор.Склад = &Склад
               |            ИЛИ Продажи.Регистратор.СкладОрдер = &Склад)
               |    И Продажи.Регистратор.Дата МЕЖДУ &НачДата И &КонДата
               |    И " + ТекстУсловияГрупп + "
               |    И КонтактнаяИнформация.Представление ПОДОБНО ""%Город%""
               |    И КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)
               |    И КонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.АдресТорговойТочки)
               |СГРУППИРОВАТЬ ПО
               |    Продажи.Номенклатура";
1 Cyberhawk
 
26.06.13
06:27
В коде - одни параметры, в запросе - другие
2 Cyberhawk
 
26.06.13
06:27
*в запросе = в консоли
3 LivingStar
 
26.06.13
06:35
(1) да не одинаковые, выборка практически таже самая, но на какую то небольшую сумму отличается, например по первой строке в консоле 20, в коде в тз выгруженной 24, не пойму в чем делало ((((
4 LivingStar
 
26.06.13
06:35
параметры теже
5 Лодырь
 
26.06.13
06:41
Убери левое соединение, выведи записи без группировки. И найдешь в чем разница
6 Лодырь
 
26.06.13
06:41
Скорее всего, как говорит предыдущий оратор - дело в границах.
7 LivingStar
 
26.06.13
06:47
(6) на левое соединение же накладывается фильтр!!! Без него то нельзя.... в нем и смысл
8 Cyberhawk
 
26.06.13
06:49
(3) "да не одинаковые" запятая где?
9 LivingStar
 
26.06.13
06:54
(8) про какую вы запятую говорите?
10 Лодырь
 
26.06.13
07:00
(9)
Да, неодинаковые!
Да не, одинаковые!
11 Лодырь
 
26.06.13
07:01
(7)
В любом раскладе выводи записи без группировки и ищи различие. В экселе это легко юзая функцию "ВПР" например.
12 LivingStar
 
26.06.13
07:07
(10) Да не! Одинаковые! - я хотел написать!!!
13 LivingStar
 
26.06.13
07:07
(11) пришла мысль смотреть по регистратору, различие уже видел, но от куда оно если запросы идентичные!!!
14 Cyberhawk
 
26.06.13
07:08
(12) а как ты определил, что одинаковые? На глаз?
15 LivingStar
 
26.06.13
07:22
(14) ну я же задавал параметры, и выявлял то что нужно, потом скопировал с консоли и вставил в код, подправив кое что, параметры теже задал, как не одинаковые то?
16 Cyberhawk
 
26.06.13
07:24
1. Покажи картинку со значениями параметров в консоли запросов.
2. Покажи картинку со значениями параметров в табло перед выполнением запроса.
17 Любопытная
 
26.06.13
07:29
"вставил в код, подправив кое что" Может вот это самое "кое-что" и дает разницу?
18 LivingStar
 
26.06.13
07:36
(17) поправил кое что это, -

ТекстУсловияГрупп = "Продажи.Номенклатура В ИЕРАРХИИ(&Гр)";
Запрос.УстановитьПараметр("Гр", Группа);

в коде, а в запросе, -

|    И " + ТекстУсловияГрупп + "

то есть не влияет,
сделал сейчас отбор по регистратору, вижу что в консоле, по одной и той же номенклатуре сразу идет 10 возвратов, а в коде 6, и так и по реализации, разное количество документов, вот и суммы разнятся, вопрос с чего бы это !!!! (

10
6
19 LivingStar
 
26.06.13
07:37
(18+)  в консоле стоит, Продажи.Номенклатура В ИЕРАРХИИ(&Гр)
20 LivingStar
 
26.06.13
07:42
Вижу что в выборке что в консоле захватил несколько возвратов, что выходят за установленный период!!! с чего бы это?? может и далее так ((((
21 LivingStar
 
26.06.13
07:46
похоже что в выборку что в консоле попадают возвраты, которые отсутствуют в выборке что выгружается в ТЗ в коде, соответственно в выборке что в коде значения больше, так как не сминусовались какие либо возвраты!!!!
22 LivingStar
 
26.06.13
07:49
(16) в параметрах сразу увидел ошибка сильная!!! пробую правит далее!!
23 MiniMuk
 
26.06.13
07:50
И Продажи.Регистратор.Дата МЕЖДУ  началопериода(&НачДата,месяц) И конецпериода(&КонДата, месяц)
24 LivingStar
 
26.06.13
08:08
(23) а это чем не идет?

|    И Продажи.Регистратор.Дата МЕЖДУ &НачДата И &КонДата

и почему, надо как в (23) реально не корректная выборка получается? я период то поправил, но сама выборка не поправила ситуацию, отчет по ней так же не очень формирует планы ((
25 LivingStar
 
26.06.13
08:09
(23) НачДата = НачалоДня('2013.05.01')
    КонДата = КонецДня('2013.05.18')

Масяц то не подойдет наверное?
26 LivingStar
 
26.06.13
08:13
(23) как раз это выдает те ошибочные данные от которых я только что избавился, но вот саму проблему не поправил .....
27 LivingStar
 
26.06.13
08:18
Подскажите вот эта ветка нормально отберет? вторая ветка подобная, только по другому складу... Факт в том что скажут мне снова что не те данные, но выборка то корректная? Остальное все по коду...

Функция ПолучитьКолСклад_ЗА_МАЙ(Группа, Склад)
   Запрос = Новый Запрос;
   Если Группа = "ПРОЧЕЕ" Тогда
       ТекстУсловияГрупп = "Продажи." + ПолучитьГруппыНоменклатуры(Запрос, "ПРОЧЕЕ");
   ИначеЕсли Группа = "НОВИНКИ" Тогда
       ТекстУсловияГрупп = "Продажи." + ПолучитьГруппыНоменклатуры(Запрос, "НОВИНКИ");
   Иначе
       ТекстУсловияГрупп = "Продажи.Номенклатура В ИЕРАРХИИ(&Гр)";
       Запрос.УстановитьПараметр("Гр", Группа);
   КонецЕсли;
   //Запрос = Новый Запрос;
   //Запрос.УстановитьПараметр("Номенклатура",Группа);
   Мес = Месяц(ЭтотОбъект.Дата) - 1;
   Год = Год(ЭтотОбъект.Дата);
   Если Мес = 0 Тогда
       Мес = 12;
       Год = Год - 1;
   КонецЕсли;
   //
   Если Мес = 5 Тогда
       Если Склад = Справочники.Склады.НайтиПоНаименованию("склад") Тогда

           Колво1  = 0;
           ТекстЗапроса = "
               |ВЫБРАТЬ
               |    Продажи.Номенклатура КАК Номенклатура,
               |    ВЫРАЗИТЬ(ЕСТЬNULL(Продажи.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) КАК ЧИСЛО(15, 3)) КАК Коэффициент,
               |    СУММА(ЕСТЬNULL(Продажи.Количество, 0)) КАК Количество,
               |    СУММА(ВЫРАЗИТЬ(ЕСТЬNULL(Продажи.Количество, 0) / ЕСТЬNULL(Продажи.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) КАК ЧИСЛО(15, 3))) КАК Поле1,
               |    Продажи.Регистратор
               |ИЗ
               |    РегистрНакопления.Продажи КАК Продажи
               |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
               |        ПО Продажи.Регистратор.ТорговаяТочка = КонтактнаяИнформация.Объект
               |ГДЕ
               |    (Продажи.Регистратор.Склад = &Склад
               |            ИЛИ Продажи.Регистратор.СкладОрдер = &Склад)
               |    И Продажи.Регистратор.Дата МЕЖДУ &НачДата И &КонДата
               |    И " + ТекстУсловияГрупп + "
               |    И КонтактнаяИнформация.Представление ПОДОБНО ""%город%""
               |    И КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)
               |    И КонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.АдресТорговойТочки)
               |СГРУППИРОВАТЬ ПО
               |    Продажи.Номенклатура,
               |   Продажи.Регистратор";
           Запрос.УстановитьПараметр("НачДата", НачалоДня('2013.05.01'));
           Запрос.УстановитьПараметр("КонДата", КонецДня('2013.05.18'));
           Запрос.УстановитьПараметр("Склад",   Склад);
           Запрос.Текст = ТекстЗапроса;
           Выборка      = Запрос.Выполнить().Выгрузить();
           Колво1  = Колво1 + Выборка.Итог("Поле1");
           //Для Каждого СтрокаВыборки из Выборка Цикл
           //    Колво1 = Колво1 + Число(СтрокаВыборки.Количество)/Число(СтрокаВыборки.Номенклатура.ЕдиницаДляОтчетов.Коэффициент);
           //КонецЦикла;
           ТекстЗапроса = "
               |ВЫБРАТЬ
               |    Продажи.Номенклатура,
               |    ВЫРАЗИТЬ(ЕСТЬNULL(Продажи.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) КАК ЧИСЛО(15, 3)) КАК Коэффициент,
               |    СУММА(Продажи.Количество) КАК Количество,
               |    СУММА(ВЫРАЗИТЬ(ЕСТЬNULL(Продажи.Количество, 0) / ЕСТЬNULL(Продажи.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 0) КАК ЧИСЛО(15, 3))) КАК Поле1
               |ИЗ
               |    РегистрНакопления.Продажи КАК Продажи
               |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
               |        ПО Продажи.Регистратор.ТорговаяТочка = КонтактнаяИнформация.Объект
               |ГДЕ
               |    МЕСЯЦ(Продажи.Регистратор.Дата) = &МесДата
               |    И ГОД(Продажи.Регистратор.Дата) = &ГодДата
               |    И (Продажи.Регистратор.Склад = &Склад
               |            ИЛИ Продажи.Регистратор.СкладОрдер = &Склад)
               |    И " + ТекстУсловияГрупп + "
               |    И НЕ КонтактнаяИнформация.Представление ПОДОБНО ""%город%""
               |    И КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)
               |    И КонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.АдресТорговойТочки)
               |
               |СГРУППИРОВАТЬ ПО
               |    Продажи.Номенклатура";
           Запрос.УстановитьПараметр("МесДата", Мес);
           Запрос.УстановитьПараметр("ГодДата", Год);
           Запрос.УстановитьПараметр("Склад",   Склад);
           Запрос.Текст = ТекстЗапроса;
           Выборка      = Запрос.Выполнить().Выгрузить();
           КолвоБердск  = Колво1 + Выборка.Итог("Поле1");
           //Для Каждого СтрокаВыборки из Выборка Цикл
           //    Колво1 = Колво1 + Число(СтрокаВыборки.Количество)/Число(СтрокаВыборки.Номенклатура.ЕдиницаДляОтчетов.Коэффициент);
           //КонецЦикла;
           Возврат Колво1;
       ИначеЕсли Склад = Справочники.Склады.НайтиПоНаименованию("склад2") Тогда
28 LivingStar
 
26.06.13
08:20
(27+) на ошибки в названиях переменных можно не обращать внимания, синтакс контроль все равно это не пропустит, главное суть понятна алгоритм, по моему он должен делать то что задано!!!
29 vicof
 
26.06.13
08:20
Автор, спасибо, ты меня каждый день своими темами радуешь.
30 Лодырь
 
26.06.13
08:30
(29) На самом деле автору не хватает свежего глаза сидящего неподалеку. Те ошибки которые он не может найти - обычно легко находятся пока подробно объясняешь другому что не можешь найти ошибку )
31 vicof
 
26.06.13
08:55
(30) Да как можно на протяжении 8 лет задавать тупейшие вопросы? По его ответам и вопросам можно понять, что логика отсутствует напрочь. И что образовываться он не хочет, а питаться только готовеньким.
Программист всегда исправляет последнюю ошибку.