Имя: Пароль:
1C
1С v8
Пятничное: сложное соединение по строкам в запросе.
,
0 catena
 
13.04.12
19:49
Есть запрос, который спокойно выполняется на файловом варианте и стабильно вылетает на серверном. Просто интересно: есть возможность оптимизировать?

Запрос = Новый Запрос;
     
       Запросы = "
       |ВЫБРАТЬ
       |        "_" КАК Симв,
       |        1 КАК КолСимв
       |ПОМЕСТИТЬ тзКоличествоСимволов9
       |
       |ОБЪЕДИНИТЬ ВСЕ
       |
       |ВЫБРАТЬ
       |        "__",
       |        2
       |
       |ОБЪЕДИНИТЬ ВСЕ
       |
       |ВЫБРАТЬ
       |        "___",
       |        3
       |
       |ОБЪЕДИНИТЬ ВСЕ
       |
       |ВЫБРАТЬ
       |        "____",
       |        4
       |
       |ОБЪЕДИНИТЬ ВСЕ
       |
       |ВЫБРАТЬ
       |        "_____",
       |        5
       |
       |ОБЪЕДИНИТЬ ВСЕ
       |
       |ВЫБРАТЬ
       |        "______",
       |        6
       |
       |ОБЪЕДИНИТЬ ВСЕ
       |
       |ВЫБРАТЬ
       |        "_______",
       |        7
       |
       |ОБЪЕДИНИТЬ ВСЕ
       |
       |ВЫБРАТЬ
       |        "________",
       |        8
       |
       |ОБЪЕДИНИТЬ ВСЕ
       |
       |ВЫБРАТЬ
       |        "_________",
       |        9
       |
       |ОБЪЕДИНИТЬ ВСЕ
       |
       |ВЫБРАТЬ
       |        "__________",
       |        10
       |
       |ОБЪЕДИНИТЬ ВСЕ
       |
       |ВЫБРАТЬ
       |        "",
       |        0
       |;
       |
       |////////////////////////////////////////////////////////////////////////////////
       |Выбрать
       |тз1.ВнутреннийНомер
       |поместить тз1 из &тз1 как тз1
       |;
       |Выбрать
       |тз2.ВнутреннийНомер
       |поместить тз2 из &тз2 как тз2
       |;
       |Выбрать
       |тз1сРазбиением.ВнутреннийНомер,
       |Подстрока(тз1сРазбиением.ВнутреннийНомер,1, КоличествоСимволовДоТире.КолСимв) как ДоСлэша,
       |Подстрока(тз1сРазбиением.ВнутреннийНомер,КоличествоСимволовДоТире.КолСимв+2, СтрДлина.КолСимв) как ПослеТире
       |поместить тз1сРазбиением
       |из тз1 как тз1сРазбиением
       |        ЛЕВОЕ СОЕДИНЕНИЕ тзКоличествоСимволов9 КАК КоличествоСимволовДоТире
       |        ПО (тз1сРазбиением.ВнутреннийНомер ПОДОБНО КоличествоСимволовДоТире.Симв+"-%")
       |        ЛЕВОЕ СОЕДИНЕНИЕ тзКоличествоСимволов9 КАК СтрДлина
       |        ПО (тз1сРазбиением.ВнутреннийНомер ПОДОБНО СтрДлина.Симв)
       |;
       |Выбрать
       |тз2сРазбиением.ВнутреннийНомер,
       |Подстрока(тз2сРазбиением.ВнутреннийНомер,1, КоличествоСимволовДоСлэша.КолСимв) как ДоСлэша,
       |Подстрока(тз2сРазбиением.ВнутреннийНомер,КоличествоСимволовДоТире.КолСимв+2, СтрДлина.КолСимв) как ПослеТире
       |поместить тз2сРазбиением
       |из тз2 как тз2сРазбиением
       |        ЛЕВОЕ СОЕДИНЕНИЕ тзКоличествоСимволов9 КАК КоличествоСимволовДоСлэша
       |        ПО (тз2сРазбиением.ВнутреннийНомер ПОДОБНО КоличествоСимволовДоСлэша.Симв+"/%")
       |        ЛЕВОЕ СОЕДИНЕНИЕ тзКоличествоСимволов9 КАК КоличествоСимволовДоТире
       |        ПО (тз2сРазбиением.ВнутреннийНомер ПОДОБНО КоличествоСимволовДоТире.Симв+"-%")
       |        ЛЕВОЕ СОЕДИНЕНИЕ тзКоличествоСимволов9 КАК СтрДлина
       |        ПО (тз2сРазбиением.ВнутреннийНомер ПОДОБНО СтрДлина.Симв)
       |;
       |
       |ВЫБРАТЬ
       |        тз11.ВнутреннийНомер,
       |        тз22.ВнутреннийНомер
       |ИЗ
       |        тз1сРазбиением КАК тз11
       |                Левое СОЕДИНЕНИЕ тз2сРазбиением КАК тз22
       |                ПО тз11.ДоСлэша Подобно тз22.ДоСлэша
       |                и  тз11.ПослеТире Подобно тз22.ПослеТире
       |                
       |";
     
     
       Параметр = новый ТаблицаЗначений;
       Параметр.Колонки.Добавить("ВнутреннийНомер", Новый ОписаниеТипов("Строка"));
       новстр = Параметр.Добавить();
       новстр.ВнутреннийНомер = "30568-12";
       новстр = Параметр.Добавить();
       новстр.ВнутреннийНомер = "3568-12";
     
       Запрос.УстановитьПараметр("тз1", Параметр);
       Параметр = новый ТаблицаЗначений;
       Параметр.Колонки.Добавить("ВнутреннийНомер", Новый ОписаниеТипов("Строка"));
       новстр = Параметр.Добавить();
       новстр.ВнутреннийНомер = "30568/1-12";
       новстр = Параметр.Добавить();
       новстр.ВнутреннийНомер = "30568/1-11";
       новстр = Параметр.Добавить();
       новстр.ВнутреннийНомер = "30568/2-12";
       новстр = Параметр.Добавить();
       новстр.ВнутреннийНомер = "3568/2-12";
       новстр = Параметр.Добавить();
       новстр.ВнутреннийНомер = "3568/2-13";
     
       Запрос.УстановитьПараметр("тз2", Параметр);
     
       Запрос.Текст = Запросы;
       РЗ = Запрос.Выполнить();
