Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
06 апр 2026, 03:02

1c скд

Автор Shaman_blr, 04 мар 2026, 08:51

0 Пользователей и 1 гость просматривают эту тему.

Shaman_blr

Максим75, вот запрос
ВЫБРАТЬ
    "02_Приход" КАК ТипДанных,
    ВложенныйПриход.Номенклатура КАК Номенклатура,
    ВложенныйПриход.ВидДокумента КАК ВидДокумента,
    ВложенныйПриход.СуммаПриход КАК Сумма
ПОМЕСТИТЬ ВременнаяТаблица
ИЗ
    (ВЫБРАТЬ
        ТоварыНаСкладахОбороты.Номенклатура КАК Номенклатура,
        ВЫБОР
            КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.СборкаТоваров
                    ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров
                ТОГДА "Сборка/Перемещение"
            КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПриобретениеТоваровУслуг
                ТОГДА "Поступление"
            КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
                ТОГДА "Реализация"
            ИНАЧЕ "Прочее"
        КОНЕЦ КАК ВидДокумента,
        СУММА(ТоварыНаСкладахОбороты.ВНаличииПриход) КАК СуммаПриход
    ИЗ
        РегистрНакопления.ТоварыНаСкладах.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК ТоварыНаСкладахОбороты
    ГДЕ
        ТоварыНаСкладахОбороты.ВНаличииПриход <> 0
   
    СГРУППИРОВАТЬ ПО
        ТоварыНаСкладахОбороты.Номенклатура,
        ВЫБОР
            КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.СборкаТоваров
                    ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров
                ТОГДА "Сборка/Перемещение"
            КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПриобретениеТоваровУслуг
                ТОГДА "Поступление"
            КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
                ТОГДА "Реализация"
            ИНАЧЕ "Прочее"
        КОНЕЦ) КАК ВложенныйПриход

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

ВЫБРАТЬ
    "03_Расход",
    ВложенныйРасход.Номенклатура,
    ВложенныйРасход.ВидДокумента,
    ВложенныйРасход.СуммаРасход
ИЗ
    (ВЫБРАТЬ
        ТоварыНаСкладахОбороты.Номенклатура КАК Номенклатура,
        ВЫБОР
            КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.СборкаТоваров
                    ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров
                ТОГДА "Сборка/Перемещение"
            КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПриобретениеТоваровУслуг
                ТОГДА "Поступление"
            КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
                ТОГДА "Реализация"
            ИНАЧЕ "Прочее"
        КОНЕЦ КАК ВидДокумента,
        СУММА(ТоварыНаСкладахОбороты.ВНаличииРасход) КАК СуммаРасход
    ИЗ
        РегистрНакопления.ТоварыНаСкладах.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК ТоварыНаСкладахОбороты
    ГДЕ
        ТоварыНаСкладахОбороты.ВНаличииРасход <> 0
   
    СГРУППИРОВАТЬ ПО
        ТоварыНаСкладахОбороты.Номенклатура,
        ВЫБОР
            КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.СборкаТоваров
                    ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров
                ТОГДА "Сборка/Перемещение"
            КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПриобретениеТоваровУслуг
                ТОГДА "Поступление"
            КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
                ТОГДА "Реализация"
            ИНАЧЕ "Прочее"
        КОНЕЦ) КАК ВложенныйРасход
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВременнаяТаблица.ТипДанных КАК ТипДанных,
    ВременнаяТаблица.Номенклатура КАК Номенклатура,
    ВременнаяТаблица.ВидДокумента КАК ВидДокумента,
    СУММА(ВременнаяТаблица.Сумма) КАК Сумма
ИЗ
    ВременнаяТаблица КАК ВременнаяТаблица

СГРУППИРОВАТЬ ПО
    ВременнаяТаблица.ТипДанных,
    ВременнаяТаблица.Номенклатура,
    ВременнаяТаблица.ВидДокумента

УПОРЯДОЧИТЬ ПО
    ВременнаяТаблица.Номенклатура,
    ВременнаяТаблица.ВидДокумента

скинул структуру и результат , результат тот же((((

Максим75

Shaman_blr, смотрите, вот это
ВЫБРАТЬ
    ВременнаяТаблица.ТипДанных КАК ТипДанных,
    ВременнаяТаблица.Номенклатура КАК Номенклатура,
    ВременнаяТаблица.ВидДокумента КАК ВидДокумента,
    СУММА(ВременнаяТаблица.Сумма) КАК Сумма
ИЗ
    ВременнаяТаблица КАК ВременнаяТаблица

СГРУППИРОВАТЬ ПО
    ВременнаяТаблица.ТипДанных,
    ВременнаяТаблица.Номенклатура,
    ВременнаяТаблица.ВидДокумента

УПОРЯДОЧИТЬ ПО
    ВременнаяТаблица.Номенклатура,
    ВременнаяТаблица.ВидДокумента
на СКД не работает (группировка и упорядочивание), там своя кухня в самой СКД
вот это засуньте во вложенный запрос и в нем сгруппируйте, а уже потом выберите из вложенного запроса все нужные поля

Shaman_blr

Максим75, ну вот мой запрос
ВЫБРАТЬ
"02_Приход" КАК ТипДанных,
ВложенныйПриход.Номенклатура КАК Номенклатура,
ВложенныйПриход.ВидДокумента КАК ВидДокумента,
ВложенныйПриход.СуммаПриход КАК Сумма,
1 КАК Порядок
ПОМЕСТИТЬ ВременнаяТаблица
ИЗ
(ВЫБРАТЬ
ТоварыНаСкладахОбороты.Номенклатура КАК Номенклатура,
ВЫБОР
КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.СборкаТоваров
ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров
ТОГДА "Сборка/Перемещение"
КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПриобретениеТоваровУслуг
ТОГДА "Поступление"
КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА "Реализация"
ИНАЧЕ "Прочее"
КОНЕЦ КАК ВидДокумента,
СУММА(ТоварыНаСкладахОбороты.ВНаличииПриход) КАК СуммаПриход
ИЗ
РегистрНакопления.ТоварыНаСкладах.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК ТоварыНаСкладахОбороты
ГДЕ
ТоварыНаСкладахОбороты.ВНаличииПриход <> 0

СГРУППИРОВАТЬ ПО
ТоварыНаСкладахОбороты.Номенклатура,
ВЫБОР
КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.СборкаТоваров
ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров
ТОГДА "Сборка/Перемещение"
КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПриобретениеТоваровУслуг
ТОГДА "Поступление"
КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА "Реализация"
ИНАЧЕ "Прочее"
КОНЕЦ) КАК ВложенныйПриход

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

ВЫБРАТЬ
"03_Расход",
ВложенныйРасход.Номенклатура,
ВложенныйРасход.ВидДокумента,
ВложенныйРасход.СуммаРасход,
2
ИЗ
(ВЫБРАТЬ
ТоварыНаСкладахОбороты.Номенклатура КАК Номенклатура,
ВЫБОР
КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.СборкаТоваров
ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров
ТОГДА "Сборка/Перемещение"
КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПриобретениеТоваровУслуг
ТОГДА "Поступление"
КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА "Реализация"
ИНАЧЕ "Прочее"
КОНЕЦ КАК ВидДокумента,
СУММА(ТоварыНаСкладахОбороты.ВНаличииРасход) КАК СуммаРасход
ИЗ
РегистрНакопления.ТоварыНаСкладах.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК ТоварыНаСкладахОбороты
ГДЕ
ТоварыНаСкладахОбороты.ВНаличииРасход <> 0

СГРУППИРОВАТЬ ПО
ТоварыНаСкладахОбороты.Номенклатура,
ВЫБОР
КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.СборкаТоваров
ИЛИ ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров
ТОГДА "Сборка/Перемещение"
КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПриобретениеТоваровУслуг
ТОГДА "Поступление"
КОГДА ТоварыНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА "Реализация"
ИНАЧЕ "Прочее"
КОНЕЦ) КАК ВложенныйРасход
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Вложенный.ТипДанных КАК ТипДанных,
Вложенный.Номенклатура КАК Номенклатура,
Вложенный.ВидДокумента КАК ВидДокумента,
Вложенный.Сумма КАК Значение,
Вложенный.Порядок КАК Порядок
ИЗ
(ВЫБРАТЬ
ВременнаяТаблица.ТипДанных КАК ТипДанных,
ВременнаяТаблица.Номенклатура КАК Номенклатура,
ВременнаяТаблица.ВидДокумента КАК ВидДокумента,
ВременнаяТаблица.Порядок КАК Порядок,
СУММА(ВременнаяТаблица.Сумма) КАК Сумма
ИЗ
ВременнаяТаблица КАК ВременнаяТаблица
ГДЕ
ВременнаяТаблица.Сумма <> 0

СГРУППИРОВАТЬ ПО
ВременнаяТаблица.ТипДанных,
ВременнаяТаблица.Номенклатура,
ВременнаяТаблица.ВидДокумента,
ВременнаяТаблица.Порядок) КАК Вложенный

но блин все равно результат тот же, что и был((( ничего не поменялось, я уже не знаю в чем проблема(
или я опять, что то не так делаю?

Максим75

Shaman_blr, блин, мой косяк, извините, забыл совсем как я такое делал.
короче говоря, скд все верно выводит. вначале слева в столбце первый уровень, потом идут столбцы второго уровня.
чтобы объединить первый уровень группировки, надо делать постобработку.
Вы вначале выводите отчет программно, можно это сделать в процедуре ПриКомпоновкеРезультата. Посмотрите в сети, вагон примеров как вывести отчет скд программно.
потом делаете постобработку. мой код:

Выборка = Справочники.Филиалы.Выбрать();
Пока Выборка.Следующий() цикл

Если Выборка.ПометкаУдаления=Истина тогда продолжить; КонецЕсли;
Маркер= СокрЛП(Выборка.Наименование);
ОбъединитьЯчейкиВТабличномДокументе(ЭлементыФормы.Результат, Маркер);
ЗаменитьТекстВТабличномДокументе(ЭлементыФормы.Результат, Маркер, "Итого по филиалу:");

КонецЦикла;

Маркер = "_Пустой филиал";
ОбъединитьЯчейкиВТабличномДокументе(ЭлементыФормы.Результат, Маркер);
ЗаменитьТекстВТабличномДокументе(ЭлементыФормы.Результат, Маркер, "Итого по филиалу:");


Процедура ОбъединитьЯчейкиВТабличномДокументе(ТабличныйДокумент, МаркерОбъединения) Экспорт
 // Находит ячейки, содержащие в тексте МаркерОбъединения
 // Объединяет ячейки, располагающиеся рядом, содержащие одинаковый текст и маркер объединения
 
 ОбъединяемыеЯчейки = НайтиОбластиТабличногоДокументаПоВхождениюПодстроки(ТабличныйДокумент, МаркерОбъединения);
 ОбъединяемыеЯчейки.Колонки.Добавить("Диапазон");
 ОбъединяемыеЯчейки.Сортировать("Верх,Лево");
 
 Для Каждого Строка из ОбъединяемыеЯчейки Цикл
 Отбор = Новый Структура("Текст,Верх,Лево", Строка.Текст, Строка.Верх-1, Строка.Лево);
 НайденныеСтроки = ОбъединяемыеЯчейки.НайтиСтроки(Отбор);
 Если НайденныеСтроки.Количество() Тогда
 Строка.Диапазон = НайденныеСтроки[0].Диапазон;
 Строка.Диапазон.Низ = Макс(Строка.Диапазон.Низ, Строка.Верх);
 Продолжить;
 КонецЕсли;
 
 Отбор = Новый Структура("Текст,Верх,Лево", Строка.Текст, Строка.Верх, Строка.Лево-1);
 НайденныеСтроки = ОбъединяемыеЯчейки.НайтиСтроки(Отбор);
 Если НайденныеСтроки.Количество() Тогда
 Строка.Диапазон = НайденныеСтроки[0].Диапазон;
 Строка.Диапазон.Право = Макс(Строка.Диапазон.Право, Строка.Лево);
 Продолжить;
 КонецЕсли;
 
 Строка.Диапазон = Новый Структура("Текст,Верх,Лево,Низ,Право", Строка.Текст, Строка.Верх, Строка.Лево, Строка.Верх, Строка.Лево);
 КонецЦикла;
 
 ОбъединяемыеЯчейки.Свернуть("Диапазон");
 Для Каждого Строка Из ОбъединяемыеЯчейки Цикл
 Диапазон = Строка.Диапазон;
 Область = ТабличныйДокумент.Область(Диапазон.Верх, Диапазон.Лево, Диапазон.Низ, Диапазон.Право);
 Область.Объединить();
 КонецЦикла;
 
КонецПроцедуры

Процедура ЗаменитьТекстВТабличномДокументе(ТабличныйДокумент, ПодстрокаПоиска, ПодстрокаЗамены) Экспорт
 
 НайденныеОбласти = НайтиОбластиТабличногоДокументаПоВхождениюПодстроки(ТабличныйДокумент, ПодстрокаПоиска);
 НайденныеОбласти.Сортировать("Верх,Лево");
 Если НайденныеОбласти.Количество() тогда  //есть вхождения, берем первую строку
Лево = НайденныеОбласти[0].Лево;
Верх = НайденныеОбласти[0].Верх;
// Сообщить("Текст  "+НайденныеОбласти[0].Текст+"  лево  "+Лево+"  верх  "+Верх);
//НайденныеОбласти.ВыбратьСтроку();
Область = ТабличныйДокумент.Область(Верх+1,Лево,Верх+1,Лево);
Область.Текст = ПодстрокаЗамены;
// Сообщить("Область  "+Область.Диапазон+"  текст  "+Область.Текст);
//Для каждого Строка из НайденныеОбласти Цикл
//Строка.Область.Текст = СтрЗаменить(Строка.Область.Текст, ПодстрокаПоиска, ПодстрокаЗамены);
//КонецЦикла;
 КонецЕсли;
 
КонецПроцедуры

Процедура СкрытьСтрокиВТабличномДокументе(ТабличныйДокумент, МаркерУдаления) Экспорт
 
 НайденныеОбласти = НайтиОбластиТабличногоДокументаПоВхождениюПодстроки(ТабличныйДокумент, МаркерУдаления);
 НайденныеОбласти.Свернуть("Верх");
 
 Для каждого Строка из НайденныеОбласти Цикл
 Область = ТабличныйДокумент.Область(Строка.Верх, , Строка.Верх, );
 Область.Видимость = Ложь;
 КонецЦикла;
 
КонецПроцедуры

Функция НайтиОбластиТабличногоДокументаПоВхождениюПодстроки(ТабличныйДокумент, ПодстрокаПоиска) Экспорт
 
 НайденныеОбласти = Новый ТаблицаЗначений;
 НайденныеОбласти.Колонки.Добавить("Область");
 НайденныеОбласти.Колонки.Добавить("Текст");
 НайденныеОбласти.Колонки.Добавить("Верх");
 НайденныеОбласти.Колонки.Добавить("Лево");
 
 НайденнаяОбласть = ТабличныйДокумент.НайтиТекст(ПодстрокаПоиска);
 
 Пока НЕ НайденнаяОбласть = Неопределено Цикл
 
 НоваяСтрока = НайденныеОбласти.Добавить();
 ЗаполнитьЗначенияСвойств(НоваяСтрока, НайденнаяОбласть);
 НоваяСтрока.Область = НайденнаяОбласть;
 
 НайденнаяОбласть = ТабличныйДокумент.НайтиТекст(ПодстрокаПоиска, НайденнаяОбласть);
 
 КонецЦикла;
 Возврат НайденныеОбласти;
 
КонецФункции

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

Теги:

Похожие темы (1)

Рейтинг@Mail.ru

Поиск