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

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

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

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

***Vjacheslav***

Искомый=Документы.ВводНачальныхОстатков.НайтиПоНомеру("00000000001",31-12-2009); Должен работать же.

Nail2010

Не могу понять, почему вылазит эта ошибка:

{Форма.Форма(7)}: Ошибка при вызове метода контекста (ПолучитьОбъект): Элемент не выбран!
   ОбъектДок=искомый.ПолучитьОбъект();
по причине:
Элемент не выбран!

***Vjacheslav***

По логике: оозможно из-за того что не нашелся документ.Проверьте так ли это.

Nail2010

Нет, документ на месте. Может к дате еще и время нужно указать для точности?

Nail2010


Ладно, кое-что в коде изменил. так все работает. Именно так. Уффф.... :zebzdr:

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

КонецПроцедуры

***Vjacheslav***

Может ты дату не так указывал. Надо '20091231000000'

Nail2010

Ну по крайне мере с датой в таком виде (как в коде) все работает.

Klyacksa

Приветствую!
***Vjacheslav***, спасибо, именно так я и предлагала)))
А еще можно было сразу выбирать данные таб.частей запросом, и по ним (!) уже сразу обход делать.

Nail2010, да, можно и так, как Вы написали. Есть пара замечаний.
1. А если строк в таб.части нет? Документ все-равно перезаписывается - не очень это хорошо.
2. А если документ не проведен? Тоже по нему создаем новые объекты? А если помечен на удаление? ;)
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

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

Nail2010

Окончательный вариант модуля такой:

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


Клякса, Замечания в принципе, хорошие, но для моей задачи это не принципиально. Просто пользование этой обработки - раз  в год(!)

Nail2010

теперь все обрабатыввется за 28 секунд :)

Теги:

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

Рейтинг@Mail.ru

Поиск