1 Новиков
 
13.04.12
19:50
какая ошибка валится?
2 Новиков
 
13.04.12
19:52
ну и да, в догонку: в джойнах по чему клеишься - в темпах своих - индексируй эти поля. И да, лайках в джойнах - это адовая жесть!
3 catena
 
13.04.12
19:55
(1)Ой, скульная какая-то. Что-то про невозможность чего-то :) Я баловалась, а потом отвлекли работой.
(2)Есть другие идеи? С интересом выслушаю.
4 ILM
 
гуру
13.04.12
19:55
Совет, попробуй заменить псевдонимы таблиц "ИЗ", на отличные от имени временных таблиц.  Был однажды такой же затык, работало с файловой, вылетала на сервере. НЕ использовал имя  из строки ПОМЕСТИТЬ в том же запросе, только запрос там был на большее число таблицы.
5 ILM
 
гуру
13.04.12
19:56
Я про это
       |поместить тз1сРазбиением
       |из тз1 как тз1сРазбиением
6 catena
 
13.04.12
19:57
(5)Я поняла, попробую.
7 ILM
 
гуру
13.04.12
19:57
Да и у ТЗ длину строки задай для поля хотя бы 20 символов
8 ILM
 
гуру
13.04.12
19:57
Параметр.Колонки.Добавить("ВнутреннийНомер", Новый ОписаниеТипов("Строка"));
9 ILM
 
гуру
13.04.12
19:58
Может их в SQL превращает в МЕМО поле
10 catena
 
13.04.12
19:59
(9)Тоже может :) Ок.
11 Новиков
 
13.04.12
20:00
по моему, в тексте скулевой ошибки будут символы "255" =)
12 catena
 
13.04.12
20:00
(11)По-моему там было что-то про стринг, так что вполне возможно, что он просто не скушал неограниченные строки.
13 Новиков
 
13.04.12
20:02
ну ладно. Как точное будет описалово - пиши.
14 hhhh
 
13.04.12
21:41
(12) да, неограниченные строки на файловой проходят всегда, а на скуле не всегда.
15 AlexNew
 
13.04.12
21:51
А по моему - убить. Чтоб человек не мучился с такими вопросами. Но с убийством я - пас.
16 AlexNew
 
13.04.12
21:52
Гуманный, кстати способ...
17 catena
 
20.04.12
19:16
Не сработало ни переименование, ни ограничение строк.
Зато сегодня я принесла ошибку :)

http://s019.radikal.ru/i635/1204/46/bf22f4b650c7.gif
18 catena
 
20.04.12
19:18
Ну и чтоб два раза не ходить:

А почему оракл (да и 1с тоже) при сортировке игнорирует казахские символы?
http://s019.radikal.ru/i616/1204/91/62c80cc674fc.jpg
19 catena
 
20.04.12
19:19
Ой, а еще, еще!

Предопределенные (Predefined)
....
Примечание:
Данное свойство всегда имеет значение Неопределено, т.к. во встроенном языке не предусмотрена работа со значением данного свойства.


А зачем???
20 Лоботряс
 
20.04.12
19:49
Оптимизировать можно так. В четвертом и пятом пакете использовать внутреннее соединение(так будет меньше строк в этих таблицах) вместо левого, а в последнем пакете обе полученные таблицы (тз11 и тз22) левым соединением соединять с тз1.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.