|
Нехорошее поведение регистра. Как поправить? | ☑ | ||
---|---|---|---|---|
0
Галахад
гуру
30.10.18
✎
06:06
|
Такой вот запрос выявил, что при чтении без периодичности количество больше в два раза:
ВЫБРАТЬ ПродажиОбороты.Номенклатура, ПродажиОбороты.ДокументПродажи, СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборотПериод, 0 КАК КоличествоОборот ПОМЕСТИТЬ ТаблицаПродаж ИЗ РегистрНакопления.Продажи.Обороты(&D1, &D2, Запись, ) КАК ПродажиОбороты СГРУППИРОВАТЬ ПО ПродажиОбороты.Номенклатура, ПродажиОбороты.ДокументПродажи ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПродажиОбороты.Номенклатура, ПродажиОбороты.ДокументПродажи, 0, СУММА(ПродажиОбороты.КоличествоОборот) ИЗ РегистрНакопления.Продажи.Обороты(&D1, &D2, , ) КАК ПродажиОбороты СГРУППИРОВАТЬ ПО ПродажиОбороты.Номенклатура, ПродажиОбороты.ДокументПродажи ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаПродаж.Номенклатура, ТаблицаПродаж.ДокументПродажи, СУММА(ТаблицаПродаж.КоличествоОборотПериод) КАК КоличествоОборотПериод, СУММА(ТаблицаПродаж.КоличествоОборот) КАК КоличествоОборот ПОМЕСТИТЬ ТаблицаПродажГрупп ИЗ ТаблицаПродаж КАК ТаблицаПродаж СГРУППИРОВАТЬ ПО ТаблицаПродаж.Номенклатура, ТаблицаПродаж.ДокументПродажи ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаПродажГрупп.Номенклатура, ТаблицаПродажГрупп.ДокументПродажи, ТаблицаПродажГрупп.КоличествоОборотПериод, ТаблицаПродажГрупп.КоличествоОборот ИЗ ТаблицаПродажГрупп КАК ТаблицаПродажГрупп ГДЕ ТаблицаПродажГрупп.КоличествоОборотПериод <> ТаблицаПродажГрупп.КоличествоОборот УПОРЯДОЧИТЬ ПО ТаблицаПродажГрупп.ДокументПродажи.Дата |
|||
1
Галахад
гуру
30.10.18
✎
06:09
|
Перепроведение "документов продаж" не меняет ситуацию.
Применение такой конструкции: РегистрыНакопления.Продажи.ПересчитатьИтогиЗаПериод('20181001') Не помогло. Применение такой конструкции возможно только ночью. РегистрыНакопления.Продажи.ПересчитатьИтоги() Кто виноват? Что делать? Как починить? |
|||
2
catena
30.10.18
✎
06:56
|
А как выглядят движения проблемных документов?
|
|||
3
Галахад
гуру
30.10.18
✎
07:07
|
(2) Гм. Вроде бы нормально выглядят. И количество там нормальное.
|
|||
4
Галахад
гуру
30.10.18
✎
07:08
|
(3) +
Или я не понял вопроса? |
|||
5
Мимохожий Однако
30.10.18
✎
07:11
|
В чём цель запроса? Почему в первой таблице используешь объединение? Конфигурация типовая?
|
|||
6
catena
30.10.18
✎
07:12
|
(4)Глянуть можно? Хочу сымитировать, на моих регистрах запрос отрабатывает ровно.
|
|||
7
Галахад
гуру
30.10.18
✎
08:43
|
(5) Цель запроса, найти те записи у которых разные данные при различных видах обращения к ним.
1. Периодичность не указана. 2. Периодичность указанна. Хотя, по логике данные всегда должны быть одинаковы. (6) Скорее всего не воспроизведется. У меня проблема только в нескольких датах, предположительно в одном регистре. |
|||
8
Фрэнки
30.10.18
✎
09:06
|
(7) а ты сколько раз проверял? Может надо и в файловый режим выгрузить и там проверить? Или пересчитать все регистры?
|
|||
9
Галахад
гуру
30.10.18
✎
09:10
|
(8) Как понять сколько? Запрос по другому данные не будет выводить.
В файловый не выгрузиться. А пересчитывать долго. Часа два назад запустил пересчет одного регистра на копии, считается до сих пор. |
|||
10
Фрэнки
30.10.18
✎
09:18
|
(9) просто я как-то тоже наступал на грабли с использованием таблицы вида
РегистрНакопления.Продажи.Обороты( ... Вылечилось запуском пересчета в ТИИ в конфигураторе. Пока вразумительных версий никто не озвучил, может пусть оно промолотит где-то на тестовой копии в фоне и затем проверишь, что она выдаст после |
|||
11
Галахад
гуру
30.10.18
✎
09:24
|
(10) Угу. Жду вот.
|
|||
12
unregistered
30.10.18
✎
09:58
|
(7) > по логике данные всегда должны быть одинаковы
C какого перепугу они должны быть одинаковыми? Предположим, были движения в одном периоде ДокументПродажи1 +10 ДокументПродажи1 -10 В результате запроса с периодичностью "Запись" получим: ДокументПродажи1 0 В результате запроса без указания периодичности не получим ничего, так как виртуальная таблица Обороты сгруппировывает записи и исключает нулевые результаты. |
|||
13
unregistered
30.10.18
✎
10:02
|
+ к (12) обычная история для возвратов, корректировок и т.п. сторнировочных записей.
|
|||
14
Галахад
гуру
30.10.18
✎
10:19
|
(12) Гм. Идея интересная. В моем случае не верная.
Мое утверждение можно подтвердить или опровергнуть очень легко, запустив запрос на своей базе. |
|||
15
Галахад
гуру
30.10.18
✎
10:24
|
Такс. Пересчет регистра с начала года ничего не изменил. Жду полного пересчета.
|
|||
16
catena
30.10.18
✎
10:33
|
(12)Там объединение, а не соединение, не вижу, как ваше заявление может дать эффект удвоения количестваОборот, а не количества записей.
|
|||
17
unregistered
30.10.18
✎
11:05
|
(16) А я ничего не говорил про проблему удвоения. Я лишь отметил логическую ошибку автора, который утверждал, что результаты запросов к регистру с периодичностью должны быть идентичны результатам аналогичного запроса без периодичности.
Что касается удвоения, то если запрос совершенно точно такой, как в (0), а не упрощенный, то действительно удвоения быть вроде как не должно. Остаётся еще вариант, что автор упростил для нас текст запроса. А реальный запрос имеет какие-то дополнительные особенности, которые приводят к описанной проблеме. |
|||
18
Галахад
гуру
30.10.18
✎
11:21
|
(17) Запрос реальный.
Я тут подсчитал. Пересчет текущего года занял 67 минут. Пересчет с 2011 года закончится часов за 7... Беда. |
|||
19
Галахад
гуру
30.10.18
✎
12:11
|
Пересчитал. Похорошело. На все про все ушло 6 часов.
Возник вопрос нельзя ли это как-то ускорить вот такой код? РегистрыНакопления.Продажи.ПересчитатьИтоги(); |
|||
20
unregistered
30.10.18
✎
14:14
|
(19) > нельзя ли это как-то ускорить вот такой код?
На сколько я знаю, нет. Для регистров остатков можно сократить период хранения итогов. Для оборотных регистров такой возможности нет. Соответственно пересчитываются абсолютно все итоги. Альтернатива твоему методу только одна (код ниже), которая заключается в отключении итогов и последующем включении. При включении происходит их пересчет. РегистрыНакопления.Продажи.УстановитьИспользованиеИтогов(Ложь); РегистрыНакопления.Продажи.УстановитьИспользованиеИтогов(Истина); |
|||
21
1Сергей
30.10.18
✎
14:22
|
(18) ну, это не долго. Я как-то меесяц за 12 часов смог пересчитать.
Вроде, можно нештатно пересчитывать итоги (средствами скуля), но там надо мега-запросы писать. И это не труъ |
|||
22
Мимохожий Однако
30.10.18
✎
14:46
|
(7) Рассматривать обороты в разрезе регистраторов опрометчиво, т.е. неправильно,т.е. хреново
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |