8.х Запрос в консоли запросов и системе компоновки данных..

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

  1. TopicStarter Overlay
    pathetique
    Offline

    pathetique Опытный в 1С

    Регистрация:
    21 янв 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    Здавствуйте! Потребовалось немного изменить отчет "Свод начисленной зарплаты организаций" из УПП 8.1.
    Смысл такой что сальдо по каждому работнику надо считать как Сумма всех начислений(приход по регистру накопления "ВзаиморасчетыСРаботникамиОрганизаций") минус Сумма выписанная в платежках(ЗарплатаКВыплатеОрганизаций) по данному физлицу.

    Сальдо на начало считается на первое число каждого месяца из диапазона, указанного пользователем(&НачалоПериода - &КонецПериода).

    Я написал запрос, проверил в консоли запросов. Выводит НОРМАЛЬНО. сальдо на начало марта меньше рубля... Затем я засунул это в систему компоновки данных и .... вместо моих 0,78 там получилось 300 с чем-то тысяч 8-(((()))). Я парюсь уже несколько дней, сделал новую компоновку данных, убрал оттуда все группировки(оставил только детальные записи) и та же фигня... как объяснить что консоль запросов и запрос в СКД выводят разные результаты уразуметь не могу....

    Код:
    ВЫБРАТЬ
    ВЫБОР
    КОГДА ПериодыИСальдо.Сумма < 0
    ТОГДА -ПериодыИСальдо.Сумма
    ИНАЧЕ ПериодыИСальдо.Сумма
    КОНЕЦ КАК Результат,
    ПериодыИСальдо.Физлицо,
    ПериодыИСальдо.Организация,
    ПериодыИСальдо.Период КАК ПериодДействия,
    ВЫБОР
    КОГДА ПериодыИСальдо.Организация.ГоловнаяОрганизация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)
    ТОГДА ПериодыИСальдо.Организация
    ИНАЧЕ ПериодыИСальдо.Организация.ГоловнаяОрганизация
    КОНЕЦ КАК ГоловнаяОрганизация,
    ВЫБОР
    КОГДА ПериодыИСальдо.Сумма < 0
    ТОГДА "Долг за работниками на начало месяца"
    ИНАЧЕ "Долг за организацией на начало месяца"
    КОНЕЦ КАК ВидРасчета,
    ВЫБОР
    КОГДА ПериодыИСальдо.Сумма < 0
    ТОГДА "А1"
    ИНАЧЕ "А2"
    КОНЕЦ КАК Порядок,
    "1.Сальдо на начало" КАК ВидДвижения,
    ВЫБОР
    КОГДА ПериодыИСальдо.Сумма < 0
    ТОГДА "Долг за работниками на начало месяца"
    ИНАЧЕ "Долг за организацией на начало месяца"
    КОНЕЦ КАК ВидРасчетаГруппа
    ИЗ
    (ВЫБРАТЬ
    СУММА(Сальдо.Сумма) КАК Сумма,
    Сальдо.Физлицо КАК Физлицо,
    Сальдо.Организация КАК Организация,
    Периоды.Период КАК Период
    ИЗ
    
    //Получаем список месяцев(1-е число каждого месяца) из выбранного периода
    (ВЫБРАТЬ РАЗЛИЧНЫЕ
    НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ) КАК Период
    ИЗ
    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
    ГДЕ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &КонецПериода) КАК Периоды
    //Берем приходы за периоды до &ДатаНачала и в качестве периода ставим 1-е число предшествующего //ДН месяца
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    ВзаиморасчетыСРаботникамиОрганизацийОбороты.СуммаВзаиморасчетовПриход КАК Сумма,
    ВзаиморасчетыСРаботникамиОрганизацийОбороты.Физлицо КАК Физлицо,
    ВзаиморасчетыСРаботникамиОрганизацийОбороты.Организация КАК Организация,
    ДОБАВИТЬКДАТЕ(&НачалоПериода, МЕСЯЦ, -1) КАК Период
    ИЗ
    РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Обороты(, ДОБАВИТЬКДАТЕ(&НачалоПериода, СЕКУНДА, -1), , ) КАК ВзаиморасчетыСРаботникамиОрганизацийОбороты
    
    ОБЪЕДИНИТЬ ВСЕ
    //Здесь берем суммы прихода за месяцы из выбранного периода			
    ВЫБРАТЬ
    ВзаиморасчетыСРаботникамиОрганизацийОбороты.СуммаВзаиморасчетовПриход,
    ВзаиморасчетыСРаботникамиОрганизацийОбороты.Физлицо,
    ВзаиморасчетыСРаботникамиОрганизацийОбороты.Организация,
    ВзаиморасчетыСРаботникамиОрганизацийОбороты.Период
    ИЗ
    РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Обороты(&НачалоПериода, &КонецПериода, Месяц, ) КАК ВзаиморасчетыСРаботникамиОрганизацийОбороты
    
    ОБЪЕДИНИТЬ ВСЕ
    //Берем суммы выплат за все предшествующие ДатеНачала периоды			
    ВЫБРАТЬ
    -(ЗарплатаКВыплатеОрганизацийЗарплата.Сумма + ЗарплатаКВыплатеОрганизацийЗарплата.КомпенсацияЗаЗадержкуЗарплаты),
    ЗарплатаКВыплатеОрганизацийЗарплата.Физлицо,
    ЗарплатаКВыплатеОрганизаций.Организация,
    ДОБАВИТЬКДАТЕ(&НачалоПериода, МЕСЯЦ, -1)
    ИЗ
    Документ.ЗарплатаКВыплатеОрганизаций.Зарплата КАК ЗарплатаКВыплатеОрганизацийЗарплата
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗарплатаКВыплатеОрганизаций КАК ЗарплатаКВыплатеОрганизаций
    ПО ЗарплатаКВыплатеОрганизацийЗарплата.Ссылка = ЗарплатаКВыплатеОрганизаций.Ссылка
    ГДЕ
    ЗарплатаКВыплатеОрганизаций.ПериодРегистрации < &НачалоПериода
    
    ОБЪЕДИНИТЬ ВСЕ
    //Суммы выплат за периоды из выбранного диапазона			
    ВЫБРАТЬ
    -(ЗарплатаКВыплатеОрганизацийЗарплата.Сумма + ЗарплатаКВыплатеОрганизацийЗарплата.КомпенсацияЗаЗадержкуЗарплаты),
    ЗарплатаКВыплатеОрганизацийЗарплата.Физлицо,
    ЗарплатаКВыплатеОрганизаций.Организация,
    ЗарплатаКВыплатеОрганизаций.ПериодРегистрации
    ИЗ
    Документ.ЗарплатаКВыплатеОрганизаций.Зарплата КАК ЗарплатаКВыплатеОрганизацийЗарплата
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗарплатаКВыплатеОрганизаций КАК ЗарплатаКВыплатеОрганизаций
    ПО ЗарплатаКВыплатеОрганизацийЗарплата.Ссылка = ЗарплатаКВыплатеОрганизаций.Ссылка
    ГДЕ
    ЗарплатаКВыплатеОрганизаций.ПериодРегистрации >= &НачалоПериода
    И ЗарплатаКВыплатеОрганизаций.ПериодРегистрации < &КонецПериода) КАК Сальдо
    // т.к. считаем сальдо на начало месяца, начисления за сам месяц не нужны, только за предыдущие
    ПО Периоды.Период > Сальдо.Период
    
    
    СГРУППИРОВАТЬ ПО
    Сальдо.Организация,
    Сальдо.Физлицо,
    Периоды.Период) КАК ПериодыИСальдо
    
    Вроде запрос не сложный, но в консли запросов и СКД дает разные результаты. Как я понял главное - не правильно считает сальдо на дату начала в СКД! но почему - уже третий день не врублюсь. помогите разобраться :unsure:
  2. AlexFF
    Offline

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

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    проверь какое время у дат стоит
    и в консольке и в скд
  3. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Строки, подобные
    Код:
    ДОБАВИТЬКДАТЕ(&НачалоПериода, СЕКУНДА, -1)
    
    надо переписать, как:
    Код:
    {ДОБАВИТЬКДАТЕ(&НачалоПериода, СЕКУНДА, -1)}
    
    Менять ТОЛЬКО в параметрах виртуальных таблиц
  4. TopicStarter Overlay
    pathetique
    Offline

    pathetique Опытный в 1С

    Регистрация:
    21 янв 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    Имеется в виду здесь?
    РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Обороты(,ДОБАВИТЬКДАТЕ(&;НачалоПериода, СЕКУНДА, -1), , )
    Я поставил фигурные скобки у меня опять какая-то фигня вывелась тока еще больше....:)
    а можно понять в чем косяк в этом месте. я попробовал заменить обращение к вирт. таблице оборотов в этом фрагменте на обычный запрос из регистра накопления + всякие условия ГДЕ и он начал считать правильно. НО че за фигня я не понял :unsure:

    В рамках когда этот запрос считает по всей организации это будет тормоз еще тот...
  5. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Так не в одно месте надо менять :)

    Отсюда вообще выкинуть надо:
    Код:
    "РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Обороты(&НачалоПериода, &КонецПериода, Месяц, ) КАК ВзаиморасчетыСРаботникамиОрганизацийОбороты"
    
    Код:
    "РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Обороты(, , Месяц, ) КАК ВзаиморасчетыСРаботникамиОрганизацийОбороты"
    
  6. TopicStarter Overlay
    pathetique
    Offline

    pathetique Опытный в 1С

    Регистрация:
    21 янв 2008
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26
    BabySG большое спасибо!!!!
  7. b1gs
    Offline

    b1gs

    Регистрация:
    5 фев 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    А как в СКД его написать или вручную запрос исправлять , но потом нельзя будет СКД открыть ? :unsure:
  8. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Почему?
    В СКД точно также редактируется запрос...
  9. b1gs
    Offline

    b1gs

    Регистрация:
    5 фев 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    У меня есть регистр накопления "ДенежныеСредства.Остатки" вот и сюда мне не выбирает остаток если ставишь дату начала 1.01.2010 , а если ставить 31.12.2009 тогда тянет остатки вот я хочу отнять секунду , и посмотреть его вытянет или нет.... но в чем проблема тут что я не могу написать в параментрах виртуальной таблици выражение "ДАБАВИТЬКДАТЕ(&ДатаНачала,СЕКУНДА,-1)" , пишет необходимо выражение ")" , а в условия тоже не могу... и как его в ручную только чтоли ? :unsure:
  10. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Приложите свой отчет к сообщению - проще будет разобраться.
    ЗЫ. &ДатаНачала нафиг не нужна в компоновке в таком виде - он ее проигнорирует
  11. b1gs
    Offline

    b1gs

    Регистрация:
    5 фев 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Вот отчет... только не на СКД а на универсальном ;)

    Вложения:

  12. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Не вникал в смысл запроса, но параметры надо задать так:
    Код:
    "ВЫБРАТЬ
    ДвиженияДенежныхСредствОбороты.ДокументПланированияПлатежа,
    ДенежныеСредстваОбороты.БанковскийСчетКасса,
    ДенежныеСредстваОбороты.ВидДенежныхСредств,
    ДенежныеСредстваОбороты.Организация,
    СУММА(ЕСТЬNULL(ДенежныеСредстваОбороты.СуммаПриход, 0)) КАК СуммаПриход,
    СУММА(ЕСТЬNULL(ДенежныеСредстваОбороты.СуммаРасход, 0)) КАК СуммаРасход,
    СУММА(ЕСТЬNULL(ДенежныеСредстваОстатки.СуммаОстаток, 0) + ЕСТЬNULL(ДенежныеСредстваОбороты.СуммаПриход, 0) - ЕСТЬNULL(ДенежныеСредстваОбороты.СуммаРасход, 0)) КАК СуммаКонечныйОстаток,
    СУММА(ЕСТЬNULL(ДенежныеСредстваОстатки.СуммаОстаток, 0)) КАК СуммаНачальныйОстаток
    ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(, , , ) КАК ДвиженияДенежныхСредствОбороты
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДенежныеСредства.Обороты(, , , ) КАК ДенежныеСредстваОбороты
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДенежныеСредства.Остатки({(&НачалоПериода)}, ) КАК ДенежныеСредстваОстатки
    ПО ДенежныеСредстваОбороты.БанковскийСчетКасса = ДенежныеСредстваОстатки.БанковскийСчетКасса
    И ДенежныеСредстваОбороты.ВидДенежныхСредств = ДенежныеСредстваОстатки.ВидДенежныхСредств
    И ДенежныеСредстваОбороты.Организация = ДенежныеСредстваОстатки.Организация
    ПО ДвиженияДенежныхСредствОбороты.БанковскийСчетКасса = ДенежныеСредстваОбороты.БанковскийСчетКасса
    И ДвиженияДенежныхСредствОбороты.ВидДенежныхСредств = ДенежныеСредстваОбороты.ВидДенежныхСредств
    И ДвиженияДенежныхСредствОбороты.Организация = ДенежныеСредстваОбороты.Организация
    </span>
    СГРУППИРОВАТЬ ПО
    ДенежныеСредстваОбороты.Организация,
    ДенежныеСредстваОбороты.ВидДенежныхСредств,
    ДвиженияДенежныхСредствОбороты.ДокументПланированияПлатежа,
    ДенежныеСредстваОбороты.БанковскийСчетКасса"
    </FONT></FONT></pre>
  13. b1gs
    Offline

    b1gs

    Регистрация:
    5 фев 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    почему именно {(&НачалоПериода)} таким образом ?
    и как его написать через конструктор запросов , когда там вписываю параметры то они возвращаются в старом виде
  14. b1gs
    Offline

    b1gs

    Регистрация:
    5 фев 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    добавил есть нулл и все работает красиво , не думал что это все настолько меняет =) спасибо !! ;)
  15. b1gs
    Offline

    b1gs

    Регистрация:
    5 фев 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Еще вопрос, когда строится отчет на универсальном отчете, как сделать так что бы была групировка и если значение в одном поле нулл что бы его не выводило...

    В прикрепленном файле что бы было понятней, там есть документ планирования платежа и вот он не заполнен нигде(кроме одного) , и было бы не плохо что бы те которые не заполненые что бы они не выводились ;)

    Вложения:

  16. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    В универсальном - только рисуя вывод самому. В СКД это делается без проблем.

    Так что лучше делать на СКД
  17. b1gs
    Offline

    b1gs

    Регистрация:
    5 фев 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    нужно сделать на универсальном :(
  18. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Тогда рисуйте вывод сами - других вариантов нет.

    Кстати, в официальная позиция 1С: построитель отчетов развиваться, поддерживаться и исправлять ошибки - не будет. Нужно оно вам? :)))
  19. b1gs
    Offline

    b1gs

    Регистрация:
    5 фев 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1

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