Имя: Пароль:
1C
1С v8
Разный результат запроса на MS SQL и PostrgreSQL
0 Дантес
 
16.12.11
11:41
Доброго времени суток, уважаемые.

Имеется следующий код:

МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ВременнаяТаблицаГрупп = Новый Запрос;
ВременнаяТаблицаГрупп.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
ТекстЗапросаВР = "ВЫБРАТЬ
             |    ТаблицаГрупп.Группа КАК Группа
             |ПОМЕСТИТЬ врТаблицаГрупп
             |ИЗ
             |    &ТаблицаГрупп КАК ТаблицаГрупп";    
ВременнаяТаблицаГрупп.УстановитьПараметр("ТаблицаГрупп", ТаблицаГрупп);
ВременнаяТаблицаГрупп.Текст = ТекстЗапросаВР;
ВременнаяТаблицаГрупп.Выполнить();
   
   
мВременнаяТаблицаГрупп = Новый Запрос;
мВременнаяТаблицаГрупп.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
мТекстЗапросаВР = "ВЫБРАТЬ
             |    мТаблицаГрупп.Группа КАК Группа
             |ПОМЕСТИТЬ врмТаблицаГрупп
             |ИЗ
             |    &мТаблицаГрупп КАК мТаблицаГрупп";
   
мВременнаяТаблицаГрупп.УстановитьПараметр("мТаблицаГрупп", мТаблицаГрупп);
мВременнаяТаблицаГрупп.Текст = мТекстЗапросаВР;
мВременнаяТаблицаГрупп.Выполнить();
           
   
ПроверкаГрупп = Новый Запрос;
ПроверкаГрупп.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
ТекстЗапроса =
   "ВЫБРАТЬ
   |    СУММА(ВЫБОР
   |            КОГДА врТаблицаГрупп.Группа = врмТаблицаГрупп.Группа
   |                ТОГДА 0
   |            ИНАЧЕ 1
   |        КОНЕЦ) КАК Признак
   |ИЗ
   |    врТаблицаГрупп КАК врТаблицаГрупп
   |        ПОЛНОЕ СОЕДИНЕНИЕ врмТаблицаГрупп КАК врмТаблицаГрупп
   |        ПО врТаблицаГрупп.Группа = врмТаблицаГрупп.Группа"
   ;
ПроверкаГрупп.Текст = ТекстЗапроса;
РезультатЗапроса = ПроверкаГрупп.Выполнить();
Результат = РезультатЗапроса.Выгрузить();

Первая и вторая временная таблица содержит группы номенклатуры (родителей)

Конкретный пример:
В первой временной таблице содержится одна запись.
Во второй временной таблице содержится ноль записей.
После выполнения итогового запроса получаем (таблица значений Результат ):
на файловой версии БД Результат содержит одну запись
на MS SQL Результат содержит одну запись
на PostgreSQL Результат содержит ТРИ записи (одна правильная и две пустые)

Не могу понять в чем дело. Подскажет хотя бы в каком направлении копать.

Заранее благодарю.
1 суицид
 
16.12.11
11:57
какая версия платформы, субд? зачем пушкина убил?
2 Дантес
 
16.12.11
12:00
(1) 1С:Предприятие 8.2 (8.2.13.219)
СУБД PostgreSQL 9.0.2 и 9.0.4

Вопросов много задавал.
3 Затейник
 
16.12.11
12:16
(2) есть возможность запустить на слонике версии 8.4.3-3.1C ?
какой там будет результат ?
Кстати, откуда взяли постгри 9.0.2 ? на сайте только тестовый 9.0.3-3.1C, может в этом косяк
4 МишельЛагранж
 
16.12.11
12:46
что, трансляция разная?
5 Дантес
 
16.12.11
13:51
(3) на данный момент нет

админ брал отсюда ftp://updates.etersoft.ru/pub/Etersoft/Postgres@Etersoft/stable/Debian/6.0/
Говорит что там лежит уже пропатченая под 1С СУБД. Не верить ему у меня оснований нет, тем более что 1С работает и запросы в 3-5 экранов выполняются без проблем, да и вообще по работе особых нареканий нет. За исключением некоторых моментов (один из них описан в сабже)
6 mikecool
 
16.12.11
13:56
была у меня ветка про сортировку - в скуле и постгри по-умолчанию сортировки отличаются
7 mikecool
 
