Имя: Пароль:
1C
1С v8
СКД нужна помощь гуру
0 xantimans
 
26.11.13
10:22
Всем привет!
У меня следующая ситуация. Попросили меня переделать отчет "Расчетная ведомость организация", чтоб она отражала перемещения сотрудников по подразделениям в течении расчетного месяца(грубо говоря аванс чел получал числясь в одном подразделении, а зп в конце месяца оставшуюся в другом, у подразделений разные ИФНС). Запросы я переделал, отчет работает идеально до момента наложения условий, если я формирую отчет по конкретным сотрудникам, то в результат мне выводится вся стуктура подразделений с суммами и итоги общие считаются по всей компании. Если выбираю и подразделение и сотрудника, выводится норм но общий итог по всему подразделению.
1 х86
 
26.11.13
10:27
(0)конкретно пропиши отборы в тексте запроса с помощью {}
2 xantimans
 
26.11.13
10:35
(0)да вроде все прописал вот код из "Взаиморасчетов":
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    Взаиморасчеты.Организация КАК Организация,
    ВЫБОР
        КОГДА Взаиморасчеты.Организация.ГоловнаяОрганизация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)
            ТОГДА Взаиморасчеты.Организация
        ИНАЧЕ Взаиморасчеты.Организация.ГоловнаяОрганизация
    КОНЕЦ КАК ГоловнаяОрганизация,
    Взаиморасчеты.Физлицо КАК ФизЛицо,
    ВЫБОР
        КОГДА Взаиморасчеты.СпособВыплаты = ЗНАЧЕНИЕ(Перечисление.СпособыВыплатыЗарплаты.ЧерезКассу)
                И ВзаиморасчетыСДепонентамиОрганизаций.Регистратор ЕСТЬ NULL
            ТОГДА "Через кассу "
        КОГДА Взаиморасчеты.СпособВыплаты = ЗНАЧЕНИЕ(Перечисление.СпособыВыплатыЗарплаты.ЧерезБанк)
                И ВзаиморасчетыСДепонентамиОрганизаций.Регистратор ЕСТЬ NULL
            ТОГДА "Перечислено в банк "
        КОГДА НЕ ВзаиморасчетыСДепонентамиОрганизаций.Регистратор ЕСТЬ NULL
            ТОГДА "Задепонировано"
        ИНАЧЕ "Способ выплаты не указан "
    КОНЕЦ + ВЫБОР
        КОГДА (Взаиморасчеты.ХарактерВыплаты = ЗНАЧЕНИЕ(Перечисление.ХарактерВыплатыЗарплаты.ПлановыйАванс)
                ИЛИ Взаиморасчеты.ХарактерВыплаты = ЗНАЧЕНИЕ(Перечисление.ХарактерВыплатыЗарплаты.АвансЗаПервуюПоловинуМесяца))
                И ВзаиморасчетыСДепонентамиОрганизаций.Регистратор ЕСТЬ NULL
            ТОГДА "(аванс)"
        КОГДА Взаиморасчеты.ХарактерВыплаты = ЗНАЧЕНИЕ(Перечисление.ХарактерВыплатыЗарплаты.Зарплата)
                И ВзаиморасчетыСДепонентамиОрганизаций.Регистратор ЕСТЬ NULL
            ТОГДА "(под расчет)"
        КОГДА Взаиморасчеты.ХарактерВыплаты = ЗНАЧЕНИЕ(Перечисление.ХарактерВыплатыЗарплаты.ПустаяСсылка)
                И ВзаиморасчетыСДепонентамиОрганизаций.Регистратор ЕСТЬ NULL
                И Взаиморасчеты.СуммаВзаиморасчетов > 0
            ТОГДА "(не указано)"
        КОГДА Взаиморасчеты.ХарактерВыплаты = ЗНАЧЕНИЕ(Перечисление.ХарактерВыплатыЗарплаты.ПустаяСсылка)
                И ВзаиморасчетыСДепонентамиОрганизаций.Регистратор ЕСТЬ NULL
                И Взаиморасчеты.СуммаВзаиморасчетов < 0
            ТОГДА "(погашено задолженности)"
        КОГДА ВзаиморасчетыСДепонентамиОрганизаций.Регистратор ЕСТЬ NULL
            ТОГДА "(межрасчет)"
        ИНАЧЕ ""
    КОНЕЦ КАК ИмяВидаРасчета,
    "А" КАК ПриоритетВидаРасчета,
    НАЧАЛОПЕРИОДА(Взаиморасчеты.Период, МЕСЯЦ) КАК ПериодРегистрации,
    "Всего выплачено" КАК Группа,
    5 КАК ПриоритетГруппы,
    Взаиморасчеты.СуммаВзаиморасчетов КАК Результат,
    Взаиморасчеты.Регистратор КАК Регистратор,
    Взаиморасчеты.Ведомость КАК Ведомость
