Отчет по кредиту 51го счета

  • Автор темы Автор темы ge4r
  • Дата начала Дата начала
нужна еще помощь...в этот отчет нужно добавить промежуточные итоги...то есть таблица отчета отсортирована по виду ДДС...и для каждого вида ДДС должен быть свой итог...как лучше это написать?
Код:
Процедура Сформировать() 
Перем Таб, ТЗ, Заголовок;
Проверить_Дату(); 
Заголовок = "Отчет по движению денежных средств за период "+ ПериодСтр(НачДата,КонДата);
Таб = СоздатьОбъект("Таблица");
Таб.ВывестиСекцию ("Шапка");  
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка ("ТВидДДС");
ТЗ.НоваяКолонка ("ТВидДоговора");
ТЗ.НоваяКолонка ("ТКонтрагент");
ТЗ.НоваяКолонка ("ТПодразделДоговора");
ТЗ.НоваяКолонка ("ТСумма");
ТЗ.НоваяКолонка ("ТДатаВыписки");
ТЗ.НоваяКолонка ("ТНомПП");
ТЗ.НоваяКолонка ("ТДатаПП");

Док = СоздатьОбъект("Документ.Выписка");
Док.ВыбратьДокументы(НачДата, КонДата);
Пока Док.ПолучитьДокумент() = 1 Цикл
Если Док.Проведен() = 0 Тогда
Продолжить;
КонецЕсли;
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
Если Док.Расход <> 0 Тогда
Если ПустоеЗначение(Док.ПервичныйДокумент) = 0 Тогда 
ВидДоговора = Док.ПервичныйДокумент.Договор.ВидДоговора;
Если ВыбВидДоговора.Выбран() = 1 Тогда
Если ВыбВидДоговора <> ВидДоговора Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
Если Док.КоррСчет.ПринадлежитГруппе(СчетПоКоду("68")) = 1 Тогда	
Если ВыбКонтрагент.Выбран() = 1 Тогда
Продолжить;
КонецЕсли;
Контрагент = Док.ПервичныйДокумент.Договор;
ИначеЕсли Док.КоррСчет.ПринадлежитГруппе(СчетПоКоду("69")) = 1 Тогда 
Если ВыбКонтрагент.Выбран() = 1 Тогда
Продолжить;
КонецЕсли;
Контрагент = СчетПоКоду("69").Наименование;
Иначе
Контрагент = Док.ПервичныйДокумент.Контрагент;
Если ВыбКонтрагент.Выбран() = 1 Тогда
Если ВыбКонтрагент <> Контрагент Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
КонецЕсли;

ТЗ.НоваяСтрока();
ТЗ.ТВидДоговора = ВидДоговора;

ТЗ.ТКонтрагент = Контрагент;
ВидДДС = Док.ВидДвижения;
ТЗ.ТВидДДС = ВидДДС;
Договор = Док.ПервичныйДокумент.Договор;
ТЗ.ТПодразделДоговора = Договор;
Сумма= Док.Расход;			 
ТЗ.ТСумма = Сумма;
НомПП = Док.НомерДокВходящий;
ТЗ.ТНомПП = НомПП;
ДатаПП = Док.ДатаДокВходящий;
ТЗ.ТДатаПП = ДатаПП;
ДатаВыписки = Док.ДатаДок; 
ТЗ.ТДатаВыписки = ДатаВыписки;

КонецЕсли;
КонецЕсли;
КонецЦикла;

КонецЦикла; 
ТЗ.Сортировать("ТВидДДС+");
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
ВидДоговора = ТЗ.ТВидДоговора;
Контрагент = ТЗ.ТКонтрагент;
ВидДДС = ТЗ.ТВидДДС;
Договор = ТЗ.ТПодразделДоговора;
Сумма = ТЗ.ТСумма;
ДатаВыписки = ТЗ.ТДатаВыписки;
НомПП = ТЗ.ТНомПП;
ДатаПП = ТЗ.ТДатаПП;
Таб.ВывестиСекцию("Строка");
//КонецЕсли;
КонецЦикла;

Сумма = ТЗ.Итог("ТСумма");
Таб.ВывестиСекцию("Подвал");


Таб.ТолькоПросмотр(1);
Таб.Опции(0,0,0,0);
Таб.ПараметрыСтраницы(2,,,,,,,,,1);	
Таб.Показать(); 
КонецПроцедуры

написал,что первое в голову пришло...ересь,но работает,правда не всегда)
Код:
ТЗ.Сортировать("ТВидДДС+");
ИтСумма = 0; 
ТЗ.ПолучитьСтрокуПоНомеру(1);
ВидДДСТаб = ТЗ.ТВидДДС;
Таб.ВывестиСекцию("Заголовок");
Для НомерСтроки = 1 по ТЗ.КоличествоСтрок()-1 Цикл
ТЗ.ПолучитьСтрокуПоНомеру(НомерСтроки+1); 
ДДС_2= ТЗ.ТВидДДС;
ТЗ.ПолучитьСтрокуПоНомеру(НомерСтроки);
ДДС_1= ТЗ.ТВидДДС;
Если ДДС_1=ДДС_2 Тогда  

Если НомерСтроки+1= ТЗ.КоличествоСтрок() Тогда
ТЗ.ПолучитьСтрокуПоНомеру(НомерСтроки);
ВидДоговора = ТЗ.ТВидДоговора;
Контрагент = ТЗ.ТКонтрагент;
ВидДДС = ТЗ.ТВидДДС;
Договор = ТЗ.ТПодразделДоговора;
Сумма = ТЗ.ТСумма;
ДатаВыписки = ТЗ.ТДатаВыписки;
НомПП = ТЗ.ТНомПП;
ДатаПП = ТЗ.ТДатаПП;
Таб.ВывестиСекцию("Строка");
ИтСумма = ИтСумма + Сумма;
ТЗ.ПолучитьСтрокуПоНомеру(НомерСтроки+1);
ВидДоговора = ТЗ.ТВидДоговора;
Контрагент = ТЗ.ТКонтрагент;
ВидДДС = ТЗ.ТВидДДС;
Договор = ТЗ.ТПодразделДоговора;
Сумма = ТЗ.ТСумма;
ДатаВыписки = ТЗ.ТДатаВыписки;
НомПП = ТЗ.ТНомПП;
ДатаПП = ТЗ.ТДатаПП;
Таб.ВывестиСекцию("Строка"); 
ИтСумма = ИтСумма + Сумма; 
Таб.ВывестиСекцию("Подвал");

Иначе

ВидДоговора = ТЗ.ТВидДоговора;
Контрагент = ТЗ.ТКонтрагент;
ВидДДС = ТЗ.ТВидДДС;
Договор = ТЗ.ТПодразделДоговора;
Сумма = ТЗ.ТСумма;
ДатаВыписки = ТЗ.ТДатаВыписки;
НомПП = ТЗ.ТНомПП;
ДатаПП = ТЗ.ТДатаПП;
Таб.ВывестиСекцию("Строка");
ИтСумма = ИтСумма + Сумма;
КонецЕсли;

Иначе 
ВидДоговора = ТЗ.ТВидДоговора;
Контрагент = ТЗ.ТКонтрагент;
ВидДДС = ТЗ.ТВидДДС;
Договор = ТЗ.ТПодразделДоговора;
Сумма = ТЗ.ТСумма;
ДатаВыписки = ТЗ.ТДатаВыписки;
НомПП = ТЗ.ТНомПП;
ДатаПП = ТЗ.ТДатаПП;
Таб.ВывестиСекцию("Строка");
ИтСумма = ИтСумма + Сумма;
Таб.ВывестиСекцию("Подвал");
ИтСумма = 0;			  
ТЗ.ПолучитьСтрокуПоНомеру(НомерСтроки+1);
ВидДДСТаб= ТЗ.ТвидДДС;
Таб.ВывестиСекцию("Заголовок");

ВидДоговора = ТЗ.ТВидДоговора;
Контрагент = ТЗ.ТКонтрагент;
ВидДДС = ТЗ.ТВидДДС;
Договор = ТЗ.ТПодразделДоговора;
Сумма = ТЗ.ТСумма;
ДатаВыписки = ТЗ.ТДатаВыписки;
НомПП = ТЗ.ТНомПП;
ДатаПП = ТЗ.ТДатаПП;
Таб.ВывестиСекцию("Строка");
ИтСумма = ИтСумма + Сумма; 
Таб.ВывестиСекцию("Подвал");

КонецЕсли;

КонецЦикла;
 
ТЗПромИтоги = ТЗ;
ТЗПромИтоги.Свернуть("ВидДДС", "Сумма");
получишь новую таблицу с Итогами по Видам ДДС, а дальше тяни из нее что надо.

З.Ы. ...("ВидДДС", "Сумма"); ВидДДС и Сумма - это не конкретные значения, а имена Колонок.
 
спс...еще вопрос,как организовать цикл проверяющий совпадение\несовпадение соседних ддс...те идет у нас например
договора аренды
договора аренды
договора аренды
оплата поставщику

пром.итог нужно вывести после 3ех первых строк
нужно что то вроде если a[i-1]= a тогда вывести строку иначе вывести строку и итоги...


что-то непонятно...когда добавляю ТЗПромИтоги вылетает ошибка

ВидДоговора = ТЗ.ТВидДоговора;
{Отчет.ДвижениеДенежныхСредств.Форма.Модуль(91)}: Поле агрегатного объекта не обнаружено (ТВидДоговора)

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

А вообще зря упираешься - сделал бы запрос по бух.итогам с соответствующими фильтрами по субконто - и забот не знал бы.
Механизм полезный - освоишь один раз, дальше сам возьмешь на вооружение
 
ок,учту)
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab