Задачка По Списанию Партий

Тема в разделе "1C и всё что с ней связано", создана пользователем Allexei, 27 апр 2012.

  1. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    Всем доброго времени суток. Есть задачка, из сборника задач на спеца по платформе, с очень хитрым условием.(1.5). Собственно сама задача(упрощенно).
    Документом поступления товар приходуется, ведется партионный учет(только фифо). Списание производится документом реализации !!!с указанием в т.ч. приоритетного документа партии!!!. Если бы в условии было сказано что в документе нет повторяющихся строк, то решение было бы весьма не трудным, но у нас могу быть (и будут) дублирующиеся строки в документе. В чем проблема: на пример, мы работаем только с одним товаром. Имеем следующие поступления:
    ПТ1-10
    ПТ2-20
    ПТ3-30
    и одну реализацию(ее табличная часть)
    Тов1 15 по ПТ1
    Тов1 25 по ПТ2
    Вот тут вопрос и возникает.... То есть по идеи в начале первая строка должна списать из ПТ1 10 штучек, затем вторая строка из ПТ2 20 штучек, а затем они обе из ПТ3 по 5 штучек. Все это надо реализовать в рамках 1 запроса. Ну комрады, есть мысли.
    зы
    Запрос писать за меня не надо, просто поделитесь мыслями как это можно организовать. Так же не надо отправлять на форум Павла Чистова. :)
     
  2. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Трудность учебных задач в том, что решение надо не для практики, а как "надо".
    Скажу по своим соображениям. Не представляю возможным нарисовать круто умный запрос, который на блюдечке преподаст партии, с которых надо списать и в каком количестве, по какой стоимости, привязанным к строкам документа. Да еще и шепнет на ушко, где чего не хватает.

    Реальную трудность я вижу в том, что запрос даст остатки на момент "до списания". А проводки мы делаем на каждую строку документа. Поэтому уже 2-ой строке дока нельзя доверять запросу. А вдруг первая строка уже списала этот товар?

    Я делаю так:
    * Запрос по всем товарам из накладной, с детализацией до партии.
    * Выгрузил в ТЗ
    * Цикл по строкам дока.
    - Каждая строка ищет свой товар в ТЗ. Сверяет наличие
    - делает проводку
    - Ключевой момент: корректируется ТЗ на количество, списанной с этой партии.
    - если на одной партии не хватило, идем к следующей.
     
  3. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    Дайнеко , ну у Вас слишком просто :) Так и я могу...Ладно буду медетировать над запросом, может что и придумаю...
     
  4. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Основная беда, которую я вижу - это необходимость циклической проверки в запросе ( осталось что- либо списывать, или нет). Циклы в запросе не поддерживаются, значит надо делать временные таблички. Их количество задается запросом - значит количество итераций ( вычисления, все-ли списали) будет ограничено. и вполне возможно попасть на ситуацию когда запланированные итерации кончились, а остаток на списание остался.

    Самый простой вариант - до запроса делаем проходку по строкам и тупо списываем минимум по партии между надо списать и остатком на складе. После чего создаем движение и ЗАПИСЫВАЕМ ЕГО!. В результате мы избавляемся от приоритетной партии , а дальше просто запрос с сортировкой по фифе.

    Вот наверно то что поможет - тебе нужен нарастающий итог в запросе. Делаешь табличку номер раз - в ней пишешь товар, партия, количество списать, количество наличие.

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

    А дальше идет финт ушами - нарастающий итог по таблице с остатками ( http://help1c.com/faq82/view/955.html )- пихаешь его в третью таблицу.

    А потом выбираешь из таблички номер три те записи, в которых количество нарастающее меньше количество осталось списать из первой.

    Добавляешь записи из первой ( разумеется те, в которых происходит полное списание приоритетной партии или кол-во списания < количество наличие) и вот оно.

    некоторые ньюансы опустил, условия расписал не все. Но вроде как идея рабочая.
     
  5. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Вообще, находил код реализации ФИФО в запросе, но это очень сложно, и вряд ли подойдет для этого случая. На экзамене специалиста не требуется.
    Здесь я бы сделал по варианту Дайнеко.
    "Самый простой вариант - до запроса делаем проходку по строкам и тупо списываем минимум по партии между надо списать и остатком на складе. После чего создаем движение и ЗАПИСЫВАЕМ ЕГО!. В результате мы избавляемся от приоритетной партии , а дальше просто запрос с сортировкой по фифе. " - мне кажется, будет дольше - два запроса и две записи движений получается.
     
Загрузка...
Похожие Темы - Задачка По Списанию
  1. kirkl
    Ответов:
    1
    Просмотров:
    1.011
  2. hosm
    Ответов:
    3
    Просмотров:
    2.583
  3. European
    Ответов:
    4
    Просмотров:
    3.073
  4. phantom76
    Ответов:
    2
    Просмотров:
    2.689
  5. Hehabr
    Ответов:
    1
    Просмотров:
    487

Поделиться этой страницей