Имя: Пароль:
1C
1С v8
СКД остатки по регистратору
0 TeMochkiN
 
18.05.16
10:57
Здравствуйте!
Немного дописанная УПП 1.3
Суть в чем, вот запрос:

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


После того, как я добавляю поле ВидСуммы, у меня в отчете начинают неправильно выводиться начальный и конечный остаток.

Пытался поиграть с ролью:
1. Регистратор (Период, 1), ПериодСекунда (Период, 2), ВидСуммы (Период, 3)
2. Регистратор (Период, 2), ПериодСекунда (Период, 3), ВидСуммы (Период, 1)
3. Регистратор (Период, 1), ПериодСекунда (Период, 3), ВидСуммы (Период, 2)
4. Регистратор (Период, 1), ПериодСекунда (Период, 2), ВидСуммы (Измерение)
5. Регистратор (Период, 1), ПериодСекунда (Период, 2), ВидСуммы (Измерение, Родитель Регистратор)

Нужного результата не получил, в вариантах 2 и 3 правильные остатки, но не получается нормальная группировка
http://s019.radikal.ru/i631/1605/a4/454ea672482a.png

А в остальных вариантах неправильные остатки
Вариант 4: http://s017.radikal.ru/i411/1605/9d/00a5777cf9d3.png
Вариант 5: http://s018.radikal.ru/i519/1605/df/8540781836a9.png

Кто-нибудь сталкивался с таким? Есть ли решение или обходной путь?
1 TeMochkiN
 
18.05.16
11:06
На всякий случай уточню, что ВидСуммы выводится в виде группировки в колонках
2 hhhh
 
18.05.16
11:08
(1) не прокатит. регистраторы должны подряд идти, по времени.
3 Sabbath
 
18.05.16
11:08
(0) Если стоит автозаполнение под текстом запроса, то какая роль у Вида суммы получается?
4 TeMochkiN
 
18.05.16
11:14
(3) автозаполнение роль не проставило этого поля. я руками игрался с ней
5 Sabbath
 
18.05.16
11:18
(4) Ясно, ну и не понятно почему это должно быт ьпериодом или измерением.
Не совсем логично, вытаскивать так обороты по этому виду суммы. Я бы сделал отдельно подзапрос или даже набор данных по физической таблице.
6 TeMochkiN
 
18.05.16
11:22
(5) та думал одним запросом проще будет, ну да ладно, не буду голову морочить, сделаю двумя наборами)
7 Sabbath
 
18.05.16
11:26
(6) Не будет, тут смысл в том, что косячно будет отрабатывать как измерение или ресурс.
Возможно, есть какой-то прием, но так не допереть, надо знать. Проще как раз другой запрос сделать.
8 Sabbath
 
18.05.16
11:26
+(7) т.е. и как измерение и как период
9 тарам пам пам
 
18.05.16
11:50
(6) Двумя наборами тоже не получится. СКД воспримет нормально только 1 вариант - сделать 3 отдельных колонки Оборот по виду суммы 1, Оборот по виду суммы 2, Оборот по виду суммы 3 вместо измерения Вид суммы.
10 Sabbath
 
18.05.16
12:09
(9) кстати возможно
11 TeMochkiN
 
18.05.16
12:20
(9) действительно, как-то не задумывался о таком варианте, сейчас попробую!
12 TeMochkiN
 
18.05.16
12:56
(9) сделал так:

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


всё равно неправильные остатки
13 TeMochkiN
 
18.05.16
12:57
наверное, это из-за того, что в выражении используется регистратор
14 Мышка
 
18.05.16
13:32
1) правильный вариант ролей в СКД - это вариант 4 из первого поста (остальные варианты, автор, это ппц!)
2) регистратор нужно выбирать типа так:
ВЫБОР КОГДА ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор = неопределено ТОГДА NULL ИНАЧЕ ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор КОНЕЦ КАК Регистратор
3) У роли Регистратор нужно поставить в ролях флажок  "Игнорировать значение Null"
15 TeMochkiN
 
18.05.16
13:59
(14) ну с ролями я играл абы что-нибудь получить, а остальное я сделал, как вы написали, результат не изменился
16 Cyberhawk
 
18.05.16
14:04
Я как-то делал 3 начальных остатка (в отдельном наборе данных), а конечный остаток считал как начальный + оборот приход - оборот рсход
17 Мышка
 
18.05.16
14:59
(15) 1) автозаполнение включено? (кошерней, когда отключено и нужные поля перечислены в {})
2) полю Договор родителя в ролях как раз таки установить нужно
3) у остатков стоят Роли  - конечный/начальный остаток?
18 Мышка
 
18.05.16
15:01
установите расшифровку по регистратору в отчете - если суммы перестанут задваиваться, то Регистратору либо флажок Обязательное, либо см. про {}
19 TeMochkiN
 
18.05.16
15:48
(17) да чет всё равно задваивается, сделал вроде абсолютно всё, как вы сказали, в том числе отключил автозаполнение
может вам схему сбросить  чисто глянуть?)
20 TeMochkiN
 
18.05.16
15:54
(18) Единственное, для измерения договор я не стал ставить родителя. Я читал на ИТС, что это вроде нужно делать, когда вытаскиваешь реквизит из другого измерения
Схема: https://dropmefiles.com/KUSMo
Запрос:
ВЫБРАТЬ
    ВЫБОР
        КОГДА ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор = НЕОПРЕДЕЛЕНО
            ТОГДА NULL
        ИНАЧЕ ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор
    КОНЕЦ КАК Регистратор,
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ПериодСекунда КАК ПериодСекунда,
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Организация КАК Организация,
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Контрагент КАК Контрагент,
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента,
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаУпрНачальныйОстаток КАК СуммаУпрНачальныйОстаток,
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаУпрКонечныйОстаток КАК СуммаУпрКонечныйОстаток,
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаУпрОборот КАК СуммаУпрОборот,
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаУпрПриход КАК СуммаУпрПриход,
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаУпрРасход КАК СуммаУпрРасход,
    ВЫБОР
        КОГДА ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеИсходящее
            ТОГДА 0
        КОГДА ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор ССЫЛКА Документ.СправкаОСубподрядныхРаботах
            ТОГДА 1
        КОГДА ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор ССЫЛКА Документ.КорректировкаДолга
                И ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор КАК Документ.КорректировкаДолга).ВидКорректировки = ЗНАЧЕНИЕ(Справочник.ВидыДокументовКорректировкаДолга.ГарантийноеУдержание)
            ТОГДА 2
        ИНАЧЕ 3
    КОНЕЦ КАК ВидДвиженияПорядок
{ВЫБРАТЬ
    Регистратор.*,
    ПериодСекунда,
    Организация.*,
    Контрагент.*,
    ДоговорКонтрагента.*,
    СуммаУпрНачальныйОстаток,
    СуммаУпрКонечныйОстаток,
    СуммаУпрОборот,
    СуммаУпрПриход,
    СуммаУпрРасход,
    ВидДвиженияПорядок}
ИЗ
    РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты({(&НачалоПериода)}, {(&КонецПериода)}, Авто, ДвиженияИГраницыПериода, ) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты
{ГДЕ
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор.*,
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ПериодСекунда,
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Организация.*,
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Контрагент.*,
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента.*,
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаУпрНачальныйОстаток,
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаУпрКонечныйОстаток,
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаУпрОборот,
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаУпрПриход,
    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаУпрРасход,
    (ВЫБОР
            КОГДА ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеИсходящее
                ТОГДА 0
            КОГДА ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор ССЫЛКА Документ.СправкаОСубподрядныхРаботах
                ТОГДА 1
            КОГДА ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор ССЫЛКА Документ.КорректировкаДолга
                    И ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор КАК Документ.КорректировкаДолга).ВидКорректировки = ЗНАЧЕНИЕ(Справочник.ВидыДокументовКорректировкаДолга.ГарантийноеУдержание)
                ТОГДА 2
            ИНАЧЕ 3
        КОНЕЦ) КАК ВидДвиженияПорядок}

Роли:
http://s019.radikal.ru/i643/1605/39/1e3007d3a0f1.png
21 Мышка
 
18.05.16
15:55
у меня нету УППшки :) именно задваивается в СКД часто из-за того, что попадают 2 записи: одна именно с остатками на начало/конец, с пустым регистратором, вторая уже с оборотами и остатками по этому же регистратору. Когда группировку по регистратору в отчете делаете, пустые строки есть там?
22 TeMochkiN
 
18.05.16
15:56
блин, стоп, я у периодсекунда неправильно поставил роль
23 Мышка
 
18.05.16
15:56
и на скрине Регистратор = Период,1 и Секунда = Период, 1, а у Секунды Период должен при таком раскладе = 2
24 TeMochkiN
 
18.05.16
16:04
(21) регистратор в детальных записях: http://s020.radikal.ru/i714/1605/22/2ced0e6057dd.png
регистратор в группировке: http://s001.radikal.ru/i193/1605/b5/084de1520f86.png
25 TeMochkiN
 
18.05.16
16:06
(23) (21) с учетом исправления роли периода
26 Sabbath
 
20.05.16
10:37
(20) посмотрел твою СКД, УПП у меня нет, о у тебя точно не правильная настройка периода. ПериодСекунда поставь 2, Регистратор оставь 1, но поставь галку Обязательное. Хотя ты его все равно выбираешь, то вроде как на твой отчет не должно влиять. Но если не будешь выбирать то будет косяк.
Попробуй еще с автозаполнением и без фигурных скобок для полей, если только то, что я написал выше не поможет

ВидДвижения - по идее не измерение, убери роль. (но это попробуй после верхних рекомендаций)

Короче алгоритм такой:
1) у тебя точно не правильно настроены периоды
2) возможно, влияет обязательность регистратора, а если не влияет, то точно будет косяк при выводе без регистратора
3) возможно, надо автозаполнение при пунктах 1 и 2
4) ВидДвижения - не измерение
27 TeMochkiN
 
20.05.16
11:09
(26) в общем правильные остатки выводятся верно только при таких условиях:
Роли - Регистратор (Период, 1, NULL), ПериодСекунда (Период, 2), ВидДвижения (Без роли)
Обязательный вывод регистратора в отчете.

Если выводить без регистратора, установка в роли регистратора флага "Обязательное" всё равно не дает нужного результата

Спасибо, что поучавствовали в решении задачи, но я её уже решил путем объединения набора по остаткам и оборотам
28 Sabbath
 
20.05.16
11:22
(27) Флаг "обязательное", нужен как раз, чтобы у тебя поле Регистратор всегда было в запросе, даже если ты его не выбираешь в настройках. Если его не будет остатки будут кривыми, когда Регистратора не будет в полях отчета.

Может, именно то, что ты хочешь, это не даст, но избавит от других причин кривых остатков. Хотя, я не совсем пойму, почему у тебя не получилось сделать так. Вроде, все правильно, с учетом того, что я сказал в (20)
29 Sabbath
 
20.05.16
11:27
(28) > сказал в (20)
т.е. в в (26) :)
30 TeMochkiN
 
20.05.16
12:51
(28)
1. Регистратор выводится, флаг "Обязательное" установлен
2. Регистратор выводится, флаг "Обязательное" НЕ установлен
3. Регистратор НЕ выводится, флаг "Обязательное" установлен
4. Регистратор НЕ выводится, флаг "Обязательное" НЕ установлен

1 и 2: http://s020.radikal.ru/i710/1605/d7/ce662b6c8838.png
3: http://s019.radikal.ru/i601/1605/77/4a8bbfdc8514.png
4: http://s018.radikal.ru/i515/1605/d9/4fbcca082c6d.png

Корректные остатки в первом и втором варианте
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.