Проблема с итогами в отчете в разрезе родителей элемента справочника

Форум 1С: Одинэс.Ру

Найти!

Проблема с итогами в отчете в разрезе родителей элемента справочника

chief accountant
23.07.2009 - 09:50
Есть ТЗ полученная в результате запроса, далее нужно суммы вывести в разрезе иерархии справочника, который является реквизитом для справочника из ТЗ.
 
СправДох=СоздатьОбъект("Справочник.КлассификацияДоходов");
СправДох.ВыбратьЭлементы();
Пока СправДох.ПолучитьЭлемент()=1 Цикл
    Если СправДох.Уровень()>УровеньМах Тогда
УровеньМах=СправДох.Уровень();
    КонецЕсли;
КонецЦикла;
 
ТабИтД=СоздатьОбъект("ТаблицаЗначений");
ТабД.Выгрузить(ТабИтД);
Для i=1 По УровеньМах Цикл
     ТабИтД.НоваяКолонка("КБКРодитель"+i);
КонецЦикла;
ТекУровень=0;
ТекРодитель="";
ТабИтД.ВыбратьСтроки();
Пока ТабИтД.ПолучитьСтроку()=1 Цикл
    Если ТабИтД.КБК.Классификатор.Родитель.Выбран()=1 Тогда
ТабИтД.КБКРодитель1=ТабИтД.КБК.Классификатор.Родитель;
Если СправДох.НайтиЭлемент(ТабИтД.КБК.Классификатор.Родитель)=1 Тогда
    ТекРодитель=СправДох.ТекущийЭлемент();
    Для i=9 По ТабИтД.КоличествоКолонок() Цикл
ТабИтД.УстановитьЗначение(ТабИтД.НомерСтроки,i,ТекРодитель.Родитель);
ТекРодитель=ТекРодитель.Родитель;
    КонецЦикла;
КонецЕсли;
    КонецЕсли;
КонецЦикла;
 
Потом сворачиваем все что получилось по каждой новой колонке и добавляем в исходную ТЗ.
Тока не нравится мне весь этот код, может как попроще можно?
К списку тем 1 > К списку форумов

Интересные темы

odines.ru
24.10.2020 - 08:19
Смотри также:
Выгрузка в XML
Тип данных при формировании екселевского файла из 1С
Повторная тема по настроке валютного учета!

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

Ёпрст
1 - 23.07.2009 - 09:59
Можно.. Запрос с одной группировкой и привет..
И еще, для выяснения уровня можно было поглядеть в метаданные.

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

chief accountant
2 - 23.07.2009 - 10:06
1-Ёпрст >Запрос к чему?
Количество уровней я знаю. И знаю, что необязательно было делать обход справочника. Только количество уровней теоретически может поменяться. Конфа бухгалтерская

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

Ёпрст
3 - 23.07.2009 - 10:20
(2) Изначально Из первого запроса получить всю иерархию.
Если уж так хочется её постороить потом - то Индексированная ТЗ в помощь..

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

chief accountant
4 - 23.07.2009 - 10:29
3-Ёпрст >Так подскажи как получить запросом
 
ТабД.КБК = Ит.Субконто(1);
ТабД.Банк= Ит.КорДО()-Ит.КорКО();
 
для родителя только части значения субконто

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

Ёпрст
5 - 23.07.2009 - 10:35
(4) в (0) не видно что за запрос был.

Интересные темы

odines.ru
24.10.2020 - 08:19
Смотри также:
УСН 7.70.158 необходимо перенести в Бухгалтерский учет 7.7
Ограничение доступа
Проблемы - запрет редактирования формы и перебор документов в журнале

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

chief accountant
6 - 23.07.2009 - 10:38
5-Ёпрст >Извиняюсь, что сразу конфу не обозначил. Голову сломал, как бы избавиться от сворачивания по каждой колонке

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

Ёпрст
7 - 23.07.2009 - 10:53
(6) Так можешь сделать:
 
Функция Ёпрст(СправДох)
    стр =0;
    ТабД.НайтиЗначение(СправДох,стр,"КБК");
    Возврат ТабД.ПолучитьЗначение(стр,"Сумма");//ну или как там у тебя
КонецФункции
.....
Поимел ТабД..из неё выгружаешь КБК в СписокКБК... далее
запрос к справочнику для построения иерархии + итоги по группам:
 
Т = "
|СправДох = Справочник.КлассификацияДоходов.ТекущийЭлемент;
|Условие (СправДох в СписокКБК);
|Функция Сумма = Сумма(Ёпрст(СправДох));
|Группировка СправДох;
 
На выходе будешь иметь всё - и иерархию и группы и суммы..
  
 

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

chief accountant
8 - 23.07.2009 - 11:04
ТабД.НайтиЗначение(СправДох,стр,"КБК") не взлетит СправДох не есть справочник КБК

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

Ёпрст
9 - 23.07.2009 - 11:12
(8) ну ё... Ты смысл не понял что ли ? Подставишь нужное..
и отфильтруешь справочник по нужному..
Тупо так: есть список элементов и есть суммы этих элементов, вот запрос собирает сам всю иерархию и сам суммирует..
А что подставить в ТЗ и в фильтр, наверное, разберешься.

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

Ёпрст
10 - 23.07.2009 - 11:14
+9 КБК.Классификатор подставишь туда и привет..и условие переделаешь мальца.

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

chief accountant
11 - 23.07.2009 - 13:43
9-Ёпрст >Идея воплотилась в жизнь. 5 лет уже только на бухгалтерских запросах сижу мозги усыхают :( Спасибо

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

chief accountant
12 - 24.07.2009 - 08:19
11+ Забыл ещё про баян поитересоваться. Ничего нового кроме как умножать-делить не придумано?

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

Ёпрст
13 - 24.07.2009 - 15:01
(12) еще как придумано!
При вычислении функции, её точность определяется переменной текста запроса..
У вас сейчас - нет переменной при вычислении функции Сумма, вот и точности для её вычисления взять неоткуда =>"округляет", точнее, точность =0
Это обходится либо *число в тексте + деление в итогах ИЛИ
Нужно вставить фиктивную переменную в вычисление функции:
 
|Количество = <Обект>.Количество;//Число 15.3 например,
....
|Функция Сумма = Сумма(Количество-Количество+МояФункция(аргумент));//т.е
 
всё, точность функции = точности переменной Количество, хотя на результат вычисления она никак не влияет...
Но если переменной состряпать неоткуда,то селяви..
 

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

pit
14 - 25.07.2009 - 04:23
приводил решение этой задачи на мисте.
для плавающего количества уровней и подсчета итогов по уровням...
у меня это используется для отчета по остаткам на складах в бухии

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

Ёпрст
15 - 25.07.2009 - 04:42
(14) я помню это решение..
:)

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

chief accountant
16 - 25.07.2009 - 06:27
13-Ёпрст >Твой ответ на аналогичную проблему я нашел
https://odines.ru/viewtopic.php?t=34792&page=1#97399
И после поисков на мисте (+ yandex) понял в чем суть.
В запросе который я слепил с твоей помощью вроде как нужную переменную вытащить неоткуда. Хотя наверное прокатит вставить любую которая найдется в метаданных?
14-pit >не удалось найти. Может ссылку дашь. Искал по чесному, скорее ключевая фраза не та :(

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

pit
17 - 25.07.2009 - 16:32
На примере отчета Остатки на складах в бухии
 

 
тзСклад - ТЗ , с колонками товар,Склад,Количество,Сумма,Род,Уровень
заполняется бух запросом по 41.1, 43.
 
В переменной МахУровень - максимальный уровень в справочнике
среди товаров, попавших в запрос
 
Считаем и выводим отчет ПО СКЛАДАМ, внутри СКЛАДА - в иерархии справочника
с выводом итогов по группе (уровню).
 
Количество - СКЛАДЫВАЕМ. Плевать, что будут метры + литры + кг
Сказано, что бурундук птица - идем н а х  крылья искать....
зы если в группе родственные товары, то они, как правило, в одной Единице Измерения
 

тзУровней = CreateObject("ValueTable");
тзСклад.Unload(тзУровней);
 
if МахУровень > 1 then МахУровень = МахУровень-1; endIf;
 
// сворачиваем ТЗ по уровням с добавлением итоговых строк по группе в первоначальную ТЗ
// потом упорядочим сортировкой и напечатаем
 
while МахУровень > 0 do
тзУровней.GroupBy("Склад,Род","Сумма,Количество");  // итоги по тем группам, где собственно товар
for Индекс = 1 to тзУровней.LinesCnt() do  // цикл по ТЗ  ПоСкладам.LinesCnt()
тзУровней.GetLineByNumber(Индекс);
if тзУровней.Род.Selected() <> 1 then Continue; endIf;   // детдомовец... не берем в ДОСААФ
if тзУровней.Род.Level()  <> МахУровень then Continue; endIf; // крутим уровни с задницы
тзСклад.NewLine() ;       // новая строка в тз для уровня
тзСклад.Склад = тзУровней.Склад ; //
тзСклад.Род = тзУровней.Род ; // бабушки, дедушки и более дальние родственники
тзСклад.кАзелЮзер = специальная строка, через которую будем править косяки юзеров при выводе
в таблицу в случае двойников
тзСклад.Количество = тзУровней.Количество;
тзСклад.ДС = СчетчикЦикла ; // для смещения во время печати
тзУровней.Род = тзУровней.Род.Parent ; // шаг назад по дереву поколоений
endDo;  
МахУровень = МахУровень -1;
endDo;
 
// итоги по складам в общую тз - можно добавить, но только в тугриках - вот тут количество
// точно будет идиотизмом
 
...... собственно добавление итогов по складам через свертку
ПоСкладам = CreateObject("ValueTable");
тзСклад.Unload(Поскладам);
ПоСкладам.GroupBy("Склад","Сумма");  // итоги по складам в тугриках
 
.... потом тз ПоСкладам дольем в тзСклад, упорядочим и напечатаем

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

pit
18 - 25.07.2009 - 16:38
цикл подсчета итогов по уровням на самом деле отрабатывает очень быстро, даже если много товаров (у меня порядка 8 тыс наименований на остатке)
при глубине иерархии 6.

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

Тихий
19 - 26.07.2009 - 23:38
(0) есть шаблон многоуровневого отчета, могу скинуть, мож чего интересного найдёшь. количество уровней фиолетово. разворачивается по двойному клику на плюс-минус, вроде дерева каталогов. вот чего в нём не хватает - это горизонтальных группировок:( шаблон отчета заточен под номенклатуру, но переделывается на другой справочник в два счета. в общем, мыло нужно

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

chief accountant
20 - 27.07.2009 - 04:57
(17)(18) У тебя первый запрос к бух итогам был?

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

pit
21 - 27.07.2009 - 07:44
В данном примере - да, был единственный запрос к бухитогам...
Но на самом деле это безразлично, откуда заполнять ТЗ....
это прекрасно работает в ОУ...

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

pit
22 - 27.07.2009 - 07:45
точнее - когда переделывал для ОУ, просто заменил запрос БИ на обычный запрос к регистру остатков. Там правда, пришлось горбатого лепить с партиями...

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

chief accountant
23 - 27.07.2009 - 07:47
21-pit >Подскажи мозгов не хватает как ты иерархию вытащил в запросе?

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

pit
24 - 27.07.2009 - 08:17
я не парился - некогда было.... Тупо прокрутил результат запроса в цикле (там на самом деле еще и кАзелЮзер заполняется для борьбы с дублями). А вот его я точно не смог выдернуть запросом.

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

chief accountant
25 - 27.07.2009 - 08:22
24-pit >В цикле по справочнику?

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

pit
26 - 27.07.2009 - 09:24
ошал я чтоли... по справочнику... у меня там чуть ли не 300 тыс элементов...
По результатам запроса....

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

chief accountant
27 - 27.07.2009 - 09:37
26-pit >Я понимаю, что туплю, но добавление иерархии в ТЗ кроме как
ТекстЗапроса = "//{{ЗАПРОС(Запрос1)
|РдСправДох = Справочник.КлассификацияДоходов.ТекущийЭлемент;
|Условие(ТабИтД.КБК.ПринадлежитГруппе(РдСправДох)=1);
|Группировка РдСправДох;
|"//}}ЗАПРОС
;
(применительно к моей проблеме) что-то на ум не идет

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

pit
28 - 27.07.2009 - 09:42
да просто тупо перебери в цикле тз и все....

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

chief accountant
29 - 27.07.2009 - 09:46
28-pit >У меня в запрос (27) вставлен в цикл по ТЗ ТабИтД.КБК.ПринадлежитГруппе(РдСправДох)=1. Т.е. вариантов вытащить иерархию применительно к (0) больше нет?

Re: Проблема с итогами в отчете в разрезе родителей элемента справочника

chief accountant
30 - 27.07.2009 - 09:49
У меня в запрос->У меня запрос
К списку тем 1 > К списку форумов
Тема закрыта и находится в архиве.
Но Вы можете начать новую тему.
« помогите с поиском в справочнике ПУБ и поступление материалов через авансовый отчет »
© 2009 Форум 1С: Одинэс.Ру