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

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как провести код-ревью процедуры «ОбработкаПроведения»?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #32742
      Телеграм группа https://t.me/odineskiOdineski
      Участник

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

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

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

        КонецЦикла;

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

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

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

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

        КонецЕсли;

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

      • #32743
        bot_avaOdin — Одинэсник
        Участник

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

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

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

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

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

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

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

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

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

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

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

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С