Имя: Пароль:
1C
1С v8
Глюк в запросе?
,
0 lega0000
 
03.03.17
14:24
Добрый день!
Может кто нибудь подскажет, в чем проблема?
Есть запрос:
"ВЫБРАТЬ
|    ТоварыОрганизаций.Регистратор КАК Регистратор,
|    ТоварыОрганизаций.КоличествоНачальныйОстаток,
|    ТоварыОрганизаций.КоличествоПриход,
|    ТоварыОрганизаций.КоличествоРасход,
|    ТоварыОрганизаций.КоличествоКонечныйОстаток,
|    ТоварыОрганизаций.НомерГТД <> ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка) КАК ЕстьНомерГТД
|ИЗ
|    РегистрНакопления.ТоварыОрганизаций.ОстаткиИОбороты(
|            &НачалоПериода,
|            &КонецПериода,
|            Авто,
|            ,
|            АналитикаУчетаНоменклатуры.Номенклатура = &Номенклатура
|                И АналитикаУчетаНоменклатуры.Склад = &Склад) КАК ТоварыОрганизаций"

Если с этого запроса убрать поле: ТоварыОрганизаций.НомерГТД <> ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка) КАК ЕстьНомерГТД, тогда он формируется правильно, регистраторы идут по хронологии и все цифры показывают правильно. А с этим полем, запрос выводит сначала те записи, где ЕстьНомерГТД = нет, а потом те, где ЕстьНомерГТД = да, соответственно конечная цифра показывает неправильный результат. Каким образом это поле может влиять на хронологию записей?
1 Михаил Козлов
 
03.03.17
14:27
В запросе хронологии записей нет, пока ее не установите.
Например, УПОРЯДОЧИТЬ ПО ТоварыОрганизаций.Период
2 lega0000
 
03.03.17
14:57
(1) Ну например если сформировать обороты без упорядочивания и вывести регистратор. Регистраторы же выстроятся по хронологии?
3 Naf2017
 
03.03.17
14:59
(2) да, но не обязан

это неопределенное поведение, для определения надо использовать УПОРЯДОЧИТЬ ПО
4 lega0000
 
03.03.17
15:03
(3) Если я делаю УПОРЯДОЧИТЬ ПО ТоварыОрганизаций.ПериодСекунда, тогда регистраторы выстраиваются правильно, а цифры показывают неправильно
5 lega0000
 
03.03.17
15:05
Вот правильный результат:
Ввод начальных остатков собственных товаров URA-0000005 от 31.12.2016 14:05:13    0    32    0    32
Реализация товаров и услуг URA-0000033 от 05.01.2017 13:38:31    32    0    3    29
Реализация товаров и услуг URA-0000039 от 05.01.2017 13:44:52    29    0    2    27
Возврат товаров от клиента (общий) URA-00017 от 06.01.2017 0:00:00    27    2    0    29
Реализация товаров и услуг URA-0000261 от 12.01.2017 11:28:29    29    0    2    27
Возврат товаров от клиента (общий) URA-00003 от 13.01.2017 17:27:18    27    1    0    28
Реализация товаров и услуг URA-0000332 от 16.01.2017 10:37:08    28    0    1    27
6 Nuobu
 
03.03.17
15:05
(4) Это от того, что ты выводишь поле "НомерГТД", которое участвует в оборотах. Поэтому данные могут быть другими.
7 lega0000
 
03.03.17
15:06
(5) не обращайте внимания, я думал таблицу видно будет
8 lega0000
 
03.03.17
15:07
(6) Если вывести просто ТоварыОрганизаций.НомерГТД тогда запрос формируется правильно. Неправильно формируется именно если я вывожу это сравнение: ТоварыОрганизаций.НомерГТД <> ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка) КАК ЕстьНомерГТД
9 DrShad
 
03.03.17
15:09
дай угадаю, неправильно тебе кажется выводится нач и кон остатки?
10 Nuobu
 
03.03.17
15:09
(8) А куда выводишь, дорогой?
11 DrShad
 
03.03.17
15:13
ни номенклатуры, нифига, зато все неверно )))
12 DrShad
 
03.03.17
15:14
какова мистическая цель сего запроса?
13 Basilio
 
03.03.17
15:25
(0) Если в запросе не указано УПОРЯДОЧИТЬ нельзя рассчитывать на какой-либо порядок. СУБД вернет тебе записи в том порядке в каком ей удастся их получить, как повезет, короче. Да, чаще всего в простых запросах записи будут выстроены в хронологическом порядке. Но "чаще всего" <> "всегда".
14 Basilio
 
03.03.17
15:26
(0) Если записи нужны в каком-то порядке слово "УПОРЯДОЧИТЬ" обязательно.
15 КофеIN
 
03.03.17
15:45
Попробуй через ВЫБОР КОГДА ТОГДА ИНАЧЕ может поможет
16 Basilio
 
03.03.17
16:22
(15) Если ТС нужна хронология поможет только "УПОРЯДОЧИТЬ".
17 lega0000
 
03.03.17
19:35
(9) Они самые.
18 lega0000
 
03.03.17
19:35
(10) Вывожу в консоли запросов
19 lega0000
 
03.03.17
19:36
(11) Я специально максимально упростил запрос, чтобы не грузить Вас лишним.
20 lega0000
 
03.03.17
19:38
(12) Вообще это типовой отчет, но он неправильно показывает начальные и конечные остатки. Начал его ковырять и понял, что когда в запросе присутствует это: ТоварыОрганизаций.НомерГТД <> ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка) КАК ЕстьНомерГТД, тогда он неправильно показывает остатки.
21 lega0000
 
03.03.17
19:41
(13) (14) Уже писал, если упорядочиваю по периоду, Регистраторы становятся по порядку, а начальные и конечные остатки неправильные.
22 lega0000
 
03.03.17
19:46
(15) Прикол еще в том, что если выводить просто ТоварыОрганизаций.НомерГТД тогда все нормально, а если сравнение как описывал выше, тогда неправильно формирует.
23 Fram
 
03.03.17
19:53
Запрос тебе выдает начальный и конечный остаток для параметров , указанных в виртуальной таблице. На порядок строк ему плевать и от предыдущих строк результата запроса остатки никак не зависят
24 h-sp
 
03.03.17
20:00
(21) обязательно какой-то период должен быть в запросе. Если есть регистратор, то у него должен быть еще период, которому он подчиняется. Секунда, например.
25 lega0000
 
03.03.17
20:10
Это правильно сформированный запрос: http://s014.radikal.ru/i329/1703/d8/9cd554741ac6.png
А это неправильно: http://s45.radikal.ru/i107/1703/0d/829694d50a28.png
26 lega0000
 
03.03.17
20:14
А это если отсортировать по периоду: http://s018.radikal.ru/i509/1703/35/a2a2175ae558.png
27 lega0000
 
03.03.17
20:16
(26) Перед последним возвратом начальный остаток = 0, хотя должен быть 29.
28 lega0000
 
03.03.17
20:21
29 Fram
 
03.03.17
20:34
(28) значит умный движок 1с пропихивает
ТоварыОрганизаций.НомерГТД <> ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)
в запрос виртуальной таблицы. надо профайлером посмотреть.
30 mehfk
 
03.03.17
21:36
Если консоль не СКД-шная, то никто никуда ничего не пропихивает, а ТС 100500 жертва отсутствия упорядочения во всех случаях, где нет явного упорядочения.
31 Fram
 
03.03.17
22:14
(30) Ну, 1 и 2 скрин говорят об обратном. Результат виртуальной таблицы другой, значит и запрос другой.
32 Fram
 
03.03.17
22:18
(28) попробуй вместо
ТоварыОрганизаций.НомерГТД <> ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка) КАК ЕстьНомерГТД
просто
ТоварыОрганизаций.НомерГТД
и на форму тоже выведи это поле. тогда будет понятнее
33 mehfk
 
03.03.17
22:31
(31) Значит ты 100501 жертва.
34 Fram
 
03.03.17
22:45
(33) Начальный остаток возращается виртуальной таблицей. Причем тут нафиг упорядочивание?
35 lega0000
 
06.03.17
10:55
В общем решил эту проблему удалением этого сравнения из запроса. Хотелось бы разобраться до конца с этой проблемой, но времени нет.
Ошибка? Это не ошибка, это системная функция.