0. wowik 573 05.06.19 17:49 Сейчас в теме

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

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

Перейти к публикации

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

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


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

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

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

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

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

да,только вариант 3 работает намного медленнее.
25. wowik 573 11.06.19 09:55 Сейчас в теме
(20) временные таблицы появились в 8.1, ранее только через вариант 3 можно было. Я еще попал в те времена, когда не было временных таблиц)
24. wowik 573 11.06.19 09:19 Сейчас в теме
статья стала поводом для написания более подробной статьи - https://infostart.ru/public/1073908/ . Спасибо автору за интерес.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Бобров
зарплата от 100 000 руб. до 150 000 руб.
Временный (на проект)

Студент (стажер) 1С
Нижний Новгород
зарплата от 25 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 120 000 руб.
Полный день

Программист 1С
Нижний Новгород
зарплата до 100 000 руб.
Полный день

Программист 1С
Новосибирск
зарплата от 80 000 руб.
Полный день