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

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

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

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

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

      КонецЦикла;

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

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

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

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

      КонецЕсли;

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

    • #32743

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

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

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

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

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

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

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

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

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

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

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

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