Оптимизация отчета (настройки, запрос)

1. пользователь 01.03.19 10:17
Сообщение было скрыто модератором.
...
По теме из базы знаний
Найденные решения
24. N1ce 07.03.19 11:17 Сейчас в теме
Решил задачу так: В колонках ограничил информацию по 1 категории.
Скорее всего в СКД оживить отчет с таким объемом данных нельзя
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dandykry 10 01.03.19 11:56 Сейчас в теме
(1) Я бы сначала поместил в ВТ запрос к виртуальной таблице Обороты. А потом эту таблицу полным соединением
3. N1ce 01.03.19 12:10 Сейчас в теме
4. dhurricane 01.03.19 12:37 Сейчас в теме
(1) Попробуйте таки:
- поместить данные виртуальной таблицы во временную таблицу; проиндексировать ее по полю документа;
- использовать левое, а не полное соединение.
5. N1ce 01.03.19 13:03 Сейчас в теме
(4) Так? Если да, то та же ошибка
ВЫБРАТЬ
	ПродажиОбороты.Номенклатура КАК Номенклатура,
	ПродажиОбороты.Документ КАК Документ
ПОМЕСТИТЬ ВТПродажиОбороты
ИЗ
	РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , Документ ССЫЛКА Документ.ЧекККМ) КАК ПродажиОбороты

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТПродажиОбороты.Номенклатура КАК Номенклатура,
	ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) КАК НоменклатураКолонка,
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТПродажиОбороты.Документ) КАК Документ
{ВЫБРАТЬ
	Номенклатура.*,
	НоменклатураКолонка.*,
	Документ.*}
ИЗ
	ВТПродажиОбороты КАК ВТПродажиОбороты
		ЛЕВОЕ СОЕДИНЕНИЕ ВТПродажиОбороты КАК ВТПродажиОбороты1
		ПО ВТПродажиОбороты.Номенклатура <> ВТПродажиОбороты1.Номенклатура
			И ВТПродажиОбороты.Документ = ВТПродажиОбороты1.Документ

СГРУППИРОВАТЬ ПО
	ВТПродажиОбороты.Номенклатура,
	ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))
Показать
6. N1ce 01.03.19 13:05 Сейчас в теме
(5) Кстати, запросы в консоле работают нормально
7. dhurricane 01.03.19 13:12 Сейчас в теме
(6) Еще небольшой совет. В параметрах виртуальной таблицы заменить:
{Документ.СтруктурнаяЕдиница}

на
{(ВЫРАЗИТЬ(Документ КАК Документ.ЧекККМ).СтруктурнаяЕдиница).* КАК Склад}
8. пользователь 01.03.19 13:15
Сообщение было скрыто модератором.
...
10. N1ce 01.03.19 13:25 Сейчас в теме
(8) Полным соединением проверяю вхождения номенклатур в чеки, если значение Null то значит, что номенклатура входит только в свой чек. Значит если поставить проверку ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)), то спишу на пустую ссылку и это будет колонкой "Единичная позиция в чеке". Как-то так
9. dhurricane 01.03.19 13:24 Сейчас в теме
(6) Думаю, в консоле запросов у Вас попроще вывод данных, чем Вы того требуете от отчета. Попробуйте упростить оформление данных, при этом не разбивать условное оформление на множество частей. Или вовсе его отключить, чтобы удостовериться, не тратится ли на него слишком много ресурсов.

Также можно попробовать посмотреть, во что превращается Ваш запрос при исполнении отчета. Для этого можно воспользоваться консолью СКД. Либо формировать отчет программно и при компоновке макета в отладчике подглядеть текст запроса.
11. N1ce 01.03.19 13:29 Сейчас в теме
(9) Пробовал отключать условное оформление и категории, подкатегории. Оно вроде как не влияет.
В консоли СКД получал запрос, заметил, что он добавляет ПРЕДСТАВЛЕНИЕССЫЛКИ для номенклатуры, категорий и понятно, помещяет их в группировки. Я в этом не понимаю
12. N1ce 01.03.19 13:31 Сейчас в теме
(11) решение пока вижу только в том, чтобы сделать макет самому
13. N1ce 01.03.19 13:35 Сейчас в теме
(12) Складывается впечатление, что это СКД один большой косяк) То приходится переименовывать, чтобы настройки сохранились, то соединяет виртуальные таблицы как захочет, то непонятные строки появляются и тд.
Хотя может просто надо подучиться на нем работать
15. dhurricane 01.03.19 13:38 Сейчас в теме
(13) Не, нужно только набраться опыта, и многие вещи встанут на свои места. :)
14. dhurricane 01.03.19 13:37 Сейчас в теме
(11) Давайте мы посмотрим. Скиньте сюда запрос, который генерирует СКД.
16. N1ce 01.03.19 13:46 Сейчас в теме
(14) Сформировал, в Макете для табличного документа XML код. Оно?
<query>ВЫБРАТЬ
	ПродажиОбороты.Номенклатура КАК Номенклатура,
	ЕСТЬNULL(ПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) КАК НоменклатураКолонка,
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиОбороты.Документ) КАК Документ,
	ПРЕДСТАВЛЕНИЕССЫЛКИ(ПродажиОбороты.Номенклатура) КАК НоменклатураПредставление,
	ПродажиОбороты.Номенклатура.КатегорияНоменклатуры КАК НоменклатураКатегорияНоменклатуры,
	ПРЕДСТАВЛЕНИЕССЫЛКИ(ПродажиОбороты.Номенклатура.КатегорияНоменклатуры) КАК НоменклатураКатегорияНоменклатурыПредставление,
	ПродажиОбороты.Номенклатура.КатегорияНоменклатуры.Наименование КАК НоменклатураКатегорияНоменклатурыНаименование,
	ПродажиОбороты.Номенклатура.КатегорияНоменклатуры.Родитель КАК НоменклатураКатегорияНоменклатурыРодитель,
	ПРЕДСТАВЛЕНИЕССЫЛКИ(ПродажиОбороты.Номенклатура.КатегорияНоменклатуры.Родитель) КАК НоменклатураКатегорияНоменклатурыРодительПредставление,
	ПродажиОбороты.Номенклатура.КатегорияНоменклатуры.Родитель.Наименование КАК НоменклатураКатегорияНоменклатурыРодительНаименование,
	ПродажиОбороты.Номенклатура.Наименование КАК НоменклатураНаименование,
	ПРЕДСТАВЛЕНИЕССЫЛКИ(ЕСТЬNULL(ПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))) КАК НоменклатураКолонкаПредставление,
	(ЕСТЬNULL(ПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры КАК Поле1,
	ПРЕДСТАВЛЕНИЕССЫЛКИ((ЕСТЬNULL(ПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры) КАК Поле1Представление,
	(ЕСТЬNULL(ПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры.Наименование КАК Поле2,
	(ЕСТЬNULL(ПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры.Родитель КАК Поле3,
	ПРЕДСТАВЛЕНИЕССЫЛКИ((ЕСТЬNULL(ПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры.Родитель) КАК Поле3Представление,
	(ЕСТЬNULL(ПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры.Родитель.Наименование КАК Поле4,
	(ЕСТЬNULL(ПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).Наименование КАК Поле5
ИЗ
	РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , (Документ ССЫЛКА Документ.ЧекККМ) И Документ.СтруктурнаяЕдиница В(&П)) КАК ПродажиОбороты
		ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , (Документ ССЫЛКА Документ.ЧекККМ) И Документ.СтруктурнаяЕдиница В(&П)) КАК ПродажиОбороты1
		ПО ПродажиОбороты.Номенклатура <> ПродажиОбороты1.Номенклатура
			И ПродажиОбороты.Документ = ПродажиОбороты1.Документ

СГРУППИРОВАТЬ ПО
	ПродажиОбороты.Номенклатура,
	ЕСТЬNULL(ПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)),
	ПРЕДСТАВЛЕНИЕССЫЛКИ(ПродажиОбороты.Номенклатура.КатегорияНоменклатуры),
	ПРЕДСТАВЛЕНИЕССЫЛКИ(ПродажиОбороты.Номенклатура.КатегорияНоменклатуры.Родитель),
	ПРЕДСТАВЛЕНИЕССЫЛКИ(ЕСТЬNULL(ПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))),
	(ЕСТЬNULL(ПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры,
	ПРЕДСТАВЛЕНИЕССЫЛКИ((ЕСТЬNULL(ПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры),
	(ЕСТЬNULL(ПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры.Наименование,
	(ЕСТЬNULL(ПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры.Родитель,
	ПРЕДСТАВЛЕНИЕССЫЛКИ((ЕСТЬNULL(ПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры.Родитель),
	(ЕСТЬNULL(ПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры.Родитель.Наименование,
	(ЕСТЬNULL(ПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).Наименование</query>
Показать
17. dhurricane 01.03.19 13:54 Сейчас в теме
(16) Оно, только Вы здесь не выполнили ни одной рекомендации. :) И непонятно, почему так много выбирается наименований. Вы где-то в настройках явно используете наименования?

Этот же запрос в консоли отработает?
18. N1ce 01.03.19 14:15 Сейчас в теме
(17)
- Запросы работают в консоле
- Условное оформление отключил, в настройках наименование явно вроде не использую. Со стороны настройки выглядят так

- Вот из СКД с рекомендациями
ВЫБРАТЬ
	ПродажиОбороты.Номенклатура КАК Номенклатура,
	ПродажиОбороты.Документ КАК Документ
ПОМЕСТИТЬ ВТПродажиОбороты
ИЗ
	РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , Документ ССЫЛКА Документ.ЧекККМ) КАК ПродажиОбороты

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТПродажиОбороты.Номенклатура КАК Номенклатура,
	ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) КАК НоменклатураКолонка,
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТПродажиОбороты.Документ) КАК Документ,
	ПРЕДСТАВЛЕНИЕССЫЛКИ(ВТПродажиОбороты.Номенклатура) КАК НоменклатураПредставление,
	ВТПродажиОбороты.Номенклатура.КатегорияНоменклатуры КАК НоменклатураКатегорияНоменклатуры,
	ПРЕДСТАВЛЕНИЕССЫЛКИ(ВТПродажиОбороты.Номенклатура.КатегорияНоменклатуры) КАК НоменклатураКатегорияНоменклатурыПредставление,
	ВТПродажиОбороты.Номенклатура.КатегорияНоменклатуры.Наименование КАК НоменклатураКатегорияНоменклатурыНаименование,
	ВТПродажиОбороты.Номенклатура.КатегорияНоменклатуры.Родитель КАК НоменклатураКатегорияНоменклатурыРодитель,
	ПРЕДСТАВЛЕНИЕССЫЛКИ(ВТПродажиОбороты.Номенклатура.КатегорияНоменклатуры.Родитель) КАК НоменклатураКатегорияНоменклатурыРодительПредставление,
	ВТПродажиОбороты.Номенклатура.КатегорияНоменклатуры.Родитель.Наименование КАК НоменклатураКатегорияНоменклатурыРодительНаименование,
	ВТПродажиОбороты.Номенклатура.Наименование КАК НоменклатураНаименование,
	ПРЕДСТАВЛЕНИЕССЫЛКИ(ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))) КАК НоменклатураКолонкаПредставление,
	(ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры КАК Поле1,
	ПРЕДСТАВЛЕНИЕССЫЛКИ((ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры) КАК Поле1Представление,
	(ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры.Наименование КАК Поле2,
	(ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры.Родитель КАК Поле3,
	ПРЕДСТАВЛЕНИЕССЫЛКИ((ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры.Родитель) КАК Поле3Представление,
	(ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры.Родитель.Наименование КАК Поле4,
	(ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).Наименование КАК Поле5
ИЗ
	ВТПродажиОбороты КАК ВТПродажиОбороты
		ЛЕВОЕ СОЕДИНЕНИЕ ВТПродажиОбороты КАК ВТПродажиОбороты1
		ПО ВТПродажиОбороты.Номенклатура <> ВТПродажиОбороты1.Номенклатура
			И ВТПродажиОбороты.Документ = ВТПродажиОбороты1.Документ

СГРУППИРОВАТЬ ПО
	ВТПродажиОбороты.Номенклатура,
	ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)),
	ПРЕДСТАВЛЕНИЕССЫЛКИ(ВТПродажиОбороты.Номенклатура.КатегорияНоменклатуры),
	ПРЕДСТАВЛЕНИЕССЫЛКИ(ВТПродажиОбороты.Номенклатура.КатегорияНоменклатуры.Родитель),
	ПРЕДСТАВЛЕНИЕССЫЛКИ(ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))),
	(ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры,
	ПРЕДСТАВЛЕНИЕССЫЛКИ((ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры),
	(ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры.Наименование,
	(ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры.Родитель,
	ПРЕДСТАВЛЕНИЕССЫЛКИ((ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры.Родитель),
	(ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).КатегорияНоменклатуры.Родитель.Наименование,
	(ЕСТЬNULL(ВТПродажиОбороты1.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))).Наименование
Показать
20. Bukaska 140 01.03.19 15:03 Сейчас в теме
(18)Ваша картинка не отображается. Приложите файл вложением к сообщению на форуме. Не надо сторонних сервисов
21. N1ce 04.03.19 10:01 Сейчас в теме
(20)
Прикрепленные файлы:
19. пользователь 01.03.19 14:17
Сообщение было скрыто модератором.
...
22. N0t_F0und 10 04.03.19 11:08 Сейчас в теме
Разыменуйте поля
ПродажиОбороты.Документ КАК Документ

например, так:
выбор КОГДА ПродажиОбороты.Документ ССЫЛКА Документ.ЧекККМ ТОГДА
ВЫРАЗИТЬ(ПродажиОбороты.Документ КАК Документ.ЧекККМ)
КОНЕЦ 
23. N1ce 04.03.19 11:11 Сейчас в теме
По результату отчет отрабатывает заметно быстрее, но принципиально картину не меняет. Даже на месяце вылетает ошибка
Так выглядит ошибка
Прикрепленные файлы:
24. N1ce 07.03.19 11:17 Сейчас в теме
Решил задачу так: В колонках ограничил информацию по 1 категории.
Скорее всего в СКД оживить отчет с таким объемом данных нельзя
25. N1ce 07.03.19 11:21 Сейчас в теме
(24)Требовалось написать отчет (для УНФ 1.6) - "Анализ и оценка кросс-наполненности чеков". Отчет формируется по количеству чеков, в которые попала та или иная номенклатурная позиция.

На примере "номенклатура 3": данная позиция попала в 58 чеков, из них в этом же чеке присутствовало: - "номенклатура 1" в 12 чеках
-"номенклатура 2" в 6 чеках
- "номенклатура 3" в 4 чеках
В 36 чеках отсутствуют другие номенклатурные позиции



Есть отбор по магазинам

Отчет должен работать по всем магазинам за квартал. С небольшими данными справляется, а вот если ставлю за квартал по всем магазинам, то получаю ошибку "недостаточно памяти" (выполняю на сервере).

Я начинающий, так что мог криво написать запрос. Подскажите что можно исправить?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот