Имя: Пароль:
1C
1С v8
Что не так с соединением в запросе?
0 twerp
 
04.12.19
10:08
Не сходится сумма по полю ОбщийДоходПоСпециальности  с суммой полученной в предыдущем запросе.
Проверяю просто:
Если удалить из последнего запроса  соединение с виртуальной таблицей РегистраСведений.БиТ_НагрузкаПоСпециальностям
Сумма поля ОбщийДоходПоСпециальности  больше(такая же как на предыдущем этапе). Добавляю Левое соединение как в примере ниже - сумма поля ОбщийДоходПоСпециальности становится меньше.

Пробовал сделать отдельный запрос в виртуальной таблице, поместить ее во временную таблицу и с ней соединять. Без разницы.
Пробовал Полное соединение - аналогично, сумма меньше.

Вопрос: При левом соединении все строки первой таблицы (ДоходПоСпециальностям ) должны попадать, т.е. сумма не должна меняться?
Пробовал на платформах 8.3.16.1063 и 8.3.13.1513.  Конфигурация БГУ 1.0 + БИТ УФГУ


ВЫБРАТЬ
    БиТ_СтудентыПоСпециальностямОрловский.Специальность,
    БиТ_СтудентыПоСпециальностямОрловский.ФормаОбучения,
    БиТ_СтудентыПоСпециальностямОрловский.УровеньОбразования,
    БиТ_СтудентыПоСпециальностямОрловский.КФО,
    БиТ_СтудентыПоСпециальностямОрловский.ЦФО,
    СУММА(ВЫБОР
            КОГДА БиТ_СтудентыПоСпециальностямОрловский.Курс = 1
                ТОГДА БиТ_СтудентыПоСпециальностямОрловский.КоличествоСтудентов
            ИНАЧЕ 0
        КОНЕЦ) КАК КоличествоСтудентовПервогоКурса,
    СУММА(ВЫБОР
            КОГДА БиТ_СтудентыПоСпециальностямОрловский.Курс = 2
                ТОГДА БиТ_СтудентыПоСпециальностямОрловский.КоличествоСтудентов
            ИНАЧЕ 0
        КОНЕЦ) КАК КоличествоСтудентовВторогоКурса,
    СУММА(ВЫБОР
            КОГДА БиТ_СтудентыПоСпециальностямОрловский.Курс = 3
                ТОГДА БиТ_СтудентыПоСпециальностямОрловский.КоличествоСтудентов
            ИНАЧЕ 0
        КОНЕЦ) КАК КоличествоСтудентовТретьегоКурса,
    СУММА(ВЫБОР
            КОГДА БиТ_СтудентыПоСпециальностямОрловский.Курс = 4
                ТОГДА БиТ_СтудентыПоСпециальностямОрловский.КоличествоСтудентов
            ИНАЧЕ 0
        КОНЕЦ) КАК КоличествоСтудентовЧетвертогоКурса,
    СУММА(ВЫБОР
            КОГДА БиТ_СтудентыПоСпециальностямОрловский.Курс = 5
                ТОГДА БиТ_СтудентыПоСпециальностямОрловский.КоличествоСтудентов
            ИНАЧЕ 0
        КОНЕЦ) КАК КоличествоСтудентовПятогоКурса,
    СУММА(ВЫБОР
            КОГДА БиТ_СтудентыПоСпециальностямОрловский.Курс = 6
                ТОГДА БиТ_СтудентыПоСпециальностямОрловский.КоличествоСтудентов
            ИНАЧЕ 0
        КОНЕЦ) КАК КоличествоСтудентовШестогоКурса,
    БиТ_СтудентыПоСпециальностямОрловский.ГруппаУровнейОбразования
ПОМЕСТИТЬ СтудентыПоСпециальностям
ИЗ
    РегистрСведений.БиТ_СтудентыПоСпециальностямОрловский КАК БиТ_СтудентыПоСпециальностямОрловский
ГДЕ
    БиТ_СтудентыПоСпециальностямОрловский.Период МЕЖДУ &ПериодНачало И &Период

СГРУППИРОВАТЬ ПО
    БиТ_СтудентыПоСпециальностямОрловский.Специальность,
    БиТ_СтудентыПоСпециальностямОрловский.ФормаОбучения,
    БиТ_СтудентыПоСпециальностямОрловский.УровеньОбразования,
    БиТ_СтудентыПоСпециальностямОрловский.КФО,
    БиТ_СтудентыПоСпециальностямОрловский.ЦФО,
    БиТ_СтудентыПоСпециальностямОрловский.ГруппаУровнейОбразования
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    БиТ_СтоимостьОбученияОрловский.Период,
    БиТ_СтоимостьОбученияОрловский.Регистратор,
    БиТ_СтоимостьОбученияОрловский.НомерСтроки,
    БиТ_СтоимостьОбученияОрловский.Активность,
    БиТ_СтоимостьОбученияОрловский.Специальность,
    БиТ_СтоимостьОбученияОрловский.ФормаОбучения,
    БиТ_СтоимостьОбученияОрловский.УровеньОбразования,
    БиТ_СтоимостьОбученияОрловский.ГруппаУровнейОбразования,
    БиТ_СтоимостьОбученияОрловский.Сумма1Курс,
    БиТ_СтоимостьОбученияОрловский.Сумма2Курс,
    БиТ_СтоимостьОбученияОрловский.Сумма3Курс,
    БиТ_СтоимостьОбученияОрловский.Сумма4Курс,
    БиТ_СтоимостьОбученияОрловский.Сумма5Курс,
    БиТ_СтоимостьОбученияОрловский.Сумма6Курс
ПОМЕСТИТЬ СтоимостьОбученияВыбранОдинГод
ИЗ
    РегистрСведений.БиТ_СтоимостьОбученияОрловский КАК БиТ_СтоимостьОбученияОрловский
ГДЕ
    БиТ_СтоимостьОбученияОрловский.Период МЕЖДУ &ПериодНачало И &Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    СтудентыПоСпециальностям.КФО,
    СтудентыПоСпециальностям.ФормаОбучения,
    СтудентыПоСпециальностям.УровеньОбразования,
    СУММА(СтоимостьОбученияВыбранОдинГод.Сумма1Курс * СтудентыПоСпециальностям.КоличествоСтудентовПервогоКурса + СтоимостьОбученияВыбранОдинГод.Сумма2Курс * СтудентыПоСпециальностям.КоличествоСтудентовВторогоКурса + СтоимостьОбученияВыбранОдинГод.Сумма3Курс * СтудентыПоСпециальностям.КоличествоСтудентовТретьегоКурса + СтоимостьОбученияВыбранОдинГод.Сумма4Курс * СтудентыПоСпециальностям.КоличествоСтудентовЧетвертогоКурса + СтоимостьОбученияВыбранОдинГод.Сумма5Курс * СтудентыПоСпециальностям.КоличествоСтудентовПятогоКурса + СтоимостьОбученияВыбранОдинГод.Сумма6Курс * СтудентыПоСпециальностям.КоличествоСтудентовШестогоКурса) КАК ОбщийДоходПоСпециальности,
    СтудентыПоСпециальностям.Специальность
ПОМЕСТИТЬ ДоходПоСпециальностям
ИЗ
    СтудентыПоСпециальностям КАК СтудентыПоСпециальностям
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ СтоимостьОбученияВыбранОдинГод КАК СтоимостьОбученияВыбранОдинГод
        ПО СтудентыПоСпециальностям.Специальность = СтоимостьОбученияВыбранОдинГод.Специальность
            И СтудентыПоСпециальностям.ФормаОбучения = СтоимостьОбученияВыбранОдинГод.ФормаОбучения
            И СтудентыПоСпециальностям.УровеньОбразования = СтоимостьОбученияВыбранОдинГод.УровеньОбразования
            И СтудентыПоСпециальностям.ГруппаУровнейОбразования = СтоимостьОбученияВыбранОдинГод.ГруппаУровнейОбразования

СГРУППИРОВАТЬ ПО
    СтудентыПоСпециальностям.Специальность,
    СтудентыПоСпециальностям.КФО,
    СтудентыПоСпециальностям.ФормаОбучения,
    СтудентыПоСпециальностям.УровеньОбразования
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДоходПоСпециальностям.Специальность КАК Специальность,
    БиТ_НагрузкаПоСпециальностямСрезПоследних.ЦФО КАК ЦФО,
    БиТ_НагрузкаПоСпециальностямСрезПоследних.КоэффициентВклада КАК КоэффициентВклада,
    ДоходПоСпециальностям.ОбщийДоходПоСпециальности КАК ОбщийДоходПоСпециальности,
    ДоходПоСпециальностям.КФО,
    ДоходПоСпециальностям.ФормаОбучения,
    ДоходПоСпециальностям.УровеньОбразования,
    ДоходПоСпециальностям.Специальность.Код
ИЗ
    ДоходПоСпециальностям КАК ДоходПоСпециальностям
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.БиТ_НагрузкаПоСпециальностям.СрезПоследних(&Период, ) КАК БиТ_НагрузкаПоСпециальностямСрезПоследних
        ПО ДоходПоСпециальностям.Специальность = БиТ_НагрузкаПоСпециальностямСрезПоследних.Специальность
1 sevod
 
04.12.19
10:49
(0) "Вопрос: При левом соединении все строки первой таблицы (ДоходПоСпециальностям ) должны попадать, т.е. сумма не должна меняться?"
По идее да. С левого попадает все, с правого если нет то NULL. А как проверяешь сумму "ОбщийДоходПоСпециальности"? Калькулятором? Или в отчете потом?
Засунь в консоль запросов где временные таблицы показывает. Можешь там дополнительные временные таблицы ваять для тестов, где будет количество строк показывать, сумму и т.д. В самой консоли запросов анализируй.
2 twerp
 
04.12.19
11:11
Проверяю по разному. Работаю с Инструментами разработчика, кнопка "показывать подвал с итогами".  Перенес в Excel, дабы убедится.

еще интересней.
из последнего запроса сделал виртуальную таблицу, и на следующем этапе удалил из нее поля регистра сведений и вуаля, сумма опять верная.
3 pasha_d
 
04.12.19
12:10
Попробуй числовые значения на Null - естьnull(твоеполе, 0)
4 twerp
 
04.12.19
14:26
(3) Попробовал. Каждому числовому значения установил проверку естьnull(). Не помогло.

Буду соединять в цикле.
5 Ёпрст
 
04.12.19
14:55
(0) это же не весь текст запроса?
6 dezss
 
04.12.19
14:59
Сумма может стать больше. Меньше - как-то врятли.
Ты уверен, что она меньше, а не больше?
А количество строк изменяется?
7 Ёпрст
 
04.12.19
15:01
(6) меньше, легко.
ТС забыл показать условие в этом запросе.
8 twerp
 
04.12.19
15:18
(5) Это весь запрос целиком. Законченная логическая единица. Дальше результат записывается в табличную часть.
(7) Запрос не имеет отборов, условий.
9 twerp
 
04.12.19
15:23
(6) Уверен что сумма стала меньше.
До соединения с регистром сведений 40 строк, Сумма 140 055 527
После соединения 371 строка, Сумма 1 387 583 676
Соединение как вы поняли один ко многим.
10 twerp
 
04.12.19
15:31
Замылен глаз, спасибо.
11 inkvizitr
 
04.12.19
15:34
до соединения у тебя 40 строк а после соединения 371, а в итоге сколько у тебя записей то должно быть?
12 inkvizitr
 
04.12.19
15:35
если ты соединяешь левым соединением и с права будут две записи относится к одной левой то у тебя появится вместо одной строки две
13 twerp
 
04.12.19
15:36
(11) 140 млн. мне казались большим числом чем 1387 млн.
14 inkvizitr
 
04.12.19
15:36
пример
Петров 170р
Петров 240р

где петров это одна запись, если 170+240 должно относится к петрову, то группируй лучше
15 inkvizitr
 
04.12.19
15:58
(13) вот твои выходные поля из запроса, в каком именно из них у тебя рисуется 140 миллионов

ДоходПоСпециальностям.Специальность КАК Специальность,
    БиТ_НагрузкаПоСпециальностямСрезПоследних.ЦФО КАК ЦФО,
    БиТ_НагрузкаПоСпециальностямСрезПоследних.КоэффициентВклада КАК КоэффициентВклада,
    ДоходПоСпециальностям.ОбщийДоходПоСпециальности КАК ОбщийДоходПоСпециальности,
    ДоходПоСпециальностям.КФО,
    ДоходПоСпециальностям.ФормаОбучения,
    ДоходПоСпециальностям.УровеньОбразования,
    ДоходПоСпециальностям.Специальность.Код

ОбщийДоходПоСпециальности??
16 twerp
 
04.12.19
16:05
(15)   да это поле ОбщийДоходПоСпециальности
СУММА(СтоимостьОбученияВыбранОдинГод.Сумма1Курс * СтудентыПоСпециальностям.КоличествоСтудентовПервогоКурса + СтоимостьОбученияВыбранОдинГод.Сумма2Курс * СтудентыПоСпециальностям.КоличествоСтудентовВторогоКурса + СтоимостьОбученияВыбранОдинГод.Сумма3Курс * СтудентыПоСпециальностям.КоличествоСтудентовТретьегоКурса + СтоимостьОбученияВыбранОдинГод.Сумма4Курс * СтудентыПоСпециальностям.КоличествоСтудентовЧетвертогоКурса + СтоимостьОбученияВыбранОдинГод.Сумма5Курс * СтудентыПоСпециальностям.КоличествоСтудентовПятогоКурса + СтоимостьОбученияВыбранОдинГод.Сумма6Курс * СтудентыПоСпециальностям.КоличествоСтудентовШестогоКурса) КАК ОбщийДоходПоСпециальности

Все время ориентировался на это поле ОбщийДоходПоСпециальности. Считал его сумму и не мог понять почему меньше?
После соединения с регистром сведений получалось 371 строка. и сумма по полю ОбщийДоходПоСпециальности получалась 1387млн.
Запрос отрабатывал правильно. 140 млн. мне казались большим числом чем 1387 млн.
17 inkvizitr
 
04.12.19
16:10
До соединения с регистром сведений 40 строк, Сумма 140 055 527
После соединения 371 строка, Сумма 1 387 583 676

по моему 1 387 583 676 намного больше чем 140 055 527
18 inkvizitr
 
04.12.19
16:12
1. я ничего не понял, у тебя раньше был 1.3 миллиарда рублей а потом стало 140 миллионов
2. У тебя было 140 миллионов, а потом стало 1.3 миллиарда
19 inkvizitr
 
04.12.19
16:12
(16) если стал 1.3 миллиарда, то стало понятно т.к. количество записей увеличилось
20 inkvizitr
 
04.12.19
16:12
все исходит из того как я писал выше (12) (14)
21 twerp
 
04.12.19
16:13
(17)

Все верно.
написал 9 сообщение. Перечитал, понял что ошибался все  это время и в 10 сообщении отписался: Замылен глаз, спасибо.

Еще раз всем спасибо!
22 inkvizitr
 
04.12.19
16:15
никогда раньше не слышал такого выражения "Замылен глаз", как мы должны догадаться, что эта фраза означает, что вы во всем разобрались?
23 dezss
 
05.12.19
09:18
(22) ого...не думал, что встречу такого человека в русскоязычном сегменте инета)))
Ошибка? Это не ошибка, это системная функция.