8.х КАК ПРАВИЛЬНО ОБЪЕДИНИТЬ ВРЕМЕННЫЕ ТАБЛИЦЫ ?

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем kittybello, 26 июн 2015.

  1. TopicStarter Overlay
    kittybello
    Offline

    kittybello Опытный в 1С

    Регистрация:
    2 апр 2015
    Сообщения:
    80
    Симпатии:
    0
    Баллы:
    26
    Код:
    МенВрТаб = Новый МенеджерВременныхТаблиц;
    
    //Исходная ТЗ
    Запрос=новый запрос;
    
        Запрос.МенеджерВременныхТаблиц= МенВрТаб;
        Запрос.Текст=
        "ВЫБРАТЬ
        |    резТЗ.ДатаВыхода,
        |    резТЗ.Сотрудник КАК Сотрудник,
        |    резТЗ.ПодразделениеОрганизации,
        |    резТЗ.ОтработаноЧасов,
        |    резТЗ.Физлицо,
        |    резТЗ.ЧасовДвойных,
        |    ВЫРАЗИТЬ(резТЗ.Размер КАК ЧИСЛО(10, 2)) КАК Размер,       
        |    ВЫРАЗИТЬ(резТЗ.Результат КАК ЧИСЛО(10, 2)) КАК Результат,
        |    резТЗ.ВидРасчета,
    
        |    резТЗ.СпособОтраженияВБухучете
        |ПОМЕСТИТЬ ИсхТЗ
        |ИЗ
        |    &РезТЗ КАК резТЗ
        |ГДЕ
        |    резТЗ.ОтработаноЧасов > 0";
             
        Запрос.УстановитьПараметр("РезТЗ",ТЗ);
    //Обработка ТЗ
    ЗапросОсновной=новый запрос;
            ЗапросОсновной.МенеджерВременныхТаблиц=ЗапросСп.МенеджерВременныхТаблиц;
          
    
            //ЗапросОсновной=Новый Запрос();
            ЗапросОсновной.Текст="ВЫБРАТЬ РАЗРЕШЕННЫЕ
                                |    ИсхТЗ.ДатаВыхода,
                                |    РабочееВремяПотарифнымСтавкам.Сотрудник,
                                |    РабочееВремяПотарифнымСтавкам.Сотрудник.Физлицо КАК Физлицо,
                                |    РабочееВремяПотарифнымСтавкам.ВидРасчета,
                                |    ЕСТЬNULL(РабочееВремяПотарифнымСтавкам.Показатель, 0) КАК Размер,
                                |    РабочееВремяПотарифнымСтавкам.СпособОтраженияВРеглУчете КАК СпособОтраженияВБухучете,
                                |    РабочееВремяПотарифнымСтавкам.Сотрудник.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
                                |    ВЫБОР
                                |        КОГДА РабочееВремяПотарифнымСтавкам.ВидРасчета = &ОхранныйТариф
                                |            ТОГДА РАЗНОСТЬДАТ(РабочееВремяПотарифнымСтавкам.ВремяНачала, РабочееВремяПотарифнымСтавкам.ВремяОкончания, МИНУТА)
                                |        ИНАЧЕ 0
                                |    КОНЕЦ / 60 КАК ОтработаноЧасов,
                                |    ВЫБОР
                                |        КОГДА РабочееВремяПотарифнымСтавкам.ВидРасчета = &ОхранныйТариф
                                |            ТОГДА РАЗНОСТЬДАТ(РабочееВремяПотарифнымСтавкам.ВремяНачала, РабочееВремяПотарифнымСтавкам.ВремяОкончания, МИНУТА) / 60 * ЕСТЬNULL(РабочееВремяПотарифнымСтавкам.Показатель, 0)
                                |        ИНАЧЕ 0
                                |    КОНЕЦ КАК РезультатОТ,
                                |    РабочееВремяПотарифнымСтавкам.ДатаСмены,
                                |    РабочееВремяПотарифнымСтавкам.Период
                                |ИЗ
                                |    РегистрСведений.РабочееВремяПотарифнымСтавкам КАК РабочееВремяПотарифнымСтавкам
                                |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИсхТЗ КАК ИсхТЗ
                                |        ПО РабочееВремяПотарифнымСтавкам.Сотрудник = ИсхТЗ.Сотрудник
                                |            И РабочееВремяПотарифнымСтавкам.Период = ИсхТЗ.ДатаВыхода
                                |ГДЕ
                                |    РабочееВремяПотарифнымСтавкам.Организация = &Организация
                                |    И РабочееВремяПотарифнымСтавкам.ДатаСмены В
                                |            (ВЫБРАТЬ
                                |                РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК ДатаКалендаря
                                |            ИЗ
                                |                РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
                                |            ГДЕ
                                |                РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Праздник)
                                |                И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНачала И &ДатаОкончания)
                                |    И РабочееВремяПотарифнымСтавкам.ВидРасчета = &ОхранныйТариф" ;
            
                        
            ЗапросОсновной.УстановитьПараметр("Организация",        ОбщегоНазначения.ГоловнаяОрганизация(Организация));
            ЗапросОсновной.УстановитьПараметр("ОхранныйТариф",        ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("10220"));
            ЗапросОсновной.УстановитьПараметр("ДатаНачала",        НачМесяца);
            ЗапросОсновной.УстановитьПараметр("ДатаОкончания",        КонМесяца);
    
            ТЗПоТабелю=ЗапросОсновной.Выполнить().Выгрузить();
      
    
            Сообщить("ТЗПоТабелю");
          
          
            ТЗПоТабелю.Свернуть("ДатаВыхода, Сотрудник, ВидРасчета, Размер, СпособОтраженияВБухучете, Физлицо, ПодразделениеОрганизации ","ОтработаноЧасов,РезультатОТ");
          
        
    
    
    //ТЗ после обработки (часть сотрудников из ИсходнойТЗ)
    //Помещаем ТЗПоТабелю (свернутую) в вирт табл
            Запрос1=новый запрос;
            Запрос1.МенеджерВременныхТаблиц=МенВрТаб;
            Запрос1.Текст=
            "ВЫБРАТЬ
            |    ПоТабелю.ДатаВыхода,
            |    ПоТабелю.Сотрудник КАК Сотрудник,
            |    ПоТабелю.ПодразделениеОрганизации,
            |    ПоТабелю.Физлицо,
            |    ВЫРАЗИТЬ(ПоТабелю.Размер КАК ЧИСЛО(10, 2)) КАК Размер,
            |    ВЫРАЗИТЬ(ПоТабелю.РезультатОТ КАК ЧИСЛО(10, 2)) КАК Результат,
            |    ПоТабелю.ВидРасчета,
            |    ПоТабелю.СпособОтраженияВБухучете
            |ПОМЕСТИТЬ ТЗОхр
            |ИЗ
            |    &ПоТабелю КАК ПоТабелю
            |ГДЕ
            |    ПоТабелю.ОтработаноЧасов > 0";
          
            Запрос1.УстановитьПараметр("ПоТабелю",ТЗПоТабелю);
            Запрос1.Выполнить();
    
    
    //
    ЗапросТЗ=новый запрос;
        ЗапросТЗ.МенеджерВременныхТаблиц=МенВрТаб;
        //ЗапросТЗ.МенеджерВременныхТаблиц=Запрос1.МенеджерВременныхТаблиц;
        ЗапросТЗ.Текст=     "ВЫБРАТЬ
                          |    ИсхТЗ.ДатаВыхода,
                          |    ИсхТЗ.Сотрудник КАК Сотрудник,
                          |    ИсхТЗ.ПодразделениеОрганизации,
                          |    ИсхТЗ.ОтработаноЧасов,
                          |    ИсхТЗ.Физлицо,
                          |    ИсхТЗ.ЧасовДвойных,
                          |    ВЫРАЗИТЬ(ИсхТЗ.Размер КАК ЧИСЛО(10, 2)) КАК Размер,
                          |    ВЫРАЗИТЬ(ИсхТЗ.Результат КАК ЧИСЛО(10, 2)) КАК Результат,
                          |    ИсхТЗ.ВидРасчета,
                          |    ИсхТЗ.СпособОтраженияВБухучете
                          |ПОМЕСТИТЬ ТЗост
                          |ИЗ
                          |    ИсхТЗ КАК ИсхТЗ
                          |ГДЕ
                          |    ИсхТЗ.ОтработаноЧасов > 0
                          |
                          |ОБЪЕДИНИТЬ ВСЕ
                          |
                          |ВЫБРАТЬ
                          |    ПоТабелю.ДатаВыхода,
                          |    ПоТабелю.Сотрудник,
                          |    ПоТабелю.ПодразделениеОрганизации,
                          |    ПоТабелю.ОтработаноЧасов,
                          |    ПоТабелю.Физлицо,
                          |    0,
                          |    ВЫРАЗИТЬ(ПоТабелю.Размер КАК ЧИСЛО(10, 2)),
                          |    ВЫРАЗИТЬ(ПоТабелю.РезультатОТ КАК ЧИСЛО(10, 2)),
                          |    ПоТабелю.ВидРасчета,
                          |    ПоТабелю.СпособОтраженияВБухучете
                          |ИЗ
                          |    ПоТабелю КАК ПоТабелю";
    
    
    
    
     
         ЗапросТЗ.Выполнить();
    
    

    Есть две ВТ ИсходнаяТЗ и ТЗПоТабелю, необходимо объединить эти две таблицы.
    Выдает ошибки различные, из последних - ТЗПоТабелю не существует. С временными таблицами я вот, только только столкнулась (до этого как то не приходилось) и отсутствие опыта сказвается(. Подскажите кто вкурсе, что неправильно? КАК ИХ ОБЪЕДИНИТЬ КОРРЕКТНО? -Banghead-:(
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    У таблиц должны совпадать поля.
    --- Объединение сообщений, 26 июн 2015 ---
    Если какого-то поля нет - ставьте просто 0 КАК ВашеНужноеПоле
  3. TopicStarter Overlay
    kittybello
    Offline

    kittybello Опытный в 1С

    Регистрация:
    2 апр 2015
    Сообщения:
    80
    Симпатии:
    0
    Баллы:
    26
    И еще коротко смысл задачи: есть ТЗ с видом Сотрудник, Вид расчета...Необходимо отобрать сотрудников, у кот в дне табеля был Охранный тариф (вид расчета), выполнить расчеты по выборке и объединить с исходной ТЗ. Поскольку списки сотрудников велики (целые подразделения, а то и организации), считаю объединение в запросе оптимальным вариантом.
    --- Объединение сообщений, 26 июн 2015 ---
    Так я так и сделала...
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну давайте разбираться попорядку, какие ошибки то пишет.

    А зачем Вы каждый раз создаете Новый Запрос.

    Суть в том что создали Менеджер, создали запрос, присовоили менеджер и в рамках этого запроса
    Один запрос выполнили - поместили его результат в ТЗ, второй раз запрос выполнили, с другим текстом, поместили в другую ТЗ
    в третий раз у этого запроса (объекта) в тексте запроса объеденили две ТЗ
  5. TopicStarter Overlay
    kittybello
    Offline

    kittybello Опытный в 1С

    Регистрация:
    2 апр 2015
    Сообщения:
    80
    Симпатии:
    0
    Баллы:
    26
    А можно коротко пример ? А то что то не выходит, "переменная не определена,запрос"
    --- Объединение сообщений, 26 июн 2015 ---
    В последнем запросе выдает "ПоТабелю не существует"
  6. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Код:
    МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
        Запрос = Новый Запрос;
        Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    
        Запрос.Текст="ВЫБРАТЬ
                     |    1 КАК Сумма
                     |ПОМЕСТИТЬ ВтСозначением1
                     |;
                     |
                     |////////////////////////////////////////////////////////////////////////////////
                     |ВЫБРАТЬ
                     |    2 КАК Сумма
                     |ПОМЕСТИТЬ ВТСоЗначением2
                     |;
                     |
                     |////////////////////////////////////////////////////////////////////////////////
                     |ВЫБРАТЬ
                     |    ВтСозначением1.Сумма
                     |ИЗ
                     |    ВтСозначением1 КАК ВтСозначением1
                     |
                     |ОБЪЕДИНИТЬ ВСЕ
                     |
                     |ВЫБРАТЬ
                     |    ВТСоЗначением2.Сумма
                     |ИЗ
                     |    ВТСоЗначением2 КАК ВТСоЗначением2";
    
       
        ТЗ=Запрос.Выполнить().Выгрузить();
    
        ТЗ.ВыбратьСтроку();   
    

    Вложения:

  7. TopicStarter Overlay
    kittybello
    Offline

    kittybello Опытный в 1С

    Регистрация:
    2 апр 2015
    Сообщения:
    80
    Симпатии:
    0
    Баллы:
    26
    СпасибО!, буду пробовать)
  8. TopicStarter Overlay
    kittybello
    Offline

    kittybello Опытный в 1С

    Регистрация:
    2 апр 2015
    Сообщения:
    80
    Симпатии:
    0
    Баллы:
    26
    СПАСИБО ОГРОМНОЕ ЗА ПОМОЩЬ ВСЕ , ЧТО КАСАЛОСЬ ОБЪЕДИНЕНИЯ - ПОЛУЧИЛОСЬ! (последовала совету - сделала один большой запрос). Если можете, ПОДСКАЖИТЕ, еще вот что:
    теперь мне надо пересчитать полученную ТЗ (она содержит записи о всех (грубо говоря) сотрудниках с ВидомРасчета1 и тех сотрудниках у кот есть ВидРасчета2) поэтому КАК ЛУЧШЕ СДЕЛАТЬ пересчет:
    НовыеЧасыПоВидуРасчета1= ЧасыПоВидуРасчета1-ЧасыПоВидуРасчета2;
    НовыйРезультатПоВидуРасчета1= НовыеЧасыПоВидуРасчета1*РазмерПоВидуРасчета1

    А кому интересно запрос получисля такой:
    Код:
    МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
        Запрос = Новый Запрос;
        Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    
        Запрос.Текст="ВЫБРАТЬ
                    |    резТЗ.ДатаВыхода,
                    |    резТЗ.Сотрудник КАК Сотрудник,
                    |    резТЗ.ПодразделениеОрганизации,
                    |    резТЗ.ОтработаноЧасов,
                    |    резТЗ.Физлицо,
                    |    резТЗ.ЧасовДвойных,
                    |    ВЫРАЗИТЬ(резТЗ.Размер КАК ЧИСЛО(10, 2)) КАК Размер,
                    |    ВЫРАЗИТЬ(резТЗ.Результат КАК ЧИСЛО(10, 2)) КАК Результат,
                    |    резТЗ.ВидРасчета,
                    |    резТЗ.СпособОтраженияВБухучете
                    |ПОМЕСТИТЬ ИсхТЗ
                    |ИЗ
                    |    &РезТЗ КАК резТЗ
                    |ГДЕ
                    |    резТЗ.ОтработаноЧасов > 0
                    |;
                    |
                    |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
                    |    РабочееВремяПотарифнымСтавкам.Сотрудник КАК Сотрудник,
                    |    ИсхТЗ.ДатаВыхода КАК ДатаВыхода
                    |ПОМЕСТИТЬ СпСотр
                    |ИЗ
                    |    РегистрСведений.РабочееВремяПотарифнымСтавкам КАК РабочееВремяПотарифнымСтавкам
                    |        ЛЕВОЕ СОЕДИНЕНИЕ ИсхТЗ КАК ИсхТЗ
                    |        ПО РабочееВремяПотарифнымСтавкам.ДатаСмены = ИсхТЗ.ДатаВыхода
                    |            И РабочееВремяПотарифнымСтавкам.Сотрудник = ИсхТЗ.Сотрудник
                    |            И (РабочееВремяПотарифнымСтавкам.ВидРасчета = &ОхранныйТариф)
                    |ГДЕ
                    |    РабочееВремяПотарифнымСтавкам.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
                    |    И РабочееВремяПотарифнымСтавкам.ВидРасчета = &ОхранныйТариф
                    |
                    |СГРУППИРОВАТЬ ПО
                    |    РабочееВремяПотарифнымСтавкам.Сотрудник,
                    |    ИсхТЗ.ДатаВыхода
                    |;
                    |
                    |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
                    |    СпСотр.ДатаВыхода,
                    |    РабочееВремяПотарифнымСтавкам.Сотрудник,
                    |    РабочееВремяПотарифнымСтавкам.Сотрудник.Физлицо КАК Физлицо,
                    |    РабочееВремяПотарифнымСтавкам.ВидРасчета,
                    |    ЕСТЬNULL(РабочееВремяПотарифнымСтавкам.Показатель, 0) КАК Размер,
                    |    РабочееВремяПотарифнымСтавкам.СпособОтраженияВРеглУчете КАК СпособОтраженияВБухучете,
                    |    РабочееВремяПотарифнымСтавкам.Сотрудник.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
                    |    ВЫБОР
                    |        КОГДА РабочееВремяПотарифнымСтавкам.ВидРасчета = &ОхранныйТариф
                    |            ТОГДА РАЗНОСТЬДАТ(РабочееВремяПотарифнымСтавкам.ВремяНачала, РабочееВремяПотарифнымСтавкам.ВремяОкончания, МИНУТА)
                    |        ИНАЧЕ 0
                    |    КОНЕЦ / 60 КАК ОтработаноЧасов,
                    |    ВЫБОР
                    |        КОГДА РабочееВремяПотарифнымСтавкам.ВидРасчета = &ОхранныйТариф
                    |            ТОГДА РАЗНОСТЬДАТ(РабочееВремяПотарифнымСтавкам.ВремяНачала, РабочееВремяПотарифнымСтавкам.ВремяОкончания, МИНУТА) / 60 * ЕСТЬNULL(РабочееВремяПотарифнымСтавкам.Показатель, 0)
                    |        ИНАЧЕ 0
                    |    КОНЕЦ КАК РезультатОТ,
                    |    РабочееВремяПотарифнымСтавкам.ДатаСмены,
                    |    РабочееВремяПотарифнымСтавкам.Период
                    |ПОМЕСТИТЬ ТЗПоТабелю
                    |ИЗ
                    |    РегистрСведений.РабочееВремяПотарифнымСтавкам КАК РабочееВремяПотарифнымСтавкам
                    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ СпСотр КАК СпСотр
                    |        ПО РабочееВремяПотарифнымСтавкам.Сотрудник = СпСотр.Сотрудник
                    |            И РабочееВремяПотарифнымСтавкам.Период = СпСотр.ДатаВыхода
                    |ГДЕ
                    |    РабочееВремяПотарифнымСтавкам.Организация = &Организация
                    |    И РабочееВремяПотарифнымСтавкам.ДатаСмены В
                    |            (ВЫБРАТЬ
                    |                РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК ДатаКалендаря
                    |            ИЗ
                    |                РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
                    |            ГДЕ
                    |                РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Праздник)
                    |                И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНачала И &ДатаОкончания)
                    |    И РабочееВремяПотарифнымСтавкам.ВидРасчета = &ОхранныйТариф
                    |;
                    |
                    |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ
                    |    ИсхТЗ.ДатаВыхода,
                    |    ИсхТЗ.Сотрудник КАК Сотрудник,
                    |    ИсхТЗ.ПодразделениеОрганизации,
                    |    ИсхТЗ.ОтработаноЧасов,
                    |    ИсхТЗ.Физлицо,
                    |    ИсхТЗ.ЧасовДвойных,
                    |    ВЫРАЗИТЬ(ИсхТЗ.Размер КАК ЧИСЛО(10, 2)) КАК Размер,
                    |    ВЫРАЗИТЬ(ИсхТЗ.Результат КАК ЧИСЛО(10, 2)) КАК Результат,
                    |    ИсхТЗ.ВидРасчета,
                    |    ИсхТЗ.СпособОтраженияВБухучете
                    |ИЗ
                    |    ИсхТЗ КАК ИсхТЗ
                    |ГДЕ
                    |    ИсхТЗ.ОтработаноЧасов > 0
                    |
                    |ОБЪЕДИНИТЬ ВСЕ
                    |
                    |ВЫБРАТЬ
                    |    ТЗПоТабелю.ДатаВыхода,
                    |    ТЗПоТабелю.Сотрудник,
                    |    ТЗПоТабелю.ПодразделениеОрганизации,
                    |    ТЗПоТабелю.ОтработаноЧасов,
                    |    ТЗПоТабелю.Физлицо,
                    |    0,
                    |    ВЫРАЗИТЬ(ТЗПоТабелю.Размер КАК ЧИСЛО(10, 2)),
                    |    ВЫРАЗИТЬ(ТЗПоТабелю.РезультатОТ КАК ЧИСЛО(10, 2)),
                    |    ТЗПоТабелю.ВидРасчета,
                    |    ТЗПоТабелю.СпособОтраженияВБухучете
                    |ИЗ
                    |    ТЗПоТабелю КАК ТЗПоТабелю";
    
    
  9. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    не совсем понял задачу можно пример
  10. TopicStarter Overlay
    kittybello
    Offline

    kittybello Опытный в 1С

    Регистрация:
    2 апр 2015
    Сообщения:
    80
    Симпатии:
    0
    Баллы:
    26
    [​IMG]
    На примере одного сотрудника:
    Всего он отработал 6,75 часов . Из них по Охранному тарифу 3
    Мне нужно чтобы первая строка содержала 3,75 часов , ну и пересчитать Результат.

    Р.S.: так уж устроено , что нельзя сразу получить оба вида расчета, сначала получается первая строка (типовая конфа), потом вторая ( описанное выше) .
  11. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    ну так в чем проблема то. не знаете как ТЗ обойти

    для каждого стр из ТЗ цикл

    если стр.ВидРасчета<>ВидРасчетаОхрана Тогда

    ///содаете структуру отбора
    //предаете туда стр.работник и ВидРасчетаОхрана
    //Затем ТЗ.НайтиСтроки(Отбор)
    //находит строку с сотрудников по данному виду расчета
    берет из этой строки время и отнимаете его из той строки в которой сейчас находитесь

    Конецесли;

    КонецЦикла;
  12. TopicStarter Overlay
    kittybello
    Offline

    kittybello Опытный в 1С

    Регистрация:
    2 апр 2015
    Сообщения:
    80
    Симпатии:
    0
    Баллы:
    26
    да , так я тоже знаю), просто думала можно в запросе, чтоб быстрей отрабатывало, нр все равно спс
  13. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну можно и в запросе
    скажем так что назову Вашу эту таблицу ОсновнаяТаблица

    Тогда у вас

    в запросе должно быть две этих таблицы

    только в первой отбор по виду расчета <> охрана, а во второй Равно

    В итоге в запросе таком у вас получится что результатом перво таблицы будет первая строка, второй вторая
    и потом левым соединением к первой подтягиваете по физлицу и подразделению запись второй, а именно часы из нее и вычитает в запросе

    Идея понятна?
  14. TopicStarter Overlay
    kittybello
    Offline

    kittybello Опытный в 1С

    Регистрация:
    2 апр 2015
    Сообщения:
    80
    Симпатии:
    0
    Баллы:
    26
  15. TopicStarter Overlay
    kittybello
    Offline

    kittybello Опытный в 1С

    Регистрация:
    2 апр 2015
    Сообщения:
    80
    Симпатии:
    0
    Баллы:
    26
    вынуждена опять обратится к Вам за помощью ,
    вот код :
    Код:
    МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
        Запрос = Новый Запрос;
        Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    
        Запрос.Текст="ВЫБРАТЬ
                    |    резТЗ.ДатаВыхода,
                    |    резТЗ.Сотрудник КАК Сотрудник,
                    |    резТЗ.ПодразделениеОрганизации,
                    |    резТЗ.ОтработаноЧасов,
                    |    резТЗ.Физлицо,
                    |    резТЗ.ЧасовДвойных,
                    |    ВЫРАЗИТЬ(резТЗ.Размер КАК ЧИСЛО(10, 2)) КАК Размер,
                    |    ВЫРАЗИТЬ(резТЗ.Результат КАК ЧИСЛО(10, 2)) КАК Результат,
                    |    резТЗ.ВидРасчета,
                    |    резТЗ.СпособОтраженияВБухучете
                    |ПОМЕСТИТЬ ИсхТЗ
                    |ИЗ
                    |    &РезТЗ КАК резТЗ
                    |ГДЕ
                    |    резТЗ.ОтработаноЧасов > 0
                    |;
                    |
                    |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
                    |    РабочееВремяПотарифнымСтавкам.Сотрудник КАК Сотрудник,
                    |    ИсхТЗ.ДатаВыхода КАК ДатаВыхода
                    |ПОМЕСТИТЬ СпСотр
                    |ИЗ
                    |    РегистрСведений.РабочееВремяПотарифнымСтавкам КАК РабочееВремяПотарифнымСтавкам
                    |        ЛЕВОЕ СОЕДИНЕНИЕ ИсхТЗ КАК ИсхТЗ
                    |        ПО РабочееВремяПотарифнымСтавкам.ДатаСмены = ИсхТЗ.ДатаВыхода
                    |            И РабочееВремяПотарифнымСтавкам.Сотрудник = ИсхТЗ.Сотрудник
                    |            И (РабочееВремяПотарифнымСтавкам.ВидРасчета = &ОхранныйТариф)
                    |ГДЕ
                    |    РабочееВремяПотарифнымСтавкам.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
                    |    И РабочееВремяПотарифнымСтавкам.ВидРасчета = &ОхранныйТариф
                    |
                    |СГРУППИРОВАТЬ ПО
                    |    РабочееВремяПотарифнымСтавкам.Сотрудник,
                    |    ИсхТЗ.ДатаВыхода
                    |;
                    |
                    |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
                    |    СпСотр.ДатаВыхода,
                    |    РабочееВремяПотарифнымСтавкам.Сотрудник,
                    |    РабочееВремяПотарифнымСтавкам.Сотрудник.Физлицо КАК Физлицо,
                    |    РабочееВремяПотарифнымСтавкам.ВидРасчета,
                    |    ЕСТЬNULL(РабочееВремяПотарифнымСтавкам.Показатель, 0) КАК Размер,
                    |    РабочееВремяПотарифнымСтавкам.СпособОтраженияВРеглУчете КАК СпособОтраженияВБухучете,
                    |    РабочееВремяПотарифнымСтавкам.Сотрудник.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
                    |    ВЫБОР
                    |        КОГДА РабочееВремяПотарифнымСтавкам.ВидРасчета = &ОхранныйТариф
                    |            ТОГДА РАЗНОСТЬДАТ(РабочееВремяПотарифнымСтавкам.ВремяНачала, РабочееВремяПотарифнымСтавкам.ВремяОкончания, МИНУТА)
                    |        ИНАЧЕ 0
                    |    КОНЕЦ / 60 КАК ОтработаноЧасов,
                    |    ВЫБОР
                    |        КОГДА РабочееВремяПотарифнымСтавкам.ВидРасчета = &ОхранныйТариф
                    |            ТОГДА РАЗНОСТЬДАТ(РабочееВремяПотарифнымСтавкам.ВремяНачала, РабочееВремяПотарифнымСтавкам.ВремяОкончания, МИНУТА) / 60 * ЕСТЬNULL(РабочееВремяПотарифнымСтавкам.Показатель, 0)
                    |        ИНАЧЕ 0
                    |    КОНЕЦ КАК РезультатОТ,
                    |    РабочееВремяПотарифнымСтавкам.ДатаСмены,
                    |    РабочееВремяПотарифнымСтавкам.Период
                    |ПОМЕСТИТЬ ТЗПоТабелю
                    |ИЗ
                    |    РегистрСведений.РабочееВремяПотарифнымСтавкам КАК РабочееВремяПотарифнымСтавкам
                    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ СпСотр КАК СпСотр
                    |        ПО РабочееВремяПотарифнымСтавкам.Сотрудник = СпСотр.Сотрудник
                    |            И РабочееВремяПотарифнымСтавкам.Период = СпСотр.ДатаВыхода
                    |ГДЕ
                    |    РабочееВремяПотарифнымСтавкам.Организация = &Организация
                    |    И РабочееВремяПотарифнымСтавкам.ДатаСмены В (&СписокДней)
                    |    И РабочееВремяПотарифнымСтавкам.ВидРасчета = &ОхранныйТариф
                    |;
                    |
                    |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ
                    |    ИсхТЗ.ДатаВыхода,
                    |    ИсхТЗ.Сотрудник КАК Сотрудник,
                    |    ИсхТЗ.ПодразделениеОрганизации,
                    |    ИсхТЗ.ОтработаноЧасов,
                    |    ИсхТЗ.Физлицо,
                    |    ИсхТЗ.ЧасовДвойных,
                    |    ВЫРАЗИТЬ(ИсхТЗ.Размер КАК ЧИСЛО(10, 2)) КАК Размер,
                    |    ВЫРАЗИТЬ(ИсхТЗ.Результат КАК ЧИСЛО(10, 2)) КАК Результат,
                    |    ИсхТЗ.ВидРасчета,
                    |    ИсхТЗ.СпособОтраженияВБухучете
                   |ПОМЕСТИТЬ НоваяТЗ
                    |ИЗ
                    |    ИсхТЗ КАК ИсхТЗ
                    |ГДЕ
                    |    ИсхТЗ.ОтработаноЧасов > 0
                    |
                    |ОБЪЕДИНИТЬ ВСЕ
                    |
                    |ВЫБРАТЬ
                    |    ТЗПоТабелю.ДатаВыхода,
                    |    ТЗПоТабелю.Сотрудник,
                    |    ТЗПоТабелю.ПодразделениеОрганизации,
                    |    ТЗПоТабелю.ОтработаноЧасов,
                    |    ТЗПоТабелю.Физлицо,
                    |    0,
                    |    ВЫРАЗИТЬ(ТЗПоТабелю.Размер КАК ЧИСЛО(10, 2)),
                    |    ВЫРАЗИТЬ(ТЗПоТабелю.РезультатОТ КАК ЧИСЛО(10, 2)),
                    |    ТЗПоТабелю.ВидРасчета,
                    |    ТЗПоТабелю.СпособОтраженияВБухучете
                    |ИЗ
                    |    ТЗПоТабелю КАК ТЗПоТабелю
                    |;
                    |
                    |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ
                    |    НоваяТЗ1.ДатаВыхода,
                    |    НоваяТЗ1.Сотрудник КАК Сотрудник,
                    |    НоваяТЗ1.ПодразделениеОрганизации,
                    |    НоваяТЗ1.Физлицо,
                    |    НоваяТЗ1.ЧасовДвойных,
                    |    ВЫРАЗИТЬ(НоваяТЗ1.Размер КАК ЧИСЛО(10, 2)) КАК Размер,
                    |    НоваяТЗ1.ВидРасчета,
                    |    НоваяТЗ1.СпособОтраженияВБухучете,
                  //  |    НоваяТЗ1.ОтработаноЧасов - НоваяТЗ2.ОтработаноЧасов КАК ОтработаноЧасов,
                 //   |    ВЫРАЗИТЬ((НоваяТЗ1.ОтработаноЧасов - НоваяТЗ2.ОтработаноЧасов) * НоваяТЗ1.Размер КАК ЧИСЛО(10, 2)) КАК Результат,
                       
    
                    |    НоваяТЗ1.ОтработаноЧасов КАК ОтработаноЧасов,
                    |    НоваяТЗ1.Результат КАК Результат
                    |ИЗ
                    |    НоваяТЗ КАК НоваяТЗ1
                    |        ЛЕВОЕ СОЕДИНЕНИЕ НоваяТЗ КАК НоваяТЗ2
                    |        ПО НоваяТЗ1.ДатаВыхода = НоваяТЗ2.ДатаВыхода
                    |            И НоваяТЗ1.Сотрудник = НоваяТЗ2.Сотрудник
                    |ГДЕ
                    |    НоваяТЗ1.ВидРасчета <> &ОхранныйТариф
                    |    И НоваяТЗ2.ВидРасчета = &ОхранныйТариф
                    |
                    |ОБЪЕДИНИТЬ ВСЕ
                    |
                    |ВЫБРАТЬ
                    |    НоваяТЗ.ДатаВыхода,
                    |    НоваяТЗ.Сотрудник,
                    |    НоваяТЗ.ПодразделениеОрганизации,
                    |    НоваяТЗ.Физлицо,
                    |    0,
                    |    ВЫРАЗИТЬ(НоваяТЗ.Размер КАК ЧИСЛО(10, 2)),
                    |    НоваяТЗ.ВидРасчета,
                    |    НоваяТЗ.СпособОтраженияВБухучете,
                    |    НоваяТЗ.ОтработаноЧасов,
                    |    ВЫРАЗИТЬ(НоваяТЗ.Результат КАК ЧИСЛО(10, 2))
                            |ИЗ
                    |    НоваяТЗ КАК НоваяТЗ
                    |ГДЕ
                    |    НоваяТЗ.ВидРасчета = &ОхранныйТариф
                    |
                    |УПОРЯДОЧИТЬ ПО
                    |    Сотрудник";
                     
        Запрос.УстановитьПараметр("РезТЗ",ТЗ);
        Запрос.УстановитьПараметр("ОхранныйТариф",        ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("10220"));   
        Запрос.УстановитьПараметр("Организация",        ОбщегоНазначения.ГоловнаяОрганизация(Организация));
        Запрос.УстановитьПараметр("ДатаНачала",        НачМесяца);
        Запрос.УстановитьПараметр("ДатаОкончания",        КонМесяца);
        Запрос.УстановитьПараметр("СписокДней",        СписокДней);
    
    
    Не пойму что не так - выдает вообще бред,
    в этих строках
    Код:
                //  |    НоваяТЗ1.ОтработаноЧасов - НоваяТЗ2.ОтработаноЧасов КАК ОтработаноЧасов,
                //   |    ВЫРАЗИТЬ((НоваяТЗ1.ОтработаноЧасов - НоваяТЗ2.ОтработаноЧасов) * НоваяТЗ1.Размер КАК ЧИСЛО(10, 2)) КАК Результат,
    
    хотела пересчитать часы и рузультат, как говорилось выше, а оно показывает начальныю цифру( да кроме того вобще как то не то выдает, почему то задваивает строку с начальным видом расчета. я уж совсем запуталась(((((((((((((((((((((((((((((.
  16. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну а вы неверно запрос составил последний

    если вы сразу вычисляете таким образом то у вас должно быть не объединение а левое соединение первой таблицы со второй
    --- Объединение сообщений, 1 июл 2015 ---
    Я Вам это писал , а у вас почему то объединение
  17. TopicStarter Overlay
    kittybello
    Offline

    kittybello Опытный в 1С

    Регистрация:
    2 апр 2015
    Сообщения:
    80
    Симпатии:
    0
    Баллы:
    26
    Теперь оно затраивает(
    Антонов Станислав Васильевич (осн.) ВР= Доплата за работу в праздники и выходные часы= 3,75
    Антонов Станислав Васильевич (осн.) ВР= Доплата за работу в праздники и выходные часы= 3,75
    Антонов Станислав Васильевич (осн.) ВР= Доплата за работу в праздники и выходные часы= 3,75
    Антонов Станислав Васильевич (осн.) ВР= Доплата за работу в праздники и выходные часы= 3
    Антонов Станислав Васильевич (осн.) ВР= Доплата за работу в праздники и выходные часы= 3
    Антонов Станислав Васильевич (осн.) ВР= Доплата за работу в праздники и выходные часы= 3
    Сделала так:
    Код:
    ...........................
           |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ
                    |    НоваяТЗ1.ДатаВыхода,
                    |    НоваяТЗ1.Сотрудник КАК Сотрудник,
                    |    НоваяТЗ1.ПодразделениеОрганизации,
                    |    НоваяТЗ1.Физлицо,
                    |    НоваяТЗ1.ЧасовДвойных,
                    |    ВЫРАЗИТЬ(НоваяТЗ1.Размер КАК ЧИСЛО(10, 2)) КАК Размер,
                    |    НоваяТЗ1.ВидРасчета,
                    |    НоваяТЗ1.СпособОтраженияВБухучете,
                    |    НоваяТЗ1.ОтработаноЧасов - НоваяТЗ2.ОтработаноЧасов КАК ОтработаноЧасов,
                    |    ВЫРАЗИТЬ((НоваяТЗ1.ОтработаноЧасов - НоваяТЗ2.ОтработаноЧасов) * НоваяТЗ1.Размер КАК ЧИСЛО(10, 2)) КАК Результат
                    |ПОМЕСТИТЬ НоваяТЗПересчет
                    |ИЗ
                    |    НоваяТЗ КАК НоваяТЗ1
                    |        ЛЕВОЕ СОЕДИНЕНИЕ НоваяТЗ КАК НоваяТЗ2
                    |        ПО НоваяТЗ1.ДатаВыхода = НоваяТЗ2.ДатаВыхода
                    |            И НоваяТЗ1.Сотрудник = НоваяТЗ2.Сотрудник
                    |ГДЕ
                    |    НоваяТЗ1.ВидРасчета <> &ОхранныйТариф
                    |    И НоваяТЗ2.ВидРасчета = &ОхранныйТариф
                    |;
                    |
                    |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ
                    |    НоваяТЗПересчет.ДатаВыхода,
                    |    НоваяТЗПересчет.Сотрудник КАК Сотрудник,
                    |    НоваяТЗПересчет.ПодразделениеОрганизации,
                    |    НоваяТЗПересчет.Физлицо,
                    |    НоваяТЗПересчет.ЧасовДвойных,
                    |    ВЫРАЗИТЬ(НоваяТЗПересчет.Размер КАК ЧИСЛО(10, 2)) КАК Размер,
                    |    НоваяТЗПересчет.ВидРасчета,
                    |    НоваяТЗПересчет.СпособОтраженияВБухучете,
                    |    НоваяТЗПересчет.ОтработаноЧасов КАК ОтработаноЧасов,
                    |    ВЫРАЗИТЬ(НоваяТЗПересчет.Результат КАК ЧИСЛО(10, 2)) КАК Результат
                    |ИЗ
                    |    НоваяТЗПересчет КАК НоваяТЗПересчет
                    |        ЛЕВОЕ СОЕДИНЕНИЕ НоваяТЗ КАК НоваяТЗ
                    |        ПО НоваяТЗПересчет.ДатаВыхода = НоваяТЗ.ДатаВыхода
                    |            И НоваяТЗПересчет.Сотрудник = НоваяТЗ.Сотрудник";
    
    
    
    Последнее редактирование: 1 июл 2015
  18. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну смотрите вы соединеяете по дате и по сотруднику, а по остальным полям, подразделение, способ отражение, яесли о ним не соединяете то и выбирать их не надо
  19. TopicStarter Overlay
    kittybello
    Offline

    kittybello Опытный в 1С

    Регистрация:
    2 апр 2015
    Сообщения:
    80
    Симпатии:
    0
    Баллы:
    26
    как это? мне же нужны и другие поля, во1х, а во 2х- тогда выдает ошибку "Поле объекта не обнаружено"
  20. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    ТВы просто сядьте и на лисчтоке по одному сотруднику выпишите что у вас в левой таблице, что в право и посмоттрите что соединяете

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