Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
04 Июл 2020, 17:39
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: (Оптимизация процедуры проведения документа)  (Прочитано 164 раз)

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

Оффлайн GanG031

  • ***
  • Сообщений: 191
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-10-28
  • Сайт: 
  • Профессия: Ученик 1С
Всем привет!
Документ ПоступлениеТоваров при проведении делает движения по 2 регистрам:

приход по регистру накопления ТоварыНаСкладах
расход по регистру накопления ЗаказыПоставщикам

Запись в регистр накопления ТоварыНаСкладах делается в рублях (Сумма) и в долларах (СуммаВал). Курс берется на дату партии.
Документ может содержать в табличной части Товары тысячи строк с различными партиями.
Ниже представлена обработка проведения документа ПоступлениеТоваров:
Процедура ОбработкаПроведения(Отказ, РежимПроведения) 

 

Запрос = Новый Запрос;

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

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Если не Выборка.ПревышаетОстатокПоЗаказам Тогда

СуммаВал = Выборка.Сумма * Выборка.Курс;

Движение = РегистрыНакопления.ЗаказыПоставщикам.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Количество = Выборка.Количество;
Движение.Партия = Выборка.Партия;


Движение = Движения.ТоварыНаСкладах.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Количество = Выборка.Количество;
Движение.Сумма = Выборка.Сумма;
Движение.СуммаВал = СуммаВал;

Иначе

Сообщить("Количество в поступлении "
+Выборка.Количество
+ " " + Выборка.ЕдиницаИзмерения
+ " превышает остаток по заказам "
+Выборка.КоличествоОстаток
+ " " + Выборка.ЕдиницаИзмерения);

КонецЕсли;
КонецПроцедуры

подскажите,что тут можно еще оптимизировать?
Вроде попытался все сделать норм, но незнаю, как получилось.
Заранее спасибо за помошь!


Оффлайн LexaK

  • *****
  • Сообщений: 2176
  • РЕПУТАЦИЯ: 638
  • КПД: 29%
  • Регистрация: 2012-05-16
  • Сайт: 
  • Профессия: Программист 1С
а почему вы выкладываете не рабочий Код?
какая оптимизация, когда нет команды конца цикла?
Помогло? - Нажми СПАСИБО (под аватаром) !!!
                       :)

Оффлайн GanG031

  • ***
  • Сообщений: 191
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-10-28
  • Сайт: 
  • Профессия: Ученик 1С
Всем привет!
Документ ПоступлениеТоваров при проведении делает движения по 2 регистрам:

приход по регистру накопления ТоварыНаСкладах
расход по регистру накопления ЗаказыПоставщикам

Запись в регистр накопления ТоварыНаСкладах делается в рублях (Сумма) и в долларах (СуммаВал). Курс берется на дату партии.
Документ может содержать в табличной части Товары тысячи строк с различными партиями.
Ниже представлена обработка проведения документа ПоступлениеТоваров:
Процедура ОбработкаПроведения(Отказ, РежимПроведения) 

 

Запрос = Новый Запрос;

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

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Если не Выборка.ПревышаетОстатокПоЗаказам Тогда

СуммаВал = Выборка.Сумма * Выборка.Курс;

Движение = РегистрыНакопления.ЗаказыПоставщикам.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Количество = Выборка.Количество;
Движение.Партия = Выборка.Партия;


Движение = Движения.ТоварыНаСкладах.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Количество = Выборка.Количество;
Движение.Сумма = Выборка.Сумма;
Движение.СуммаВал = СуммаВал;

Иначе

Сообщить("Количество в поступлении "
+Выборка.Количество
+ " " + Выборка.ЕдиницаИзмерения
+ " превышает остаток по заказам "
+Выборка.КоличествоОстаток
+ " " + Выборка.ЕдиницаИзмерения);

КонецЕсли;
КонецЦикла;
КонецПроцедуры

подскажите,что тут можно еще оптимизировать?
Вроде попытался все сделать норм, но незнаю, как получилось.
Заранее спасибо за помошь!

Оффлайн LexaK

  • *****
  • Сообщений: 2176
  • РЕПУТАЦИЯ: 638
  • КПД: 29%
  • Регистрация: 2012-05-16
  • Сайт: 
  • Профессия: Программист 1С
и Необходимо задать параметры запросу &Ссылка и &Валюта!
Запрос.УстановитьПараметр("Ссылка",Ссылка);
и т.д.
Добавлено: 01 Июн 2020, 20:39

и еще очень удобно для отладки использовать Консоль Запросов!!!
Помогло? - Нажми СПАСИБО (под аватаром) !!!
                       :)

Последний раз редактировалось: LexaK; 01 Июн 2020, 20:41


Теги:
 

Не открывает форму сохраненного документа, открывает форму нового.

Автор EHOTРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 6179
Последний ответ 13 Апр 2012, 23:26
от Vit1501
Автоматическое заполнение табличной части документа из табличной части другого

Автор WillРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 6
Просмотров: 21501
Последний ответ 16 Авг 2012, 12:07
от Will
Заполнение поля табличной части документа из табличной части справочника.

Автор Kurt_WagnerРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 7554
Последний ответ 06 Апр 2015, 20:08
от Kurt_Wagner
Заполнение табличной части документа реквизитами табличной части справочника

Автор kaf_infoРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 3491
Последний ответ 10 Май 2017, 20:44
от ilnur75
Добавление сведений в графу "основание" документа "ТОРГ-12"

Автор Ярослав1984Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 4
Просмотров: 9932
Последний ответ 20 Авг 2013, 18:45
от Ярослав1984

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
67 Сообщений
LexaK
40 Сообщений
DmitriyF DmitriyF
28 Сообщений
alexandr_ll
14 Сообщений
PLTBWH
13 Сообщений
antoneus antoneus
10 Сообщений
ToryFree ToryFree
9 Сообщений
МЮлия
8 Сообщений
BuhRust
8 Сообщений
alex0402 alex0402
8 Сообщений

* Кто онлайн

  • Точка Гостей: 130
  • Точка Скрытых: 0
  • Точка Пользователей: 2
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal