Имя: Пароль:
1C
1С v8
Оптимизация Запроса к РН
0 DenVik
 
27.06.23
14:24
Здравствуйте,
необходимо из РН достать ресурс СуммаБонусов(с этим проблем нет) и достать этот же ресурс, к-й был создан определенным документом
Сделал запрос, но 2я часть плохо смотрится.Можно как то пооптимальней это сделать?
ВЫБРАТЬ
    Клиент КАК Клиент,
    СуммаБонусовОстаток КАК СуммаБонусов,
    0 КАК СуммаБонусовРаспр
ИЗ
    РегистрНакопления.БонусыЛояльностиКлиента.Остатки
    
ОБЪЕДИНИТЬ    

ВЫБРАТЬ
    Клиент КАК Клиент,
    0 КАК СуммаБонусов,
    Сумма(СуммаБонусов) КАК СуммаБонусовРаспр
ИЗ
    РегистрНакопления.БонусыЛояльностиКлиента
ГДЕ    
    ТИПЗНАЧЕНИЯ(Регистратор.Ссылка) = ТИП(Документ.Распродажа)

СГРУППИРОВАТЬ ПО Клиент
1 lodger
 
27.06.23
14:33
(0) давай ещё раз
ТИПЗНАЧЕНИЯ(Регистратор.Ссылка) = ТИП(Документ.Распродажа)
или
к-й был создан определенным документом
2 DenVik
 
27.06.23
14:54
По простому был создан документом РАСПРОДАЖА
3 Мультук
 
27.06.23
15:22
(0)

ВЫБРАТЬ
    Клиент КАК Клиент,
    0 КАК СуммаБонусов,
    Сумма(СуммаБонусов) КАК СуммаБонусовРаспр
ИЗ
    РегистрНакопления.БонусыЛояльностиКлиента
ГДЕ    
    Регистратор ССЫЛКА Документ.Распродажа

СГРУППИРОВАТЬ ПО Клиент
4 lodger
 
27.06.23
15:31
(3) сильно лучше не стало. ты всё ещё трясёшь таблицу РегистрНакопления.БонусыЛояльностиКлиента
(2) надо было РН проектировать под это условие. в другой ресурс кидать или измерение добавлять.

интересно, будет ли разница между:
ВЫБРАТЬ ИЗ
    РегистрНакопления.БонусыЛояльностиКлиента
ГДЕ    
    Регистратор ССЫЛКА Документ.Распродажа

и:

ВЫБРАТЬ ИЗ
    РегистрНакопления.БонусыЛояльностиКлиента.Обороты(, , Авто, )
ГДЕ    
    Регистратор ССЫЛКА Документ.Распродажа
5 Мультук
 
27.06.23
15:39
(4)

Я всего лишь указал на бред вида "Регистратор.Ссылка"
6 Жан Пердежон
 
27.06.23
15:40
(4) РН проектировать под условие запроса, который будет раз в год выполняться? ну-ну
(4) И да, разница будет: как минимум при Активность = ЛОЖЬ
7 lodger
 
27.06.23
15:43
(5) +
(6) обычно, в торговле управление красивое, с чувством прекрасного. у них 8 пятниц в неделю, а одноразовые срезы превращаются в ежедневные отчеты. 1с предлагает настолько гибкий инструмент, что за ночь можно пересчитать РН и выдать результат завтра, раз уж такова потребность бизнеса.
8 CepeLLlka
 
27.06.23
15:48
(0)А что сейчас не оптимально работает? Долго выполняется или что?
9 novichok79
 
27.06.23
15:49
(0) добавь в измерения булев признак, когда создано определенным документом и считай по нему обороты.
10 novichok79
 
27.06.23
15:58
без измерения - костыль, с измерением - костыль, т. е. "все равно отымеют".
в таком случае, я выбираю костыль, который будет обслуживаться движочком 1С.
11 Мультук
 
27.06.23
16:04
(9)

В свое время (и на совсем другом форуме) только за предложение (читай за мысль) строить индекс по булевому полю на потенциально большой таблице
был бы "цинк с гвоздями"

А учитывая, что в этом случае это составной индекс -- то "пожизненный цинк с гвоздями".
12 Волшебник
 
27.06.23
16:20
(11) пишется "эцих" https://cyclowiki.org/wiki/Эцих
13 Жан Пердежон
 
27.06.23
16:44
(11) и ладно бы еще ресурс добавить предложил...
14 ptiz
 
27.06.23
17:03
(0) Если документ Распродажа делает записи в этот регистр часто - оставить как есть.
Если редко, то 2 вариант:
1) сделать реквизит типа "КодОперации", по нему включить индексирование , перезаполнить регистр, и отбирать по нему.
2) сделать вообще отдельный регистр
15 azernot
 
27.06.23
17:18
(0) Опишите задачу, а не предполагаемый вами метод решения.

Предположительно, вы идёте неверным путём.
Судя по всему, у вас есть РН в котором хранятся какие-то данные о бонусах (о накоплении бонусов и списании бонусов) клиентов. Судя по всему, эти самые бонусы могут быть накоплены в результате распродажи. И, наверное, эти "распродажные" бонусы вы хотите учесть как-то по-другому, нежели "обычные". При этом вы не идёте по пути "не начислять бонусы при распродажах". Т.е. предполагается, что даже "распродажные" - это всё равно бонусы, и клиент сможет ими воспользоваться.

Что же я вижу? Вы получаете ОСТАТОК бонусов и оборот "распродажных" бонусов. Если я к примеру получил 1000 бонусов, из которых 300 "распродажных", потом потратил 900 бонусов, что же даст ваш запрос? Остаток бонусов 100, и распродажных 300. Что вы будете делать с такими данными? Ума не приложу.
16 DenVik
 
28.06.23
08:57
Бонусы, имеют одинаковую силу, созданные любым документом.Бонусы с распродажи, вывожу справочно, в отчете.
Просто заинтересовался, как оптимальней решить такую задачу.Видимо, при такой структуре РН по другому не сделать.
Наверное надо бы добавить в Измерения РН поле ВидОперации.И вызывать
РегистрНакопления.БонусыЛояльностиКлиента.Остатки(,ВидОперации=Перечисл.Распродажа)
Других мыслей нет.
17 ptiz
 
28.06.23
09:11
(16) В измерения? Ты при приходе заранее знаешь, какое значение в измерении будет в момент расхода?
18 DenVik
 
28.06.23
09:23
Немного не так написал. НЕ РегистрНакопления.БонусыЛояльностиКлиента.Остатки(,ВидОперации=Перечисл.Распродажа)
а РегистрНакопления.БонусыЛояльностиКлиента.Обороты(,,ВидОперации=Перечисл.Распродажа) т е получу БонусыПриход
Хотя и этот вариант РегистрНакопления.БонусыЛояльностиКлиента.Остатки(,ВидОперации=Перечисл.Распродажа) даст тот же результат(у меня нет расхода бонусов по виду док Распродажа)
Или как еще можно сделать?
19 DenVik
 
28.06.23
09:39
Или вместо добавления Измерения добавить ресурс СуммаБонусовРаспр,и дублировать туда значение СуммаБонусов, если движение делает документ Распродажа.Тогда можно пользоваться вирт таблицей Остатки.
С точки зрения методологии 1с как будет правильней?
20 lodger
 
28.06.23
10:17
(19) ресурс добавь.
21 lodger
 
28.06.23
10:19
какой-то док
+50 к СуммаБонусов
0 к СуммаБонусовРаспродажи
док распродажный_1
+100 к СуммаБонусов
+100 к СуммаБонусовРаспродажи
док распродажный_2
+75 к СуммаБонусов
+75 к СуммаБонусовРаспродажи

а стратегию списания обсуди с торговцами
22 DenVik
 
28.06.23
10:27
(21) Да, тоже к такому варианту склоняюсь
23 novichok79
 
28.06.23
11:25
(9) ну индекс, ну низкая кардинальность.
но ведь 1С обороты не по измерениям считать не умеет... очередной шах и мат 1Снику от вендора?
ладно бы у вас выбор был, кек.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.