Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 апр 2024, 13:12

Объединение данных, или помогите правильно составить запрос.

Автор KazakOFF, 14 мая 2014, 09:48

0 Пользователей и 1 гость просматривают эту тему.

KazakOFF

Вот пишу такой запрос



| ВТ_Сотрудники.N КАК N,
               | ВТ_Сотрудники.Табельный_номер_АЭС,
               | ВТ_Сотрудники.Сотрудник,
               | ВТ_Сотрудники.Подразделение,
               | ВТ_Сотрудники.Должность,
               | ВТ_Сотрудники.Дата,
               | ВТ_Сотрудники.Время_входа,
               | ВТ_Сотрудники.Время_выхода,
               | ВТ_Сотрудники.Количество_отработанных_часов,
               | РабочееВремяРаботниковОрганизаций.Сотрудник КАК Сотрудник2,
               | СУММА(РабочееВремяРаботниковОрганизаций.Часов) КАК потабелю,
               | РабочееВремяРаботниковОрганизаций.Период КАК Период1,
               | СУММА(РабочееВремяРаботниковОрганизаций.Часов) - ВТ_Сотрудники.Количество_отработанных_часов КАК Разница
               |ИЗ
               | ВТ_Сотрудники КАК ВТ_Сотрудники
               | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК РабочееВремяРаботниковОрганизаций
               | ПО ВТ_Сотрудники.Дата = РабочееВремяРаботниковОрганизаций.Период
               | И ВТ_Сотрудники.Сотрудник = РабочееВремяРаботниковОрганизаций.Сотрудник.Наименование
               |ГДЕ
               | РабочееВремяРаботниковОрганизаций.Период МЕЖДУ &дата1 И &дата2
               |
               |СГРУППИРОВАТЬ ПО
               | РабочееВремяРаботниковОрганизаций.Сотрудник,
               | РабочееВремяРаботниковОрганизаций.Период,
               | ВТ_Сотрудники.N,
               | ВТ_Сотрудники.Табельный_номер_АЭС,
               | ВТ_Сотрудники.Сотрудник,
               | ВТ_Сотрудники.Подразделение,
               | ВТ_Сотрудники.Должность,
               | ВТ_Сотрудники.Дата,
               | ВТ_Сотрудники.Время_входа,
               | ВТ_Сотрудники.Время_выхода,
               | ВТ_Сотрудники.Количество_отработанных_часов




Выдает все правильно но есть одно но, Сотрудники которые есть в ВТ_Сотрудники.Сотрудник у них нету ДАТЫ и они не ровны РабочееВремяРаботниковОрганизаций.Сотрудник

Но мне нужно что бы на выходе они были.

Хотле сделать два запроса вот так




    | ВТ_Сотрудники.N КАК N,
               | ВТ_Сотрудники.Табельный_номер_АЭС,
               | ВТ_Сотрудники.Сотрудник,
               | ВТ_Сотрудники.Подразделение,
               | ВТ_Сотрудники.Должность,
               | ВТ_Сотрудники.Дата,
               | ВТ_Сотрудники.Время_входа,
               | ВТ_Сотрудники.Время_выхода,
               | ВТ_Сотрудники.Количество_отработанных_часов,
               | РабочееВремяРаботниковОрганизаций.Сотрудник КАК Сотрудник2,
               | СУММА(РабочееВремяРаботниковОрганизаций.Часов) КАК потабелю,
               | РабочееВремяРаботниковОрганизаций.Период КАК Период1,
               | СУММА(РабочееВремяРаботниковОрганизаций.Часов) - ВТ_Сотрудники.Количество_отработанных_часов КАК Разница
               |ИЗ
               | ВТ_Сотрудники КАК ВТ_Сотрудники
               | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК РабочееВремяРаботниковОрганизаций
               | ПО ВТ_Сотрудники.Дата = РабочееВремяРаботниковОрганизаций.Период
               | И ВТ_Сотрудники.Сотрудник = РабочееВремяРаботниковОрганизаций.Сотрудник.Наименование
               |ГДЕ
               | РабочееВремяРаботниковОрганизаций.Период МЕЖДУ &дата1 И &дата2
               |
               |СГРУППИРОВАТЬ ПО
               | РабочееВремяРаботниковОрганизаций.Сотрудник,
               | РабочееВремяРаботниковОрганизаций.Период,
               | ВТ_Сотрудники.N,
               | ВТ_Сотрудники.Табельный_номер_АЭС,
               | ВТ_Сотрудники.Сотрудник,
               | ВТ_Сотрудники.Подразделение,
               | ВТ_Сотрудники.Должность,
               | ВТ_Сотрудники.Дата,
               | ВТ_Сотрудники.Время_входа,
               | ВТ_Сотрудники.Время_выхода,
               | ВТ_Сотрудники.Количество_отработанных_часов
               |
               |ОБЪЕДИНИТЬ
               |
               |ВЫБРАТЬ
               | ВТ_Сотрудники.N,
               | ВТ_Сотрудники.Табельный_номер_АЭС,
               | ВТ_Сотрудники.Сотрудник,
               | ВТ_Сотрудники.Подразделение,
               | ВТ_Сотрудники.Должность,
               | ВТ_Сотрудники.Дата,
               | ВТ_Сотрудники.Время_входа,
               | ВТ_Сотрудники.Время_выхода,
               | ВТ_Сотрудники.Количество_отработанных_часов,
               | NULL,
               | NULL,
               | NULL,
               | NULL
               |ИЗ
               | ВТ_Сотрудники КАК ВТ_Сотрудники";