ПОМЕСТИТЬ Взаиморасчеты
ИЗ
    РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций КАК Взаиморасчеты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСДепонентамиОрганизаций КАК ВзаиморасчетыСДепонентамиОрганизаций
        ПО (ВзаиморасчетыСДепонентамиОрганизаций.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход))
            И (ВзаиморасчетыСДепонентамиОрганизаций.Ведомость = Взаиморасчеты.Ведомость)
            И (ВзаиморасчетыСДепонентамиОрганизаций.Физлицо = Взаиморасчеты.Физлицо)
ГДЕ
    Взаиморасчеты.Период МЕЖДУ &НачалоПериода И &КонецПериода
    И Взаиморасчеты.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
    И Взаиморасчеты.СуммаВзаиморасчетов <> 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Взаиморасчеты.ФизЛицо,
    Взаиморасчеты.Регистратор.Дата
ПОМЕСТИТЬ ФизЛицоДата
ИЗ
    Взаиморасчеты КАК Взаиморасчеты
;

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

СГРУППИРОВАТЬ ПО
    ФизЛицоДата.РегистраторДата,
    ФизЛицоДата.ФизЛицо
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДатыПереходаВПодразделения.РегистраторДата,
    ДатыПереходаВПодразделения.ФизЛицо,
    РаботникиОрганизаций.ПодразделениеОрганизации КАК Подразделение
ПОМЕСТИТЬ Подразделения
ИЗ
    ДатыПереходаВПодразделения КАК ДатыПереходаВПодразделения
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
        ПО ДатыПереходаВПодразделения.Период = РаботникиОрганизаций.Период
            И ДатыПереходаВПодразделения.ФизЛицо = РаботникиОрганизаций.Сотрудник.Физлицо
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Взаиморасчеты.Организация,
    Взаиморасчеты.ГоловнаяОрганизация,
    Подразделения.Подразделение КАК ПодразделениеОрганизации,
    Взаиморасчеты.ФизЛицо,
    Взаиморасчеты.ИмяВидаРасчета,
    Взаиморасчеты.ПриоритетВидаРасчета,
    Взаиморасчеты.ПериодРегистрации,
    Взаиморасчеты.Группа,
    Взаиморасчеты.ПриоритетГруппы,
    Взаиморасчеты.Результат,
    Взаиморасчеты.Регистратор,
    Взаиморасчеты.Ведомость
ИЗ
    Взаиморасчеты КАК Взаиморасчеты
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Подразделения КАК Подразделения
        ПО Взаиморасчеты.ФизЛицо = Подразделения.ФизЛицо
            И Взаиморасчеты.Регистратор.Дата = Подразделения.РегистраторДата
{ГДЕ
    Взаиморасчеты.ФизЛицо.*,
    Взаиморасчеты.Организация.*,
    Подразделения.Подразделение.* КАК ПодразделениеОрганизации}
3 xantimans
 
26.11.13
10:40
(2)->(1)
4 xantimans
 
26.11.13
10:52
апну
5 catena
 
26.11.13
11:01
Попробуй

Взаиморасчеты.ФизЛицо.* как ФизЛицо,

По крайней мере построитель страдает самостоятельным придумыванием псевдонимов.
6 xantimans
 
26.11.13
12:39
Проблема решилась переписанием кода с
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ) КАК ПериодРегистрации
ПОМЕСТИТЬ Дни
ИЗ
    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &КонецПериода

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ РАЗЛИЧНЫЕ
    КОНЕЦПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ)
ИЗ
    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &КонецПериода
;

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

СГРУППИРОВАТЬ ПО
    Дни.ПериодРегистрации,
    РаботникиОрганизаций.Сотрудник
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ДатыПереходаВПодразделения.ПериодРегистрации КАК ПериодРегистрации,
    РаботникиОрганизаций.Сотрудник.Физлицо КАК ФизЛицо,
    РаботникиОрганизаций.ПодразделениеОрганизации
ПОМЕСТИТЬ ФизЛицоПодразделение
ИЗ
    ДатыПереходаВПодразделения КАК ДатыПереходаВПодразделения
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
        ПО ДатыПереходаВПодразделения.Период = РаботникиОрганизаций.Период
            И ДатыПереходаВПодразделения.Сотрудник = РаботникиОрганизаций.Сотрудник
            И (РаботникиОрганизаций.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение))
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    УдержанияРаботниковОрганизации.ОбособленноеПодразделение КАК Организация,
    УдержанияРаботниковОрганизации.Организация КАК ГоловнаяОрганизация,
    УдержанияРаботниковОрганизации.ФизЛицо КАК ФизЛицо,
    УдержанияРаботниковОрганизации.ВидРасчета.Наименование КАК ИмяВидаРасчета,
    "А" + УдержанияРаботниковОрганизации.ВидРасчета.Код КАК ПриоритетВидаРасчета,
    "Всего удержано" КАК Группа,
    4 КАК ПриоритетГруппы,
    УдержанияРаботниковОрганизации.Результат КАК Результат,
    УдержанияРаботниковОрганизации.ПериодРегистрации КАК ПериодРегистрации,
    УдержанияРаботниковОрганизации.Регистратор КАК Регистратор,
    НЕОПРЕДЕЛЕНО КАК Ведомость,
    ФизЛицоПодразделение.ПодразделениеОрганизации КАК ПодразделениеОрганизации
ИЗ
    РегистрРасчета.УдержанияРаботниковОрганизаций КАК УдержанияРаботниковОрганизации
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ФизЛицоПодразделение КАК ФизЛицоПодразделение
        ПО УдержанияРаботниковОрганизации.ПериодРегистрации = ФизЛицоПодразделение.ПериодРегистрации
            И УдержанияРаботниковОрганизации.ФизЛицо = ФизЛицоПодразделение.ФизЛицо
ГДЕ
    УдержанияРаботниковОрганизации.ПериодРегистрации МЕЖДУ &НачалоПериода И &КонецПериода
    И УдержанияРаботниковОрганизации.Результат <> 0
{ГДЕ
    УдержанияРаботниковОрганизации.ФизЛицо.* КАК ФизЛицо,
    УдержанияРаботниковОрганизации.ОбособленноеПодразделение.* КАК Организация,
    ФизЛицоПодразделение.ПодразделениеОрганизации.* КАК ПодразделениеОрганизации
}

на

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    УдержанияРаботниковОрганизации.ОбособленноеПодразделение КАК Организация,
    УдержанияРаботниковОрганизации.Организация КАК ГоловнаяОрганизация,
    УдержанияРаботниковОрганизации.ФизЛицо КАК ФизЛицо,
    УдержанияРаботниковОрганизации.ВидРасчета.Наименование КАК ИмяВидаРасчета,
    "А" + УдержанияРаботниковОрганизации.ВидРасчета.Код КАК ПриоритетВидаРасчета,
    "Всего удержано" КАК Группа,
    4 КАК ПриоритетГруппы,
    УдержанияРаботниковОрганизации.Результат КАК Результат,
    УдержанияРаботниковОрганизации.ПериодРегистрации КАК ПериодРегистрации,
    УдержанияРаботниковОрганизации.Регистратор КАК Регистратор,
    НЕОПРЕДЕЛЕНО КАК Ведомость
ПОМЕСТИТЬ Удержания
ИЗ
    РегистрРасчета.УдержанияРаботниковОрганизаций КАК УдержанияРаботниковОрганизации
ГДЕ
    УдержанияРаботниковОрганизации.ПериодРегистрации МЕЖДУ &НачалоПериода И &КонецПериода
    И УдержанияРаботниковОрганизации.Результат <> 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Удержания.ФизЛицо,
    Удержания.Регистратор.Дата
ПОМЕСТИТЬ ФизЛицоДата
ИЗ
    Удержания КАК Удержания
;

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

СГРУППИРОВАТЬ ПО
    ФизЛицоДата.РегистраторДата,
    ФизЛицоДата.ФизЛицо
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДатыПереходаВПодразделения.РегистраторДата,
    ДатыПереходаВПодразделения.ФизЛицо,
    РаботникиОрганизаций.ПодразделениеОрганизации КАК Подразделение
ПОМЕСТИТЬ Подразделения
ИЗ
    ДатыПереходаВПодразделения КАК ДатыПереходаВПодразделения
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
        ПО ДатыПереходаВПодразделения.Период = РаботникиОрганизаций.Период
            И ДатыПереходаВПодразделения.ФизЛицо = РаботникиОрганизаций.Сотрудник.Физлицо
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Удержания.Организация,
    Удержания.ГоловнаяОрганизация,
    Удержания.ФизЛицо,
    Удержания.ИмяВидаРасчета,
    Удержания.ПриоритетВидаРасчета,
    Удержания.Группа,
    Удержания.ПриоритетГруппы,
    Удержания.Результат,
    Удержания.ПериодРегистрации,
    Удержания.Регистратор,
    Удержания.Ведомость,
    Подразделения.Подразделение
ИЗ
    Удержания КАК Удержания
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Подразделения КАК Подразделения
        ПО Удержания.ФизЛицо = Подразделения.ФизЛицо
            И Удержания.Регистратор.Дата = Подразделения.РегистраторДата
{ГДЕ
    Удержания.ФизЛицо.* КАК ФизЛицо,
    Удержания.Организация.* КАК Организация,
    Подразделения.Подразделение.* КАК ПодразделениеОрганизации}            

Правда я не понял в чем прикол для СКД, результат в запросах одинаковый
7 CHerypga
 
26.11.13
12:46
(6) Есть такая обработка Консоль отчетов СКД вроде называется. Работает под управляемыми формами. Я бы предложил загнать оба отчета туда и посмотреть какой запрос получается после того как над ним поработает СКД