Базелюк Петр | Технический директор | КТС

«Бизнес-аналитика с помощью Power BI»

- Почему Power BI? - Выгрузка данных из 1С:Предприятие это плохо? - События это наше все - О нормализации замолвим слово - Что такое хранилище данных. Смещение сложности в сторону бизнес-аналитики или в сторону 1С:Предприятия - Поговорим об первичных и вторичных ключах. Эффективно связываем одну таблицу хранилища данных со множеством объектов конфигурации 1С - Как максимально точно обновлять данные в хранилище. Забываем об операциях Insert, Delete, Update - учимся делать MERGE. - Оптимизация MERGE с помощью Common Table Expression - Все-таки, полный онлайн возможен?

Получить последнюю цену закупки

1. user597078_steem34 15.02.18 04:20 Сейчас в теме
Здравствуйте, помогите пожалуйста решить такую задачку: есть регистр сведений ЦеныНоменклатурыПоставщиков, мне нужно получить последние цены на все товары. Я делаю так:

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


Проблема в том, что строк в результате выполнения запроса с одним товаром может быть несколько, связано это с тем, как я понял, что в регистре отличаются значения измерений(таких как "Поставщик" и т.д.) В итоге я получаю что-то типа такого:

НазваниеТовара 100р.
НазваниеТовара 100р.
НазваниеТовара 120р.


Как сделать так, чтобы выбиралась только последняя цена на текущий момент, без учета остальных измерений?
Найденные решения
29. catena 96 15.02.18 06:29 Сейчас в теме
(28)Нет, этот запрос не может давать такой результат. Либо это разные номенклатуры, либо вы выгружаете другой запрос. Добавьте в результирующую таблицу код номенклатуры и период и покажите результат.
user597078_steem34; +1 Ответить
Остальные ответы
Сортировка: Древо
2. ZergKRSK 122 15.02.18 05:04 Сейчас в теме
(1) так вы определитесь какая из трех цен на примере нужная??? Без поставщиков это будет другой регистр - ЦеныНоменклатуры.
3. user597078_steem34 15.02.18 05:16 Сейчас в теме
(2) мне нужна последняя по дате, сейчас гляну, в ут 11, если я не ошибаюсь, поступления в РС ЦеныНоменклатуры данные не записывают
5. ZergKRSK 122 15.02.18 05:22 Сейчас в теме
(3) делайте МАКСИМУМ по периоду
6. user597078_steem34 15.02.18 05:27 Сейчас в теме
(5)Сделал так:

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

СГРУППИРОВАТЬ ПО
	ЦеныНоменклатурыПоставщиковСрезПоследних.Цена,
	ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура
;
Показать

Результат не изменился, выгребает несколько разных цен от разных поставщиков(
7. ZergKRSK 122 15.02.18 05:39 Сейчас в теме
(6) какая периодичность у регистра?
8. user597078_steem34 15.02.18 05:42 Сейчас в теме
(7)В пределах секунды, сейчас скрины приложу
9. ZergKRSK 122 15.02.18 05:46 Сейчас в теме
(8) если в одной секунде одна и та же номенклатура от разных поставщиков то да, будет выходить в запрос.
11. user597078_steem34 15.02.18 05:53 Сейчас в теме
(9)(7) Вот весь код запроса:

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

СГРУППИРОВАТЬ ПО
	ЦеныНоменклатурыПоставщиковСрезПоследних.Цена,
	ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура
Показать


Вот что находится в регистре:



Мне нужна только цена которая выделена красной рамкой, она последняя, а получаю я 2 цены, ту которая мне нужна и последнюю по второму партнеру...


Как обойти?
Прикрепленные файлы:
4. user597078_steem34 15.02.18 05:20 Сейчас в теме
(2) в РС ЦеныНоменклатуры этих цен нет
10. catena 96 15.02.18 05:51 Сейчас в теме
ВЫБРАТЬ
    ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура,
    МАКСИМУМ(ЦеныНоменклатурыПоставщиковСрезПоследних.Период) КАК Период
ПОМЕСТИТЬ ЦЕНЫЗАКУПКИ
ИЗ
    РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних(&ДатаКонца, ) КАК ЦеныНоменклатурыПоставщиковСрезПоследних

СГРУППИРОВАТЬ ПО
    ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура;
Выбрать вт.Номенклатура, вт.Период, Максимум(Срез.ЦенаЗакупки) из ЦЕНЫЗАКУПКИ как вт
      Левое соединение РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних(&ДатаКонца, ) как Срез
              по Срез.Номенклатыра=вт.Номенклатура и Срез.Период=вт.Период
Сгруппировать по вт.Номенклатура, вт.Период
Показать

Группировка во втором запросе на случай, если в один период установлены цены для двух поставщиков. Обычно так не делают, но конфигурация не озвучена, а в разного рода самоделках возможно все.
12. user597078_steem34 15.02.18 05:56 Сейчас в теме
(10) нет, там цена не в один момент времени. Дело именно в разных поставщиках... посмотрите содержимое регистра



Мне нужна только цена которая выделена красной рамкой, она последняя, а получаю я 2 цены, ту которая мне нужна и последнюю по второму партнеру...


Как обойти?
Прикрепленные файлы:
13. catena 96 15.02.18 05:59 Сейчас в теме
(12)Запрос в (10). Сперва выбираете пару номенклатура-последний период. Потом к этому периоду подтягиваете цену. Это универсальный алгоритм получения среза последних по урезанному набору измерений.
16. user597078_steem34 15.02.18 06:06 Сейчас в теме
Сейчас попробую, спасибо)
18. ZergKRSK 122 15.02.18 06:14 Сейчас в теме
(13) этот универсальный алгоритм собирает МАКСИМАЛЬНУЮ цену. Это не то что нужно автору как я понял.
21. catena 96 15.02.18 06:17 Сейчас в теме
(18)Вы мои комментарии читали?
Группировка во втором запросе на случай, если в один период установлены цены для двух поставщиков. Обычно так не делают, но конфигурация не озвучена, а в разного рода самоделках возможно все.

Если, как утверждает автор, разные поставщики устанавливаются разными документами, этот Максимум рояля не играет.

(19)Этого не может быть, вы опять что-то забыли или не там проверяете. Но я не телепат и без наличия кода указать ошибку не могу
23. ZergKRSK 122 15.02.18 06:18 Сейчас в теме
(21)
Вы мои комментарии читали?
Конечно читал. А Вы постановку задачи автора читали? Где там про максимальную цену условие?
30. catena 96 15.02.18 06:33 Сейчас в теме
(23)Ну, расскажите мне про максимум цены:
Прикрепленные файлы:
31. ZergKRSK 122 15.02.18 06:34 Сейчас в теме
(30) Вам рассказать про максимум цены в ПЕРИОДЕ?
32. catena 96 15.02.18 06:35 Сейчас в теме
(31)Ага. То есть, теперь группировку по периоду вы заметили?
33. ZergKRSK 122 15.02.18 06:37 Сейчас в теме
(32) господи, Вы впали в нулевой цикл. Автору НЕ нужна максимальная цена в периоде!
36. catena 96 15.02.18 06:49 Сейчас в теме
(33)Автору нужна последняя цена по неполному набору измерений. Вот для того, чтобы исключить задвоение в одном периоде по неучитываемым измерениям я и сделала группировку. Любой агрегатной функцией. Как именно отсекать дубли в этом случае, решать автору, я лишь указала направление.
37. ZergKRSK 122 15.02.18 06:51 Сейчас в теме
(36) с чего Вы решили что автору нужна МАКСИМАЛЬНАЯ последняя цена? Может ему нужна первая попавшаяся?
38. catena 96 15.02.18 06:53 Сейчас в теме
(37) Любой агрегатной функцией. Любой агрегатной функцией. Любой агрегатной функцией.
я лишь указала направление.я лишь указала направление.я лишь указала направление.

))))))

