Имя: Пароль:
1C
1С v8
Неправильные остатки таблицы ОстаткиИОбороты в СКД
0 Dwarrior
 
27.12.17
12:01
Здравствуйте!

Имеем простой вроде бы отчет СКД с запросом:

ВЫБРАТЬ РАЗЛИЧНЫЕ
    ДолгТараОстаткиИОбороты.Контрагент,
    ДолгТараОстаткиИОбороты.КоличествоПриход,
    ДолгТараОстаткиИОбороты.КоличествоРасход,
    ДолгТараОстаткиИОбороты.Регистратор,
    ДолгТараОстаткиИОбороты.КоличествоНачальныйОстаток,
    ДолгТараОстаткиИОбороты.КоличествоКонечныйОстаток,
    ДолгТараОстаткиИОбороты.Маршрут,
    ДолгТараОстаткиИОбороты.НомерДоставки,
    ДолгТараОстаткиИОбороты.ПериодСекунда,
    ДолгТараОстаткиИОбороты.Склад,
    ДолгТараОстаткиИОбороты.Регистратор.Сделка КАК ЗаказПокупателя
ИЗ
    РегистрНакопления.ДолгТара.ОстаткиИОбороты(, , Авто, , ) КАК ДолгТараОстаткиИОбороты
ГДЕ
    ДолгТараОстаткиИОбороты.Контрагент.Наименование <> " "
    И ДолгТараОстаткиИОбороты.Регистратор.Сделка <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)

Проблема - неправильно рассчитываются остатки на начало и конец при определенных группировках. А точнее - они складываются в разрезе регистраторов, например. Прочитал связанную статью ИТС "Типичные проблемы при расчете остатков". Не помогло.
Что интересно - если убираем из запроса условие "И ДолгТараОстаткиИОбороты.Регистратор.Сделка <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)" - остатки считаются правильно.
"
1 mistеr
 
27.12.17
12:08
(0) Как ты хочешь получить правильные остатки, выкинув часть данных? Перенеси условие в отбор СКД в группировке по регистратору.
2 Dwarrior
 
27.12.17
12:44
(1) Да не, понятно, что изменение запроса это эксперименты с целью понять.
А если группировки по регистратору не будет? Отбор в таком случае сработает?
3 Мандалай
 
27.12.17
13:01
Ищи на ИТС статью про получение остатков на начало и конец периода.
4 Dwarrior
 
27.12.17
13:24
(3) Нашел и прочитал. Все рекомендации сделал
https://its.1c.ru/db/metod8dev/content/3093/hdoc
5 Dwarrior
 
27.12.17
15:59
апну в надежде на новогоднее чудо:)
6 piter3
 
27.12.17
16:02
(4) Не сделал судя пл (0)
7 piter3
 
27.12.17
16:03
Что в консоли?
8 piter3
 
27.12.17
16:09
И какой смысл остатку по доку?
9 perester
 
27.12.17
16:18
Прикрути костыли - сделай запрос сначала по наименованию потом по его в Вт, а с Вт отбор по регистратору, ну или через вложенный запрос не сказать что верно, да и вообще не есть хорошо, но результат должен получиться
10 mehfk
 
27.12.17
16:25
(0) Не вижу в запросе того, что ты должен был сделать, прочитав указанную тобой статью.
11 mehfk
 
27.12.17
16:31
Присмотрелся - увидел.
Не, ну это - швах
И ДолгТараОстаткиИОбороты.Регистратор.Сделка <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
12 kuzyara
 
27.12.17
16:31
(0) нужно добавить поле ПериодСекунда

А вот ещё запрос непонятный из ут10:
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ЕСТЬNULL(Взаиморасчеты.СуммаВзаиморасчетовНачальныйОстаток, 0) КАК ОстатокНаНачало,
    |    ЕСТЬNULL(Взаиморасчеты.СуммаВзаиморасчетовКонечныйОстаток, 0)  КАК ОстатокНаКонец
    |ИЗ
    |    РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, , ,"    + ТекстФильтра + ") КАК Взаиморасчеты";
    
    Результат = Запрос.Выполнить();


Зачем здесь используется ЕстьNull?
13 Dwarrior
 
27.12.17
16:44
(12) Так есть же ПериодСекунда в запросе, 3 поле снизу
14 Dwarrior
 
27.12.17
16:44
(11) а как лучше можно? Посоветуйте пожалуйста
15 Dwarrior
 
27.12.17
16:46
(9) Как вариант, попробую, спасибо
16 nordbox
 
27.12.17
16:51
(15) Убери отбор ГДЕ
https://its.1c.ru/db/metod8dev#content:2594:hdoc
читай винимательно:
17 RainWoman
 
27.12.17
17:12
В СКД проблема при работе с виртуальной таблицей ОстаткиИОбороты также может быть связана с настройкой свойства МетодДополнения.
18 Dwarrior
 
27.12.17
17:18
(16) Я бы с удовольствием указал отбор внутрь виртуальной таблицы, но там только измерения. Регистратора там нет, а мне нужен отбор по полю Сделка регистратора.
19 mehfk
 
27.12.17
17:58
(18) Нет ножек - нет мультиков. Хуёвый код - хуёвый результат.
20 mistеr
 
27.12.17
19:04
(18) Для поля Сделка роль настроена по (4) ?
21 Dwarrior
 
28.12.17
09:37
(20) Не Сделка, а ЗаказПокупателя. Да, Измерение
22 mistеr
 
28.12.17
10:37
(21) Не просто измерение, а с родителем Регистратор.
23 Dwarrior
 
28.12.17
12:01
(22) Сделал, не помогло. Вот что еще заметил - если в отчете хоть где есть группировка по Регистратору (на любом уровне) - то остатки считаются верно. Например 1.Контрагент, 2.Регистратор. Или 1. Регистратор 2.Контрагент.
Однако если Регистратора нет в группировках - остаток неправильный. Например 1.Контрагент, 2.Маршрут
24 Dwarrior
 
28.12.17
12:03
(9) Да, сделал еще через временную таблицу, т.е. ОстаткиИОбороты детализируются до Регистратора, выгружаются в ВТ, а потом из ВТ выбираются - тоже не помогло особо. Даже с правильной ролью поля ЗаказПокупателя.
25 mistеr
 
28.12.17
12:04
Ты плохо читал (4). Регистратор должен быть.
26 Dwarrior
 
28.12.17
12:41
(25) Извините за тупость:) Не совсем понятно, где должен быть Регистратор? В полях выборки есть. Роль у него -
"Период,1".
27 mistеr
 
28.12.17
12:54
(26) В группировках.

Но у тебя еще концептуальная проблема с отбором по заказам. Чтобы иметь возможность получать правильные остатки в разрезе заказов (а отбор это частный случай), нужно иметь заказ в измерениях регистра.
28 Dwarrior
 
28.12.17
13:01
(27) Т.е. как я понял, запросом не обойтись, надо менять структуру регистра?

А почему не работает через временную таблицу? Т.е. вытащить линейные записи (по регистратору) в ВТ, отобрав по непустому Заказу, а потом выбрать уже из ВТ. Там-то уже отборов накладывать не надо, просто полная выборка всех записей. А получается, поведение отчета такое же, как если бы я выбирал из ОстаткиИОбороты напрямую (С регистратором правильно, без регистратора - неправильно)
29 mehfk
 
28.12.17
13:09
(28) https://image.ibb.co/mDMGjw/image.png

А теперь вычеркни несколько регистраторов, что будет с НачОст и КонОст ?
30 mistеr
 
28.12.17
13:12
(28) Если выбрать из регистра остатки в разрезе регистраторов, то они будут верными, даже если часть регистраторов выкинуть. А если свернуть остатки по чему-либо еще (контрагенту, например), то верных остатков, не учитывающих регистраторы без заказов, нет НИГДЕ. В регистре есть только остатки, учитывающие все движения. И СКД тебе эти несуществующие остатки из воздуха не выдумает.

Поэтому добавляй заказ в регистр. Или не пиши в регистр движения без заказов.
31 Dwarrior
 
29.12.17
10:47
(30) Спасибо, так и поступим. Ограничу запись в регистр реализаций без заказов
Независимо от того, куда вы едете — это в гору и против ветра!