16.12.11
13:56
+6 так что - учитывай все и тестируй
8 braynt
 
16.12.11
13:58
PostgreSQL неправильно обрабатывает полное соединение
9 Дантес
 
16.12.11
14:43
(6) ссылочкой на ветку поделишься? Не могу твой профиль открыть чтобы темы посмотреть.

(8) и как быть?
10 Дантес
 
16.12.11
14:45
(8) как-то же работают люди на PostgreSQL c 1C. Сомневаюсь что у них у всех отсутствует полное соединение.
11 braynt
 
16.12.11
15:41
(9) Периписать запрос!
12 Дантес
 
16.12.11
16:10
(11) обрадовал
13 Дантес
 
16.12.11
16:11
самое интересное что полное соединение есть в запросах типовой
14 ILM
 
гуру
16.12.11
16:21
(0) Ну все верно, разные базы СУБД, разные версии, всё влияет на результат)))
15 Дантес
 
16.12.11
16:28
(14) гениальный ответ! )))))
16 pumbaEO
 
16.12.11
16:45
(13) У клиента Oracle, во все типовые запросы приходиться вставлять принудительную сортировку.
17 Reset
 
16.12.11
16:46
(15) Почему не рассматривается вариант взять дистрибутив от 1С?
18 Reset
 
16.12.11
16:47
(5) "Не верить ему у меня оснований нет, тем более что 1С работает"
в (0) - не основание?
19 Дантес
 
19.12.11
12:01
(17) а что это даст? народ утверждает что ПОЛНОЕ СОЕДИНЕНИЕ в PostgreSQL не работает. Какая в таком случае разница, откуда дистрибутив?
Лично у тебя есть база на PostgreSQL и в ней корректно работает ПОЛНОЕ СОЕДИНЕНИЕ?
20 igork1966
 
19.12.11
12:06
(19) я так и не понял... у тебя патченный дистрибутив Postgress или нет?
21 Дантес
 
19.12.11
12:22
дистрибутив брался отсюда
ftp://updates.etersoft.ru/pub/Etersoft/Postgres@Etersoft/stable/Debian/6.0/
22 igork1966
 
19.12.11
12:29
(21) ТаблицаГрупп.Группа и мТаблицаГрупп.Группа  тип ссылка?
23 Дантес
 
19.12.11
13:17
(22) да
24 Reaper_1c
 
19.12.11
13:19
Нефиг пользоваться левыми сборками.
25 Дантес
 
19.12.11
14:12
(24) т.е. на сборке от 1С (с сайта) будет гарантированно работать?
26 Дантес
 
20.12.11
10:58
(24) Поставил не левую - не работает.
27 braynt
 
20.12.11
11:29
(12) Так что сложно запрос переписать?
28 Дантес
 
20.12.11
12:01
(27) в целом нет, но таких запросов у меня несколько и есть довольно объемные. Но дело даже не в этом. Не понятно почему PosgreSQL выдает такой результат и почему 1С не информировала о том что ПОЛНОЕ СОЕДИНЕНИЕ в PostgreSQL не работает (или информировала?). Звонил в тех. поддержку, порекомендовали поставить последний релиз платформы и попробовать на нем и если не заработает то тогда пример кода с описанием работы. Ради эксперимента конечно поставлю, но думается мне что результат будет тот же.
29 sapphire
 
20.12.11
12:07
(28) Настройте технологический журнал и посмотрите в какую конструкцию диалекта PostgreSQL выраждается Ваша писанина.
30 Затейник
 
20.12.11
12:14
Использование конструкции полное внешнее соединение

В СУБД PostgreSQL реализована только частичная поддержка FULL OUTER JOIN (ERROR:"FULL JOIN is only supported with mergejoinable join conditions"). Для реализации полной поддержки FULL OUTER JOIN при работе 1С:Ghtlghbznbz 8 c PostgreSQL подобный запрос трансформируется в другую форму с эквивалентным результатом, однако эффективность использования конструкции ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ снижается.

В связи с этим не рекомендуется использовать ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ при работе с PostgreSQL. В большинстве случаев без использования этой конструкции можно обойтись, переписав исходный запрос.
31 sapphire
 
20.12.11
12:27
(30) О том и речь.
32 Дантес
 
20.12.11
13:35
(30) Спасибо за информацию.