Имя: Пароль:
1C
1C 7.7
v7: Верно ли составлен запрос
,
0 Sova112
 
14.12.16
21:55
7 ку знаю очень плохо) подскажите пожалуйста можно ли оптимизировать запрос?
апрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = "//{{ЗАПРОС(НайтиСвоеЮрЛицо)
    |ТекущийЭлемент = Справочник." + Вид + ".ТекущийЭлемент;
    |ИНН = Справочник." + Вид + ".ИНН;
    |Группировка ТекущийЭлемент без групп;
    |Условие((Лев(ИНН,  " + ДлинаИНН + ") = ИННКраткий) ИЛИ (Лев(ИНН, 12) = ИННКраткий));
    |"//}}ЗАПРОС
1 Garykom
 
гуру
14.12.16
21:56
ыыыы
2 фобка
 
14.12.16
21:57
Семерку особо и не оптимизируешь, довольно оригинальная платформа.. если только прямыми запросами
3 Garykom
 
гуру
14.12.16
21:57
Какой умный движок у форума, даже сам ошибки выделяет
4 фобка
 
14.12.16
21:58
Если инн стандартно больше или равно 12 символов то первой частью условия можно пренебречь
5 Sova112
 
14.12.16
22:00
Перем Запрос, ТекстЗапроса;
    
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = "//{{ЗАПРОС(НайтиСвоеЮрЛицо)
    |ТекущийЭлемент = Справочник." + Вид + ".ТекущийЭлемент;
    |ИНН = Справочник." + Вид + ".ИНН;
    |Группировка ТекущийЭлемент без групп;
    |Условие((Лев(ИНН,  " + ДлинаИНН + ") = ИННКраткий) ИЛИ (Лев(ИНН, 12) = ИННКраткий));
    |"//}}ЗАПРОС
    ;
    
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) <> 0 Тогда
        
        Пока Запрос.Группировка(1) = 1 Цикл
            Возврат Запрос.ТекущийЭлемент;  
        КонецЦикла;
    КонецЕсли;
    
    Возврат СоздатьОбъект("Справочник." + Вид);
6 Sova112
 
14.12.16
22:00
просто загрузк по платежам идет 30 -1 час в комплексную, зависает именно в поиске здесь
7 trdm
 
14.12.16
22:06
Скуль?
8 Garykom
 
гуру
14.12.16
22:07
(6) Перед "загрузкой платежек" получаешь список своих юр.лиц, записываешь в СЗ или ТЗ где ИНН|ЭлементСправочника и далее юзаешь эту СЗ/ТЗ в коде просто через "НайтиЗначение"
9 Garykom
 
гуру
14.12.16
22:08
(8)+ Если же в коде создаются новые элементы справочника, то просто в свою СЗ/ТЗ их сразу и добавляешь и далее юзаешь.
10 Garykom
 
гуру
14.12.16
22:10
(8)+ Если СЗ то Получить(ИНН), т.е. по строковому представлению получаем элемент.
11 Sova112
 
14.12.16
22:11
так тут поиск и клиентов идет, это стандартная загрузка
12 Garykom
 
гуру
14.12.16
22:12
(11) Какая нафик разница? До пары тысяч клиентов СЗ/ТЗ один фиг шустрее точно, свыше уже тестить нуна.
13 Мимохожий Однако
 
14.12.16
22:14
Обычной выборкой не пробовал без всяких запросов?
14 Garykom
 
гуру
14.12.16
22:15
Ну и на сладкое это НачатьТранзакцию()/ЗафиксироватьТранзакцию() чтобы еще шустрее была загрузка с записью кучи всего в базу
15 Garykom
 
гуру
14.12.16
22:16
(13) Зачем делать выборку в цикле, когда можно один раз о цикла и потом просто поиск в памяти?
16 Garykom
 
гуру
14.12.16
22:16
(15) *до цикла
17 Sova112
 
14.12.16
22:23
а может еще тут не верно что-то?
    //    Перем Запрос, ТекстЗапроса;
        Вид = "ЮрЛица";
        ДлинаИНН = 10;
        Запрос = СоздатьОбъект("Запрос");
        ТекстЗапроса = "//{{ЗАПРОС(НайтиСвоеЮрЛицо)
        |ТекущийЭлемент = Справочник." + Вид + ".ТекущийЭлемент;
        |ИНН = Справочник." + Вид + ".ИНН;
        |Группировка ТекущийЭлемент без групп;
        |Условие((Лев(ИНН,  " + ДлинаИНН + ") = ИННКраткий) ИЛИ (Лев(ИНН, 12) = ИННКраткий));
        |"//}}ЗАПРОС
        ;
        
        // Если ошибка в запросе, то выход из процедуры
        Если Запрос.Выполнить(ТекстЗапроса) <> 0 Тогда
            
            Пока Запрос.Группировка(1) = 1 Цикл
                
                Объект.НайтиЭлемент( Запрос.ТекущийЭлемент);    
                
                Если Объект.Выбран() <> 0  Тогда
                    
                    КПлательшик = СоздатьОбъект("Справочник.Контрагенты");
                    КПлательшик.НайтиПоРеквизиту("ЮрФизЛицо", Объект, 1);
                    
                    Ит = СоздатьОбъект("БухгалтерскиеИтоги");
                    Ит.ИспользоватьПланСчетов(ОсновнойПланСчетов());
                    
                    Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты, КПлательшик, 1);
                    Ит.ИспользоватьСубконто(ВидыСубконто.Договоры,, 1);
                    Ит.ВключатьСубсчета(1);
                    Ит.ВыполнитьЗапрос(, ДатаДок, СчетТекст,,, 1,, "С");
                    
                    Ит.ВыбратьСчета();
                    Пока Ит.ПолучитьСчет() = 1 Цикл
                        
                        Ит.ВыбратьСубконто(ВидыСубконто.Контрагенты);
                        Пока Ит.ПолучитьСубконто(ВидыСубконто.Контрагенты) = 1 Цикл
                            
                            Ит.ВыбратьСубконто(ВидыСубконто.Договоры);
                            Пока Ит.ПолучитьСубконто(ВидыСубконто.Договоры) = 1 Цикл
                                
                                Если Ит.СКД() > 0 Тогда
                                    Субконто11 =  Ит.Субконто(ВидыСубконто.Контрагенты);
                                    Субконто21 = Ит.Субконто(ВидыСубконто.Договоры);
                                    
                                    Если СчетТекст = "62.1" Тогда
                                        Замены=Замены+ИзменитьАтрибут(Док, "Контрагент",Субконто11);
                                        
                                        Замены=Замены+ИзменитьАтрибут(Док, "Договор",Субконто21);  
                                        
                                    Иначе    
                                        Док.НазначитьТип("Субконто1", Счет1.ВидСубконто(1));
                                        Замены=Замены+ИзменитьАтрибут(Док, "Субконто1",Субконто11);
                                        Док.НазначитьТип("Субконто2", Счет1.ВидСубконто(2));
                                        Замены=Замены+ИзменитьАтрибут(Док, "Субконто2",Субконто21);
                                        
                                    КонецЕсли;
                                    
                                    
                                    
                                    
                                    
                                    Возврат Док;
                                КонецЕсли;    
                                
                                
                            КонецЦикла;
                        КонецЦикла;
                    КонецЦикла;
                    
                    
                КонецЕсли;            
                
            КонецЦикла;
        КонецЕсли;
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший