Как объединить одинаковую номенклатуру с одинаковыми ценами в приходной накладно

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

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

        Уточню, логика в задаче такая. Складской учет не ведётся. Ведётся Fifo/Lifo. Каждый документ «приходная накладная» это новая партия. Т.е. в регистре накопления есть измерение «партия», которое является ссылкой на документ «приходная накладная.» Как в таком случае схлопывать одинаковую номенклатуру с одинаковыми ценами в приходной накладной?

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

          В вашей постановке задачи партия определяется документом прихода, а складского измерения нет:

          При проведении приходной накладной:

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

          ## Правильный вариант для вашей задачи

          Запрос по табличной части:

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

          ## Что получится

          Исходная табличная часть:

          | Номенклатура | Количество | Цена | Сумма |
          |—|—:|—:|—:|
          | Товар 1 | 10 | 100 | 1 000 |
          | Товар 1 | 5 | 100 | 500 |
          | Товар 2 | 3 | 200 | 600 |

          После запроса будут сформированы две записи:

          | Номенклатура | Партия | Количество | Сумма |
          |—|—|—:|—:|
          | Товар 1 | Приходная накладная | 15 | 1 500 |
          | Товар 2 | Приходная накладная | 3 | 600 |

          Для Товар 1 цена партии останется 100 рублей:

          —

          # Что делать, если в одном документе цена разная

          Например:

          | Номенклатура | Количество | Цена | Сумма |
          |—|—:|—:|—:|
          | Товар 1 | 10 | 100 | 1 000 |
          | Товар 1 | 5 | 120 | 600 |

          При вашей модели это все равно одна партия, потому что партия равна ссылке на приходную накладную.

          Значит, если регистр содержит только:

          то разделить в регистре эти две цены невозможно. В регистре будет один остаток:

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

          В таком случае запрос выше остается правильным:

          Нельзя при разных ценах суммировать только количество и брать цену первой строки.

          Неправильно:

          Правильно:

          ## Почему нельзя группировать по цене

          Иногда пытаются написать:

          Это даст две строки при разных ценах:

          | Номенклатура | Цена | Количество | Сумма |
          |—|—:|—:|—:|
          | Товар 1 | 100 | 10 | 1 000 |
          | Товар 1 | 120 | 5 | 600 |

          Но затем обе строки будут записаны с одинаковыми измерениями:

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

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

          Но это уже нарушает исходное условие «каждый документ является партией» в чистом виде. Тогда партией фактически становится:

          —

          # Как это связано с FIFO и LIFO

          При вашей модели FIFO/LIFO выбирает документы-партии, а не строки внутри документа.

          Например, есть поступления:

          | Документ | Номенклатура | Количество | Сумма |
          |—|—|—:|—:|
          | Приходная накладная №1 | Товар 1 | 15 | 1 600 |
          | Приходная накладная №2 | Товар 1 | 20 | 2 400 |

          Для FIFO сначала списывается партия:

          Для LIFO сначала:

          Цена внутри конкретного документа уже является средней стоимостью партии:

          Поэтому в расходной накладной при списании из партии нужно рассчитывать стоимость пропорционально:

          Если партия №1 содержит:

          то стоимость единицы:

          При списании 3 единиц:

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

          ## Важное замечание по полю Сумма

          Если в табличной части сумма рассчитывается как:

          то в запросе можно использовать Товары.Сумма.

          Если поля Сумма в табличной части нет, сумму можно рассчитать в запросе:

          ## Ответ именно для вашей экзаменационной задачи

          При условии:

          делайте так:

          1. В запросе группируйте табличную часть по Номенклатура.
          2. Количество объединяйте через СУММА(Количество).
          3. Сумму объединяйте через СУММА(Сумма).
          4. В движение записывайте одну партию, равную Ссылка документа.
          5. Не включайте цену в СГРУППИРОВАТЬ ПО, если хотите одну запись на номенклатуру в партии.
          6. Если цены внутри документа различаются, партия получает среднюю стоимость через общую сумму и общее количество.
          7. Для FIFO/LIFO при списании выбирайте документы-партии, а не строки приходной накладной.

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

          В данной модели это и есть корректное «схлопывание» одинаковой номенклатуры в рамках одной партии.

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