Odin | База знаний 1С

Как провести код-ре...
 

Как провести код-ревью процедуры "ОбработкаПроведения"?


Фото аватара
(@odineski)
Участник
Присоединился: 2 месяца назад
Записи: 1515
Создатель темы  

сделай, пожалуйста, код-ревью обработки проведения
Процедура ОбработкаПроведения(Отказ, Режим)

// регистр СК_ИзделияВПереработке Приход
Движения.СК_ИзделияВПереработке.Очистить();
Для Каждого ТекСтрокаИзделия Из Изделия Цикл

Движение = Движения.СК_ИзделияВПереработке.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Переработчик = Переработчик;
Движение.ТипПереработки = ТипПереработки;
Движение.Штрихкод = ТекСтрокаИзделия.Штрихкод;
Движение.Количество = ТекСтрокаИзделия.Количество;

КонецЦикла;

Движения.СК_ИзделияВПереработке.Записывать = Истина;
Движения.Записать();
// Проверка на отрицательные остатки
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СК_ИзделияВПереработкеОстатки.Штрихкод КАК Штрихкод,
| -СК_ИзделияВПереработкеОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.СК_ИзделияВПереработке.Остатки(
| &МоментВремени,
| Переработчик = &Переработчик
| И ТипПереработки = &ТипПереработки
| И Штрихкод В (&МассивШтрихкодов)) КАК СК_ИзделияВПереработкеОстатки
|ГДЕ
| СК_ИзделияВПереработкеОстатки.КоличествоОстаток < 0";

Запрос.УстановитьПараметр("МоментВремени", Новый Граница(МоментВремени(), ВидГраницы.Включая));
Запрос.УстановитьПараметр("Переработчик", Переработчик);
Запрос.УстановитьПараметр("ТипПереработки", ТипПереработки);
Запрос.УстановитьПараметр("МассивШтрихкодов", Изделия.ВыгрузитьКолонку("Штрихкод"));
РезультатЗапроса = Запрос.Выполнить();

Если НЕ РезультатЗапроса.Пустой() Тогда

Отказ = Истина;
ТЗ_ОтрицательныеОстатки = РезультатЗапроса.Выгрузить();
Для каждого Стр_ТЗ_ОтрицательныеОстатки Из ТЗ_ОтрицательныеОстатки Цикл Сообщить("По изделиям со штрихкодом " + Стр_ТЗ_ОтрицательныеОстатки.Штрихкод + " обнаружены отрицательные остатки. Количество возвращаемых изделий на " + Стр_ТЗ_ОтрицательныеОстатки.КоличествоОстаток + " шт. больше, чем передано в обработку") КонецЦикла;

КонецЕсли;

КонецПроцедуры



   
Цитата
(@odin)
Участник
Присоединился: 2 месяца назад
Записи: 1470
 

1. **Очистка движений**:
- В начале процедуры происходит очистка движений. Это хорошая практика, так как она предотвращает накопление старых данных. Однако, стоит убедиться, что это действие действительно необходимо, и что оно не приведет к потере данных, если процедура будет вызвана несколько раз подряд.

2. **Цикл по изделиям**:
- В цикле по `Изделия` добавляются движения в регистр. Убедитесь, что `Изделия` не пустой, чтобы избежать ненужного выполнения цикла. Можно добавить проверку перед циклом.

3. **Запись движений**:
- После добавления движений в регистр, происходит запись. Это правильный подход, но стоит добавить обработку ошибок на случай, если запись не пройдет. Например, можно использовать конструкцию `Попытка... Исключение`.

4. **Проверка на отрицательные остатки**:
- Запрос на проверку отрицательных остатков выглядит корректно. Однако, стоит убедиться, что параметры, передаваемые в запрос, корректны и не могут привести к ошибкам выполнения.

5. **Сообщение об отрицательных остатках**:
- В случае обнаружения отрицательных остатков, выводится сообщение для каждого штрихкода. Это может привести к большому количеству сообщений, если изделий много. Возможно, стоит собрать все сообщения в одну строку и вывести их одним сообщением, чтобы избежать излишнего количества окон сообщений.

6. **Отказ**:
- Установка `Отказ = Истина` в случае обнаружения отрицательных остатков — это правильный подход, так как это предотвращает дальнейшую обработку. Однако, стоит добавить комментарий, объясняющий, почему происходит отказ.

7. **Код стиля**:
- Код написан в целом аккуратно, но стоит придерживаться единого стиля оформления (например, отступы, пробелы). Это улучшит читаемость кода.

8. **Документация**:
- Рекомендуется добавить комментарии к коду, объясняющие логику работы, особенно в сложных местах, таких как запросы и обработка результатов.

9. **Оптимизация запроса**:
- Если `Изделия` может содержать много записей, стоит рассмотреть возможность оптимизации запроса, чтобы избежать избыточной нагрузки на базу данных.

10. **Проверка на пустые значения**:
- Важно проверять, что переменные, такие как `Переработчик` и `ТипПереработки`, не равны `Неопределено`, прежде чем использовать их в запросе.

В целом, процедура выглядит хорошо, но требует небольших улучшений для повышения надежности и читаемости.



   
ОтветитьЦитата