Тут заложено более 20 ошибок и неоптимальных решений. Помогите пожалуйста найти
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Партия КАК Партия,
| Товары.Количество КАК Количество,
| Товары.Сумма КАК Сумма,
| Заказы.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| Документ.ПоступлениеТоваров.Товары КАК Товары
|ЛЕВОЕ СОЕДИНЕНИЕ
|РегистрНакопления.ЗаказыПоставщикам.Остатки(&Период, Контрагент = &Контрагент) КАК Заказы
| ПО Товары.Номенклатура = Заказы.Номенклатура
| И Товары.Партия = Заказы.Партия
|ГДЕ
| Товары.Ссылка = &Ссылка
| И (Заказы.Номенклатура, Заказы.Партия) В
| (ВЫБРАТЬ
| Товары.Номенклатура,
| Товары.Партия
| ИЗ
| Документ. ПоступлениеТоваров.Товары КАК Товары
| ГДЕ
| Товары.Ссылка = &Ссылка)
|ИТОГИ
| СУММА(Количество),
| СУММА(Сумма),
| СУММА(КоличествоОстаток)
|ПО
| Номенклатура,
| Партия";
ВыборкаНоменклатура = Запрос.Выполнить().Выбрать();
Пока ВыборкаНоменклатура.Следующий() Цикл
Если ВыборкаНоменклатура.Количество > ВыборкаНоменклатура.КоличествоОстаток Тогда
Сообщить("Количество в поступлении "
4
+ВыборкаНоменклатура.Количество
+ " " + ВыборкаНоменклатура.Номенклатура.ЕдиницаИзмерения
+ " превышает остаток по заказам "
+ВыборкаНоменклатура.КоличествоОстаток
+ " " + ВыборкаНоменклатура.Номенклатура.ЕдиницаИзмерения);
Иначе
ВыборкаПартия = ВыборкаНоменклатура.Выбрать();
Пока ВыборкаПартия.Следующий() Цикл
СуммаВал = СуммаВал
+ РегистрыСведений.КурсыВалют.ПолучитьПоследнее(
ВыборкаПартия.Партия.Дата
,Новый Структура("Валюта", Справочники.Валюты.НайтиПоНаименованию(«USD»)));
Движение = РегистрыНакопления.ЗаказыПоставщикам.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаПартия.Номенклатура;
Движение.Количество = ВыборкаПартия.Количество;
КонецЦикла;
Движение = Движения.ТоварыНаСкладах.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаНоменклатура.Номенклатура;
Движение.Количество = ВыборкаНоменклатура.Количество;
Движение.Сумма = ВыборкаНоменклатура.Сумма;
Движение.СуммаВал = СуммаВал;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Партия КАК Партия,
| Товары.Количество КАК Количество,
| Товары.Сумма КАК Сумма,
| Заказы.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| Документ.ПоступлениеТоваров.Товары КАК Товары
|ЛЕВОЕ СОЕДИНЕНИЕ
|РегистрНакопления.ЗаказыПоставщикам.Остатки(&Период, Контрагент = &Контрагент) КАК Заказы
| ПО Товары.Номенклатура = Заказы.Номенклатура
| И Товары.Партия = Заказы.Партия
|ГДЕ
| Товары.Ссылка = &Ссылка
| И (Заказы.Номенклатура, Заказы.Партия) В
| (ВЫБРАТЬ
| Товары.Номенклатура,
| Товары.Партия
| ИЗ
| Документ. ПоступлениеТоваров.Товары КАК Товары
| ГДЕ
| Товары.Ссылка = &Ссылка)
|ИТОГИ
| СУММА(Количество),
| СУММА(Сумма),
| СУММА(КоличествоОстаток)
|ПО
| Номенклатура,
| Партия";
ВыборкаНоменклатура = Запрос.Выполнить().Выбрать();
Пока ВыборкаНоменклатура.Следующий() Цикл
Если ВыборкаНоменклатура.Количество > ВыборкаНоменклатура.КоличествоОстаток Тогда
Сообщить("Количество в поступлении "
4
+ВыборкаНоменклатура.Количество
+ " " + ВыборкаНоменклатура.Номенклатура.ЕдиницаИзмерения
+ " превышает остаток по заказам "
+ВыборкаНоменклатура.КоличествоОстаток
+ " " + ВыборкаНоменклатура.Номенклатура.ЕдиницаИзмерения);
Иначе
ВыборкаПартия = ВыборкаНоменклатура.Выбрать();
Пока ВыборкаПартия.Следующий() Цикл
СуммаВал = СуммаВал
+ РегистрыСведений.КурсыВалют.ПолучитьПоследнее(
ВыборкаПартия.Партия.Дата
,Новый Структура("Валюта", Справочники.Валюты.НайтиПоНаименованию(«USD»)));
Движение = РегистрыНакопления.ЗаказыПоставщикам.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаПартия.Номенклатура;
Движение.Количество = ВыборкаПартия.Количество;
КонецЦикла;
Движение = Движения.ТоварыНаСкладах.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаНоменклатура.Номенклатура;
Движение.Количество = ВыборкаНоменклатура.Количество;
Движение.Сумма = ВыборкаНоменклатура.Сумма;
Движение.СуммаВал = СуммаВал;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
По теме из базы знаний
- Тренинг по "Технологическим вопросам крупных внедрений" (ТВКВ)
- Поиск и удаление длительных соединений
- Перенос данных из БП 3.0 в УНФ 3.0. Переносятся остатки, документы и справочная информация
- Перенос данных из УПП 1.3 / КА 1.1 / УТ 10.3 в УНФ 3.0. Переносятся остатки, документы и справочники
- Применение Clickhouse для ускорения поиска номенклатуры
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Посмотрим, много ли таковых найдется...
более 20 ошибок и неоптимальных решений. Помогите пожалуйста найти
Ну,начнем сразу с 21-й: автор поленился хотя бы форматировать код своей задачки и оформить его соответствующими тегами, а разбирать код в виде плоского серого текста - удовольствие на любителя.
Посмотрим, много ли таковых найдется...
А, не про обработку проведения таки указал, я не заметил
Ну, давай тогда прямо здесь тебя и пособеседуем.
Что ты уже нашел?
Ну, давай тогда прямо здесь тебя и пособеседуем.
Документ ПоступлениеТоваров при проведении делает движения по 2 регистрам:
· приход по регистру накопления ТоварыНаСкладах
· расход по регистру накопления ЗаказыПоставщикам
Запись в регистр накопления ТоварыНаСкладах делается в рублях (Сумма) и в долларах (СуммаВал). Курс берется на дату партии.
Документ может содержать в табличной части Товары тысячи строк с различными партиями.
Ниже представлена обработка проведения документа ПоступлениеТоваров.
Необходимо указать на ошибки и неоптимальные решения в процедуре проведения.
· приход по регистру накопления ТоварыНаСкладах
· расход по регистру накопления ЗаказыПоставщикам
Запись в регистр накопления ТоварыНаСкладах делается в рублях (Сумма) и в долларах (СуммаВал). Курс берется на дату партии.
Документ может содержать в табличной части Товары тысячи строк с различными партиями.
Ниже представлена обработка проведения документа ПоступлениеТоваров.
Необходимо указать на ошибки и неоптимальные решения в процедуре проведения.
Что ты уже нашел?
Ну например в запросе
ВЫБРАТЬ // РАЗЛИЧНЫЕ <<< стоит дабавить
| Товары.Номенклатура,
| Товары.Партия
| ИЗ
| Документ. ПоступлениеТоваров.Товары КАК Товары
| ГДЕ
| Товары.Ссылка = &Ссылка
В основном запросе нужно сгруппировать по Номенклатура, Партия, суммировать Количество
ВыборкаНоменклатура = Рез.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВЫБРАТЬ // РАЗЛИЧНЫЕ <<< стоит дабавить
| Товары.Номенклатура,
| Товары.Партия
| ИЗ
| Документ. ПоступлениеТоваров.Товары КАК Товары
| ГДЕ
| Товары.Ссылка = &Ссылка
В основном запросе нужно сгруппировать по Номенклатура, Партия, суммировать Количество
ВыборкаНоменклатура = Рез.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
практически все - это грубейшая ошибка...
параметры в запрос даже не передаются %))
соединение с остатками %))
сгруппировать таблицу товаров поступления и вынести в виртуальную таблицу (не во вложенную)... и кардинально изменить запрос%))
списание по партиям можно сделать в самом запросе
в заказе поставщика указана партия %)) это еще что за х..ня
параметры в запрос даже не передаются %))
соединение с остатками %))
сгруппировать таблицу товаров поступления и вынести в виртуальную таблицу (не во вложенную)... и кардинально изменить запрос%))
списание по партиям можно сделать в самом запросе
в заказе поставщика указана партия %)) это еще что за х..ня
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот