|
Глюк в запросе? | ☑ | ||
---|---|---|---|---|
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
|
Тут получше изображения:
http://savepic.ru/13118935.png http://savepic.ru/13159894.png http://savepic.ru/13154774.png |
|||
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
|
В общем решил эту проблему удалением этого сравнения из запроса. Хотелось бы разобраться до конца с этой проблемой, но времени нет.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |