Имя: Пароль:
1C
 
Учет в разных регистрах в 1 запросе
,
0 pro3ri
 
25.08.15
11:24
ДОбрый день!
Одним запросом делаю движения в управленческий учет (остатки товаров) и бухгалтерский.

Запрос = Новый Запрос;
+ Code
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.УстановитьПараметр("ВидНабор", Перечисления.ВидыНоменклатуры.Набор);
    //Запрос.УстановитьПараметр("ВидУслуга", Перечисления.ВидыНоменклатуры.Услуга);

    Запрос.Текст = "ВЫБРАТЬ
                   |    ЕСТЬNULL(СоставНабора.Комплектующая, ПоступлениеТоваровТовары.Номенклатура) КАК Номенклатура,
                   |    СУММА(ПоступлениеТоваровТовары.Количество * ПоступлениеТоваровТовары.ЕдиницаИзмерения.Коэффициент * ЕСТЬNULL(СоставНабора.Количество, 1)) КАК Количество,
                   |    СУММА(ВЫБОР
                   |            КОГДА ПоступлениеТоваровТовары.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Набор)
                   |                ТОГДА ПоступлениеТоваровТовары.Сумма * СоставНабора.ДоляВСтоимости
                   |            ИНАЧЕ ПоступлениеТоваровТовары.Сумма
                   |        КОНЕЦ) КАК Сумма,
                   |    ПоступлениеТоваровТовары.Качество,
                   |    ПоступлениеТоваровТовары.Ссылка.Дата КАК Период,
                   |    ЕСТЬNULL(СоставНабора.Комплектующая, ПоступлениеТоваровТовары.Номенклатура) КАК СубконтоДт1,
                   |    ВЫБОР
                   |        КОГДА ПоступлениеТоваровТовары.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
                   |            ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Услуги)
                   |        ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Товары)
                   |    КОНЕЦ КАК ВидСубконтоДт1,
                   |    ВЫБОР
                   |        КОГДА ПоступлениеТоваровТовары.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
                   |            ТОГДА ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Затраты)
                   |        ИНАЧЕ ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Товары)
                   |    КОНЕЦ КАК СчетДт,
                   |    ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Поставщики) КАК СчетКт
                   |ИЗ
                   |    Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставНабора КАК СоставНабора
                   |        ПО ПоступлениеТоваровТовары.Номенклатура = СоставНабора.Набор
                   |            И (ПоступлениеТоваровТовары.Номенклатура.ВидНоменклатуры = &ВидНабор)
                   |ГДЕ
                   |    ПоступлениеТоваровТовары.Ссылка = &Ссылка
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    ПоступлениеТоваровТовары.Качество,
                   |    ПоступлениеТоваровТовары.Ссылка.Дата,
                   |    ЕСТЬNULL(СоставНабора.Комплектующая, ПоступлениеТоваровТовары.Номенклатура),
                   |    ВЫБОР
                   |        КОГДА ПоступлениеТоваровТовары.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
                   |            ТОГДА ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Затраты)
                   |        ИНАЧЕ ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Товары)
                   |    КОНЕЦ,
                   |    ЕСТЬNULL(СоставНабора.Комплектующая, ПоступлениеТоваровТовары.Номенклатура),
                   |    ВЫБОР
                   |        КОГДА ПоступлениеТоваровТовары.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
                   |            ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Услуги)
                   |        ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Товары)
                   |    КОНЕЦ";
    Если ЭтоАвансовыйОтчет Тогда
        Запрос.Текст = СтрЗаменить(Запрос.Текст,"ПоступлениеТоваров", "АвансовыйОтчет");
        Запрос.Текст = СтрЗаменить(Запрос.Текст,"ПланСчетов.Управленческий.Поставщики", "ПланСчетов.Управленческий.Сотрудники");
    КонецЕсли;
    Таблица = Запрос.Выполнить().Выгрузить();
    Движения.ОстаткиНоменклатуры.Загрузить(Таблица);
    
    Таблица.Свернуть("Период, СубконтоДт1, ВидСубконтоДт1, СчетДт, СчетКт, Сумма");
    Движения.РегистрБухгалтерии1.Загрузить(Таблица);


Вопрос в том, как сделать, чтобы услуги попадали в регистр бухгалтерии а в управленческий регистр нет.
1 pro3ri
 
25.08.15
11:25
попытка решить так: Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.УстановитьПараметр("ВидНабор", Перечисления.ВидыНоменклатуры.Набор);
    //Запрос.УстановитьПараметр("ВидУслуга", Перечисления.ВидыНоменклатуры.Услуга);
    Запрос.Текст = "ВЫБРАТЬ
                   |    ЕСТЬNULL(СоставНабора.Комплектующая, ПоступлениеТоваровТовары.Номенклатура) КАК Номенклатура,
                   |    СУММА(ПоступлениеТоваровТовары.Количество * ПоступлениеТоваровТовары.ЕдиницаИзмерения.Коэффициент * ЕСТЬNULL(СоставНабора.Количество, 1)) КАК Количество,
                   |    СУММА(ВЫБОР
                   |            КОГДА ПоступлениеТоваровТовары.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Набор)
                   |                ТОГДА ПоступлениеТоваровТовары.Сумма * СоставНабора.ДоляВСтоимости
                   |            ИНАЧЕ ПоступлениеТоваровТовары.Сумма
                   |        КОНЕЦ) КАК Сумма,
                   |    ПоступлениеТоваровТовары.Качество,
                   |    ПоступлениеТоваровТовары.Ссылка.Дата КАК Период,
                   |    ЕСТЬNULL(СоставНабора.Комплектующая, ПоступлениеТоваровТовары.Номенклатура) КАК СубконтоДт1,
                   |    ВЫБОР
                   |        КОГДА ПоступлениеТоваровТовары.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
                   |            ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Услуги)
                   |        ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Товары)
                   |    КОНЕЦ КАК ВидСубконтоДт1,
                   |    ВЫБОР
                   |        КОГДА ПоступлениеТоваровТовары.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
                   |            ТОГДА ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Затраты)
                   |        ИНАЧЕ ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Товары)
                   |    КОНЕЦ КАК СчетДт,
                   |    ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Поставщики) КАК СчетКт
                   |ИЗ
                   |    Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставНабора КАК СоставНабора
                   |        ПО ПоступлениеТоваровТовары.Номенклатура = СоставНабора.Набор
                   |            И (ПоступлениеТоваровТовары.Номенклатура.ВидНоменклатуры = &ВидНабор)
                   |ГДЕ
                   |    ПоступлениеТоваровТовары.Ссылка = &Ссылка
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    ПоступлениеТоваровТовары.Качество,
                   |    ПоступлениеТоваровТовары.Ссылка.Дата,
                   |    ЕСТЬNULL(СоставНабора.Комплектующая, ПоступлениеТоваровТовары.Номенклатура),
                   |    ВЫБОР
                   |        КОГДА ПоступлениеТоваровТовары.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
                   |            ТОГДА ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Затраты)
                   |        ИНАЧЕ ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Товары)
                   |    КОНЕЦ,
                   |    ВЫБОР
                   |        КОГДА ПоступлениеТоваровТовары.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
                   |            ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Услуги)
                   |        ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Товары)
                   |    КОНЕЦ,
                   |    ЕСТЬNULL(СоставНабора.Комплектующая, ПоступлениеТоваровТовары.Номенклатура)";
    Если ЭтоАвансовыйОтчет Тогда
        Запрос.Текст = СтрЗаменить(Запрос.Текст,"ПоступлениеТоваров", "АвансовыйОтчет");
        Запрос.Текст = СтрЗаменить(Запрос.Текст,"ПланСчетов.Управленческий.Поставщики", "ПланСчетов.Управленческий.Сотрудники");
    КонецЕсли;

    Таблица = Запрос.Выполнить().Выгрузить();
    
    Массив = Новый Массив;
    Для каждого СтрокаТЗ Из Таблица Цикл
        
        Если СтрокаТЗ.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Набор Или СтрокаТЗ.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Товар Тогда
        
            Массив.Добавить(СтрокаТЗ);    
        
        КонецЕсли;     
    
    КонецЦикла;
    ТаблицаДляОстатков = Таблица.Скопировать(Массив);
    
    Движения.ОстаткиНоменклатуры.Загрузить(Таблица);
    
    Таблица.Свернуть("Период, СубконтоДт1, ВидСубконтоДт1, СчетДт, СчетКт, Сумма");
    Движения.РегистрБухгалтерии1.Загрузить(Таблица);
2 Медведик
 
25.08.15
11:31
ТС, может результат запроса поместить во временную таблицу, а из нее уже получить выборкой две таблицы - для УУ и БУ отдельно?
3 pro3ri
 
25.08.15
11:34
(2) с временными таблицами не работал, можете привести пример кода?
4 Медведик
 
25.08.15
11:37
ВЫБРАТЬ
...
ПОМЕСТИТЬ МояВременнаяТаблица
ИЗ
....
;

ВЫБРАТЬ
...
ИЗ
МояВременнаяТаблица КАК Т;


Ну и гугл в помощь, раз уж такие азы затруднение вызывают.
5 pro3ri
 
25.08.15
11:52
(4) благодарю.