Код-ревью Senior Проведение документов обновлено
Ревью проверки остатков
Вопрос
Проведение расходного документа проверяет остатки. Найдите ошибки.
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ О.Номенклатура, О.КоличествоОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки() КАК О";
Остатки = Запрос.Выполнить().Выгрузить();
Для Каждого Строка Из Товары Цикл
Найдено = Остатки.Найти(Строка.Номенклатура, "Номенклатура");
Если Найдено = Неопределено Или Найдено.КоличествоОстаток < Строка.Количество Тогда
Отказ = Истина;
КонецЕсли;
КонецЦикла;
Движения.ТоварыНаСкладах.Записывать = Истина;
КонецПроцедуры
Коротко
Правильнее либо новая методика (записать движения и проверить отрицательные остатки с границей Включая), либо старая с исключительной блокировкой, остатками на момент документа по складу и сгруппированным товарам и понятными сообщениями.
Что должен найти ревьюер
- Ошибкастрока 2Нет управляемой блокировки перед чтением остатков: два документа одновременно спишут один товар.
- Производительностьстрока 3Остатки() без параметров: актуальные остатки по всем товарам и складам базы. Нужны момент документа и условие по складу и товарам документа.
- Ошибкастрока 3Не учтён склад: остаток на другом складе разрешит списание.
- Ошибкастрока 5Строки с одинаковым товаром проверяются по отдельности, суммарное количество может превысить остаток.
- Стильстрока 8Отказ без сообщения: пользователь не узнает, какого товара не хватает.
- Ошибкастрока 11Движения не формируются: Записывать = Истина при пустом наборе просто удалит старые движения.
Разбор
Правильнее либо новая методика (записать движения и проверить отрицательные остатки с границей Включая), либо старая с исключительной блокировкой, остатками на момент документа по складу и сгруппированным товарам и понятными сообщениями.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.