В чём разница между старой и новой методикой контроля остатков в 1С?

База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › В чём разница между старой и новой методикой контроля остатков в 1С?

Просмотр 1 ветки ответов
  • Автор
    Записи
    • #38870
      Фото аватараOdineski
      Участник

        Готовлюсь к экзамену 1с:специалист. Объясни пошагово, в чём разница между старой и новой методикой контроля остатков и когда их нужно применять.

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

          На экзамене под старой и новой методикой контроля остатков обычно понимают порядок выполнения трех операций:

          1. удаление старых движений текущего документа;
          2. установка блокировки;
          3. чтение остатков и формирование новых движений.

          Главное различие: в какой момент устанавливается блокировка относительно удаления старых движений.

          —

          # 1. Зачем вообще нужно удалять старые движения

          Рассмотрим документ, который уже был проведен.

          Например, раньше документ списывал:

          Позже пользователь изменил документ:

          Перед повторной проверкой остатков старые движения текущего документа нужно удалить. Иначе остаток будет рассчитан неправильно.

          Было:

          Если при перепроведении нужно списать 5, проверять надо остаток 10, а не 7.

          Для удаления прежних движений текущего документа используется:

          После этого старые движения текущего документа удаляются из регистра.

          Важно: эта команда не записывает новые движения, потому что новые движения еще не добавлены в коллекцию. Она фактически удаляет старые движения текущего документа.

          —

          # 2. Старая методика

          Старая последовательность выглядит так:

          Пример:

          Затем выполняется запрос остатков:

          ## Проблема старой методики

          Между командами:

          и:

          существует промежуток времени, когда старые движения текущего документа уже удалены, но нужные данные еще не заблокированы.

          Условно:

          В этот промежуток другой пользователь может начать проведение документа по тем же товарам.

          Это создает несколько проблем:

          — другой документ может прочитать остатки до установки блокировки;
          — несколько документов могут одновременно начать проверку одного товара;
          — удаление старых движений и проверка остатков выполняются не в одной защищенной последовательности;
          — при сложной схеме блокировок возможны конфликты и взаимные ожидания.

          Старая методика часто встречается в старых материалах, старых экзаменационных решениях и типовых примерах.

          —

          # 3. Новая методика

          В новой методике порядок меняется:

          То есть блокировка ставится до Движения.Записать().

          Пример:

          После этого читаются остатки:

          ## Преимущество новой методики

          Получается защищенная последовательность:

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

          —

          # 4. Сравнение на конкретном примере

          Пусть имеется:

          Есть два документа:

          Они проводятся почти одновременно.

          ## При корректной блокировке

          Документ 1:

          Документ 2:

          Отрицательного остатка не возникает.

          ## При отсутствии блокировки

          Оба документа могут сделать так:

          Итог:

          Именно поэтому блокировка должна быть установлена до чтения остатков.

          —

          # 5. Почему в новой методике Движения.Записать() идет после блокировки

          На первый взгляд кажется, что это нелогично:

          Ведь Движения.Записать() удаляет старые движения, а не проверяет остатки.

          Но при перепроведении документа это обязательная часть алгоритма:

          Именно поэтому новая методика безопаснее.

          —

          # 6. Что блокируется в новой методике

          Блокируется не виртуальная таблица .Остатки, а сам регистр:

          В запросе используется виртуальная таблица:

          Это разные вещи:

          это объект данных, по которому устанавливается блокировка.

          это виртуальная таблица запроса, через которую платформа рассчитывает остатки.

          Поэтому в блокировке:

          А в запросе:

          —

          # 7. Зачем передавать табличную часть как источник данных

          В новой методике часто используется:

          Это означает:

          Например, табличная часть содержит:

          Тогда блокировка устанавливается примерно по условию:

          Табличная часть сама не блокируется. Она используется только как источник значений для отбора.

          —

          # 8. Когда применять старую методику

          Старую методику можно встретить:

          — в старых учебных материалах;
          — в старых решениях экзаменационных задач;
          — в коде, написанном до распространения новой схемы управляемых блокировок;
          — в примерах, где не рассматривается безопасное перепроведение;
          — в конфигурациях, где алгоритм уже построен именно таким образом и его нельзя быстро изменить.

          С точки зрения подготовки к экзамену ее нужно знать, потому что в старых сборниках и видео она встречается достаточно часто.

          Но если в задании требуется современная реализация оперативного проведения с управляемыми блокировками, предпочтительнее использовать новую методику.

          —

          # 9. Когда применять новую методику

          Новую методику нужно использовать, когда:

          — документ является оперативным;
          — есть контроль остатков;
          — документ может проводиться одновременно с другими документами;
          — документ может перепроводиться;
          — необходимо защититься от отрицательных остатков;
          — используется управляемый режим блокировок;
          — в задании явно говорится о конкурентном проведении или необходимости исключить отрицательные остатки.

          На экзамене это обычно безопасный основной вариант.

          —

          # 10. Полный каркас новой методики

          Общая схема:

          В экзаменационном решении структура может отличаться, но логика должна быть такой:

          —

          # 11. Важная оговорка для экзамена

          На конкретном экзамене нужно ориентироваться прежде всего на:

          — формулировку задания;
          — методические рекомендации к текущей версии экзамена;
          — каркас конфигурации;
          — требования к оперативному или неоперативному проведению;
          — наличие управляемого режима блокировок.

          Термины «старая методика» и «новая методика» могут использоваться авторами учебных материалов немного по-разному. Но практически важное отличие обычно заключается именно в этом:

          Для современного решения контроля остатков при конкурентном проведении используйте:

          Затем читайте остатки и только после успешной проверки формируйте новые движения.

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