Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 сен 2024, 10:19

Обработка с черепашьей скоростью....

Автор Nail2010, 24 мар 2011, 09:54

0 Пользователей и 1 гость просматривают эту тему.

Klyacksa

А вот в чем дело:
Цитировать1. Зачем запросом брать табличные части документов ВводНачальныхОстатков, если из запроса Вы все-равно берете только ссылку на сам документ, организацию и дату (это все данные из документа, а не из табличной части). Так запрос выполняется дольше.
:)
Например, есть один Документ1, в его табличной части 3 строки.
Вместо того, чтобы один раз его взять, Вы берете его 3 (!) раза. Вот так и получается, что механизм сработал не по количеству документов, а по количеству строк таб.частей всех найденных документах.

Отредактируйте обработку, согласно моим правкам.

p.s. А у меня только час дня :)
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Nail2010

Хорошо, спасибо! Нужно еще до ума довести..... интересно есть ли какой-нибудь метод удаления всего списка документов разом? Есои я выборку буду сейчас 1 миллион делать на удаление.... сам себе блин проблему сделал

Klyacksa

Думаю, можно пока зыпустить удаление документов, а в это время править обработку :)
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Nail2010

Процедура КнопкаВыполнитьНажатие(Кнопка)
Поисков=Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("Основной договор");
КонтрагентДок=Справочники.Контрагенты.НайтиПоНаименованию("ЗАО СибЗавод");
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
              | ВводНачальныхОстатковМПЗПриобретенные.Ссылка,
              | ВводНачальныхОстатковМПЗПриобретенные.Ссылка.Дата КАК Дата,
              | ВводНачальныхОстатковМПЗПриобретенные.Ссылка.Организация КАК Организация
              |ИЗ
              | Документ.ВводНачальныхОстатков.МПЗПриобретенные КАК ВводНачальныхОстатковМПЗПриобретенные
              |ГДЕ
              | ВводНачальныхОстатковМПЗПриобретенные.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания";
Запрос.УстановитьПараметр("ДатаНачала",НачПериода);
Запрос.УстановитьПараметр("ДатаОкончания",КонПериода);
Выборка=Запрос.Выполнить().Выбрать();
Пока выборка.Следующий() Цикл;
СтрокаТабЧасти=ИзмДок.Добавить();
СтрокаТабЧасти.Док=Выборка.Ссылка;
СтрокаПартии=СтрокаТабЧасти.Док.ПолучитьОбъект();
СтрокаЗнач=Документы.ДокументРасчетовСКонтрагентом.Выбрать();
СтрокаЗнач.Дата=Выборка.Дата;
СтрокаЗнач.Организация=Выборка.Организация;
СтрокаЗнач.ДоговорКонтрагента=Поисков;
СтрокаЗнач.Контрагент=КонтрагентДок;
Для Каждого СтрокаЗначПартии Из СтрокаПартии.МПЗПриобретенные Цикл
СтрокаЗначПартии.Партия=СтрокаЗнач.Ссылка;
КонецЦикла;
КонецЦикла;
СтрокаПартии.Записать();
КонецПроцедуры


Посмотрите, плиз.... Так лучше?

cska-fanat-kz

Перед запуском непроверенного кода - выгружайте базу.
Если косяк - обратно загрузили и порядок! )
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Klyacksa

Нет, принципиально не лучше.
Как брали запрос по всем строкам таб.частей, а используете из него только данные самого документа, так и берете.
Так и будет миллион строк.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Nail2010

так.. вернемся к истокам. Разве выборка запросам не будет быстрее, чем обращение к данным через точку?

***Vjacheslav***

Klyacksa, предлагает так сделать.
Запрос.Текст="ВЫБРАТЬ
                 |   ВводНачальныхОстатков.Ссылка,
                 |   ВводНачальныхОстатков.Дата КАК Дата,
                 |   ВводНачальныхОстатков.Организация КАК Организация
                 |ИЗ
                 |   Документ.ВводНачальныхОстатков КАК ВводНачальныхОстатков
                 |ГДЕ
                 |   ВводНачальныхОстатков.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания";

Nail2010

По другому код я составил так- строго линейно:

Процедура КнопкаВыполнитьНажатие(Кнопка)
Поисков=Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("Основной договор");
КонтрагентДок=Справочники.Контрагенты.НайтиПоНаименованию("ЗАО Баварский Моторный Центр");
КонтрагентДок2=Справочники.Контрагенты.НайтиПоНаименованию("Ремэкс(ООО)");
Искомый=Документы.ВводНачальныхОстатков.НайтиПоНомеру("00000000001",31-12-2009);
НужДок=Искомый.ПолучитьОбъект();
ИскДата=НужДок.Дата;
Для каждого СтрокаТабЧасти из НужДок.МПЗПриобретенные Цикл;
СтрокаТабЧасти.ВалютнаяСумма=СтрокаТабЧасти.Сумма;
СтрокаТабЧасти.Партия=Документы.ДокументРасчетовСКонтрагентом.СоздатьДокумент();
СтрокаТабЧасти.Партия.Дата=ИскДата;
СтрокаТабЧасти.Партия.Организация=НужДок.Организация;
СтрокаТабЧасти.Партия.ДоговорКонтрагента=Поисков;
Если СтрокатабЧасти.Номенклатура="Покупка автомобиля BMW X5" Тогда
СтрокаТабЧасти.Партия.Контрагент=КонтрагентДок;
Иначе
СтрокаТабЧасти.Партия.Контрагент=КонтрагентДок2;
КонецЕсли;
НужДок.Записать();

Nail2010

Штука в том, что в списке Дока Ввод остатков у меня находиться 7 документов, а мне нужен только последний - номер 000001 от 31-12-2009. если в выборке я задаю ВЫБРАТЬ  ВводНачальныхОстатков.Ссылка, то он же выбирает у меня весь список из всех 7 документов полностью, верно?
А мне это совсем не кстати.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск