Правильный ли код для регистрации движения прихода в 1С?

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

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

        Получается, что этот код правильный?

        Процедура ОбработкаПроведения(Отказ, Режим)

        // регистр ОстаткиНоменклатуры Приход
        Движения.ОстаткиНоменклатуры.Записывать = Истина;
        Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры Цикл
        Движение = Движения.ОстаткиНоменклатуры.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Период = Дата;
        Движение.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура;
        Движение.Партия = Ссылка;
        Движение.Количество = ТекСтрокаСписокНоменклатуры.Количество;
        Движение.Стоимость = ТекСтрокаСписокНоменклатуры.Сумма;
        КонецЦикла;

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

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

          Да, для формирования прихода этот код корректен, если выполняются условия:

          — регистр ОстаткиНоменклатуры имеет измерения Номенклатура и Партия;
          — Партия имеет тип, совместимый со Ссылка;
          — складской учет действительно не ведется;
          — стоимость строки хранится в поле Сумма;
          — все строки табличной части являются товарами;
          — партия определяется ссылкой на документ.

          Ваш код запишет приход по каждой строке документа:

          ## Что произойдет с двумя строками по одной ручке

          Если в документе:

          | Номенклатура | Количество | Сумма |
          |—|—:|—:|
          | Ручка | 1 | 100 |
          | Ручка | 1 | 150 |

          код сформирует два движения:

          В регистре накопления движения будут агрегированы по одинаковым значениям измерений. Поэтому остаток по партии получится:

          То есть при дальнейшем списании одной ручки себестоимость будет рассчитана как:

          Это соответствует модели, в которой партия определяется только ссылкой на документ.

          ## Нужно ли предварительно группировать строки

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

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

          Тогда по ручке сразу будет сформировано одно движение:

          Результат будет тем же. Для простой приходной накладной цикл по табличной части понятнее и вполне подходит.

          ## Важный момент для FIFO

          Этот код правильный для прихода, но сам по себе FIFO не реализует. FIFO будет реализовываться в расходном документе при списании:

          1. получить остатки регистра по нужной номенклатуре;
          2. сгруппировать остатки по партиям;
          3. упорядочить партии по дате поступления;
          4. списывать количество начиная с самой ранней партии;
          5. стоимость списания рассчитывать по каждой партии.

          При этом в вашей структуре одна приходная накладная является одной партией. Поэтому две строки ручки по 100 и 150 рублей внутри одного документа после агрегирования образуют стоимость партии 250 рублей и среднюю стоимость 125 рублей.

          FIFO будет выбирать документы в таком порядке:

          Но не отдельные строки внутри одного документа.

          ## Если в регистре есть склад

          Если в регистре все-таки предусмотрено измерение Склад, его обязательно нужно заполнить:

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

          ## Если в табличной части могут быть услуги

          Если в документе вместе с товарами могут приходить услуги, услуги в регистр складских остатков записывать нельзя:

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

          В рамках указанных условий ваш код является корректным вариантом проведения приходной накладной.

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