В запросе одни данные, в СКД другие

1. Vesnushka94 11.11.19 12:11 Сейчас в теме
Добрый день!
Запросом получаю первых 5 популярных контрагента по закупкам, все остальные объединены как контрагент "Прочее". Запрос выводит все правильно, но в отчет выводятся какие-то левые контрагенты. Конфигурация БП 3.0.73.54

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

СГРУППИРОВАТЬ ПО
	ВЫРАЗИТЬ(ХозрасчетныйОбороты.Субконто1 КАК Справочник.Контрагенты),
	ХозрасчетныйОбороты.Организация

УПОРЯДОЧИТЬ ПО
	Сумма УБЫВ
;

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

СГРУППИРОВАТЬ ПО
	ХозрасчетныйОбороты.Организация,
	ХозрасчетныйОбороты.ПериодДень,
	ВЫБОР
		КОГДА СписокПоставщиков.Контрагент ЕСТЬ NULL
			ТОГДА "Прочее"
		ИНАЧЕ СписокПоставщиков.Контрагент
	КОНЕЦ
Показать
Прикрепленные файлы:
ВнешнийОтчет2.erf
По теме из базы знаний
Найденные решения
44. Vesnushka94 12.11.19 12:09 Сейчас в теме
(13) Да, Вы правы, консоль сначала из выборки получает первые 5, а потом уже упорядочивает эти 5 по суммам. Решилось все сменой пакетов запросов на вложенный запрос

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

СГРУППИРОВАТЬ ПО
	ХозрасчетныйОбороты.Организация,
	ВЫБОР
		КОГДА ВложенныйЗапрос.Контрагент ЕСТЬ NULL
			ТОГДА "Прочее"
		ИНАЧЕ ВложенныйЗапрос.Контрагент
	КОНЕЦ,
	ХозрасчетныйОбороты.ПериодДень
Показать
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. nomad_irk 71 11.11.19 12:19 Сейчас в теме
(1)Нельзя в СКД использовать последний запрос с группировками - СКД "умная", поэтому группирует сама, по каким-то своим соображениям.

Сделайте из второй таблицы временную, сделайте 3 пакет с простейшей выборкой из 2-ой временной таблицы.
4. Vesnushka94 11.11.19 12:21 Сейчас в теме
(3) Пробовала, не получилось, результат тот же
27. DmitriyPopow 33 11.11.19 15:59 Сейчас в теме
(1)У вас то получилось все? как сделали?
34. AlexandrSmith 68 11.11.19 16:21 Сейчас в теме
(1) Не пойму я вас, как не крути, данные абсолютно идентичные, по крайней мере по суммам.
38. YannikAlx 43 11.11.19 16:39 Сейчас в теме
(34) Возможно Автор имел ввиду, что несколько строчек с "Прочее" ...
По крайней мере я так его понял...
39. AlexandrSmith 68 11.11.19 16:41 Сейчас в теме
(38) Скорее всего так и было.
35. YannikAlx 43 11.11.19 16:35 Сейчас в теме
(1)
ВЫБРАТЬ ПЕРВЫЕ 5
	ВЫРАЗИТЬ(ХозрасчетныйОбороты.Субконто1 КАК Справочник.Контрагенты) КАК Контрагент,
	ХозрасчетныйОбороты.Организация КАК Организация,
	СУММА(ХозрасчетныйОбороты.СуммаОборотКт) КАК Сумма
ПОМЕСТИТЬ СписокПоставщиков
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, Авто, Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПоставщикамиИПодрядчиками)), , , КорСчет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Товары)), ) КАК ХозрасчетныйОбороты

СГРУППИРОВАТЬ ПО
	ВЫРАЗИТЬ(ХозрасчетныйОбороты.Субконто1 КАК Справочник.Контрагенты),
	ХозрасчетныйОбороты.Организация

УПОРЯДОЧИТЬ ПО
	Сумма УБЫВ
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ХозрасчетныйОбороты.Субконто1 КАК Субконто1,
	ХозрасчетныйОбороты.Организация КАК Организация,
	СУММА(ХозрасчетныйОбороты.СуммаОборотКт) КАК Сумма
ПОМЕСТИТЬ ВТ_Прочее
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, Авто, Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПоставщикамиИПодрядчиками)), , , КорСчет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Товары)), ) КАК ХозрасчетныйОбороты

СГРУППИРОВАТЬ ПО
	ХозрасчетныйОбороты.Организация,
	ХозрасчетныйОбороты.Субконто1
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВЫБОР
		КОГДА СписокПоставщиков.Контрагент ЕСТЬ NULL
			ТОГДА "Прочее"
		ИНАЧЕ СписокПоставщиков.Контрагент
	КОНЕЦ КАК Контрагент,
	ВТ_Прочее.Организация КАК Организация,
	СУММА(ВТ_Прочее.Сумма) КАК Сумма
ИЗ
	ВТ_Прочее КАК ВТ_Прочее
		ЛЕВОЕ СОЕДИНЕНИЕ СписокПоставщиков КАК СписокПоставщиков
		ПО (ВТ_Прочее.Субконто1 = СписокПоставщиков.Контрагент)

СГРУППИРОВАТЬ ПО
	ВЫБОР
		КОГДА СписокПоставщиков.Контрагент ЕСТЬ NULL
			ТОГДА "Прочее"
		ИНАЧЕ СписокПоставщиков.Контрагент
	КОНЕЦ,
	ВТ_Прочее.Организация
Показать
36. nomad_irk 71 11.11.19 16:37 Сейчас в теме
(35) Временные таблицы еще индексировать нужно грамотно :)
37. YannikAlx 43 11.11.19 16:38 Сейчас в теме
(36) безусловно!
я навскидку написал, то что примерно хотел автор...
2. YannikAlx 43 11.11.19 12:16 Сейчас в теме
Левое на правое поменяй как минимум.
И никогда слева не ставь виртуальные таблицы!
5. Vesnushka94 11.11.19 12:24 Сейчас в теме
15. user1202776 11.11.19 14:32 Сейчас в теме
(2)объясните пожалуйста почему виртуальные таблица нельзя ставить слева.
Можно например поставить какой-то регистр сведений поставить слева , а виртуальную таблицу поставить справа и сделать правое соединение?
18. YannikAlx 43 11.11.19 14:46 Сейчас в теме
(15) слева - это слева в ЛЕВОМ соединении
или по другому ставить ПЕРВЫМ в ЛЕВОМ СОЕДИНЕНИИ
19. YannikAlx 43 11.11.19 14:47 Сейчас в теме
(15) Можно получить бред и никогда не поймешь почему оно бредит...
22. Sashares 34 11.11.19 15:28 Сейчас в теме
(19)То есть вы сейчас предлагаете вместо вывода всех данных из РБ за период, с выделением 5 контрагентов, вывести данные по 5 контагентам, а остальное не выводить.
Вы вот щас серьезно?
Ганс; DmitriyPopow; +2 Ответить
25. YannikAlx 43 11.11.19 15:52 Сейчас в теме
(22) Я сербезно считаю, что первой в Левом соединении Виртуальная таблица может стоять только в самых Исключительных случаях.
В рассматриваемом варианте , я не совсем дал рекомендацию поменять левое на правое, но думаю, если перенести виртуальную таблицу во временную , то результат будет другим.
В смысле слева сделать не виртуальную , а временную из виртуальной...
23. user1202776 11.11.19 15:39 Сейчас в теме
(19)
Можно получить бред и никогда не поймешь почему оно бредит...

а если основная таблица находится в виртуальной таблице?
24. YannikAlx 43 11.11.19 15:48 Сейчас в теме
(23) Вы сначала уточните что в вашем понимании есть Виртуальная таблица...
16. Sashares 34 11.11.19 14:41 Сейчас в теме
(2)
И никогда слева не ставь виртуальные таблицы!

Плохая примета? Или что?
42. ZergKRSK 129 12.11.19 03:47 Сейчас в теме
(16) товарищ чушь просто написал.
6. DmitriyPopow 33 11.11.19 13:14 Сейчас в теме
а параметры верные? в запросе конечный период какой указываете? 11.11.2019 23:59:59?
а в скд, просто стандартный период? или как приводите конец периода к концу дня?
7. Vesnushka94 11.11.19 13:22 Сейчас в теме
(6) в запросе конечный период 31.10.2019 23:59:59, а в СКД стандартный период
8. DmitriyPopow 33 11.11.19 13:26 Сейчас в теме
исходный отчет сделан с нуля? или взят с какого-то?
Отчет был внесен во внешние отчеты ранее?
я к чему, если отчет сохранен во внешних отчетах, и его сохранить во внешнем отчете и вносить изменения он будет тянуть настройки СКД из ранее сохраненных, решение переименовать Отчет и "Сохранить КАК" другим файлом отчета.
9. Vesnushka94 11.11.19 13:28 Сейчас в теме
(8) Отчет написан с нуля, пока открывается через файл-открыть
10. Vesnushka94 11.11.19 13:28 Сейчас в теме
(9) отчетов с таким же названием нет во внешних
11. DmitriyPopow 33 11.11.19 13:31 Сейчас в теме
попробуйте убрать "ПЕРВЫЕ 5" и сверьте результат. Отчета и запроса
12. Vesnushka94 11.11.19 13:51 Сейчас в теме
13. DmitriyPopow 33 11.11.19 13:57 Сейчас в теме
(12)значит проблема в этом. ввидимо СКД и консоль получают разные "Первые 5"
можете в самой настройке СКД ограничить вывод по количеству записей https://yadi.sk/i/dyZGoNgJ5DEetg
44. Vesnushka94 12.11.19 12:09 Сейчас в теме
(13) Да, Вы правы, консоль сначала из выборки получает первые 5, а потом уже упорядочивает эти 5 по суммам. Решилось все сменой пакетов запросов на вложенный запрос

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

СГРУППИРОВАТЬ ПО
	ХозрасчетныйОбороты.Организация,
	ВЫБОР
		КОГДА ВложенныйЗапрос.Контрагент ЕСТЬ NULL
			ТОГДА "Прочее"
		ИНАЧЕ ВложенныйЗапрос.Контрагент
	КОНЕЦ,
	ХозрасчетныйОбороты.ПериодДень
Показать
14. nomad_irk 71 11.11.19 13:57 Сейчас в теме
Еще неплохо бы указать одинаковый метод дополнения, т.к. в СКД по-умолчанию с движениями, а в консоли - границы периода.
17. YannikAlx 43 11.11.19 14:45 Сейчас в теме
для начинающих программистов - плохая...
Можно получить бред и никогда не поймешь почему оно бредит...
20. DmitriyPopow 33 11.11.19 15:04 Сейчас в теме
(18) ну не знаю. пример Получаем цены номенклатуры (Ценыноменклатуры.СрезПоследних) и к нему левым соединяем справочник Валюты чтобы пересчитать цены валютные в рубли. пример из типовых конфигураций.
26. YannikAlx 43 11.11.19 15:57 Сейчас в теме
(20) Я попробую поискать рекомендации гуру про неоптимальность ставить на первое место Виртуальную таблицу....
Пока некогда, но в подсознании отложилось давно...
28. YannikAlx 43 11.11.19 16:06 Сейчас в теме
(20) вот из https://infostart.ru/public/204054/
Виртуальные таблицы , позволяют получить практически готовые данные для большинства прикладных задач.(СрезПервых,СрезПоследних,Остатки,Обороты,ОстаткиИОбороты) Ключевое слово здесь виртуальные. Эти таблицы не являются физическими, а компонуются системой налету, т.е. при получении данных из виртуальных таблиц система собирает данные из итоговых таблиц регистров, компонует, группирует и выдает пользователю.

Т.е. при соединении с виртуальной таблицей происходит соединение с подзапросом. В этом случае оптимизатор СУБД может также выбрать неоптимальный план соединения. Если запрос формируется недостаточно быстро и в запросе испольуются соединения в виртуальными таблицами, то реклмендуется вынести обращение к виртуальным таблицам во временную таблицу, а затем в произвести соедининие между двумя временными таблицами. Перепишем предыдущий запрос.


И это не единственный источник....
Их много, я не на основании единственного сделал себе установку...
29. DmitriyPopow 33 11.11.19 16:14 Сейчас в теме
(28) Спасибо, ну тут не совсем то. неоптимальность да. Не нельзя, а то что может замедлить получение данных, и потребуется оптимизировать запрос.это скорее рекомендация по проблеме и метод оптимизации
32. YannikAlx 43 11.11.19 16:18 Сейчас в теме
(29) ну я не претендую в данной теме на окончательную истину.
Но когда не знаешь в чем проблема, ну почему они по разному отрабатывают, то можно попробовать и сделать через Временные таблицы...
33. YannikAlx 43 11.11.19 16:20 Сейчас в теме
(29) мало того я уже думаю , что именно временная таблица из Виртуальной и решит проблему автора.....
21. Sashares 34 11.11.19 15:25 Сейчас в теме
Надо смотреть какой запрос реально выполняется, например, в консоли СКД.
30. toypaul 63 11.11.19 16:17 Сейчас в теме
нужно попробовать у полей Организация и ПериодДень в описании набора в колонке Роль установить признак "Обязательное"
31. Sashares 34 11.11.19 16:17 Сейчас в теме
Вместо 2х запросов можно предложить воспользоваться одним запросом и функцией МестоВПорядке.
40. Sashares 34 11.11.19 16:43 Сейчас в теме
Забавно, что ТС уже давно нет в теме, а обсуждение идет))
41. YannikAlx 43 11.11.19 16:44 Сейчас в теме
(40) А вы не замечали именно такую особенность нашего форума?
Такое случается почти в половине случаев если не чаще ;-)))))))
43. Vesnushka94 12.11.19 05:14 Сейчас в теме
(40) Просто у меня рабочий день давно закончился) это не значит, что я не перечитаю это все на следующий день) на момент Вашего сообщения у меня уже 9 часов вечера было)
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

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

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

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)