|
Оптимизация запросов | ☑ | ||
---|---|---|---|---|
0
Данил Сергеевич
13.06.13
✎
00:14
|
Навоял такой код, во внешней обработке, который заполняет ревкизит "Проект" во всех документах определенного типа, с запросами сегодня первый день работаю, знаю, что как то это все дело можно оптимизировать, а вот как не могу понять... подскажите как запросы объединить или типо того... кто разбирается?
Процедура КнопкаВыполнитьНажатие(Кнопка) //////////////////// ПЛАТЕЖНОЕ ПОРУЧЕНИЕ ИСХОДЯЩЕЕ//////////////////////// Запрос = Новый Запрос; Запрос.Текст = " ВЫБРАТЬ | Ссылка |ИЗ | Документ.ПлатежноеПоручениеИсходящее Как ПлатежноеПоручениеИсходящее |ГДЕ | ПлатежноеПоручениеИсходящее.Организация = &Организация | И ПлатежноеПоручениеИсходящее.Дата МЕЖДУ &НачДата И &КонДата | И ПлатежноеПоручениеИсходящее.РасшифровкаПлатежа.Проект = НЕОПРЕДЕЛЕНО | И ПлатежноеПоручениеИсходящее.Проведен = ИСТИНА"; Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("НачДата", ДатаНачалаПериода); Запрос.УстановитьПараметр("КонДата", КонецДня(ДатаКонцаПериода)); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Док = Выборка.Ссылка.ПолучитьОбъект(); Для каждого Строка Из Док.РасшифровкаПлатежа Цикл Строка.Проект = Строка.ДоговорКонтрагента.ОсновнойПроект; КонецЦикла; Док.Записать(РежимЗаписиДокумента.Проведение); КонецЦикла; ///////////////////////////ПЛАТЕЖНОЕ ПОРУЧЕНИЕ ВХОДЯЩЕЕ//////////////////// Запрос = Новый Запрос; Запрос.Текст = " ВЫБРАТЬ | Ссылка |ИЗ | Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее |ГДЕ | ПлатежноеПоручениеВходящее.Организация = &Организация | И ПлатежноеПоручениеВходящее.Дата МЕЖДУ &НачДата И &КонДата | И РасшифровкаПлатежа.Проект = НЕОПРЕДЕЛЕНО | И ПлатежноеПоручениеВходящее.Проведен = ИСТИНА"; Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("НачДата", ДатаНачалаПериода); Запрос.УстановитьПараметр("КонДата", КонецДня(ДатаКонцаПериода)); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Док = Выборка.Ссылка.ПолучитьОбъект(); Для каждого Строка Из Док.РасшифровкаПлатежа Цикл Строка.Проект = Строка.ДоговорКонтрагента.ОсновнойПроект; КонецЦикла; Док.Записать(РежимЗаписиДокумента.Проведение); КонецЦикла; |
|||
1
Данил Сергеевич
13.06.13
✎
00:14
|
///////////////////////////РАСХОДНЫЙ КАССОВЫЙ ОРДЕР////////////////////
|
|||
2
Данил Сергеевич
13.06.13
✎
00:15
|
///////////////////////////РАСХОДНЫЙ КАССОВЫЙ ОРДЕР////////////////////
Запрос = Новый Запрос; Запрос.Текст = " ВЫБРАТЬ | Ссылка |ИЗ | Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер |ГДЕ | РасходныйКассовыйОрдер.Организация = &Организация | И РасходныйКассовыйОрдер.Дата МЕЖДУ &НачДата И &КонДата | И РасшифровкаПлатежа.Проект = НЕОПРЕДЕЛЕНО | И РасходныйКассовыйОрдер.Проведен = ИСТИНА"; Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("НачДата", ДатаНачалаПериода); Запрос.УстановитьПараметр("КонДата", КонецДня(ДатаКонцаПериода)); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Док = Выборка.Ссылка.ПолучитьОбъект(); Для каждого Строка Из Док.РасшифровкаПлатежа Цикл Строка.Проект = Строка.ДоговорКонтрагента.ОсновнойПроект; КонецЦикла; Док.Записать(РежимЗаписиДокумента.Проведение); КонецЦикла; //////////////////////////////ПРИХОДНЫЙ КАССОВЫЙ ОРДЕР//////////////////// Запрос = Новый Запрос; Запрос.Текст = " ВЫБРАТЬ | Ссылка |ИЗ | Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер |ГДЕ | ПриходныйКассовыйОрдер.Организация = &Организация | И ПриходныйКассовыйОрдер.Дата МЕЖДУ &НачДата И &КонДата | И РасшифровкаПлатежа.Проект = НЕОПРЕДЕЛЕНО | И ПриходныйКассовыйОрдер.Проведен = ИСТИНА"; Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("НачДата", ДатаНачалаПериода); Запрос.УстановитьПараметр("КонДата", КонецДня(ДатаКонцаПериода)); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Док = Выборка.Ссылка.ПолучитьОбъект(); Для каждого Строка Из Док.РасшифровкаПлатежа Цикл Строка.Проект = Строка.ДоговорКонтрагента.ОсновнойПроект; КонецЦикла; Док.Записать(РежимЗаписиДокумента.Проведение); КонецЦикла; /////////////////////////////АКТ ОБ ОКАЗАНИИ ПРОИЗВОДСТВЕННЫХ УСЛУГ/////////////////// Запрос = Новый Запрос; Запрос.Текст = " ВЫБРАТЬ | Ссылка |ИЗ | Документ.АктОбОказанииПроизводственныхУслуг КАК АктОбОказанииПроизводственныхУслуг |ГДЕ | АктОбОказанииПроизводственныхУслуг.Организация = &Организация | И АктОбОказанииПроизводственныхУслуг.Дата МЕЖДУ &НачДата И &КонДата | И Проект = НЕОПРЕДЕЛЕНО | И АктОбОказанииПроизводственныхУслуг.Проведен = ИСТИНА"; Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("НачДата", ДатаНачалаПериода); Запрос.УстановитьПараметр("КонДата", КонецДня(ДатаКонцаПериода)); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Док = Выборка.Ссылка.ПолучитьОбъект(); Док.Проект = Док.ДоговорКонтрагента.ОсновнойПроект; Док.Записать(РежимЗаписиДокумента.Проведение); КонецЦикла; |
|||
3
Данил Сергеевич
13.06.13
✎
00:15
|
/////////////////////////////ПОСТУПЛЕНИЕ ТОВАРОВ И УСЛУГ///////////////////
Запрос = Новый Запрос; Запрос.Текст = " ВЫБРАТЬ | Ссылка |ИЗ | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг |ГДЕ | ПоступлениеТоваровУслуг.Организация = &Организация | И ПоступлениеТоваровУслуг.Дата МЕЖДУ &НачДата И &КонДата | И Проект = НЕОПРЕДЕЛЕНО | И ПоступлениеТоваровУслуг.Проведен = ИСТИНА"; Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("НачДата", ДатаНачалаПериода); Запрос.УстановитьПараметр("КонДата", КонецДня(ДатаКонцаПериода)); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Док = Выборка.Ссылка.ПолучитьОбъект(); Док.Проект = Док.ДоговорКонтрагента.ОсновнойПроект; Док.Записать(РежимЗаписиДокумента.Проведение); КонецЦикла; Сообщить("Операция проведена успешно!"); КонецПроцедуры Вот и всё. Конфигурация УПП |
|||
4
Reaper_1c
13.06.13
✎
00:21
|
В предприятии идешь: Сервис - Универсальные обработки - групповая обработка справочников и документов. Дальше по интерфейсу разберешься.
|
|||
5
hhhh
13.06.13
✎
00:23
|
| И Проект = НЕОПРЕДЕЛЕНО
проект там никогда не будет неопределено. Сравнивайте с пустой ссылкой. |
|||
6
viktor_vv
13.06.13
✎
00:24
|
Объединить Все.
Ну и Основной проект из договора в запросе получай, чтобы в цикле через две точки не тянуть. |
|||
7
Данил Сергеевич
13.06.13
✎
00:24
|
(4) Раз такой умный, то попробуй сделать это сам, а когда будешь пробывать поймешь почему надо делать свою внешнюю обработку...
|
|||
8
Данил Сергеевич
13.06.13
✎
00:26
|
(5) Пробывал по всякому, но с запросами совсем не знаком по этому сравнивать с пустой ссылкой не получилось, а как у меня есть всё работает, хотя и понимаю что где то может не правильно отыграть( если например тип будет определён а значение стоять не будет). Если скажишь правильный вариант буду признателен)
|
|||
9
hhhh
13.06.13
✎
00:26
|
(7) не, если проектов меньше 10, твоя внешняя обработка в заднице, групповая обработка рулит. (4) прав.
|
|||
10
hhhh
13.06.13
✎
00:27
|
(8) = ЗНАЧЕНИЕ(Справочник.Проекты.ПустаяСсылка)
|
|||
11
Данил Сергеевич
13.06.13
✎
00:27
|
(9) В ней не задать значение другого реквизита
|
|||
12
hhhh
13.06.13
✎
00:28
|
(11) как это не задать? Не гони.
|
|||
13
Данил Сергеевич
13.06.13
✎
00:34
|
(6) Про договор понятно, а вот про Объединить всё нет(
|
|||
14
mistеr
13.06.13
✎
00:38
|
(7) И почему же?
|
|||
15
mistеr
13.06.13
✎
00:39
|
(7) Как вариант, в продвинутой консоли запросов "Выполнить алгоритм"
|
|||
16
mistеr
13.06.13
✎
00:39
|
(11) В настройки загляни...
|
|||
17
Данил Сергеевич
13.06.13
✎
00:47
|
(16) Там можно менять реквизит на значение... а как прописать чтоб это значение бралось с другого реквизита???
|
|||
18
Андрей Федотов
13.06.13
✎
01:07
|
Даниил, напишите лично.
В запросе в конструкторе см закладку Объединение. Вам нужно Все ваши маленькие запросы объединить в один и смотреть только за тем, чтобы количество выбираемых полей в каждом запросе было одинаковым. Или второй вариант - сделать цикл по виду объекта. |
|||
19
Данил Сергеевич
13.06.13
✎
01:13
|
(18) Спасибо за желание, но я помоему разобрался, да эксперементировать уже поздно...пора спать...
|
|||
20
Reaper_1c
13.06.13
✎
02:00
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |