Имя: Пароль:
1C
1С v8
СКД: урезает временную таблицу
0 CaIIIka
 
03.07.25
10:08
Здравствуйте! У меня 1С 8.2.19.130 (УФ). Отчет на СКД. Набор данных "Запрос".

Вчера пол дня мучил сложный отчет, никак не мог понять, что происходит в расчетах. Перекинул все основное в консоль запросов, там все правильно считает. Уже в конце дня убрал в отчете все до минимума ради эксперимента и мягко скажем... ОБАЛДЕЛ!

Создал простейший отчет без привязки к данным БД - ситуация аналогичная.

Пример простого отчета. Запрос:

ВЫБРАТЬ
    "а" КАК Буква,
    "б" КАК Буква2,
    0 КАК Ключ
ПОМЕСТИТЬ Таб

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    "а",
    "б",
    1

ОБЪЕДИНИТЬ

...........

ВЫБРАТЬ
    "а",
    "и",
    1
;

ВЫБРАТЬ
    Таб.Буква,
    Таб.Буква2,
    Таб.Ключ
ИЗ
    Таб КАК Таб


Первая колонка всегда "а". Вторая колонка от "а" до "и". Третья колонка хаотично 1 и 0. На выходе только детальные записи всех полей.

При таком варианте вывода все правильно. На выходе будет табличка:

Буква    Буква2    Ключ
а    б    
а    б    1
а    в    1
а    г    1
а    д    
а    е    
а    ё    
а    ж    1
а    з    1
а    и    1

НО. Если закомментировать вторую колонку, то система выдает:

Буква    Ключ
а    
а    1

Это как вообще понимать??? Я не просил ее выбрать РАЗЛИЧНЫЕ...

Если сгруппировать вывод:

ВЫБРАТЬ
    Таб.Буква,
    Сумма(Таб.Ключ)
ИЗ
    Таб КАК Таб
Сгруппировать по Таб.Буква

Система выдает:

Буква    Ключ
а    1


Это вообще что и как это бороть???
Я понимаю, оптимизация и т.п. НО в данном случае это же полный бред. Мне нужны все строки, а лучше всех их сумма, а не только двух.
1 arsik
 
гуру
03.07.25
10:12
Ну так в СКД выбирается только то что используется, что не используется мимо пролетает
2 1Снеговик
 
гуру
03.07.25
10:17
(1) сам перечитай что ты написал и попробуй еще раз.
1 и 3 колонки используются, и чо.
3 Ильф
 
03.07.25
10:19
ОБЪЕДИНИТЬ - это и есть РАЗЛИЧНЫЕ

ОБЪЕДИНИТЬ ВСЕ тогда пиши
4 Ильф
 
03.07.25
10:19
и СКД тут не причем
5 CaIIIka
 
03.07.25
10:21
(1) Как быть-то? Я понимаю при выводе. Но это же на стадии запроса все происходит. Как может быть мимо? Посчитать нужно, а она фильтрует данные. Есть способ заставить ВЫБРАТЬ ВСЕ?
6 Timon1405
 
03.07.25
10:20
СРОЧНО В НОМЕР! ВЫ НЕ ПОВЕРИТЕ! ЧТО СКРЫВАЕТСЯ В ВАШИХ ОТЧЕТАХ? ПРОГРАММИСТ В ШОКЕ!
ТЕОРИЯ ЗАГОВОРА РАЗОБЛАЧЕНА! Вы думали, что программы ДЕЛАЮТ то, что вы им говорите? ХА!
ВНИМАНИЕ! ЭТО КАСАЕТСЯ КАЖДОГО!
Сколько ваших отчетов страдают от этой «оптимизации»? Какие ДАННЫЕ ВЫ ТЕРЯЕТЕ прямо сейчас? Мы продолжаем следить за развитием событий! Следите за новостями! ПОДЕЛИТЕСЬ ЭТОЙ СТАТЬЁЙ, ЧТОБЫ УЗНАЛИ ВСЕ!
7 CaIIIka
 
03.07.25
10:21
(3) Написал же. В таблице на выходе есть все строки.
8 CaIIIka
 
03.07.25
10:22
(6) Че курил?
9 Timon1405
 
03.07.25
10:23
(8) просто ваше сообщение чем-то напомнило такие статьи)

поставьте галку обязательное в роли у полей 1 и 2 и будет вам счастье
10 KJlag
 
03.07.25
10:25
(7) а если добавить "а б 1" еще два раза, то в первом варианте он выводит "а б 1" трижды?
11 CaIIIka
 
03.07.25
10:27
(9) Поставил. Без сгруппировать по-прежнему выдает:

Буква    Ключ
а    
а    1
12 KJlag
 
03.07.25
10:28
13 Мультук
 
гуру
03.07.25
10:40
(9)

А название статьи такое
"Последнюю надежду Надежде подарила правильная Галка.
Услышит ли Надежда Галку и обретёт ли она своё счастье !?"
14 CaIIIka
 
03.07.25
10:30
(10) Задача из временной таблицы:

Буква    Буква2    Ключ
а    б    
а    б    1
а    в    1
а    г    1
а    д    
а    е    
а    ё    
а    ж    1
а    з    1
а    и    1

Получить:

Буква    Ключ
а    6

Ну или хотя бы:

Буква    Ключ
а    
а    1
а    1
а    1
а    
а    
а    
а    1
а    1
а    1
15 Fish
 
гуру
03.07.25
10:31
(3) +100. Автору учить матчасть.
16 CaIIIka
 
03.07.25
10:31
(13) см. (11)
17 Мультук
 
гуру
03.07.25
10:33
(16)

ОБЪЕДИНИТЬ ВСЕ -- сделал ?
Поле "Буква2" -- обязательное сделал ?
18 Timon1405
 
03.07.25
10:39
(14), у меня всё работает. загрузите схему в СКД

<?xml version="1.0" encoding="UTF-8"?>
<DataCompositionSchema xmlns="http://v8.1c.ru/8.1/data-composition-system/schema xmlns:dcscom="http://v8.1c.ru/8.1/data-composition-system/common xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings xmlns:v8="http://v8.1c.ru/8.1/data/core xmlns:v8ui="http://v8.1c.ru/8.1/data/ui xmlns:xs="http://www.w3.org/2001/XMLSchema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
    <dataSource>
        <name>ИсточникДанных1</name>
        <dataSourceType>Local</dataSourceType>
    </dataSource>
    <dataSet xsi:type="DataSetQuery">
        <name>НаборДанных1</name>
        <field xsi:type="DataSetFieldField">
            <dataPath>Буква</dataPath>
            <field>Буква</field>
            <title xsi:type="v8:LocalStringType">
                <v8:item>
                    <v8:lang>ru</v8:lang>
                    <v8:content>Буква</v8:content>
                </v8:item>
            </title>
            <role>
                <dcscom:dimension>true</dcscom:dimension>
                <dcscom:required>true</dcscom:required>
            </role>
            <appearance/>
            <inputParameters/>
        </field>
        <field xsi:type="DataSetFieldField">
            <dataPath>Буква2</dataPath>
            <field>Буква2</field>
            <title xsi:type="v8:LocalStringType">
                <v8:item>
                    <v8:lang>ru</v8:lang>
                    <v8:content>Буква2</v8:content>
                </v8:item>
            </title>
            <role>
                <dcscom:dimension>true</dcscom:dimension>
                <dcscom:required>true</dcscom:required>
            </role>
            <appearance/>
            <inputParameters/>
        </field>
        <field xsi:type="DataSetFieldField">
            <dataPath>Ключ</dataPath>
            <field>Ключ</field>
            <title xsi:type="v8:LocalStringType">
                <v8:item>
                    <v8:lang>ru</v8:lang>
                    <v8:content>Ключ</v8:content>
                </v8:item>
            </title>
            <appearance/>
            <inputParameters/>
        </field>
        <dataSource>ИсточникДанных1</dataSource>
        <query>ВЫБРАТЬ
    "а" КАК Буква,
    "б" КАК Буква2,
    0 КАК Ключ

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

ВЫБРАТЬ
    "а",
    "б",
    1

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

ВЫБРАТЬ
    "а",
    "в",
    1

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

ВЫБРАТЬ
    "а",
    "г",
    1

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

ВЫБРАТЬ
    "а",
    "д",
    0

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

ВЫБРАТЬ
    "а",
    "е",
    0

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

ВЫБРАТЬ
    "а",
    "ё",
    0

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

ВЫБРАТЬ
    "а",
    "ж",
    1

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

ВЫБРАТЬ
    "а",
    "з",
    1

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

ВЫБРАТЬ
    "а",
    "и",
    1</query>
    </dataSet>
    <totalField>
        <dataPath>Ключ</dataPath>
        <expression>Сумма(Ключ)</expression>
    </totalField>
    <settingsVariant>
        <dcsset:name>Основной</dcsset:name>
        <dcsset:presentation xsi:type="xs:string">Основной</dcsset:presentation>
        <dcsset:settings xmlns:style="http://v8.1c.ru/8.1/data/ui/style xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows
            <dcsset:selection>
                <dcsset:item xsi:type="dcsset:SelectedItemField">
                    <dcsset:field>Буква</dcsset:field>
                </dcsset:item>
                <dcsset:item xsi:type="dcsset:SelectedItemField">
                    <dcsset:field>Ключ</dcsset:field>
                </dcsset:item>
            </dcsset:selection>
            <dcsset:item xsi:type="dcsset:StructureItemGroup">
                <dcsset:order>
                    <dcsset:item xsi:type="dcsset:OrderItemAuto"/>
                </dcsset:order>
                <dcsset:selection>
                    <dcsset:item xsi:type="dcsset:SelectedItemAuto"/>
                </dcsset:selection>
            </dcsset:item>
            <dcsset:item xsi:type="dcsset:StructureItemGroup">
                <dcsset:groupItems>
                    <dcsset:item xsi:type="dcsset:GroupItemField">
                        <dcsset:field>Буква</dcsset:field>
                        <dcsset:groupType>Items</dcsset:groupType>
                        <dcsset:periodAdditionType>None</dcsset:periodAdditionType>
                        <dcsset:periodAdditionBegin xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionBegin>
                        <dcsset:periodAdditionEnd xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionEnd>
                    </dcsset:item>
                </dcsset:groupItems>
                <dcsset:order>
                    <dcsset:item xsi:type="dcsset:OrderItemAuto"/>
                </dcsset:order>
                <dcsset:selection>
                    <dcsset:item xsi:type="dcsset:SelectedItemAuto"/>
                </dcsset:selection>
            </dcsset:item>
        </dcsset:settings>
    </settingsVariant>
</DataCompositionSchema>
19 CaIIIka
 
03.07.25
10:45
(3), (15) Спасибо, учту! В этом примере уже заработало.

На самом деле капец какой-то. В одном наборе данных семь запросов. Запрос с объединить первый. Это для расчета остатков по дням, с последующими средними остатками и коэф.оборачиваемости.
В каждых последующих запросах эта таблица работает исправно. Режет только в шестом по счету запросе, который отчасти является дублем предыдущих, только урезанный.

Тут я и поймался. Я такого не ожидал, что готовая таблица, уже правильно отработавшая в нескольких запросах, в последнем порежется из-за ОБЪЕДИНИТЬ без ВСЕ в самом начале...

Всем еще раз спасибо за помощь! На юмор не реагировал, потому что замудохался с этим отчетом :)

Всем добра!
20 TormozIT
 
гуру
03.07.25
14:00
В конструкторе запроса (ИР) есть флажок для защиты от такого беспредела СКД https://www.hostedredmine.com/issues/998323
Закон Брукера: Даже маленькая практика стоит большой теории.