7.7 Необходима доработка отчета "Расчетная ведомость" в ЗиК 7.7

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем Дмитрий1985, 16 май 2013.

  1. TopicStarter Overlay
    Дмитрий1985
    Offline

    Дмитрий1985 Опытный в 1С

    Регистрация:
    25 фев 2013
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Возникла у моих бухов такая хотелка.
    Отчет--Расчетная ведомость--Т51.
    Хотелка 1:
    Чтобы когда выбираем именно внутреннего совместителя, то отчет показывался только по нему, если основного, то по основному.
    Сейчас все по внутр. совм. и по осн. сотруднику показывается одной строкой.

    Хотелка 2:
    Столбец 10. "Прочие"- это касается прочих начислений. Очень хотят чтобы все ВР, входящие в графу "Прочие" были расписаны по отдельности, т.е. динамически формировались колонки с названием ВР и потом туда это все дело выводилось.

    Начать решил с п.2.
    Вот что планирую:
    1. Создать еще один запрос, в котором будут включены все ВР, которые относятся к графе "прочие"(создал еще одну группу расчетов, на входимость в которую буду проверять), выгружу содержимое запроса в ТЗ и пробегусь по ней, накидав графы таблицу в "шапку".
    2. В цикле по первичному запросу, который "выгребает" все основные данные встрою еще один запрос, который будет "вытаскивать" данные по конкретному сотруднику, также выгружу в ТЗ и потом запишу эти данные в уже накиданные графы таблицы.

    Группу расчета уже создал.
    Вот какой запрос:

    Запрос3 = СоздатьОбъект("Запрос");
    ТекстЗапросаПоСотр =
    "//{{ЗАПРОССОТР(Т51)
    |Период с НачалоПериода по КонецПериода;
    |Сотрудник = ЖурналРасчетов.Зарплата.Объект;
    |Расчет = ЖурналРасчетов.Зарплата.ВидРасч;
    |ДниВЖурнале = ЖурналРасчетов.Зарплата.Дни;
    |Результат = ЖурналРасчетов.Зарплата.Результат;
    |Группировка Расчет все ВошедшиеВЗапрос;
    |Условие((Результат<>0)
    или(ДниВЖурнале<>0));
    |Условие((Расчет.ВходитВГруппу(ГруппаРасчетов.ПрочиеНачисления)=1));";

    ТекстЗапросаПоСотр = ТекстЗапросаПоСотр +
    ?(СпособВыборкиСотрудников=3,"
    |Условие(Сотрудник в СписокФизЛиц);",
    ?(СпособВыборкиСотрудников=2,"
    |Условие(Подразделение в ВыбранноеПодразделение);",""))+"
    |"//}}ЗАПРОС
    ;

    Потом выгружаю этот запрос в ТЗ, но там почему-то идет группировка и по сотрудникам и по ВР и сотрудники вовсе не те, что выгребаются основным запросом:
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Т51)
    |Период с НачалоПериода по КонецПериода;
    |Сотрудник = ЖурналРасчетов.Зарплата.Объект;
    |ФизЛицо = ЖурналРасчетов.Зарплата.Объект.ОсновнойЭлемент;
    |Должность = ЖурналРасчетов.Зарплата.Объект.ОсновнойЭлемент.Должность;
    |Подразделение = ЖурналРасчетов.Зарплата.Объект.ОсновнойЭлемент.Подразделение;
    |Оклад = ЖурналРасчетов.Зарплата.Объект.ОсновнойЭлемент.Оклад;
    |Расчет = ЖурналРасчетов.Зарплата.ВидРасч;
    |Результат = ЖурналРасчетов.Зарплата.Результат;
    |ДатаНачала = ЖурналРасчетов.Зарплата.ДатаНачала;
    |ДниВЖурнале = ЖурналРасчетов.Зарплата.Дни;
    |ЧасыВЖурнале = ЖурналРасчетов.Зарплата.Часы;
    |Функция Дни = Сумма(ДниВЖурнале) когда ((Расчет.ВходитВГруппу(ГруппаРасчетов.ОсновныеНачисления)=1) и (ФизЛицо = Сотрудник));
    |Функция ПраздничныеДни = Сумма(ДниВЖурнале) когда (Расчет=ВидРасчета.ОплатаПраздничных);
    |Функция Часы = Сумма(ЧасыВЖурнале) когда ((Расчет.ВходитВГруппу(ГруппаРасчетов.ОсновныеНачисления)=1) и (ФизЛицо = Сотрудник));
    |Функция ПраздничныеЧасы = Сумма(ЧасыВЖурнале) когда (Расчет=ВидРасчета.ОплатаПраздничных);
    |Функция Повременно = Сумма(Результат) когда (Расчет.ВходитВГруппу(ГруппаРасчетов.ОсновныеНачисления)=1);
    |Функция Сдельно = Сумма(Результат) когда ((Расчет=ВидРасчета.ОплатаПоНаряду)или(Расчет=ВидРасчета.СдельныйНаряд));
    |Функция МатериальныеБлага = Сумма(Результат) когда (Расчет.ВходитВГруппу(ГруппаРасчетов.ДоходыВНатуральнойФорме)=1);
    |Функция ВсегоНачислено = Сумма(Результат) когда (Расчет.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления)=1);
    |Функция НДФЛ = Сумма(Результат) когда (Расчет.ВходитВГруппу(ГруппаРасчетов.ВсеИсчисленныеНДФЛ)=1);
    |Функция ВсегоУдержано = Сумма(Результат) когда (Расчет.ВходитВГруппу(ГруппаРасчетов.ВсеУдержания)=1);
    |Функция Долг = Сумма(Результат) когда ((Расчет=ВидРасчета.Возврат)или(Расчет=ВидРасчета.НачальноеСальдоЗадолженность)или(Расчет=ВидРасчета.НачальноеСальдоОкругления)или(Расчет=ВидРасчета.НачальноеСальдоПереплатаНДФЛ));
    |Функция ВыплаченоЗаПрошлые = Сумма(Результат) когда ((ДатаНачала < НачалоПериода) и (Расчет = ВидРасчета.ВыплатаЗарплаты));";
    Если Группировать = 1 Тогда
    ТекстЗапроса = ТекстЗапроса + "
    |Группировка Подразделение без групп;";
    КонецЕсли;
    ТекстЗапроса = ТекстЗапроса + "
    |Группировка ФизЛицо без групп;
    |Условие((Результат<>0)или(ДниВЖурнале<>0));"+

    ?(СпособВыборкиСотрудников=3,"
    |Условие(Сотрудник в СписокФизЛиц);",
    ?(СпособВыборкиСотрудников=2,"
    |Условие(Подразделение в ВыбранноеПодразделение);",""))+"
    |"//}}ЗАПРОС
    ;


    Что делаю не так? Или может есть способ умнее?
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Все как бы ок... Только вот с созданной группой расчетов "прочее" думаю иначе. Вдруг появится новое начисление и вы забудете его включить в группу? Лучше наоборот. Внести в группу начисления не относящиеся к прочим.
  3. TopicStarter Overlay
    Дмитрий1985
    Offline

    Дмитрий1985 Опытный в 1С

    Регистрация:
    25 фев 2013
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    хм.... даже в голову не приходило. спасибо!
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Не за что. Только в данном случае чуточку измените условие (не учитывать удержания)
  5. vip6374
    Offline

    vip6374

    Регистрация:
    20 май 2006
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Запрос внутри существующего отчета или отдельный, не внутренний?
  6. TopicStarter Overlay
    Дмитрий1985
    Offline

    Дмитрий1985 Опытный в 1С

    Регистрация:
    25 фев 2013
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Запрос внутри существующего.

    спасибо. все получилось в части детализации колонки "Прочие". Проверял, все "бьется", суммы сходятся.
    правда, пока оставил способ через вновь созданную группу расчетов "ПрочиеРасчеты".

    Остался вопрос:
    Как сделать, чтобы отчет различал основного сотрудника и внутреннего совместителя?
    Понимаю, что надо корявить запрос.
    Ткните немного носом?
  7. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    В справочнике Сотрудники есть реквизит: ОсновнойЭлемент.
    Сотрудник=Сотрудник.ОсновнойЭлемент это основной. Иначе - внутренний совместитель.
  8. TopicStarter Overlay
    Дмитрий1985
    Offline

    Дмитрий1985 Опытный в 1С

    Регистрация:
    25 фев 2013
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Опять спасибо. Смысл понял.
    Попробую это в запрос как-то внедрить.
  9. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Не за что. Примерно так:
    Код:
     |
    |Объект   = ЖурналРасчетов.Зарплата.Объект;
    |ФизЛицо  = ЖурналРасчетов.Зарплата.Объект.ОсновнойЭлемент;
    
    смысл думаю понятен
  10. TopicStarter Overlay
    Дмитрий1985
    Offline

    Дмитрий1985 Опытный в 1С

    Регистрация:
    25 фев 2013
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Ага, понял!
    Просто вот какое условие по части сотрудников в запросе:

    ?(СпособВыборкиСотрудников=3,
    |Условие(Сотрудник в СписокФизЛиц);",

    И тут Основной/Неосновной никак не отрабатываются. Просто берется целиком сотр-ик.
    Чую, что решение может быть довольно простым, но пока не пойму как.

    СписокФизЛиц формируется так:

    СписокФизЛиц = СоздатьОбъект("СписокЗначений");
    ВыводитьДолжностьИОклад = "";
    Если (СпособВыборкиСотрудников=3) Тогда
    СпрСотрудников = СоздатьОбъект("Справочник.Сотрудники");
    Для Сч = 1 По Сотрудники.РазмерСписка() Цикл
    СпрСотрудников.ВыбратьЭлементыПоРеквизиту("ОсновнойЭлемент",Сотрудники.ПолучитьЗначение(Сч),0,0);
    Пока СпрСотрудников.ПолучитьЭлемент()=1 Цикл
    СписокФизЛиц.ДобавитьЗначение(СпрСотрудников.ТекущийЭлемент());
    КонецЦикла;
    КонецЦикла;
    КонецЕсли;
  11. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    А если так
    Код:
    Если Способ=1 Тогда //все
    ИначеЕсли Способ=2 Тогда //основные
    ТекстЗапроса=ТекстЗапроса+"Условие (Сотрудник=ФизЛицло)";
    
    ИначеЕсли Способ=3 Тогда //совместители
    ТекстЗапроса=ТекстЗапроса+"Условие (Сотрудник<>ФизЛицло)";
    КонецЕсли;
    
    
  12. TopicStarter Overlay
    Дмитрий1985
    Offline

    Дмитрий1985 Опытный в 1С

    Регистрация:
    25 фев 2013
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Блин... А зачем, "накидывать" еще в какой-то СписокЗначений, осуществляя поиск по основному элементу?
    Если мы уже подобавляли данные в список значений и там именно внутренний совместитель, как нам надо?
    я просто поменял в условии на вот так:

    |Условие(Сотрудник в Сотрудники);",
    т.е. Сотрудники- это и есть наш первоначальный список. Для чего это еще перекидывать в какой-то промежуточный?
  13. TopicStarter Overlay
    Дмитрий1985
    Offline

    Дмитрий1985 Опытный в 1С

    Регистрация:
    25 фев 2013
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    да нет.. дело в том, что в списке сотрдников может писутствовать как основной сотрудник, так и совместитель.
  14. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Так это-то как раз и предусмортено
  15. TopicStarter Overlay
    Дмитрий1985
    Offline

    Дмитрий1985 Опытный в 1С

    Регистрация:
    25 фев 2013
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    наверное, неправильно объясняю или чего-то недопонимаю.
    в списке одновременно может быть и Иванов совместитель и Петров основной сотрудник.
    а механизм построен так, что 1С зачем-то еще раз бежит по первоначальному списку, где все как надо и ищет в справочнике сотрудников по "ОсновнойЭлемент" и в список, который идет для условия в запросе попадают именно обобщенный сотр. Убираем формирование этого промежуточного списка сотр-ов, вставляем в условие в запросе первоначальный список и все в порядке становится.
    Получается, все решено.
    Спасибо.

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