Имя: Пароль:
1C
1С v8
глюки при внутреннем соединении
0 victor79
 
23.05.14
00:24
есть у меня пара запросов:

выбрать различные
    рег.Номенклатура,
    рег.Склад

поместить отрицательные

из РегистрНакопления.ТоварыОрганизаций.Остатки как рег

сгруппировать по
    рег.Организация,
    рег.Склад,
    рег.Номенклатура
    
имеющие
    Сумма(рег.КоличествоОстаток) < 0
;

выбрать
    р.Номенклатура,
    р.Склад,
    р.КоличествоОстаток

Из
    РегистрНакопления.ТоварыОрганизаций.Остатки как р
    внутреннее соединение
    отрицательные
    по
    р.Номенклатура = отрицательные.Номенклатура
    и
    р.Склад = отрицательные.Склад

;

первый запрос - выборка отрицательных остатков,
в выдает десяток позиций.

Вторым запросом хочу посмотреть, какие есть остатки по позициям из первого запроса в тех же складах, т.е. в результате будет выявление минусов на плюс - не отрицательный остаток.

Но второй запрос глючит, и выдает пару строк, но в то же время, если у него приписать
УПОРЯДОЧИТЬ ПО р.Организация - то выдает нормально пару десятков строк с остатками.

Я пробовал приписывать (и это является конечной целью второго запроса):

СГРУППИРОВАТЬ ПО р.Склад,р.Номенклатура
ИМЕЮЩИЕ Сумма(р.КоличествоОстаток) >= 0

и эту группировку выдает по сглюченной выборке, как если она без приписки УПОРЯДОЧИТЬ.

версии:
1С:Предприятие 8.2 (8.2.18.61)
УТ 11.1 (11.1.1.13)

результат запроса смотрю через
КонсольЗапросовУниверсальная_programmist1S.ru.epf
1 m-serg74
 
23.05.14
03:34
(0) ну может и глюк, но ИМХО во втором запросе практичнее сгруппировать Номенклатура+Склад, а уж потом соединять с первым пакетом
2 victor79
 
23.05.14
04:02
попробовал, сначала остатки сгруппировал, после сделал внутренее соединение. Вместо двух запросов тогда уже три запроса, и глюк остается - он именно в соединении.

При правом соединении та же фигня, только плюс пустая строка.
3 Wobland
 
23.05.14
04:04
видал такое как-то. упорядочить внезапно изменяет набор данных. оказался банальный врёжь
4 victor79
 
23.05.14
04:07
в смысле, чей врежь?
5 Wobland
 
23.05.14
04:08
(4) утверждавшего, что упорядочивание меняет что-то кроме порядка
6 victor79
 
23.05.14
04:17
там меняет не упорядочивание, а использование реквизита по которому нету соединения. Использование либо в упорядочивании, либо в ВЫБРАТЬ.

т.е. если в упорядочивание добавить р.Склад или р.Номенклатура - то количество строк остается глючным, а если добавить р.Организация - то сразу нормальный набор данных.

Но проблема в том, что р.Организация в сгруппированных мне не нужна.

Так же, добавленный реквизит должен иметь заполненные значения, иначе глючит (у меня Характеристика не заполнена - и ее добавление не исправляет глюк).

Так же добавить нужно именно измерение, а не ресурс - добавление ресурса глюк не исправляет.
7 victor79
 
23.05.14
04:20
и дальше можно предположить, что глючит из-за использования в соединении остатков одного и того же регистра, иначе бы это была частая и заметная фигня, которую бы давно исправили.
8 Wobland
 
23.05.14
04:21
(6) ничего, что упорядочивание работает последним, уже после того, как отработали всяческие соединения и отборы?
9 victor79
 
23.05.14
04:28
если рассматривать абстрактное выполнение, когда делается полный перебор декартова произведения двух таблиц, по ним отбирается и накапливается таблица, и после эта накопленная пересортировывается - то да, упорядочивание последнее. Но в реальности для целей оптимизации оно может быть абсолютно как угодно.

и как я упомянул, этот глюк убирается так же если реквизит р.Организацию упомянуть в ВЫБРАТЬ без использования упорядочивания.
10 Wobland
 
23.05.14
04:32
ситуация не воспроизводится. и вообще, не верю
11 Wobland
 
23.05.14
04:33
попробуй другую платформу и СУБД
12 victor79
 
23.05.14
04:39
и вот, нашел как сделать без глюка тремя запросами. Как упомянул m-serg74, нужно промежуточно выбрать остатки, только сгруппировать по Склад+Номенклатура+Организация, а итоги Склад+Организация и соединение делать уже третьим запросом, и тогда визуально вроде без глюка.

Отсюда следствие - глючит при соединение по остаткам одного регистра, а когда эти остатки сгруппированны отдельно и по другим реквизитам - оптимизатором создается отдельная выборка и все ОК.

забыл сказать, у меня это на SQL 2008, и возможно глючить может не 1с а скл, т.к. скорее всего это проблема оптимизатора.

и поменять платформу, субд, и прочее я не могу - у меня удаленный сервер на котором мне не дадут что-либо переустанавливать, и если бы это была легко воспроизводимая фигня - ее бы давно исправили бы.

чуть позже, когда найду дистр скл - поставлю на локальную машину и попробую повторить эту штуку. Без скл никак - база большая и в файловую не грузится.
13 Wobland
 
23.05.14
04:49
(12) бэкап в файл развернуть - вполне себе вариант
14 Wobland
 
23.05.14
04:50
(13) не дочитал
15 victor79
 
23.05.14
05:01
в общем, для себя я нашел решение моего запроса, но природа глюка до конца пока не ясна.
16 m-serg74
 
23.05.14
05:12
(3) да может и поменяет, вытащил в запросе измерение - получай не группированное а кучу строк с одной организацией/складом/номенклатурой...
17 m-serg74
 
23.05.14
05:14
(12) в программировании есть такая фигня - думать надо не как чел, а как будет думать проц(есс/ессор/....)
18 m-serg74
 
23.05.14
05:15
(15) это не глюк а багофича :)
19 hhhh
 
23.05.14
08:29
(15) а чего не ясно? всё логично вроде. В остатках две строки, если добавляете еще разворот по организациям, по-любому количество строк увеличится, ну допустим будет пару десятков. Вроде никаких глюков и нет.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс