Старая и новая методики контроля остатков 1С

Правило выбора методики контроля остатков:

  • новая - если для заполнения набора записей данные регистра не нужны (все данные берутся из проводимого документа);
  • старая - если для заполнения набора записей нужны данные не только проводимого документа, но и регистра (выполняется сначала чтение из регистра, а потом запись в этот же регистр).

Если новая методика и приходная операция – то контроль не нужен.

Устранение дублей при проведении

В процедуре обработки проведения обработать возможные дубли номенклатуры в табличной части можно, например, сформировав простейший запрос с группировкой по Номенклатуре (синтаксические конструкции не убирал специально, для понимания использованных механизмов):

[свернуть]

Старая методика контроля остатков

Итоговый код процедуры ОбработкаПроведения

[свернуть]

Алгоритм "старой" методики контроля остатков 1С:

  1. Программное удаление существующих движений документа путем записи «пустого набора»
    Код

    [свернуть]
  2. Установка управляемых блокировок на записи тех таблиц информационной базы, к данным которых внутри транзакции будут применены операции и чтения, и записи (найти в Синтакс-помощнике "Блокировка данных", скопировать пример, вставить в процедуру "Обработка проведения" и временно закомментировать).
    Код

    [свернуть]
  3. Получение необходимых данных для формирования набора записей в регистр:
    • на основании данных проводимого документа:
      1. при использовании табличной части документа - ставим условие по ссылке (вкладка "Условия");
      2. ставим дополнительные условия (по задаче, например, по виду номенклатуры) (вкладка "Условия");
      3. ставим группировки (например, если табличная часть может содержать несколько строк с одинаковой номенклатурой - их надо свернуть: поле группировки - номенклатура, суммируемое поле - количество) (вкладка "Группировка");
      4. если данные из документа далее используются в нескольких местах (например, при соединении таблиц и получении остатков), то их необходимо поместить во временную таблицу (вкладка "Дополнительно");
    • на основании данных других объектов конфигурации (за исключением данных записываемого регистра);
    • на основании данных записываемого регистра:
      1. если данные регистра числовые - обязательно использовать функцию ЕСТЬNULL(<регистр.данные>, 0).
  4. Контроль полученных данных (в первую очередь – остатков по регистру):
    • выбор регистра, из которого получаем информацию (при этом, например, если нужны только остатки, то выбор регистра ОстаткиИОбороты вместо Остатки будет ошибкой):
      1. если данные регистра числовые - обязательно использовать функцию ЕСТЬNULL(<регистр.данные>, 0).
    • установка параметров виртуальной таблицы (Период, Условие - если значение выбора из регистра ограничено, например, табличной частью документа)
      Пример условия

      [свернуть]
    • задать условия связи;
    • если необходимо выдать пользователю сообщение, то в сообщение передавать не ссылку на объект, а представление.
      Пример запроса

      [свернуть]
    • установить параметры, использованные в запросе;
      Код, сформированный кoнструктором запроса с oбработкой результата

      [свернуть]
    • выполнить контроль остатков внутри выборки, сформировать сообщение пользователю (например, в случае нехватки номенклатуры) и разрешить/запретить проведение документа;
      Код

      [свернуть]
    • если контроль пройден успешно, то сформировать набор записей регистров (при этом предусмотреть проверку деления на "0" в коде или через проверку заполнения поля);
      Код

      [свернуть]
    • записать движения;
      Код

      [свернуть]
  5. Перейти в пользовательский режим 1С, ввести нужную информацию (номенклатуру, виды номенклатуры, приход и расход, и т.д.) и проверить правильность контроля остатков и проведения документа.
  6. Отредактировать код блокировок (см. п. 2), устанавливаемых на записи тех таблиц информационной базы, к данным которых внутри транзакции будут применены операции и чтения, и записи (в соответствии с решаемой задачей).
    Код

    [свернуть]

Новая методика контроля остатков

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

Итоговый код процедуры ОбработкаПроведения

 

[свернуть]

Алгоритм "новой" методики контроля остатков 1С:

  1. Получение необходимых данных для формирования набора записей в регистр:
    • на основании данных проводимого документа:
      1. при использовании табличной части документа - ставим условие по ссылке (вкладка "Условия");
      2. ставим дополнительные условия (по задаче, например, по виду номенклатуры) (вкладка "Условия");
      3. ставим группировки (например, если табличная часть может содержать несколько строк с одинаковой номенклатурой - их надо свернуть: поле группировки - номенклатура, суммируемое поле - количество) (вкладка "Группировка");
    • на основании данных других объектов конфигурации (за исключением данных записываемого регистра).
      Код в процедуре "Обработка проведения"

      [свернуть]
  2. Формирование набора записей регистра.
    Код

    [свернуть]
  3. Запись всех модифицированных наборов.
    Код

    [свернуть]
  4. Контроль данных, используемых при заполнении набора записей (в первую очередь – остатков по регистру):
    • формирование запроса к регистру, в который были записаны движения, для получения остатков, при этом:
      1. в тексте запроса определить параметры виртуальной таблицы остатков и условие: остатки меньше 0; 
      2. в коде установить границу момента времени, на которую получаем остатки и список товаров, подлежащих контролю (выбираются из табличной части либо по объектной модели - как в коде ниже, либо с использованием временной таблицы - как в примере по "старой" методике);
        Код

        [свернуть]
    • если контроль не пройден (остатки меньше 0), то отменяем проведение.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.