Имя: Пароль:
1C
 
Кросс-отчет по продажам
0 Harad
 
05.12.24
21:11
Здравствуйте. Столкнулся с трудностью в отображение данных в кросс - таблице.
Работа с Кросс Таблицей.
Сразу говорю, Да, я новичок и только учусь всем прелестям этой программы.

// Мы Создали Макет. Сделали все поля под макет
// А Теперь будем прописывать вся поля у Макета
// Наша задача: Чтоб на пересечение столбцов и строк были показатели продаж.

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

МакетКросТаб = РеквизитФормыВЗначение("Объект").ПолучитьМакет("МакетКроссТаблицы");
    
ОбластьШапкаТовар = МакетКросТаб.ПолучитьОбласть ("Шапка|Товар");
ОбластьШапкаПокупатель = МакетКросТаб.ПолучитьОбласть ("Шапка|Покупатель");
ОбластьШапкаИтог = МакетКросТаб.ПолучитьОбласть ("Шапка|Итог");  
    
ОбластьСтрокаТовар = МакетКросТаб.ПолучитьОбласть ("Строка|Товар");
ОбластьСтрокаПокупатель = МакетКросТаб.ПолучитьОбласть ("Строка|Покупатель");
ОбластьСтрокаИтог = МакетКросТаб.ПолучитьОбласть ("Строка|Итог");
    
ОбластьПодвалТовар = МакетКросТаб.ПолучитьОбласть ("Подвал|Товар");
ОбластьПодвалПокупатель = МакетКросТаб.ПолучитьОбласть ("Подвал|Покупатель");
ОбластьПодвалИтог = МакетКросТаб.ПолучитьОбласть ("Подвал|Итог");    
    
    
ВыборкаКлиент = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Контрагент");      
    
ТабДок.Вывести(ОбластьШапкаТовар);
    
Пока ВыборкаКлиент.Следующий() Цикл
           ОбластьШапкаПокупатель.Параметры.Заполнить (ВыборкаКлиент);
ТабДок.Присоединить (ОбластьШапкаПокупатель);
          
КонецЦикла;        
      
ТабДок.Присоединить (ОбластьШапкаИтог);
             
КонецПроцедуры

&НаКлиенте
Процедура СформироватьОтчетПоКроссТаблице(Команда)  
ТабДок = Новый ТабличныйДокумент;
    
СформироватьОтчетПоКроссТаблицеНаСервере(ТабДок);
ТабДок.Показать();
КонецПроцедуры



//Сам Макет был создан. Поля тоже были созданы.
//Ячейки выставлены в параметры.
//Когда создаю кросс таблицу в пользовательском режиме - даже отображается нужное количество столбцов.
Но не отображаются данные по контрагентам (пустые поля)
// Через "Вычислить Выражение" в цикл поступают данные из БД, но не отображаются при выведение в польз.режиме.

//По ощущениям, я словно не вывожу данные в пользовательский режим, не хватает скила ещё понять, что нужно дописать.
1 Harad
 
05.12.24
21:23
И да, я застрял на этапе вывода контрагентов, потому пока что не продолжаю писать код по выведению номенклатуры и показателей суммы.
Сначала хочу решить текущую проблему, понять в чём же проблема и только потом - продолжить.
2 Jackman
 
05.12.24
21:27
(0) Поставьте точку останова в отладчике на:
ОбластьШапкаПокупатель.Параметры.Заполнить (ВыборкаКлиент) и посмотрите, что в ВыборкаКлиент, а лучше, вообще, временно для тестов заменить эту строку на ОбластьШапкаПокупатель.Параметры.Контрагент= ВыборкаКлиент.Контрагент
Ясно, что поля должны называться как в запросе и как в макете.
3 Мультук
 
05.12.24
21:34
(0)
1) Тут проблема не в, что вы новичок в  1С
Тут проблема в том, что вы новичок в программировании.

2) Такое, наверное уже никто кодом не делает, ибо есть СКД

google:
1С СКД Хрусталева Книга

google:
1C СКД кросс таблица

https://курсы-по-1с.рф/free/
Регимся, ищем по фразу "Бесплатный курс по СКД (Система Компоновки Данных)"
Качаем смотрим

3) У вас проблема в том, что вы прыгаете через ступени обучения.
Как минимум должен быть цикл в цикле верно ?
Цикл по строкам, а внутри цикл по столбцам.

При этом отдельно
-- для шапки
-- для данных
-- для подвала

4) Тут ещё куча пунктов.
Начните с моего пункта 2, и возьмите пока более легкую задачу.
4 Harad
 
05.12.24
21:35
(2)
ВыборкаКлиент.Контрагент
//Показывает самого контрагента. Всё верно. Данные забираются из Иб
Только в пользовательском режиме, всё так же, не отображаются данные.
5 Мультук
 
05.12.24
21:36
(4)

Тут прямо разжевано по шагам

https://infostart.ru/1c/tools/547892/
6 Мультук
 
05.12.24
21:43
(0)

Готовое решение вашей задачи

https://its.1c.ru/db/pubqlang/content/78/hdoc
7 Harad
 
05.12.24
21:43
(3) Полностью с Вами согласен. Спешу.
Возьму на вооружение литературу профильную.
Видимо, слишком рано в такую тему залез )
Но, исправлюсь!)

----------

Спасибо За Помощь)
Попробую, буду стараться)

----
Почему то статью с разжёвыванием не нашёл до этого, каюсь.
Видимо плохо искал
8 Волшебник
 
05.12.24
21:44
При выборке оборотов надо указывать период