Имя: Пароль:
1C
1С v8
Не срабатывает условие при изменение состава полей в СКД
0 DenYuliya
 
18.12.18
11:00
День добрый.
Такой вопрос:

Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.64.48)
1С:Предприятие 8.3 (8.3.10.2667)

Есть отчет, на СКД. Смысл отчета: сравнить суммы по оборотам Хозрасчетного регистра. и по оборотам Раздельного учета НДС.
На итоговую таблицу накладывается условие:"Сумма обороты БУ <> Сумма раздельного учета НДС".
Все хорошо, до того момента, пока пользователь не решает ручками (в настройках) изменить состав полей.
При этом слетает группировка, и перестает работать условие.
В Консоли запросов я могу это исправить. А как решить данную проблему на СКД?
Попробовала отключить Автозаполнение и поковыряться в "Компоновке данных" - не помогло.

Текст запроса:

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    КлючиАналитикиУчетаЗатрат.СчетЗатрат КАК СчетЗатрат
ПОМЕСТИТЬ ВТ_Счета
ИЗ
    ВТ_Рег КАК ВТ_Рег
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаЗатрат КАК КлючиАналитикиУчетаЗатрат
        ПО ВТ_Рег.АналитикаУчетаЗатратСчетЗатрат = КлючиАналитикиУчетаЗатрат.СчетЗатрат

СГРУППИРОВАТЬ ПО
    КлючиАналитикиУчетаЗатрат.СчетЗатрат
;

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

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Суммы.Счет КАК Счет,
    ВТ_Суммы.Организация КАК Организация,
    ВТ_Суммы.Подразделение КАК Подразделение,
    ВТ_Суммы.Субконто1 КАК Субконто1,
    ВТ_Суммы.Субконто2 КАК Субконто2,
    ВТ_Суммы.Субконто3 КАК Субконто3,
    СУММА(ВТ_Суммы.СуммаОборотДт) КАК СуммаОборотДт,
    СУММА(ВТ_Суммы.СуммаРаздельногоУчетаНДС) КАК СуммаРаздельногоУчетаНДС
ПОМЕСТИТЬ ВТ_Итог
ИЗ
    ВТ_Суммы КАК ВТ_Суммы

СГРУППИРОВАТЬ ПО
    ВТ_Суммы.Организация,
    ВТ_Суммы.Подразделение,
    ВТ_Суммы.Субконто1,
    ВТ_Суммы.Субконто2,
    ВТ_Суммы.Субконто3,
    ВТ_Суммы.Счет
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Итог.Счет КАК Счет,
    ВТ_Итог.Организация КАК Организация,
    ВТ_Итог.Подразделение КАК Подразделение,
    ВТ_Итог.Субконто1 КАК Субконто1,
    ВТ_Итог.Субконто2 КАК Субконто2,
    ВТ_Итог.Субконто3 КАК Субконто3,
    ВТ_Итог.СуммаОборотДт КАК СуммаОборотДт,
    ВТ_Итог.СуммаРаздельногоУчетаНДС КАК СуммаРаздельногоУчетаНДС
{ВЫБРАТЬ
    Счет.*,
    Организация.*,
    Подразделение.*,
    Субконто1.*,
    Субконто2.*,
    Субконто3.*,
    СуммаОборотДт,
    СуммаРаздельногоУчетаНДС}
ИЗ
    ВТ_Итог КАК ВТ_Итог
ГДЕ
    ВТ_Итог.СуммаОборотДт <> ВТ_Итог.СуммаРаздельногоУчетаНДС
{ГДЕ
    ВТ_Итог.Счет.*,
    ВТ_Итог.Организация.*,
    ВТ_Итог.Подразделение.*,
    ВТ_Итог.Субконто1.*,
    ВТ_Итог.Субконто2.*,
    ВТ_Итог.Субконто3.*,
    (ВТ_Итог.СуммаРаздельногоУчетаНДС <> ВТ_Итог.СуммаОборотДт) КАК ОтборПоСумме}
1 IvanGorbunov
 
18.12.18
11:03
Это чистый СКД, либо в форме или в модуле есть какой-то код?
2 toypaul
 
гуру
18.12.18
11:06
не надо заключать это условие в фигурные скобки
3 toypaul
 
гуру
18.12.18
11:07
если условие в скобках {}, то при невыбранном поле (хотя бы одном) из условия, условия срабатывать не будет. считается, что такое условие не является обязательным. отбор по периоду например так делается.
4 DenYuliya
 
18.12.18
11:18
Вот так выглядит результат отчета, если отчет формируется со всеми полями, группировками по всем полям. Условие работает. Результат правильный.
https://a.radikal.ru/a42/1812/9c/0e4db132007e.png

Настройки при этом такие:
https://d.radikal.ru/d27/1812/a6/2b8d8ec6708f.png

Когда меняешь состав выбранных полей вот на такие:
https://d.radikal.ru/d39/1812/ee/f4d938fafebd.png

меняется состав полей группировки и перестает работать условие:
5 DenYuliya
 
18.12.18
11:19
6 DenYuliya
 
18.12.18
11:20
(1) чистый СКД

(3) спасибо, сейчас попробую. Но через ГДЕ, а не через ИМЕЮЩИЕ не работало точно
7 DenYuliya
 
18.12.18
11:24
(3) Условие:

ИМЕЮЩИЕ
    СУММА(ВТ_Суммы.СуммаРаздельногоУчетаНДС) <> СУММА(ВТ_Суммы.СуммаОборотДт)

Поля "ВТ_Суммы.СуммаРаздельногоУчетаНДС" и "ВТ_Суммы.СуммаОборотДт" из выборки я не убираю, они не меняются.

