helpf.pro
Регистрация

v8.2 УП: Помогите оптимизировать код

kuza_87
22.02.2013 20:20Прочитано: 838
Код 1C v 8.2 УП
 	Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура КАК Номенклатура,
| СУММА(СпецификацииНоменклатурыИсходныеКомплектующие.Количество * ОтчетПроизводстваЗаСменуПродукция.Количество) КАК Количество,
| СпецификацииНоменклатурыИсходныеКомплектующие.ЕдиницаИзмерения,
| ОтчетПроизводстваЗаСменуПродукция.Ссылка КАК Ссылка
|ИЗ
| Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
| ПОЛНОЕ СОЕДИНЕНИЕ Документ.ОтчетПроизводстваЗаСмену.Продукция КАК ОтчетПроизводстваЗаСменуПродукция
| ПО СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка = ОтчетПроизводстваЗаСменуПродукция.Спецификация
|ГДЕ
| ОтчетПроизводстваЗаСменуПродукция.Ссылка.ПометкаУдаления = ЛОЖЬ
| И ОтчетПроизводстваЗаСменуПродукция.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
| И ОтчетПроизводстваЗаСменуПродукция.Спецификация В(&Спецификация)
|
|СГРУППИРОВАТЬ ПО
| СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура,
| СпецификацииНоменклатурыИсходныеКомплектующие.ЕдиницаИзмерения,
| ОтчетПроизводстваЗаСменуПродукция.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| Ссылка";

Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("Спецификация", СпецификацияНоменклатуры);

Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
Док = Выборка.Ссылка.ПолучитьОбъект();
НоваяСтрока = Док.Материалы.Добавить();
НоваяСтрока.Номенклатура = Выборка.Номенклатура;
НоваяСтрока.ЕдиницаИзмерения = Выборка.ЕдиницаИзмерения;
НоваяСтрока.Номенклатура = Выборка.Номенклатура;
НоваяСтрока.Количество = Выборка.Количество;
Док.Записать(РежимЗаписиДокумента.Проведение);
Сообщить(Док);

КонецЦикла;

Вот код. Суть такова: Выполняется запрос, который собирает материалы. Потом он должен эти материалы записать в табличную часть материалы документа "отчет производства за смену" (Конфигурация УПП). Как мне оптимизировать код чтобы он не перезаписывал документ каждый раз после добавления строки в таб часть, а перезаписывал бы после того как добавил все записи с таб часть по документу?
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
23.02.2013 00:02Ответ № 1
(0) kuza_87, а кто написал этот код???

Код 1C v 8.х
 Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура КАК Номенклатура,
| СУММА(СпецификацииНоменклатурыИсходныеКомплектующие.Количество * ОтчетПроизводстваЗаСменуПродукция.Количество) КАК Количество,
| СпецификацииНоменклатурыИсходныеКомплектующие.ЕдиницаИзмерения,
| ОтчетПроизводстваЗаСменуПродукция.Ссылка КАК Ссылка
|ИЗ
| Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
| ПОЛНОЕ СОЕДИНЕНИЕ Документ.ОтчетПроизводстваЗаСмену.Продукция КАК ОтчетПроизводстваЗаСменуПродукция
| ПО СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка = ОтчетПроизводстваЗаСменуПродукция.Спецификация
|ГДЕ
| ОтчетПроизводстваЗаСменуПродукция.Ссылка.ПометкаУдаления = ЛОЖЬ
| И ОтчетПроизводстваЗаСменуПродукция.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
| И ОтчетПроизводстваЗаСменуПродукция.Спецификация В(&Спецификация)
|
|СГРУППИРОВАТЬ ПО
| СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура,
| СпецификацииНоменклатурыИсходныеКомплектующие.ЕдиницаИзмерения,
| ОтчетПроизводстваЗаСменуПродукция.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| Ссылка";

Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("Спецификация", СпецификацияНоменклатуры);

Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
Док = Выборка.Ссылка.ПолучитьОбъект();
НоваяСтрока = Док.Материалы.Добавить();
НоваяСтрока.Номенклатура = Выборка.Номенклатура;
НоваяСтрока.ЕдиницаИзмерения = Выборка.ЕдиницаИзмерения;
НоваяСтрока.Номенклатура = Выборка.Номенклатура;
НоваяСтрока.Количество = Выборка.Количество;

КонецЦикла;

//Вынесем запись из цикла
Док.Записать(РежимЗаписиДокумента.Проведение);
Сообщить(Док);
kuza_87
23.02.2013 06:37Ответ № 2
Код писал неграмотный программист. Помогите сделать грамотно. буду должен
E_Migachev
23.02.2013 14:37Ответ № 3
(2) kuza_87, испольуй код из (1)
kuza_87
23.02.2013 15:36Ответ № 4
так не поможет, потому что выборка выбирает много документов за период
kuza_87
23.02.2013 17:04Ответ № 5
всем спасибо сам разобрался:
Код 1C v 8.2 УП
 Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура КАК Номенклатура,
| СУММА(СпецификацииНоменклатурыИсходныеКомплектующие.Количество * ОтчетПроизводстваЗаСменуПродукция.Количество) КАК Количество,
| СпецификацииНоменклатурыИсходныеКомплектующие.ЕдиницаИзмерения,
| ОтчетПроизводстваЗаСменуПродукция.Ссылка КАК Ссылка,
| ОтчетПроизводстваЗаСменуПродукция.Спецификация
|ИЗ
| Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
| ПОЛНОЕ СОЕДИНЕНИЕ Документ.ОтчетПроизводстваЗаСмену.Продукция КАК ОтчетПроизводстваЗаСменуПродукция
| ПО СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка = ОтчетПроизводстваЗаСменуПродукция.Спецификация
|ГДЕ
| ОтчетПроизводстваЗаСменуПродукция.Ссылка.ПометкаУдаления = ЛОЖЬ
| И ОтчетПроизводстваЗаСменуПродукция.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
| И ОтчетПроизводстваЗаСменуПродукция.Спецификация В(&Спецификация)
|
|СГРУППИРОВАТЬ ПО
| СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура,
| СпецификацииНоменклатурыИсходныеКомплектующие.ЕдиницаИзмерения,
| ОтчетПроизводстваЗаСменуПродукция.Ссылка,
| ОтчетПроизводстваЗаСменуПродукция.Спецификация
|ИТОГИ
| СУММА(Количество)
|ПО
| Ссылка";
// | Номенклатура";

Запрос.УстановитьПараметр("КонецПериода", КонецДня(КонецПериода));
Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(НачалоПериода));
Запрос.УстановитьПараметр("Спецификация", СпецификацияНоменклатуры);

Результат = Запрос.Выполнить();
ВыбДок=Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Ссылка");
Пока ВыбДок.следующий() Цикл
ДокОб=ВыбДок.Ссылка.ПолучитьОбъект();
ДокОб.ИспользоватьМатериалы=Истина;
//ДокОб.Материалы.Очистить()
// ВыбНом=ВыбДок.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Номенклатура");
ВыбНом=ВыбДок.Выбрать();
Пока ВыбНом.Следующий() Цикл
НоваяСтрока = ДокОб.Материалы.Добавить();
НоваяСтрока.Номенклатура = ВыбНом.Номенклатура;
НоваяСтрока.Количество = ВыбНом.Количество;
НоваяСтрока.ЕдиницаИзмерения = ВыбНом.ЕдиницаИзмерения;
НоваяСтрока.Спецификация = ВыбНом.Спецификация;


КонецЦикла;

ДокОб.Записать(РежимЗаписиДокумента.Проведение);
Сообщить(ДокОб);
Подсказка: Для быстрого поиска ответов - используйте 'Поиск'
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.