Лучше покажите мне выбор "первой попавшейся"
40. ZergKRSK 122 15.02.18 06:58 Сейчас в теме
(38) не покажу, это слишком сложно для Вас раз не смогли этот шедевр уложить в один запрос без временных таблиц.
42. catena 96 15.02.18 07:04 Сейчас в теме
(40)А вот сейчас вы перешли на оскорбления, при чем безосновательные. До этого мне было еще весело, но теперь я заканчиваю диалог, т.к. конструктива в нем не вижу.
43. ZergKRSK 122 15.02.18 07:06 Сейчас в теме
(42) согласен, можно было заканчивать сразу после Вашего запроса )
26. user597078_steem34 15.02.18 06:19 Сейчас в теме
(21) Вот, со связью по периоду, никаких изменений(
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
	               |	ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура,
	               |	ЦеныНоменклатурыПоставщиковСрезПоследних.Период КАК Период,
	               |	ЦеныНоменклатурыПоставщиковСрезПоследних.Цена
	               |ПОМЕСТИТЬ ВСЕЦЕНЫ
	               |ИЗ
	               |	РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних(, ) КАК ЦеныНоменклатурыПоставщиковСрезПоследних
	               |;
	               |
	               |////////////////////////////////////////////////////////////­////////////////////
	               |ВЫБРАТЬ
	               |	ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура,
	               |	МАКСИМУМ(ЦеныНоменклатурыПоставщиковСрезПоследних.Период) КАК Период
	               |ПОМЕСТИТЬ ЦЕНЫСМАКСПЕРИОДОМ
	               |ИЗ
	               |	РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних КАК ЦеныНоменклатурыПоставщиковСрезПоследних
	               |
	               |СГРУППИРОВАТЬ ПО
	               |	ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура
	               |;
	               |
	               |////////////////////////////////////////////////////////////­////////////////////
	               |ВЫБРАТЬ
	               |	ВСЕЦЕНЫ.Номенклатура КАК Номенклатура,
	               |	ВСЕЦЕНЫ.Цена
	               |ИЗ
	               |	ВСЕЦЕНЫ КАК ВСЕЦЕНЫ
	               |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЦЕНЫСМАКСПЕРИОДОМ КАК ЦЕНЫСМАКСПЕРИОДОМ
	               |		ПО ВСЕЦЕНЫ.Номенклатура = ЦЕНЫСМАКСПЕРИОДОМ.Номенклатура
	               |			И ВСЕЦЕНЫ.Период = ЦЕНЫСМАКСПЕРИОДОМ.Период
	               |
	               |УПОРЯДОЧИТЬ ПО
	               |	ВСЕЦЕНЫ.Номенклатура.Наименование";

Показать
27. catena 96 15.02.18 06:20 Сейчас в теме
(26)Скрин результата и скрин регистра.
28. user597078_steem34 15.02.18 06:23 Сейчас в теме
Можете пример запроса показать, пожалуйста(

(27)

Запрос:
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
	               |	ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура,
	               |	ЦеныНоменклатурыПоставщиковСрезПоследних.Период КАК Период,
	               |	ЦеныНоменклатурыПоставщиковСрезПоследних.Цена
	               |ПОМЕСТИТЬ ВСЕЦЕНЫ
	               |ИЗ
	               |	РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних(, ) КАК ЦеныНоменклатурыПоставщиковСрезПоследних
	               |;
	               |
	               |////////////////////////////////////////////////////////////­////////////////////
	               |ВЫБРАТЬ
	               |	ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура,
	               |	МАКСИМУМ(ЦеныНоменклатурыПоставщиковСрезПоследних.Период) КАК Период
	               |ПОМЕСТИТЬ ЦЕНЫСМАКСПЕРИОДОМ
	               |ИЗ
	               |	РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних КАК ЦеныНоменклатурыПоставщиковСрезПоследних
	               |
	               |СГРУППИРОВАТЬ ПО
	               |	ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура
	               |;
	               |
	               |////////////////////////////////////////////////////////////­////////////////////
	               |ВЫБРАТЬ
	               |	ВСЕЦЕНЫ.Номенклатура КАК Номенклатура,
	               |	ВСЕЦЕНЫ.Цена
	               |ИЗ
	               |	ВСЕЦЕНЫ КАК ВСЕЦЕНЫ
	               |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЦЕНЫСМАКСПЕРИОДОМ КАК ЦЕНЫСМАКСПЕРИОДОМ
	               |		ПО ВСЕЦЕНЫ.Номенклатура = ЦЕНЫСМАКСПЕРИОДОМ.Номенклатура
	               |			И ВСЕЦЕНЫ.Период = ЦЕНЫСМАКСПЕРИОДОМ.Период
	               |
	               |УПОРЯДОЧИТЬ ПО
	               |	ВСЕЦЕНЫ.Номенклатура.Наименование";

Показать


Прикрепляю два файла, один из них скрин регистра, второй скрин ТЗ в которую я выгружаю результат работы запроса.
Прикрепленные файлы:
29. catena 96 15.02.18 06:29 Сейчас в теме
(28)Нет, этот запрос не может давать такой результат. Либо это разные номенклатуры, либо вы выгружаете другой запрос. Добавьте в результирующую таблицу код номенклатуры и период и покажите результат.
user597078_steem34; +1 Ответить
34. user597078_steem34 15.02.18 06:40 Сейчас в теме
(29) да, вы правы, вывел в ТЗ ещё и код, оказалось что это разные товары))

Запрос переписал так:

Запрос.Текст = "ВЫБРАТЬ
	               |	МАКСИМУМ(ЦеныНоменклатурыПоставщиковСрезПоследних.Период) КАК Период,
	               |	ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура
	               |ПОМЕСТИТЬ МАКСПЕРИОДЫ
	               |ИЗ
	               |	РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних(, ) КАК ЦеныНоменклатурыПоставщиковСрезПоследних
	               |
	               |СГРУППИРОВАТЬ ПО
	               |	ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура
	               |;
	               |
	               |////////////////////////////////////////////////////////////­////////////////////
	               |ВЫБРАТЬ
	               |	ЦеныНоменклатурыПоставщиковСрезПоследних.Цена,
	               |	МАКСПЕРИОДЫ.Номенклатура,
	               |	МАКСПЕРИОДЫ.Номенклатура.Код
	               |ИЗ
	               |	РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних КАК ЦеныНоменклатурыПоставщиковСрезПоследних
	               |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ МАКСПЕРИОДЫ КАК МАКСПЕРИОДЫ
	               |		ПО ЦеныНоменклатурыПоставщиковСрезПоследних.Период = МАКСПЕРИОДЫ.Период
	               |			И ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура = МАКСПЕРИОДЫ.Номенклатура
	               |
	               |УПОРЯДОЧИТЬ ПО
	               |	МАКСПЕРИОДЫ.Номенклатура.Наименование";
	