Но на выходе они не схлопываются потому что есть NULL

Может кто что подскажет?

mixqn

Первое: что за бредовая связь -
И ВТ_Сотрудники.Сотрудник = РабочееВремяРаботниковОрганизаций.Сотрудник.Наименование
???
у вас во временной таблице ВТ_Сотрудники.Сотрудник наименование? добавьте тогда еще 1 колонку со ссылкой и соединяйте по ссылке. по наименованию не делайте.

Второе и главное: я не понял ваш вопрос.
Цитата: KazakOFF от 14 мая 2014, 09:48Сотрудники которые есть в ВТ_Сотрудники.Сотрудник у них нету ДАТЫ и они не ровны РабочееВремяРаботниковОрганизаций.Сотрудник
это как понять? попробуйте написать тоже самое другими словами.

KazakOFF

Цитата: mixqn от 14 мая 2014, 10:03
Первое: что за бредовая связь -
И ВТ_Сотрудники.Сотрудник = РабочееВремяРаботниковОрганизаций.Сотрудник.Наименование
???
у вас во временной таблице ВТ_Сотрудники.Сотрудник наименование? добавьте тогда еще 1 колонку со ссылкой и соединяйте по ссылке. по наименованию не делайте.

Второе и главное: я не понял ваш вопрос.
Цитата: KazakOFF от 14 мая 2014, 09:48Сотрудники которые есть в ВТ_Сотрудники.Сотрудник у них нету ДАТЫ и они не ровны РабочееВремяРаботниковОрганизаций.Сотрудник
это как понять? попробуйте написать тоже самое другими словами.

То есть у меня есть список Сотрудников который я загружаю

например 

БЕЛОВ 20,04,2010    7 часов
ПЫШКИН 21,04,2010   4 Часов
Кузнеков 20,04,2010 5 Часов


Но уже в табеле в 1С ПЫШКИНА с Датой 21,04,2010 нету

Тогда на выходе его не будет, но мне нужно что-бы он был.

Например так

БЕЛОВ 20,04,2010    7 часов    6 Часов по табелю
ПЫШКИН 21,04,2010   4 Часов
Кузнеков 20,04,2010 5 Часов    4 Часа по табелю

а у меня сейчас так

БЕЛОВ 20,04,2010    7 часов    6 Часов по табелю
Кузнеков 20,04,2010 5 Часов    4 Часа по табелю


mixqn

Цитата: KazakOFF от 14 мая 2014, 09:48|ГДЕ
                  |   РабочееВремяРаботниковОрганизаций.Период МЕЖДУ &дата1 И &дата2
вот это вам мешает.
зачем это условие???
если вам к списку сотрудников слева надо присоединить табель, зачем еще отбор по датам дополнительный?
если отбор все таки чем-то оправдан, то вам его надо вынести либо в условия соединения (то есть вместо слова ГДЕ написать И), либо вынести табель в подзапрос, внутри подзапроса наложить условие и потом уже соединяться с вашим списком


KazakOFF

Цитата: mixqn от 14 мая 2014, 10:32
Цитата: KazakOFF от 14 мая 2014, 09:48|ГДЕ
                  |   РабочееВремяРаботниковОрганизаций.Период МЕЖДУ &дата1 И &дата2
вот это вам мешает.
зачем это условие???
если вам к списку сотрудников слева надо присоединить табель, зачем еще отбор по датам дополнительный?
если отбор все таки чем-то оправдан, то вам его надо вынести либо в условия соединения (то есть вместо слова ГДЕ написать И), либо вынести табель в подзапрос, внутри подзапроса наложить условие и потом уже соединяться с вашим списком

Мда.... спасибо помогло И

mixqn

Цитата: KazakOFF от 14 мая 2014, 10:45Мда....
На самом деле логика проста, понятна и прозрачна. Надо понять ее 1 раз и дальше будет проще.
Что такое условия под ГДЕ? Это условия, которые накладываются на полученную выше выборку. Другими словами, вы сначала получили таблицу
Цитата: KazakOFF от 14 мая 2014, 10:20
БЕЛОВ 20,04,2010    7 часов    6 Часов по табелю
ПЫШКИН 21,04,2010   4 Часов
Кузнеков 20,04,2010 5 Часов    4 Часа по табелю
а потом на нее наложили ваше условие по дате. как вы считаете, строка
Цитата: KazakOFF от 14 мая 2014, 10:20
ПЫШКИН 21,04,2010   4 Часов
подходит под это условие?
не дожидаясь вашего ответа отвечу сам: НЕТ, потому что там NULL вместо даты, по которой у вас условие, стало быть эта строка из выборки исключается.

Что вы сделали, изменив ГДЕ на И? Вы перенесли условие из общего ко всей выборке к условию соединения, то есть другими словами вышеописанная строка исключена не будет.
Как-то так в общем...
Надеюсь примерно понятна суть.

P.S. с юбилеем меня - 1000-е сообщение :zebzdr:

alex0402

Что бы были сотрудники в выборке при отсутствии в РабочееВремяРаботниковОрганизаций нужно добавить связь со справочником Сотрудники и Выводить сотрудника от туда в итог.
Спасибо за Сказать спасибо

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск