Опять запрос

Тема в разделе "1C и всё что с ней связано", создана пользователем Renat11111, 7 ноя 2009.

  1. Renat11111

    Renat11111 Well-Known Member

    Регистрация:
    20 апр 2008
    Сообщения:
    123
    Симпатии:
    0
    Опять элементарная проблема с запросом. очень туго поддаюсь процессу обучения )))

    из таблицы Документ.ЗарплатаКВыплатеОрганизаций.РаботникиОрганизации КАК Основной нужны мне все сотрудники, а таблицу
    |ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗарплатаКВыплатеОрганизаций.РаботникиОрганизации КАК ЗарплатаВыплачена использую для того чтобы
    получить сумму ВыплаченностьЗарплаты = &Выплачено.
    тоесть имеем например 10 сотрудников с общей суммой 20000
    из них токо у 9 ВыплаченностьЗарплаты = &Выплачено.
    вроде и понимаю я что своим условием соединения отсекаю одного сотрудника у меня выбирает 9 сотрудников
    |И ЗарплатаВыплачена.ВыплаченностьЗарплаты = &Выплачено
    Но ниче придумать не могу.

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

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Почему нельзя исползовать одну таблицу? Если сумму нужно получать только когда зп выплачена, используйте конструкцию "ВЫБОР... КОГДА".
     
  3. tanat

    tanat Well-Known Member

    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    Если я не ошибаюсь, то можно использовать ПРАВОЕ СОЕДИНЕНИЕ
     
  4. puh14

    puh14 Well-Known Member
    1C Team

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

    |ГДЕ Основной.Ссылка = &ДокументСсылка

    | И Основной.СпособВыплаты = &ЧерезБанк
    | И Основной.Банк = &Банк
    | И ЗарплатаВыплачена.Ссылка = &ДокументСсылка

    Что-то я юмора не понял - ты два раза выбираешь данные из одного и того-же документа. Зачем так?

    а режет у тебе скорее всего на ГДЕ ибо левое соединение только null сделать могёт

    | И Основной.Банк = &Банк
    | И ЗарплатаВыплачена.Ссылка = &ДокументСсылка
    | И ЗарплатаВыплачена.СпособВыплаты = &ЧерезБанк

    поскольку сильно подозреваю, что в при отсутствии зарплаты банка у тебя нет

    тебе тогда проще из регистра сведений левым соединением в документ прыгать с условиями на ссылки, банки и т.д.
     
  5. Renat11111

    Renat11111 Well-Known Member

    Регистрация:
    20 апр 2008
    Сообщения:
    123
    Симпатии:
    0
    Ответившим спасибо, уже сам разобрался.
     
  6. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    я бы порекомендовал крайне редко его использовать...
    исходя хотя бы из того, как будет построен план запроса...
     
  7. tanat

    tanat Well-Known Member

    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    А есть существенные отличия? Я всегда считал, что ЛЕВОЕ или ПРАВОЕ соединение - это лишь правило, по которому объединяются 2 таблицы. Если левое - то берутся все колонки из таблицы, указанной слева от записи СОЕДИНЕНИЕ, если ПРАВОЕ- то из той, что справа?
    Все зависит от порядка указания таблиц...
    Или может я не понял сути замечания? :)
     
  8. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Ну представьте себе, что есть объединение... Поясню на примере.

    Допустим имеются 2 таблицы:
    Т1
    Код (Text):
    А  В
    1  123
    2  227
    3  200
    4  222
    Т2
    Код (Text):
    А  В
    1  123
    9  229
    3  200
    7  224
    1  227
    Код (Text):
    select * from t1 left join t2 on t1.a = t2.a
    Получаем следующую таблицу:
    Код (Text):
    т1.а  т1.В  т2.А  Т2.В
    1     123   1     123
    2     227
    3     200   3     200
    4     222
    Код (Text):
    select * from t1 right join t2 on t1.a = t2.a
    Получаем следующую таблицу:
    Код (Text):
    т1.а  т1.В  т2.А  Т2.В
    1     123   1     123
    9     229
    3     200   3     200
    7     224
    1     123   1     227
    И что получается? Делая выборку из Т1, фактически получаем выборку из Т2 с левым соединением с таблицей Т1. Хотя на самом деле требовалась выборка из таблицы Т1.
     
  9. tanat

    tanat Well-Known Member

    Регистрация:
    2 мар 2007
    Сообщения:
    265
    Симпатии:
    0
    Я это и имел ввиду, говоря о порядке таблиц). Особой разницы я все равно не вижу. Если задача позволяет пользоваться ПРАВЫМ и вы понимаете, какой результат в итоге получите - почему бы не воспользоватсья?
     
Загрузка...
Похожие Темы - Опять запрос
  1. vitte
    Ответов:
    10
    Просмотров:
    2.875
  2. sanch
    Ответов:
    5
    Просмотров:
    3.082
  3. NickProstoNick
    Ответов:
    5
    Просмотров:
    2.701
  4. aameno2
    Ответов:
    4
    Просмотров:
    3.117
  5. wowa
    Ответов:
    16
    Просмотров:
    5.462

Поделиться этой страницей