Показать
35. ZergKRSK 122 15.02.18 06:45 Сейчас в теме
(34) мне интересно что вы будете делать когда одна и та же номенклатура будет иметь разные цены в одном периоде?
39. user597078_steem34 15.02.18 06:58 Сейчас в теме
(35) такое кажется маловероятным) как вы считаете нужно поправить запрос?
41. ZergKRSK 122 15.02.18 07:00 Сейчас в теме
(39) почему маловероятным? не знаю как в УТ, а вообще цены поставщиком могут регистрироваться автоматом при проведении первичных поступлений тмц, и если два разных поступления с одной тмц будут иметь одинаковые даты_время то получим тот самый маловероятный случай. Прежде чем править запрос надо ответить на вопрос - в этом маловероятном случае какую цену брать?
44. user597078_steem34 15.02.18 07:12 Сейчас в теме
(41) наверное просто сгруппирую по средней
22. user597078_steem34 15.02.18 06:17 Сейчас в теме
(18) да, это не то что нужно, мне нужно получить последние закупочные цены товаров из РС ЦеныНоменклатурыПоставщиков,Конфигурация УТ 11
14. catena 96 15.02.18 06:00 Сейчас в теме
(12)И грузите картинки в сообщение, а не на внешний ресурс, не у всех есть доступы во вне.
15. user597078_steem34 15.02.18 06:05 Сейчас в теме
(14) почему-то на сайт не загружалась, решил так добавить, извиняюсь.

Попробовал так, тоже ничего не получается(


Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
	               |	ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура,
	               |	ЦеныНоменклатурыПоставщиковСрезПоследних.Период КАК Период,
	               |	ЦеныНоменклатурыПоставщиковСрезПоследних.Цена
	               |ПОМЕСТИТЬ ВСЕЦЕНЫ
	               |ИЗ
	               |	РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних(, ) КАК ЦеныНоменклатурыПоставщиковСрезПоследних
	               |;
	               |
	               |////////////////////////////////////////////////////////////­////////////////////
	               |ВЫБРАТЬ
	               |	ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура,
	               |	МАКСИМУМ(ЦеныНоменклатурыПоставщиковСрезПоследних.Период) КАК Период
	               |ПОМЕСТИТЬ ЦЕНЫСМАКСПЕРИОДОМ
	               |ИЗ
	               |	РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних КАК ЦеныНоменклатурыПоставщиковСрезПоследних
	               |
	               |СГРУППИРОВАТЬ ПО
	               |	ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура
	               |;
	               |
	               |////////////////////////////////////////////////////////////­////////////////////
	               |ВЫБРАТЬ
	               |	ВСЕЦЕНЫ.Номенклатура,
	               |	ВСЕЦЕНЫ.Цена
	               |ИЗ
	               |	ВСЕЦЕНЫ КАК ВСЕЦЕНЫ
	               |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЦЕНЫСМАКСПЕРИОДОМ КАК ЦЕНЫСМАКСПЕРИОДОМ
	               |		ПО ВСЕЦЕНЫ.Номенклатура = ЦЕНЫСМАКСПЕРИОДОМ.Номенклатура";
	
Показать
17. catena 96 15.02.18 06:08 Сейчас в теме
(15)А где соединение по периоду в последнем запросе?
19. user597078_steem34 15.02.18 06:15 Сейчас в теме
(17)со связью по периоду тоже ничего не получилось
20. ZergKRSK 122 15.02.18 06:16 Сейчас в теме
(19) этот универсальный алгоритм собирает МАКСИМАЛЬНУЮ цену. Более того можно было обойтись и без временной таблицы...
24. catena 96 15.02.18 06:18 Сейчас в теме
(20)Этот алгоритм собирает максимальную цену в ПЕРИОДЕ, если вы читали весь запрос, а не только название агрегатной функции
25. ZergKRSK 122 15.02.18 06:19 Сейчас в теме
(24) я вижу что собирает этот "универсальный" алгоритм... Делается это даже без временной таблицы если что.
Оставьте свое сообщение
Все разделы

Вакансии

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

Руководитель проектов по внедрению 1С документооборота
Санкт-Петербург
зарплата от 100 000 руб. до 130 000 руб.
Полный день

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

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

Ведущий специалист 1С
Москва
Полный день