8.х Нестандартный источник запроса!?

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем pathetique, 11 май 2008.

  1. TopicStarter Overlay
    pathetique
    Offline

    pathetique Опытный в 1С

    Регистрация:
    21 янв 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте! Подскажите новичку! :unsure:
    В общем есть у меня запрос и далее я вывожу этот запрос в строке "сообщить". Из отрывка ничего не понятно(смысл запроса не важен), но видно что в результате помимо данных запроса выводится еще поле "Моя дата", которое последовательно выводит все даты периода, в котором работник отсутсвовал.
    Далее надо сделать запрос, который из этого поля выберет только рабочие дни и далее мы считаем их количество и знаем сколько рабочих дней в текущем месяце пропустил каждый работник...ну в общем это не суть важно... B)

    Смысл в том, что мне надо результат работы этого цикла т.е. то, что выводится в строке "Сообщить..." полностью вывести куда-то (какая-то временная таблица?) и далее этот результат(эту временную таблицу) использовать в следующем запросе... плиз подскажите как это сделать...

    Код:
    Результат=Запрос.Выполнить().Выбрать();
    Пока Результат1.Следующий()Цикл
    МояДата= Результат.ДатаНачала; // Дата начала отсутствия
    
    Пока МояДата <= Дата(Результат.ДатаОкончания) Цикл;
    [b] Сообщить[/b](""+Результат1.Ссылка+" | "+МояДата+" |   "+Результат1.ДатаНачала+" | "+Результат1.ДатаОкончания+" | "+Результат1.Физлицо);
    
    МояДата= МояДата+60*60*24 // следующая дата; 
    
    
    
    
  2. AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    В УПП есть регистр "РабочееВремяРаботниковОрганизаций" оттуда в принципе можешь выципить кто сколько отработал. Из регистра "РегламентированныйПроизводственныйКалендарь" вытаскиваешь количество рабочих дней в месяце. Ну и дальше уже высчитываешь свой процент.
  3. TopicStarter Overlay
    pathetique
    Offline

    pathetique Опытный в 1С

    Регистрация:
    21 янв 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    Спасибо, покопаюсь в этих регистрахс- раньше их не встречал...
    Но для решения моей задачи они меня не спасут.
    В конечном итоге мне надо вывести список работников, которые отсутствовали > половины рабочих дней в период с 1 по 15 число(т.е. первой половины) выбранного месяца.
    В моем примере я запросом ищу сотрудников, у которых период пропуска входит в диапазон 1-15 число выбранного месяца, затем каждый такой пропуск я разбиваю на отдельные дни(в строке "сообщить") и далее хочу сделать простой запрос, который проверит является ли данный день пропуска рабочим и входит ли он в нужный мне диапазон(для этого использую регистр "графики отпусков по видам времени").
    Далее я могу вывести отчет, где не только посчитаю количество пропусков, но и выведу конкретно какие рабочие дни были пропущены.

    НО для этого мне надо временно загнать результат примера из первого поста куда-то(ну не создавать же специально для этого регистр?!) и далее всего-навсего использовать его в запросе...а потом удалить... неужели в 1с нельзя такую чепуху провернуть???? :unsure:
  4. AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    Там же в запросе где дни работников выбираешь сразу проверяй рабочий день это или нет. рабочие и выходные просуммируй поотдельности. на выходе должен получить: работики - рабочие дни - выходные дни.

    Твой вариант с запросом из ТЗ не получится. Просто тогда твой первый запрос и будет источником для второго запроса. Все это оформляется одним запросом.
  5. TopicStarter Overlay
    pathetique
    Offline

    pathetique Опытный в 1С

    Регистрация:
    21 янв 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    мммм... а можно поконкретнее... B)
    вот например мне надо проверить отсутсвующих в первой половине января 2008г.
    У меня в документе "невыходы в орг-ях" написано что Иванов И.И. отсутсвовал с 15.12.07 по 10.01.08.
    Запросом я могу проверить что этот период входит в интересующий меня диапазон(начало января). Вложенным запросом я могу сформировать список дат рабочих дней с 1 по 15 января(там в регистре напротив рабочих дней единички стоят).
    Как запросом мне теперь проверить дату каждого дня из пропуска(который в документе указан в виде диапазона) на его равенство рабочему дню???

    Можно как-то сделать чтобы в запросе диапазон представлялся в виде последовательности дат?
    т.е. в моем примере 15.12.07, 16.12.07......10.01.08 ??? Пока я знаю не знаю другого способа как цикл...

    Спасиб за помощь, мой первый отчет и такая вот хрень :unsure:
  6. LordKim
    Offline

    LordKim Опытный в 1С

    Регистрация:
    11 мар 2008
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26
  7. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    А для отладки проще делать так:
    Код:
    Запрос.Выполнить.Выгрузить().ВыбратьСтроку();
    
    
    Выведет всю таблицу, полученную запросом. Не придется с сообщить возиться.
  8. TopicStarter Overlay
    pathetique
    Offline

    pathetique Опытный в 1С

    Регистрация:
    21 янв 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    Спасибо!
    "сообщить" в моем примере ничего полезного не делает кроме как быстро выводит результат работы цикла - чтобы я сам понял что сделал :unsure:
    В общем результат работы цикла я вывел в таблицу значений, а таблица значений, как оказывается(написано в желтой книжке) может быть источником запроса(с массой оговорок вроде того, что в объединения ее включать нельзя:-( )!!! мдя...
    Правда вот из-за ЧП с нашим 1С не успел опробовать этот метод...

    Добавлено: упс... разобрался с советом Эмина - действительно так проще выводить таблицу:) сразу не въехал, спасибо!
  9. AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    Ну вот, практически в процессе засыпания, запросик наваял:
    ДатаНачал и ДатаКонца - соответственно задают период
    ОтработаноДней = 0 убирает из результат запроса лишние строчки по невыходам.
    Хотя как вариант можно было сгрупировать по физ.лицу

    Код:
    ВЫБРАТЬ
    ОсновныеНачисленияРаботниковОрганизаций.ФизЛицо,
    ОсновныеНачисленияРаботниковОрганизаций.ОтработаноДней,
    ВложенныйЗапрос.Пятидневка КАК ВсегоРабочихДней,
    ОсновныеНачисленияРаботниковОрганизаций.ОтработаноДней * 100 / ВложенныйЗапрос.Пятидневка КАК ПроцентОтработанного
    ИЗ
    РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций,
    (ВЫБРАТЬ
    СУММА(РегламентированныйПроизводственныйКалендарь.Пятидневка) КАК Пятидневка
    ИЗ
    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
    ГДЕ
    РегламентированныйПроизводственныйКалендарь.Пятидневка = 1
    И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНачала И &ДатаКонча) КАК ВложенныйЗапрос
    ГДЕ
    ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации МЕЖДУ &ДатаНачала И &ДатаКонча
    И ОсновныеНачисленияРаботниковОрганизаций.ОтработаноДней <> &ОтработаноДней
    
    
    
    Там в регистре "Основные начисления" есть поле "Норма дней по пятидневке" но оно при заполнении у меня почему то всегда равно отработанному времени. Разбираться лень. Поэтому количество рабочих дней дернул из производствееного календаря.
  10. TopicStarter Overlay
    pathetique
    Offline

    pathetique Опытный в 1С

    Регистрация:
    21 янв 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    AlexFF Спасибо, попробовал отчетик, кое чему научился:) Для моего отчета все-равно гемороя больше - мне пропуски надо брать из "невыходов в организациях" :unsure:
  11. AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    Дерзай. Но тащит запросом из доков не есть правильно.
    Если прям так хочется заведи регистр "Невыходы" туда пиши при проведении документа дни и оттуда уже тащи в отчет.
  12. TopicStarter Overlay
    pathetique
    Offline

    pathetique Опытный в 1С

    Регистрация:
    21 янв 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте еще раз. Решил ради пустяка не создавать новой темы...:)
    Вопрос в следующем: у меня результатом запроса является одно число т.е. одна строка и одна колонка... например 5 :) Сейчас чтобы получить его из выборки приходится делать цикл:

    Результат=Запрос.Выполнить().Выбрать();
    Пока Результат.Следующий() Цикл
    МоеЗначение=Результат.КоличествоДней
    КонецЦикла

    Четыре строчки для того чтобы получить одну цифорку -слишком много:)...Подскажите, плиз, как сделать проще.
  13. AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    Код:
    ТЗ = Запрос.Выполнить().Выгрузить();
    НашеЧисло = ТЗ.Получить(0).ТутИмяКолонки;
    
    
    
    
  14. TopicStarter Overlay
    pathetique
    Offline

    pathetique Опытный в 1С

    Регистрация:
    21 янв 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    о, спасибо...работает.

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