Меняется состав полей:
ВТ_Суммы.Счет КАК Счет,
ВТ_Суммы.Организация КАК Организация,
ВТ_Суммы.Подразделение КАК Подразделение,
ВТ_Суммы.Субконто1 КАК Субконто1,
ВТ_Суммы.Субконто2 КАК Субконто2,
ВТ_Суммы.Субконто3 КАК Субконто3,

например, я оставляю только:
ВТ_Суммы.Счет КАК Счет,
ВТ_Суммы.СуммаРаздельногоУчетаНДС,
ВТ_Суммы.СуммаОборотДт

А поля "ВТ_Суммы.Счет КАК Счет"  в условии ведь нет.

Или я неправильно поняла фразу ""то при невыбранном поле (хотя бы одном) из условия"?
8 DenYuliya
 
18.12.18
11:27
(3)
Изначально код запроса был таким:
ВЫБРАТЬ
    НДСРаздельныйУчетОбороты.АналитикаУчетаЗатрат.СчетЗатрат КАК АналитикаУчетаЗатратСчетЗатрат
ПОМЕСТИТЬ ВТ_Рег
ИЗ
    РегистрНакопления.НДСРаздельныйУчет.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК НДСРаздельныйУчетОбороты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    КлючиАналитикиУчетаЗатрат.СчетЗатрат КАК СчетЗатрат
ПОМЕСТИТЬ ВТ_Счета
ИЗ
    ВТ_Рег КАК ВТ_Рег
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаЗатрат КАК КлючиАналитикиУчетаЗатрат
        ПО ВТ_Рег.АналитикаУчетаЗатратСчетЗатрат = КлючиАналитикиУчетаЗатрат.СчетЗатрат

СГРУППИРОВАТЬ ПО
    КлючиАналитикиУчетаЗатрат.СчетЗатрат
;

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

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Суммы.Счет КАК Счет,
    ВТ_Суммы.Организация КАК Организация,
    ВТ_Суммы.Подразделение КАК Подразделение,
    ВТ_Суммы.Субконто1 КАК Субконто1,
    ВТ_Суммы.Субконто2 КАК Субконто2,
    ВТ_Суммы.Субконто3 КАК Субконто3,
    СУММА(ВТ_Суммы.СуммаОборотДт) КАК СуммаОборотДт,
    СУММА(ВТ_Суммы.СуммаРаздельногоУчетаНДС) КАК СуммаРаздельногоУчетаНДС
ИЗ
    ВТ_Суммы КАК ВТ_Суммы

СГРУППИРОВАТЬ ПО
    ВТ_Суммы.Организация,
    ВТ_Суммы.Подразделение,
    ВТ_Суммы.Субконто1,
    ВТ_Суммы.Субконто2,
    ВТ_Суммы.Субконто3,
    ВТ_Суммы.Счет

ИМЕЮЩИЕ
    СУММА(ВТ_Суммы.СуммаРаздельногоУчетаНДС) <> СУММА(ВТ_Суммы.СуммаОборотДт)

Условие не в фигурных скобках. Это вы имеете в виду? Ну вот оно не работает.
После этого я начала извращаться с автозаполнением и пиханием условий и полей в компоновку.
9 DenYuliya
 
18.12.18
11:30
(1) я бы даже сказала "Собранное и оттестированное в консоли, а потом запихнутое в СКД" ))))
10 toypaul
 
гуру
18.12.18
11:31
для начала убрать из условий все фигурные скобки. а почему условие не работает это уже совершенно другой разговор.
11 toypaul
 
гуру
18.12.18
11:33
суммы заключить в ЕСТЬNULL(

почему-то для субконто это сделано, а для сумм нет. может тогда и условие заработает как надо
12 DenYuliya
 
18.12.18
11:34
(10) в (8) (это изначальная "редакция") без фигурных скобок...
13 DenYuliya
 
18.12.18
11:46
(11) Не помогло...

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    КлючиАналитикиУчетаЗатрат.СчетЗатрат КАК СчетЗатрат
ПОМЕСТИТЬ ВТ_Счета
ИЗ
    ВТ_Рег КАК ВТ_Рег
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаЗатрат КАК КлючиАналитикиУчетаЗатрат
        ПО ВТ_Рег.АналитикаУчетаЗатратСчетЗатрат = КлючиАналитикиУчетаЗатрат.СчетЗатрат

СГРУППИРОВАТЬ ПО
    КлючиАналитикиУчетаЗатрат.СчетЗатрат
;

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

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Суммы.Счет КАК Счет,
    ВТ_Суммы.Организация КАК Организация,
    ВТ_Суммы.Подразделение КАК Подразделение,
    ВТ_Суммы.Субконто1 КАК Субконто1,
    ВТ_Суммы.Субконто2 КАК Субконто2,
    ВТ_Суммы.Субконто3 КАК Субконто3,
    СУММА(ВТ_Суммы.СуммаОборотДт) КАК СуммаОборотДт,
    СУММА(ВТ_Суммы.СуммаРаздельногоУчетаНДС) КАК СуммаРаздельногоУчетаНДС
ИЗ
    ВТ_Суммы КАК ВТ_Суммы

СГРУППИРОВАТЬ ПО
    ВТ_Суммы.Организация,
    ВТ_Суммы.Подразделение,
    ВТ_Суммы.Субконто1,
    ВТ_Суммы.Субконто2,
    ВТ_Суммы.Субконто3,
    ВТ_Суммы.Счет

ИМЕЮЩИЕ
    СУММА(ВТ_Суммы.СуммаРаздельногоУчетаНДС) <> СУММА(ВТ_Суммы.СуммаОборотДт)
14 DenYuliya
 
18.12.18
11:47
(11) потому что для субконто криво группировалось без ЕСТЬNULL, для Сумм такой проблемы не было.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший