Вход | Регистрация



Нехорошее поведение регистра. Как поправить?

Нехорошее поведение регистра. Как поправить?
Я
   Галахад
 
30.10.18 - 06:06
Такой вот запрос выявил, что при чтении без периодичности количество больше в два раза:

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

СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Номенклатура,
    ПродажиОбороты.ДокументПродажи

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

ВЫБРАТЬ
    ПродажиОбороты.Номенклатура,
    ПродажиОбороты.ДокументПродажи,
    0,
    СУММА(ПродажиОбороты.КоличествоОборот)
ИЗ
    РегистрНакопления.Продажи.Обороты(&D1, &D2, , ) КАК ПродажиОбороты

СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Номенклатура,
    ПродажиОбороты.ДокументПродажи
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ТаблицаПродаж.Номенклатура,
    ТаблицаПродаж.ДокументПродажи,
    СУММА(ТаблицаПродаж.КоличествоОборотПериод) КАК КоличествоОборотПериод,
    СУММА(ТаблицаПродаж.КоличествоОборот) КАК КоличествоОборот
ПОМЕСТИТЬ ТаблицаПродажГрупп
ИЗ
    ТаблицаПродаж КАК ТаблицаПродаж

СГРУППИРОВАТЬ ПО
    ТаблицаПродаж.Номенклатура,
    ТаблицаПродаж.ДокументПродажи
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ТаблицаПродажГрупп.Номенклатура,
    ТаблицаПродажГрупп.ДокументПродажи,
    ТаблицаПродажГрупп.КоличествоОборотПериод,
    ТаблицаПродажГрупп.КоличествоОборот
ИЗ
    ТаблицаПродажГрупп КАК ТаблицаПродажГрупп
ГДЕ
    ТаблицаПродажГрупп.КоличествоОборотПериод <> ТаблицаПродажГрупп.КоличествоОборот

УПОРЯДОЧИТЬ ПО
    ТаблицаПродажГрупп.ДокументПродажи.Дата
 
 
   Галахад
 
1 - 30.10.18 - 06:09
Перепроведение "документов продаж" не меняет ситуацию.

Применение такой конструкции:
РегистрыНакопления.Продажи.ПересчитатьИтогиЗаПериод('20181001')
Не помогло.

Применение такой конструкции возможно только ночью.
РегистрыНакопления.Продажи.ПересчитатьИтоги()

Кто виноват? Что делать? Как починить?
   catena
 
2 - 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
В чём цель запроса? Почему в первой таблице используешь объединение? Конфигурация типовая?
   catena
 
6 - 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) Угу. Жду вот.
   unregistered
 
12 - 30.10.18 - 09:58
(7) > по логике данные всегда должны быть одинаковы

C какого перепугу они должны быть одинаковыми?
Предположим, были движения в одном периоде
ДокументПродажи1 +10
ДокументПродажи1 -10

В результате запроса с периодичностью "Запись" получим:
ДокументПродажи1 0

В результате запроса без указания периодичности не получим ничего, так как виртуальная таблица Обороты сгруппировывает записи и исключает нулевые результаты.
   unregistered
 
13 - 30.10.18 - 10:02
+ к (12) обычная история для возвратов, корректировок и т.п. сторнировочных записей.
   Галахад
 
14 - 30.10.18 - 10:19
(12) Гм. Идея интересная. В моем случае не верная.
Мое утверждение можно подтвердить или опровергнуть очень легко, запустив запрос на своей базе.
   Галахад
 
15 - 30.10.18 - 10:24
Такс. Пересчет регистра с начала года ничего не изменил. Жду полного пересчета.
   catena
 
16 - 30.10.18 - 10:33
(12)Там объединение, а не соединение, не вижу, как ваше заявление может дать эффект удвоения количестваОборот, а не количества записей.
   unregistered
 
17 - 30.10.18 - 11:05
(16) А я ничего не говорил про проблему удвоения. Я лишь отметил логическую ошибку автора, который утверждал, что результаты запросов к регистру с периодичностью должны быть идентичны результатам аналогичного запроса без периодичности.

Что касается удвоения, то если запрос совершенно точно такой, как в (0), а не упрощенный, то действительно удвоения быть вроде как не должно.

Остаётся еще вариант, что автор упростил для нас текст запроса. А реальный запрос имеет какие-то дополнительные особенности, которые приводят к описанной проблеме.
   Галахад
 
18 - 30.10.18 - 11:21
(17) Запрос реальный.

Я тут подсчитал. Пересчет текущего года занял 67 минут. Пересчет с 2011 года закончится часов за 7... Беда.
   Галахад
 
19 - 30.10.18 - 12:11
Пересчитал. Похорошело. На все про все ушло 6 часов.


Возник вопрос нельзя ли это как-то ускорить вот такой код?

РегистрыНакопления.Продажи.ПересчитатьИтоги();
   unregistered
 
20 - 30.10.18 - 14:14
(19) > нельзя ли это как-то ускорить вот такой код?

На сколько я знаю, нет.
Для регистров остатков можно сократить период хранения итогов. Для оборотных регистров такой возможности нет. Соответственно пересчитываются абсолютно все итоги.
Альтернатива твоему методу только одна (код ниже), которая заключается в отключении итогов и последующем включении. При включении происходит их пересчет.

  РегистрыНакопления.Продажи.УстановитьИспользованиеИтогов(Ложь);
  РегистрыНакопления.Продажи.УстановитьИспользованиеИтогов(Истина);
   1Сергей
 
21 - 30.10.18 - 14:22
(18) ну, это не долго. Я как-то меесяц за 12 часов смог пересчитать.

Вроде, можно нештатно пересчитывать итоги (средствами скуля), но там надо мега-запросы писать. И это не труъ
   МимохожийОднако
 
22 - 30.10.18 - 14:46
(7) Рассматривать обороты в разрезе регистраторов опрометчиво, т.е. неправильно,т.е. хреново


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует