Имя: Пароль:
1C
1С v8
Клиент и сервер.
0 imtade2
 
13.12.11
03:24
Есть процедура поиска номенклатуры по артиклу:
Артикул = СокрЛП(_Артикул);
   Если ПустаяСтрока(Артикул) Тогда
       Возврат Неопределено;
   КонецЕсли;
   
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
                  |    ВложенныйЗапрос.Товар,
                  |    МАКСИМУМ(ВложенныйЗапрос.Артикул) КАК Артикул,
                  |    ВложенныйЗапрос.Товар.Код КАК Код,
                  |    ВложенныйЗапрос.Товар.ЭтоГруппа КАК ЭтоГруппа,
                  |    ВложенныйЗапрос.Товар.ПометкаУдаления КАК ПометкаУдаления
                  |ИЗ
                  |    (ВЫБРАТЬ
                  |        Номенклатура.Ссылка КАК Товар,
                  |        Номенклатура.АртикулПроизводителя КАК Артикул
                  |    ИЗ
                  |        Справочник.Номенклатура КАК Номенклатура
                  |    ГДЕ
                  |        (Номенклатура.АртикулПроизводителя ПОДОБНО &Артикул
                  |        ИЛИ Номенклатура.Код ПОДОБНО &Артикул)
                  |        И (Номенклатура.Ссылка В ИЕРАРХИИ (&Папка)
                  |                ИЛИ &НеВОднойПапке)
                  |    
                  |    ОБЪЕДИНИТЬ ВСЕ
                  |    
                  |    ВЫБРАТЬ
                  |        ПоставщикиНоменклатуры.Номенклатура,
                  |        ПоставщикиНоменклатуры.АртикулПоставщика
                  |    ИЗ
                  |        РегистрСведений.ПоставщикиНоменклатуры КАК ПоставщикиНоменклатуры
                  |    ГДЕ
                  |        ПоставщикиНоменклатуры.АртикулПоставщика ПОДОБНО &Артикул
                  |        И (ПоставщикиНоменклатуры.Номенклатура В ИЕРАРХИИ (&Папка)
                  |                ИЛИ &НеВОднойПапке)) КАК ВложенныйЗапрос
                  |
                  |СГРУППИРОВАТЬ ПО
                  |    ВложенныйЗапрос.Товар,
                  |    ВложенныйЗапрос.Товар.Код,
                  |    ВложенныйЗапрос.Товар.ЭтоГруппа,
                  |    ВложенныйЗапрос.Товар.ПометкаУдаления";
                 
   //imt+
   Запрос.УстановитьПараметр("Папка", Папка);
   Запрос.УстановитьПараметр("НеВОднойПапке", ?(Папка = Неопределено, Истина, Ложь));
   //imt-
   Если ПолноеСовпадение Тогда
       Запрос.Текст = стрЗаменить(Запрос.Текст, "ПОДОБНО", "=");
       Запрос.УстановитьПараметр("Артикул", Артикул);
   Иначе
       Запрос.УстановитьПараметр("Артикул", Строка(Артикул));
   КонецЕсли;
   
   тз = Запрос.Выполнить().Выгрузить();
   Если тз.Количество() = 0 Тогда
       Возврат Неопределено;
   Иначе
       Возврат тз;
   КонецЕсли;
Пытаюсь сравнить время выполнения данной процедуры на сервер и клиенте. Цифры очень странные. Мало того, что могут отличаться в несколько раз при одном и том же артикуле и при выполнении каждый раз на сервер\клиенте; так бывают случаи, когда на клиенте выполняется быстрее чем на сервере. Как это объяснить? Какие еще есть методы оптимизации работы 1с? Конфа конечно написала через одно место, но при таком железе, кажется, все должно летать и так)) Да не тут то было))
1 GROOVY
 
13.12.11
03:29
Запрос на клиенте?! Вы что то путаете.
2 GROOVY
 
13.12.11
03:29
И тему называйте нормально.
3 imtade2
 
13.12.11
03:32
(1)на толстом
4 imtade2
 
13.12.11
03:33
конфа только под толстым работает пока
5 GROOVY
 
13.12.11
03:33
Абсолютно идиотская группировка.
(3) Запрос не выполняется на клиенте (ну кроме файловой версии).
6 imtade2
 
13.12.11
03:35
(5)где можно почитать о том, что где выполняется?
т.е. если этот кусок кода выполнять в процедуре с диррективой НаКлиенте, то запрос все равно будет выполняться на сервере?
7 GROOVY
 
13.12.11
03:35
Я переписал бы запрос. Сделал бы соединение, а не объединение. Убрал бы группировку. Еще условия не очень мне нравятся, но пока не могу сказать как по лучше их описать.
8 GROOVY
 
13.12.11
03:36
(6) Когда система работает в толстом клиенте она игнорирует все директивы компиляции. Запрос выполняется средствами SQL и 1C сервера.
9 GROOVY
 
13.12.11
03:37
Еще условие при выгрузке тз нельзя так писать. Хорошо бы проверить выполнился ли запрос (Пустой()) и только потом пытаться уже к результату обратиться.
10 imtade2
 
13.12.11
03:39
(8)а кроме запроса? как узнать что и где выполняется? при условии работы в sql?
11 Конфигуратор1с
 
13.12.11
03:40
(9) раз Вам не спится, может ответите на вопрос о соединении: если я справочник соединяю с регистром сведений левым соединением и накладываю условие на регистр сведений, то он мне отбирает те записи которые соответствуют условию для регистра сведений. Как в таком случае задать условие?
12 GROOVY
 
13.12.11
03:49
(11) Ничего не понял. Нужное условие установлено, а вопрос в том как установить условие?
13 imtade2
 
13.12.11
04:03
GROOVY, я правильно понимаю, что в толстом клиенте не могу повлиять на выполнения кода на сервере\клиенте? т.е оптимизировать таким образом не получится и единственный вариант - ковырять запросы и другой написанный через задницу код?
14 GROOVY
 
13.12.11
04:06
(13) Ну можно уйти в общий серверный модуль и гарантированно выполнять код на сервере. А вообще ковырять запросы полезно :)
15 imtade2
 
13.12.11
04:09
(14)т.е. если у общего модуля стоят галки клиент, сервер, вызов сервера и я пишу данный код в процедуру с директивой НаСервере, то он весь будет выполняться на сервере. а если с НаКлиенте, то все, кроме запроса будет выполняться на клиенте? так?
16 imtade2
 
13.12.11
04:09
где вообще это можно почитать?
17 H A D G E H O G s
 
13.12.11
04:11
(13) Разница в том, что выборка из запроса поползет на Клиент, а нужна ли она там.
Толстый и так сам по себе нехило загружает сеть, а тут еще выборки ползают.
(11) Отфильтровать РС предварительно (вложенный запрос, либо временная таблица)
18 GROOVY
 
13.12.11
04:12
(17) Судя по запросу там будет 1 элемент.
19 H A D G E H O G s
 
13.12.11
04:13
(12) Он про то, что Левое превращается во Внутреннее неявно.
20 H A D G E H O G s
 
13.12.11
04:13
(18) Я не смотрел код :-)
21 GROOVY
 
13.12.11
04:35
(15) Не путай директивы компиляции с инструкциями предпроцессору.
22 Конфигуратор1с
 
13.12.11
12:17
(17) спасибо. Я так и сделал, просто думал что я что то не так делаю и надо как то с подвывертом условия наложить