1с8.1. Цена последнего поступления номенклатуры.

Тема в разделе "1C и всё что с ней связано", создана пользователем tanat, 6 окт 2010.

  1. tanat

    tanat Well-Known Member

    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    Как получить по всей номенклатуре последние поступления?
    Собственно сложность в том, чтобы получить все одним запросом. На выходе хотелось бы иметь таблицу формата:

    Номенклатура - Последнее поступление от такого то числа - цена поступления
    Номенклатура2 - Последнее поступление от такого то числа (2) - цена поступления2 ну и т.д.

    Как по конкретной номенклатуре получить последний приход - знаю, а вот как сразу по всем - не понимаю.
    Буду рад, если направите в нужное русло.

    Конфигурация : Бухгалтерия. версию не называю, это не принципиально.
     
  2. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    http://www.forum.mista.ru/topic.php?id=457511 такой вариант не подойдет?
    Правда, если в одну секунду два поступления одной номенклатуры... может быть не очень. Но, думаю, не бывает такого.
     
  3. tanat

    tanat Well-Known Member

    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    Идея понятна.Правда, я надеялся, что не придется делать нечто напоминающее: " Сундук - в утке, утка - в шлюпке, шлюпка - в бобре, а бобр - в Магадане".
     
  4. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Я такие задачи всегда решал вне запроса.
    Не вполне понял как будет работать МАКСИМУМ(Документ.Ссылка). Боюсь, что упорядочит по представлению документа - кажется, так происходит по умолчанию при сортировки ТЗ, а доп параметры в запросе не задашь.
     
  5. tanat

    tanat Well-Known Member

    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    Видимо "дешевле" будет сделать через запрос в цикле, хотя и ох как не охото...Отложу до более благоприятного времени).
     
  6. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
  7. tanat

    tanat Well-Known Member

    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    Агамс, это уже смотрел).
     
  8. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    Мне кажется принципиально 7.7 или 8.х.

    Раз были ссылки на v8, то предположу, что 8-ка у вас.

    Если
    тогда

    вы сможете в свой механизм (предполагаю запрос) вставить условие
    Код ( (Unknown Language)):
    Номенклатура В (&МассивНоменклатуры)
    и будет счастье, и никаких
    покайтесь.
     
  9. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Ты не понял.
    Проблема не в том, чтобы отобрать по нескольким, а в том, чтобы получить по одному движению на каждую номенклатуру. Причем движение должно быть последним.
     
  10. tanat

    tanat Well-Known Member

    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    Давайте по порядку):
    1) Платформа указана в названии темы).
    2)Верно подметил unknown181538, как по отдельной номенклатуре получить - сложности нет. Сложность в том, что хотелось бы получить все последние приходы по номенклатуре. Всего номенклатуры порядка 43 000 позиций. База ведется с 2008 года, Документооборот по приходам в месяц - бывает под тысячу. В документе - по от 20 до 500 строк). Так что Задача не только в том, чтобы построить запрос, а в том, чтобы он хотя бы отработал).
    3)Каюсь, но в цикле так в данном случае оказалось быстрее. Понимаю, что запрос в цикле - это как руки из ж..пы, вот и пытаюсь выправить свои руки с помощью Вас, дорогие форумчане. В свою защиту скажу, что обработка разовая, не для клиента-за-денежку, а для работодателя-за-зарплату.
     
  11. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    1) не обратил внимания;
    2) если это бухгалтерия, что мешает обратиться к регистру с партиями, отсортировать по возрастанию и получить регистратор?
     
  12. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    В запросе или в ТЗ?
    Собственно решения-то приведены выше. Просто они не очень просты и быстродейственны.
     
  13. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    В запросе, незачем напрягать лишний раз платформу обрабатывая и сортируя ТЗ.

    Алгоритм прост:
    1) запрос к регистру партий по своей номенклатуре (все условия) получаем регистратор (можно пакетом, можно вложенным запросом)
    2) запрос табличным частям документов поступлений товаров с левым соединением с регистром по регистратору

    отработает настолько быстро, насколько много будет условий на вирт.таблицу регистра
     
  14. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Итоговая таблица будет содержать несколько строк по каждой номенклатуре, т.к. партий много по каждой номенклатуре.
     
  15. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    Приблизительно как-то так:

    Код ( (Unknown Language)):
    ВЫБРАТЬ
    МАКСИМУМ(ПартииТоваровКомпанииОстатки.Партия) КАК Партия,
    ПартииТоваровКомпанииОстатки.Номенклатура
    ПОМЕСТИТЬ ВТПартийОстатков
    ИЗ
    РегистрНакопления.ПартииТоваровКомпании.Остатки(&ДатаОстатков, Номенклатура В (&МассивНоменклатуры)) КАК ПартииТоваровКомпанииОстатки

    СГРУППИРОВАТЬ ПО
    ПартииТоваровКомпанииОстатки.Номенклатура
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ВТПартийОстатков.Номенклатура,
    ПоступлениеТоваровТовары.Цена
    ИЗ
    ВТПартийОстатков КАК ВТПартийОстатков
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары
    ПО ВТПартийОстатков.Партия = ПоступлениеТоваровТовары.Ссылка
    И ВТПартийОстатков.Номенклатура = ПоступлениеТоваровТовары.Номенклатура
     
  16. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Неправильно.
    Даже провел эксперимент. Попробуй запрос

    Код ( (Unknown Language)):
         ВЫБРАТЬ
    МАКСИМУМ(РеализацияТоваровУслуг.Ссылка) КАК Ссылка
    ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    Возвращает документ не последний по периоду, а с самым большим номером (сравнение идет по представлению).
    Ответы я привел. И, судя по всему, у tanat они работают медленно.
     
  17. evgenyatam

    evgenyatam Well-Known Member

    Регистрация:
    7 сен 2007
    Сообщения:
    175
    Симпатии:
    0
    опять не совсем верно : партия - это не документ а справочник. сортироваться будет скорее всего по коду. а так как пользователь редко меняет коды справочников - то в принципе в большинстве случаев будет работать, так как у последних партий самые большие коды. хотя это очень косвенно. тут надо использовать срез последних в разрезе документов.
     
  18. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    С чего вдруг партия справочник? Например, в УТ это документ. В большинстве типовых конфигураций 8.Х, кажется тоже.
    Как взять срез последних, если данные в регистре накопления?
     
  19. tanat

    tanat Well-Known Member

    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    Кстати, если я не путаю,
    РегистрНакопления.ПартииТоваровКомпании.Остатки(&ДатаОстатков, Номенклатура В (&МассивНоменклатуры)) выведет ведь только записи, по которым есть остатки на конечную дату. Ну да это все не принципиально, принцип то понятен). Как напишу - выложу на общий суд, тогда и продолжим споры).


    Да, и еще: МАКСИМУМ(ССылка) использовать нельзя, если и использовать, то только МАКСИМУМ от даты или момента времени.
     
  20. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    В 8 можно. я использовал подобную конструкцию (максимум по ссылке) для получения последнего документа из выборки.
     
Загрузка...

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