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

tanat

Well-known member
02.03.2007
265
0
#1
Как получить по всей номенклатуре последние поступления?
Собственно сложность в том, чтобы получить все одним запросом. На выходе хотелось бы иметь таблицу формата:

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

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

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

tanat

Well-known member
02.03.2007
265
0
#3

unknown181538

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

tanat

Well-known member
02.03.2007
265
0
#5
Видимо "дешевле" будет сделать через запрос в цикле, хотя и ох как не охото...Отложу до более благоприятного времени).
 

Darlock

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

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

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

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

unknown181538

НеГуру
28.12.2008
1 417
0
#9
вы сможете в свой механизм (предполагаю запрос) вставить условие
Ты не понял.
Проблема не в том, чтобы отобрать по нескольким, а в том, чтобы получить по одному движению на каждую номенклатуру. Причем движение должно быть последним.
 

tanat

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

Darlock

Well-known member
04.01.2008
560
1
#11
1) не обратил внимания;
2) если это бухгалтерия, что мешает обратиться к регистру с партиями, отсортировать по возрастанию и получить регистратор?
 

unknown181538

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

Darlock

Well-known member
04.01.2008
560
1
#13
В запросе или в ТЗ?
Собственно решения-то приведены выше. Просто они не очень просты и быстродейственны.
В запросе, незачем напрягать лишний раз платформу обрабатывая и сортируя ТЗ.

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

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

unknown181538

НеГуру
28.12.2008
1 417
0
#14
Итоговая таблица будет содержать несколько строк по каждой номенклатуре, т.к. партий много по каждой номенклатуре.
 

Darlock

Well-known member
04.01.2008
560
1
#15
Приблизительно как-то так:

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

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

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

unknown181538

НеГуру
28.12.2008
1 417
0
#16
Неправильно.
Даже провел эксперимент. Попробуй запрос

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

evgenyatam

Well-known member
07.09.2007
175
0
#17
Неправильно.
Даже провел эксперимент. Попробуй запрос
опять не совсем верно : партия - это не документ а справочник. сортироваться будет скорее всего по коду. а так как пользователь редко меняет коды справочников - то в принципе в большинстве случаев будет работать, так как у последних партий самые большие коды. хотя это очень косвенно. тут надо использовать срез последних в разрезе документов.
 

unknown181538

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

tanat

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


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

Darlock

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


Да, и еще: МАКСИМУМ(ССылка) использовать нельзя, если и использовать, то только МАКСИМУМ от даты или момента времени.
В 8 можно. я использовал подобную конструкцию (максимум по ссылке) для получения последнего документа из выборки.