Имя: Пароль:
1C
1C 7.7
v7: Формирование номенклатурного заказа
,
0 Style2out
 
27.07.11
13:44
Добрый день уважаемые знатоки. Документ  формирование номенклатурного заказа перелопачивает все заявки с момента ввода конфигурации на предприятии с 2009 г. это уже стало занимать немалое время при формировании заказа на предприятие. Соответственно с каждым днем время формирование все больше и больше. Привожу код процедуры формирования:

   Если ТипЗаказа=Перечисление.ТипНоменклатурногоЗаказа.Плановый Тогда
       Запрос1 = СоздатьОбъект("Запрос");
       
       
       ТекстЗапроса1 =
       "//{{ЗАПРОС(Документы)
       |Период с ДатаДок по ДатаДок;
       |Обрабатывать НеПомеченныеНаУдаление;
       |ОбрабатыватьДокументы Все;
       |ДокЭл_ = Документ.НоменклатурныйЗаказ.ТекущийДокумент;
       |Номер_ = Документ.НоменклатурныйЗаказ.НомерДок;
       |Дата_ = Документ.НоменклатурныйЗаказ.ДатаДок;
       |Подразделение_ = Документ.НоменклатурныйЗаказ.Подразделение;
       |Смена_ = Документ.НоменклатурныйЗаказ.ПроизводственнаяСмена;
       |КакойЗаказ_ = Документ.НоменклатурныйЗаказ.Дополнительный;
       |Группировка ДокЭл_;
       |";
       Если Подразделение.Выбран()=1 Тогда
           ТекстЗапроса1=ТекстЗапроса1+
           "Условие(Подразделение_ в Подразделение);
           |";                
       КонецЕсли;
       Если ПроизводственнаяСмена.Выбран()=1 Тогда
           ТекстЗапроса1=ТекстЗапроса1+
           "Условие(Смена_ в ПроизводственнаяСмена);
           |";
       КонецЕсли;  
       
       Если Запрос1.Выполнить(ТекстЗапроса1) = 0 Тогда
           Возврат;
       КонецЕсли;
       
       Пока Запрос1.Группировка("ДокЭл_") = 1 Цикл
           Если Запрос1.КакойЗаказ_ = 0 Тогда
               СуществуетОсн = Запрос1.ДокЭл_;
           Иначе
               СуществуетДоп = Запрос1.ДокЭл_;
           КонецЕсли;    
       КонецЦикла;
       
       ...................
       КонецЦикла;      
   
       См_=ВозвратПодчСмены(МестоПодр,ПроизводственнаяСмена);
       СмН=См_.НачалоСмены;
       СмК=См_.ОкончаниеСмены;
       
       Запрос = СоздатьОбъект("Запрос");
       ТекстЗапроса =
       "//{{ЗАПРОС(Сформировать)
       |Обрабатывать НеПомеченныеНаУдаление;
       |Заявка_ = Документ.Заявка.ТекущийДокумент;
       |Включать_ = Документ.Заявка.ВключатьВПланПроизводства;
       |ВремяПогрузкиПер = Документ.Заявка.ВремяПогрузки;
       |Номенклатура = Документ.Заявка.Номенклатура;
       |ДатаПроизводства = Документ.Заявка.ДатаПроизводственнойСмены;
       |ПроизводственнаяСменаПер = Документ.Заявка.Смена;
       |Количество_ = Документ.Заявка.Количество;    
       |Вес_ = Документ.Заявка.Вес;
       |ТараПер = Документ.Заявка.Тара;  
       |ПодразделениеПер = Документ.Заявка.Подразделение;
       |УпаковкаПер = Документ.Заявка.Упаковка;  
       |ВремяВыпОбщееПер = Документ.Заявка.ВремяВыпОбщее;
       |ВидУпаковкиПер = Документ.Заявка.ВидУпаковки;
       |КакаяЗаявка_ = Документ.Заявка.ОсновнаяЗаявка;
       |Функция Количество = Сумма(Количество_);                          
       |Функция Вес = Сумма(Вес_);
       |Группировка Заявка_ упорядочить по Заявка_.ДатаДок без групп;";
       Если РазбиватьПоВремени=1 Тогда
           ТекстЗапроса=ТекстЗапроса+"
           |Группировка ВремяПогрузкиПер;";
       КонецЕсли;                    
       ТекстЗапроса=ТекстЗапроса+"
       |Группировка Номенклатура упорядочить по Номенклатура.Код без групп;
       |Группировка ВидУпаковкиПер упорядочить по ВидУпаковкиПер.Код без групп;
       |Условие(Включать_ = 1);
       |Условие(ДатаПроизводства = ДатаДок);
       |Условие(ПодразделениеПер = Подразделение);
       |Условие(ПроизводственнаяСменаПер = ПроизводственнаяСмена);";
       Если Дополнительный = 1 Тогда
           ТекстЗапроса=ТекстЗапроса+
           "Условие(КакаяЗаявка_ = 1);
           |";                
       Иначе
           ТекстЗапроса=ТекстЗапроса+
           "Условие(КакаяЗаявка_ = 0);
           |";                
       КонецЕсли;    
       Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
           Возврат;
       КонецЕсли;
       
       
       СмНПер=СмН;
       СмКПер=СмК;
       
       ТЗ=СоздатьОБъект("ТаблицаЗначений");
       ТЗ.НоваяКолонка("Номенклатура");  
       ТЗ.НоваяКолонка("Упаковка");
       ТЗ.НоваяКолонка("ВидУпаковки");
       ТЗ.НоваяКолонка("ВремяНач","Число");
       ТЗ.НоваяКолонка("ВремяКон","Число");
       ТЗ.НоваяКолонка("Тара");
       ТЗ.НоваяКолонка("Количество","Число");
       ТЗ.НоваяКолонка("Вес","Число");
Как выйти из сложившейся ситуации?
1 andrewks
 
27.07.11
13:46
э?
2 vicof
 
27.07.11
13:48
Если ТипЗаказа=Перечисление.ТипНоменклатурногоЗаказа.Плановый Тогда
Возврат;
СтатусВозврата(0);
КонецЕсли;
3 andrewks
 
27.07.11
13:51
а я бы хотел поподробнее послушать про
"Документ  формирование номенклатурного заказа перелопачивает все заявки с момента ввода конфигурации на предприятии с 2009 г"
4 Style2out
 
27.07.11
14:05
После того как нажимаю кнопку «сформировать»  внизу видна надпись  типа «Обработка документов за 01.01.09» и так по текущую дату.  Но нам нужно что бы проверялись документы за один день а не сначала ввода конфигурации.  Или этого невозможно сделать?
5 Style2out
 
27.07.11
14:07
Если ТипЗаказа=Перечисление.ТипНоменклатурногоЗаказа.Плановый Тогда
Возврат;
СтатусВозврата(0);
КонецЕсли;

Это что значит?
6 filh
 
27.07.11
14:10
(4) во втором запросе где Период?
7 Fenikus
 
27.07.11
14:13
(1) Прямой запрос
8 Style2out
 
27.07.11
15:37
Добавил период во втором запросе и все стало работать нормально.
9 Cthulhu
 
27.07.11
16:49
графа отбора.
10 Cthulhu
 
27.07.11
16:50
(9)+: + ВыбратьПоЗначению()