Имя: Пароль:
1C
1С v8
Запрос. Получение данных по регистру накопления и соединение с таб.частью регистраторов
0 Минона
 
20.08.18
13:08
В Ут11-Ка2-ERP есть регистр накопления "ТоварыОрганизаций"
Регистраторов у него много.
Стоит задача, вытащить обороты и получить не только Регистратор, но и некое подобие "ДокументаОснования"

Например у документа ТаможеннаяДекларацияИмпорт нет явно основания, но есть документ в таб.части  Товары.ДокументПоступления.

Так как в самом регистре нет документа, то данные из таб.части придётся распределять по количеству. Допустим мы забъём на это и возьмём из первой строки ДокументПоступления, т.е. примем что указывают один документ.

Так вот, нужен совет - как лучше писать запрос, учитывая что документов с таб.частями будет много?
Пока спасает вот такая конструкция - сначала берём всё, где не ТаможДекларация, а потом её добавляем. Можно ил как-то упростить, потому что добавляя документы эта конструкция становится громоздкой?


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

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ЕСТЬNULL(ТаможТовары.ДокументПоступления, ТоварыОрганизацийОб.Регистратор),
    ТоварыОрганизацийОб.КоличествоОборот,
    ТоварыОрганизацийОб.АналитикаУчетаНоменклатуры.Склад
ИЗ
    РегистрНакопления.ТоварыОрганизаций.Обороты(&Дата1, &Дата2, Регистратор, АналитикаУчетаНоменклатуры.Номенклатура = &Номенклатура) КАК ТоварыОрганизацийОб
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ТаможеннаяДекларацияИмпорт.Товары КАК ТаможТовары
        ПО ТоварыОрганизацийОб.Регистратор = ТаможТовары.Ссылка
ГДЕ
    ТоварыОрганизацийОб.Регистратор ССЫЛКА Документ.ТаможеннаяДекларацияИмпорт
    И ТаможТовары.НомерСтроки = 1
1 FIXXXL
 
20.08.18
13:16
сделай свой регистр и подписку для хранения нужной в отчете информации
отчет скажет - спасибо :)
2 xXeNoNx
 
20.08.18
13:38
Шо есть отчет в системе 1с - это итоговый результат работы этой системы, перефразировав получаем: все ради отчета. Для того что бы он собирался хорошо и пользователи не ждали, необходимо данные, на базе которых он строится, "правильно" хранить. Поэтому это должно быть архитектурное решение.

Касаемо приведенного отчета:
1. РегистрНакопления.ТоварыОрганизаций.Обороты(&Дата1, &Дата2, Регистратор - не имеет смысла, так как детализация по регистратору
2. Зачем там ВТ_ОборотыОрганизации, если она не используется в дальнейшем?
3. ТоварыОрганизацийОб.АналитикаУчетаНоменклатуры.Склад - неявное левое соединение
4. ТаможТовары.НомерСтроки = 1  а если декларация во второй строке будет?
3 Минона
 
20.08.18
14:00
(1) Не, отчёт на "раз в месяц", нет смысла конфу дорабатывать.
4 Минона
 
20.08.18
14:03
(2)
1. Что не имеет смысла? Оборот за период по Регистратору? Имеет.
2. Это кусок запроса, сам запрос уже под 300 строк, вот хотелось бы сократить
4. Говорю же - решили упростить, приняв допущение, что в 1й строке будет документ. Так же как у ордеров и т.п. Иначе запрос будет слишком огромный.
5 xXeNoNx
 
20.08.18
14:08
(4) 1.Не имеет смысла получение оборотов с детализацией меньше месяца, в т.ч. по регистратору.

4. Я бы не принимал во внимание это упрощение, т.к. все допуски с юзерами в раз забываются, особенно после отпуска
6 unregistered
 
20.08.18
14:13
(0) > Можно ил как-то упростить, потому что добавляя документы эта конструкция становится громоздкой?

По сути упрощать нечего. Особенно, если для каждого вида документов-регистраторов специфичны имена табличных частей и реквизитов, содержащих нужную информацию.

Но можно оптимизировать. Я бы сначала получил во временную таблицу все данные из регистра без фильтра по виду документа-регистратора, а уже вторым запросом пакета объединял несколько запросов к этой временной таблице с внутренними соединениями к нужным табличным частям нужных док-ов.

Так же можно обратить внимание на совет из поста (2) - не имеет смысла брать виртуальную таблицу оборотов, так как детализация по регистратору. Скорее всего, запрос к первичной таблице будет работать быстрее, чем к виртуальной.
7 Минона
 
20.08.18
14:15
(5)
1. Я не знаю что для вас не имеет смысла, но именно вот так я получаю обороты за 2018 год с детализацией по регистратору и потом свожу 3 регистра вместе, соединяя по докОснованию. Получается сверка оборотов по 3м регистрам.

4. Если не принимать упрощения, то этот запрос можно собирать вечно, ибо собирать данные по таб.части и распределять по записям регистрам - это будет мега-запрос.
Все косяки и так всплывут в результате отчёта.
8 xXeNoNx
 
20.08.18
14:18
(7) 1. в чем отличие получения оборотов из вирт. таблицы по регистратору и выборкой из физ. таблицы регистра?

4. Ну, дело хозяйское...
9 Минона
 
20.08.18
14:18
(6) а, теперь понятно
"не брать виртуальную таблицу оборотов", брать "первичную таблицу".
Ну в принципе да, ок, принято.

Что касается "вторым запросом пакета" - тут да, логично. Но 2м запросом у меня идёт ещё одна итерация, так что вот так.
Т.е. например Ордер -> Реализация, а потом ещё Реализация -> Заказ клиента

Так что 2й пакет там есть тоже.
10 unregistered
 
20.08.18
14:24
(9) > Что касается "вторым запросом пакета"...

Кажется, ты не правильно поняла меня.
Я имел ввиду сначала (первым пакетом) получить во временную таблицу (ВТ) все записи регистра без фильтра по видам регистраторов. Потом (вторым пакетом) сделать объединение множества запросов, каждый из которых будет представлять из себя внутреннее соединение ВТ из первого пакета с какой-либо конкретной табличной частью или документом - сначала с Документ.ТаможеннаяДекларацияИмпорт.Товары, потом с Заказами, и т.д.
11 unregistered
 
20.08.18
14:26
*(10) "первым пакетом" и "вторым пакетом" читать как "первым запросом пакета" и "вторым запросом пакета" соответственно.
12 Минона
 
20.08.18
14:29
(10) да не, всё понятно
код это особо не облегчит и не уменьшит.

а там реально есть ещё 2й пакет - анализ докОснований и углубление до более верхнего докОснования
13 Минона
 
20.08.18
14:43
Спасибо всем за каменты.
Если кому нужен запрос для сверки 3х регистров остатков лдя УТ11-Ка2-ERP  - могу помочь