Вход | Регистрация

1С:Предприятие ::

Метки: 

Связать РС по периодам

Я
   егаис
 
29.08.18 - 13:12
Не могу вспомнить, как реализовать такое
Есть запрос
ВЫБРАТЬ
            ОтработанноеВремяПоСотрудникамОбороты.Сотрудник КАК Сотрудник,
            ОтработанноеВремяПоСотрудникамОбороты.Период КАК Период,
            ОтработанноеВремяПоСотрудникамОбороты.ОплаченоДнейОборот
        ИЗ
            РегистрНакопления.ОтработанноеВремяПоСотрудникам.Обороты(
                    ,
                    &КонецПериода,
                    Месяц,
                    Организация = &Организация
                        И Начисление = &Начисление
                        И Сотрудник = &Сотрудник) КАК ОтработанноеВремяПоСотрудникамОбороты

Формируется таблица с отработкой по каждому месяцу. Надо связать левым соединением с  РС "графики работы сотрудников" на каждый месяц .
Должны получить
сотрудник / период / график / ОтработаноДней
 
 
   егаис
 
1 - 29.08.18 - 13:12
поправьте тему :)
"Связать *"
   Buster007
 
2 - 29.08.18 - 13:13
и какой же график работы ты выберешь, если у сотрудника их несколько?
   егаис
 
3 - 29.08.18 - 13:15
(2) на конец каждого месяца
   Buster007
 
4 - 29.08.18 - 13:40
не пойму, тогда в чем вопрос?) срез последних по графику на каждый месяц не можешь получить?
   егаис
 
5 - 29.08.18 - 13:51
(4) Ты полагаешь, что это так просто? :)
   егаис
 
6 - 29.08.18 - 13:52
Строится ВТ по РС
связывается с основной таблицей по сотруднику и период >= Периоду ВТ.
это в теории
   егаис
 
7 - 29.08.18 - 14:01
ВЫБРАТЬ
    ГрафикРаботыСотрудников.Период КАК Период,
    ГрафикРаботыСотрудников.Сотрудник КАК Сотрудник,
    ГрафикРаботыСотрудников.ГрафикРаботы КАК ГрафикРаботы
ПОМЕСТИТЬ ГрафикиСотрудников
ИЗ
    РегистрСведений.ГрафикРаботыСотрудников КАК ГрафикРаботыСотрудников
ГДЕ
    ГрафикРаботыСотрудников.ГоловнаяОрганизация = &ГоловнаяОрганизация
    И ГрафикРаботыСотрудников.Сотрудник = &Сотрудник
;

////////////////////////////////////////////////////////////////////////////////

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


пните, если неправ
Условие на сотрудника временное, для теста
   егаис
 
8 - 29.08.18 - 14:03
некорректный модуль, если 
ОтработанноеВремяПоСотрудникамОбороты.Период >= ГрафикиСотрудников.Период 
более одной записи.


блин, кто примером кинет?
   егаис
 
9 - 29.08.18 - 14:05
закрываем, нашел пример 
ВЫБРАТЬ
   Таб1.СсылкаДок,
   Таб1.ДатаДок,
   Таб1.ВалютаДок,
   Таб2.Курс
ИЗ
   (ВЫБРАТЬ
    ЗаказПокупателя.Ссылка КАК СсылкаДок,
    ЗаказПокупателя.Дата КАК ДатаДок,
    ЗаказПокупателя.ВалютаДокумента КАК ВалютаДок,
    МАКСИМУМ(Валюты.Период) КАК ПериодДок
   ИЗ
    Документ.ЗаказПокупателя КАК ЗаказПокупателя
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК Валюты
      ПО Валюты.Период <= ЗаказПокупателя.Дата И 
      Валюты.Валюта = ЗаказПокупателя.ВалютаДокумента
   СГРУППИРОВАТЬ ПО
    ЗаказПокупателя.Ссылка) КАК Таб1
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК Таб2
    ПО Таб1.ПериодДок = Таб2.Период И Таб1.ВалютаДок = Таб2.Валюта
   Buster007
 
10 - 29.08.18 - 14:26
(8) я никак не подозревал, что за 12 лет ты не научился делать срез самостоятельно
 
 Рекламное место пустует
   егаис
 
11 - 29.08.18 - 14:27
(10) ты не понял задачи
вот решение, может кому пригодится

ВЫБРАТЬ
    Таб1.Сотрудник КАК Сотрудник,
    Таб1.ПериодДни КАК Период,
    Таб1.ОплаченоДнейОборот КАК ОплаченоДнейОборот,
    Таб2.ГрафикРаботы КАК ГрафикРаботы
ИЗ
    (ВЫБРАТЬ
        ОтработанноеВремяПоСотрудникамОбороты.Сотрудник КАК Сотрудник,
        ОтработанноеВремяПоСотрудникамОбороты.Период КАК ПериодДни,
        СУММА(ОтработанноеВремяПоСотрудникамОбороты.ОплаченоДнейОборот) КАК ОплаченоДнейОборот,
        МАКСИМУМ(ГрафикРаботыСотрудников.Период) КАК Период
    ИЗ
        РегистрНакопления.ОтработанноеВремяПоСотрудникам.Обороты(
                ,
                &КонецПериода,
                Месяц,
                Организация = &ГоловнаяОрганизация
                    И Начисление = &Индексация
                    И Сотрудник = &Сотрудник) КАК ОтработанноеВремяПоСотрудникамОбороты
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикРаботыСотрудников КАК ГрафикРаботыСотрудников
            ПО (ГрафикРаботыСотрудников.Период <= ОтработанноеВремяПоСотрудникамОбороты.Период)
                И (ГрафикРаботыСотрудников.Сотрудник = ОтработанноеВремяПоСотрудникамОбороты.Сотрудник)
    
    СГРУППИРОВАТЬ ПО
        ОтработанноеВремяПоСотрудникамОбороты.Сотрудник, ОтработанноеВремяПоСотрудникамОбороты.Период) КАК Таб1
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикРаботыСотрудников КАК Таб2
        ПО Таб1.Период = Таб2.Период
            И Таб1.Сотрудник = Таб2.Сотрудник
   Buster007
 
12 - 29.08.18 - 14:29
с таким запросом ты будешь практически всегда переплачивать сотруднику ;)
   егаис
 
13 - 29.08.18 - 14:35
(12) обоснуй
   Buster007
 
14 - 29.08.18 - 14:39
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикРаботыСотрудников КАК ГрафикРаботыСотрудников
            ПО (ГрафикРаботыСотрудников.Период <= ОтработанноеВремяПоСотрудникамОбороты.Период)
                И (ГрафикРаботыСотрудников.Сотрудник = ОтработанноеВремяПоСотрудникамОбороты.Сотрудник

представь, что у тебя у сотрудника 2 графика


Список тем форума
Рекламное место пустует Рекламное место пустует
Программист всегда исправляет последнюю ошибку.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует