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

  • Автор темы tanat
  • Дата начала
T

tanat

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

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

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

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

unknown181538

такой вариант не подойдет?
Правда, если в одну секунду два поступления одной номенклатуры... может быть не очень. Но, думаю, не бывает такого.
 
U

unknown181538

Я такие задачи всегда решал вне запроса.
Не вполне понял как будет работать МАКСИМУМ(Документ.Ссылка). Боюсь, что упорядочит по представлению документа - кажется, так происходит по умолчанию при сортировки ТЗ, а доп параметры в запросе не задашь.
 
T

tanat

Видимо "дешевле" будет сделать через запрос в цикле, хотя и ох как не охото...Отложу до более благоприятного времени).
 
U

unknown181538

Как раз с этим столкнулся.
Вот еще ссылка
 
D

Darlock

Конфигурация : Бухгалтерия. версию не называю, это не принципиально.
Мне кажется принципиально 7.7 или 8.х.

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

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

вы сможете в свой механизм (предполагаю запрос) вставить условие
Код:
Номенклатура В (&МассивНоменклатуры)

и будет счастье, и никаких
сделать через запрос в цикле
покайтесь.
 
U

unknown181538

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

tanat

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

Darlock

1) не обратил внимания;
2) если это бухгалтерия, что мешает обратиться к регистру с партиями, отсортировать по возрастанию и получить регистратор?
 
U

unknown181538

если это бухгалтерия, что мешает обратиться к регистру с партиями, отсортировать по возрастанию и получить регистратор?
В запросе или в ТЗ?
Собственно решения-то приведены выше. Просто они не очень просты и быстродейственны.
 
D

Darlock

В запросе или в ТЗ?
Собственно решения-то приведены выше. Просто они не очень просты и быстродейственны.

В запросе, незачем напрягать лишний раз платформу обрабатывая и сортируя ТЗ.

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

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

unknown181538

Итоговая таблица будет содержать несколько строк по каждой номенклатуре, т.к. партий много по каждой номенклатуре.
 
D

Darlock

Приблизительно как-то так:

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

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

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

unknown181538

Неправильно.
Даже провел эксперимент. Попробуй запрос

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

evgenyatam

Неправильно.
Даже провел эксперимент. Попробуй запрос
опять не совсем верно : партия - это не документ а справочник. сортироваться будет скорее всего по коду. а так как пользователь редко меняет коды справочников - то в принципе в большинстве случаев будет работать, так как у последних партий самые большие коды. хотя это очень косвенно. тут надо использовать срез последних в разрезе документов.
 
U

unknown181538

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

tanat

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


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

Darlock

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


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

В 8 можно. я использовал подобную конструкцию (максимум по ссылке) для получения последнего документа из выборки.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!