|
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); КонецЕсли; Возврат Док; КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; КонецЕсли; КонецЦикла; КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |