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

05.06.19

Разработка - Запросы

На нескольких собеседованиях это спрашивали, решил поделиться. Обычно я использую вариант №2. Остальные варианты нашел в интернете.

Задача. Есть список документов поступлений. Написать запрос, который получает последнюю цену товара из табличной части документа.

Вариант №1. Нашел в интернете.

ВЫБРАТЬ
    ПоступлениеТоваровУслугТовары.Номенклатура,
    ПоступлениеТоваровУслугТовары.Ссылка.Дата,
    ПоступлениеТоваровУслугТовары.Цена
ИЗ
    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
ГДЕ
    ПоступлениеТоваровУслугТовары.Ссылка В
            (ВЫБРАТЬ ПЕРВЫЕ 1
                ПоступлениеТоваровУслугТоварыУсловие.Ссылка
            ИЗ
                Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТоварыУсловие
            ГДЕ
                ПоступлениеТоваровУслугТоварыУсловие.Номенклатура = ПоступлениеТоваровУслугТовары.Номенклатура
            УПОРЯДОЧИТЬ ПО
                ПоступлениеТоваровУслугТоварыУсловие.Ссылка.Дата УБЫВ)

 

Вариант №2. так делаю я, работает быстрее варианта №1.

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

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

ИНДЕКСИРОВАТЬ ПО
	Номенклатура,
	ХарактеристикаНоменклатуры,
	Дата
;

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

 

Вариант №3. Нашел в интернете.

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

 

Проверял на конфигурации Управление производственным предприятием, редакция 1.3 (1.3.49.1) .

Какие еще есть варианты решения этой задачи через запросы? Поделитесь, добавлю в статью.

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 8000 руб.

02.09.2020    122425    673    389    

716

Для чего используют конструкцию запроса "ГДЕ ЛОЖЬ" в СКД на примере конфигурации 1С:ERP

Запросы СКД Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    5757    KawaNoNeko    23    

23

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2007    2    Yashazz    0    

29

Запрос 1С copilot

Инструментарий разработчика Запросы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

5 стартмани

15.01.2024    6301    31    mkalimulin    25    

50

PrintWizard: поддержка представлений ЗУП в конструкторе

Инструментарий разработчика Запросы Платформа 1С v8.3 Бесплатно (free)

Одной из интересных задач, стоящих в процессе разработки, была поддержка механизма представлений в ЗУП. Но не просто возможность исполнения запросов с ними. Основная проблема была в том, чтобы с ними было удобно работать, а именно: создавать, модифицировать и отлаживать. Кратко о том, что в итоге получилось...

14.12.2023    1750    vandalsvq    7    

29

Объектная модель запроса "Схема запроса" 2

Запросы Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Далеко уже не новый тип данных "Схема запроса". Статья о том, как использовать его "попроще". Примеры создания текста запроса с нуля и изменение имеющегося запроса.

06.12.2023    5399    user1923546    26    

43

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16205    skovpin_sa    14    

98
Вознаграждение за ответ
Показать полностью
Отзывы
5. acanta 05.06.19 22:57 Сейчас в теме +1 $m
(2) документ может быть не проведен или помечен на удаление.
- цена может браться с фильтром по поставщику или (и) складу, менеджеру, организации, условиям продажи/доставки.
- по рлс у сотрудника может не быть доступа к части информации.
В общем случае получить предыдущие цены с поправкой на текущие условия даже регистр сведений не поможет.
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. wowik 885 05.06.19 17:56 Сейчас в теме
За интересный ответ и комментарий добавлено вознаграждение)
2. pm74 199 05.06.19 19:39 Сейчас в теме
(1) для учебных примерв сойдет , в реале может быть такое :
-2 одинаковых строки с номенклатурой и разными ценами ,
-несколько поступлений одной датой ,
- разные валюты , упаковки
- разный способ учета НДС в цене,
+ цена = 1 (классика)
viktor3d; acanta; +2 Ответить
5. acanta 05.06.19 22:57 Сейчас в теме +1 $m
(2) документ может быть не проведен или помечен на удаление.
- цена может браться с фильтром по поставщику или (и) складу, менеджеру, организации, условиям продажи/доставки.
- по рлс у сотрудника может не быть доступа к части информации.
В общем случае получить предыдущие цены с поправкой на текущие условия даже регистр сведений не поможет.
16. bulpi 215 07.06.19 11:27 Сейчас в теме
Способ (1) работает не на всех релизах. Начиная с какого-то релиза, я точно не знаю.
3. acanta 05.06.19 20:49 Сейчас в теме
Разный способ учёта НДС в цене это вообще пестня. Объясните мне темной почему это не функциональная опция или хотя бы учётная политика?
И почему в базе нет полей с НДС и без НДС, а надо рассчитывать это динамически в запросе.
4. capitan 2466 05.06.19 22:11 Сейчас в теме
Есть добрый и рекомендованный совет, задающим такие вопросы на собеседованиях - не получать такие вещи из документов, на это существуют регистры )
IgorS; alex_4x; rpgshnik; jif; wowik; Kolzah; jaroslav.h; kirillkr; +8 Ответить
7. wowik 885 06.06.19 08:57 Сейчас в теме
6. HEKPOH 76 06.06.19 08:53 Сейчас в теме
Если на собеседовании принимают такие решения как правильные, то это грусть
user1776762; alex_4x; rudnitskij; +3 2 Ответить
8. wowik 885 06.06.19 09:00 Сейчас в теме
(6) примеры незаконченные. Понятно что могут учитываться проведенные, помеченные на удаление и т.д. как в (2). Это уже потом начинаются фантики.
Цель статьи донести возможные варианты.
Вот всем понятен вариант №1?
Можете объяснить вариант №1? почему он так работает? И почему вообще работает?
21. DataReducer 302 10.06.19 20:31 Сейчас в теме
(8) Дал развёрнутый ответ здесь
SmArtist; +1 Ответить
9. AlX0id 06.06.19 09:11 Сейчас в теме
А вот за второй вариант дал бы в голову больно..
Какого *я сначала получаем даты по всей номенклатуре, собираем их в таблицу, чтобы потом во втором запросе отобрать по номенклатуре??

И еще - если с вас будут просить на собеседовании собрать подобные данные с табличных частей документов - сразу шлите их в неприличном направлении. Если люди знающие - пойдут и вас на работу возьмут впридачу. Если не знающие - нечего вам у них делать.
victorree; +1 Ответить
10. wowik 885 06.06.19 09:14 Сейчас в теме
(9) эти придирки к мелочам, коллега))
11. AlX0id 06.06.19 09:43 Сейчас в теме
(10)
Зависит от должности, на которую вы претендуете.. Если разработчик-падаван, то вас с руками оторвут с такими запросами. Если что-то большее - то уже начнут общение с этих "мелочей" (которые могут колом базу поставить вообще говоря). А оно вам надо начинать общение с вот такой ноты?
12. wowik 885 06.06.19 10:00 Сейчас в теме
(11) в (10) имелось ввиду что да, надо мелочи предусматривать. Здесь запросы урезанные в примерах, даже без учета характеристик. Меньше текста, чтобы лучше были видны разные подходы получения данных.
13. vipchep 676 06.06.19 10:38 Сейчас в теме
там где получение реквизита через "." можно заменить на левое соединение, по идее должно ускорить запрос


               МАКСИМУМ(ПоступлениеТоваровУслугСсылка.Дата) КАК Дата,
			ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура
		ИЗ
			Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
                              левое соединение 
			                          Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслугСсылка
                              по 
                                         ПоступлениеТоваровУслугСсылка.Ссылка = ПоступлениеТоваровУслугТовары.Ссылка
              Где 
                       ЕстьNULL(ПоступлениеТоваровУслугСсылка.Ссылка,0) <> 0

Показать
15. rudnitskij 07.06.19 09:44 Сейчас в теме
(13) Если через одну точку - оно особо не ускоряет. При обращении через одну точку база строит такое же левое соединение, как вы предлагаете написать. А если идет обращение через две - то там уже надо
14. androidT1C 76 06.06.19 11:02 Сейчас в теме
А теперь представим, что могут быть два документа с одним товаром и одинаковой датой. И получаем задвоение строк в запросах 2 и 3.
Кроме того, в запросах 1 и 3 не учтены характеристики (хотя 3, по сути, тот же 2).
17. kir74 08.06.19 11:10 Сейчас в теме
ВЫБРАТЬ ПЕРВЫЕ 1
	ПриходТовары.Номенклатура КАК Номенклатура,
	ПриходТовары.Цена КАК Цена
ИЗ
	Документ.Приход.Товары КАК ПриходТовары
ГДЕ
	ПриходТовары.Номенклатура = &Номенклатура

УПОРЯДОЧИТЬ ПО
	ПриходТовары.Ссылка.Дата УБЫВ,
	ПриходТовары.НомерСтроки УБЫВ
Показать

Чем такой вариант плох?
19. wowik 885 10.06.19 09:00 Сейчас в теме
(17) неплох, но если не одна номенклатура? Получать в цикле? В публикации рассмотрено получение последних цен для списка номенклатуры.
18. МимохожийОднако 141 09.06.19 07:34 Сейчас в теме
Как может выглядеть запрос для получения списка документов Установка цен номенклатуры, в которых неактуальные цены (не последние)?
Например, для УТ10.3 или КА1.1
20. echo77 1868 10.06.19 20:23 Сейчас в теме
(0) Вариант 2 и 3, по сути одно и тоже: одном случае последнюю дату помещаем в ВТ в другом во вложенный запрос. Или нет?
Если будет несколько документов с одной и номенклатурой на одну дату, например 31.05.2019 23:59:59 то будет несколько "последних" цен номенклатуры.
22. wowik 885 11.06.19 09:14 Сейчас в теме
(20)
Если будет несколько документов с одной и номенклатурой на одну дату, например 31.05.2019 23:59:59 то будет несколько "последних" цен номенклатуры.

да, это уже сказано в (2)
23. wowik 885 11.06.19 09:15 Сейчас в теме
(20)
Вариант 2 и 3, по сути одно и тоже: одном случае последнюю дату помещаем в ВТ в другом во вложенный запрос. Или нет?

да,только вариант 3 работает намного медленнее.
25. wowik 885 11.06.19 09:55 Сейчас в теме
(20) временные таблицы появились в 8.1, ранее только через вариант 3 можно было. Я еще попал в те времена, когда не было временных таблиц)
24. wowik 885 11.06.19 09:19 Сейчас в теме
статья стала поводом для написания более подробной статьи - https://infostart.ru/public/1073908/ . Спасибо автору за интерес.
26. gloom_prov 06.07.19 23:49 Сейчас в теме
Не знаю как кто относиться к таким запросам но с разбором почему быстрее с анализам плана, это респект. Но хочу сказать что часто приходится иметь бубен. И на 100% согласен что строить запросы к документам это печаль.
Вот к чему привели меня пользователи )) Будни по производству. Вот ту как раз и используются механизмы последнего ))) Может если будит много запросов так и по выкладываю обработки. Тут идет подсчет плановой себестоимости по всем полуфабрикатам одно этапного производства по заданным Ресурсным спецификациям.
Прикрепленные файлы:
Оставьте свое сообщение