• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы ge4r
  • Дата начала
G

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);
ВидДДСТаб= ТЗ.ТвидДДС;
Таб.ВывестиСекцию("Заголовок");

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

КонецЕсли;

КонецЦикла;
 
T

thinkfast

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

З.Ы. ...("ВидДДС", "Сумма"); ВидДДС и Сумма - это не конкретные значения, а имена Колонок.
 
G

ge4r

спс...еще вопрос,как организовать цикл проверяющий совпадение\несовпадение соседних ддс...те идет у нас например
договора аренды
договора аренды
договора аренды
оплата поставщику

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


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

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

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

vbs

Перенеси виды ДДС с одинаковыми названиями в соответствующие каталоги, а в ТЗ запихни родителя, по нему группируй и сортируй

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!