• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

1c7.7 выгрузка остатков с любого счета

  • Автор темы KiR
  • Дата начала
K

KiR

Задача: сделать обработку которая бы собирала остатки с указанного пользователем счета, на указанную дату пользователем со всеми аналитиками (не выбираются юзером), потом выгружала их в файлик
Действия: Узнаю колво аналитик на счете. далее естественно нужно сделать Использовать субконто. реализовано так:
Код:
КолвоСубконто = Счет.КоличествоСубконто();
БухИт = СоздатьОбъект("БухгалтерскиеИтоги");
Если КолвоСубконто = 1 Тогда
БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1);  
ИначеЕсли КолвоСубконто = 2 Тогда
БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1); 
БухИт.ИспользоватьСубконто(Счет.ВидСубконто(2),,1); 
ИначеЕсли КолвоСубконто = 3 Тогда
БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1); 
БухИт.ИспользоватьСубконто(Счет.ВидСубконто(2),,1); 
БухИт.ИспользоватьСубконто(Счет.ВидСубконто(3),,1); 
КонецЕсли;	
БухИт.ВыполнитьЗапрос(ВыбДата-1, ВыбДата, счет,,,,,); 
БухИт.ВыбратьСубконто(1);
Проблема: далее нужно Получить субконто. Когда в счете только одно субконто - никаких проблем, но если более - не знаю как правильно построить цикл. Подскажите пожалуйста. Заранее благодарю
 
H

Hryv

Код:
...
БухИт.ВыполнитьЗапрос(ВыбДата-1, ВыбДата, счет,,,,,);
БухИт.ВыбратьСубконто(1);  
Пока БухИт.ПолучитьСубконто(1)=1 Цикл
Если КолвоСубконто > 1 Тогда
БухИт.ВыбратьСубконто(2);  
Пока БухИт.ПолучитьСубконто(2)=1 Цикл
Если КолвоСубконто > 2 Тогда
БухИт.ВыбратьСубконто(3);  
Пока БухИт.ПолучитьСубконто(3)=1 Цикл
ВыгрузитьДанные();
КонецЦикла;
Иначе
ВыгрузитьДанные();
КонецЕсли;	
КонецЦикла;
Иначе
ВыгрузитьДанные();
КонецЕсли;	
КонецЦикла;

где ВыгрузитьДанные() - это некая функция с нужными тебе действиями
 
K

KiR

да выгрузку я потом напишу. я сначала думал все в ТЗ скинуть.
Логику примерно такую же делал:
Код:
БухИт.ВыполнитьЗапрос(ВыбДата-1, ВыбДата, счет,,,,,); 
БухИт.ВыбратьСубконто(1); 
Пока БухИт.ПолучитьСубконто(1) = 1 Цикл
Если КолвоСубконто = 1 Тогда
ТЗ.НоваяСтрока();
ТЗ.С1Н = БухИт.Субконто(1).Наименование;
ТЗ.С1К = БухИт.Субконто(1).Код;  
ТЗ.СКД = БухИт.СКД();
ТЗ.СКК = БухИт.СКК(); 
ИначеЕсли КолвоСубконто = 2 Тогда	
БухИт.ВыбратьСубконто(2); 
Пока БухИт.ПолучитьСубконто(2) = 1 Цикл 
ТЗ.НоваяСтрока();
ТЗ.С1Н = БухИт.Субконто(1).Наименование;
ТЗ.С1К = БухИт.Субконто(1).Код;
ТЗ.С2Н = БухИт.Субконто(2).Наименование;
ТЗ.С2К = БухИт.Субконто(2).Код;
КонецЦикла;
ИначеЕсли КолвоСубконто = 3 Тогда
БухИт.ВыбратьСубконто(2); 
Пока БухИт.ПолучитьСубконто(2) = 1 Цикл 
БухИт.ВыбратьСубконто(3); 
Пока БухИт.ПолучитьСубконто(3) = 1 Цикл	
ТЗ.НоваяСтрока();
ТЗ.С1Н = БухИт.Субконто(1).Наименование;
ТЗ.С1К = БухИт.Субконто(1).Код;
ТЗ.С2Н = БухИт.Субконто(2).Наименование;
ТЗ.С2К = БухИт.Субконто(2).Код;
ТЗ.С3Н = БухИт.Субконто(3).Наименование;
ТЗ.С3К = БухИт.Субконто(3).Код;  
ТЗ.СКД = БухИт.СКД();
ТЗ.СКК = БухИт.СКК();
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
тока вот в результате не на каждом счете нормально отрабатывало. для примера брал 76,5 и 51 по 3 аналитики на каждом
 
H

Hryv

да выгрузку я потом напишу. я сначала думал все в ТЗ скинуть.

Это по твоему желанию
Цикл обхода итогов у тебя есть, а наполнить его можно чем угодно


тока вот в результате не на каждом счете нормально отрабатывало. для примера брал 76,5 и 51 по 3 аналитики на каждом

У тебя цикл по сути такой же, и должен правильно работать
А в чем конкретно выражается "не на каждом счете нормально отрабатывало"
 
K

KiR

в том что БухИт.ВыбратьСубконто(2) = 0; на 51 счете
ща оборотку посмотрел - там такая ситуация что остатки живут только у первой аналитики, у остальных их нет. И как же быть в такой ситуации? подозреваю что и по другим счетам может такая же ерунда быть
 
H

Hryv

У тебя на втором субконто случайно не установлен флажок "Только обороты"?
 
K

KiR

возможно. как быть при такой ситуации? ведь счет пользователь сможет выбрать абсолютно любой и не учитывать такой возможности нельзя
 
H

Hryv

Честно говоря я не совсем понимаю зачем надо делать субконто с флажком "только обороты"
Но если такой флаг стоит, то СКД() и СКК() по нему ты все равно не получишь

Получается, что такие субконто не надо учитывать
Что несложно сделать

Интересно, что тебе стандартный анализ счета по субконто показывает?
Если вдруг с остатками, то посмотри как там сделано
 
K

KiR

анализ счета показывает тока первое субконто) зачем стоят только обороты - не в курсе. вначале конфа была типовой, кто дорабатывал - не знаю
как сделать чтобы не учитывать субконто? я имею ввиду мне нужно получить Счет.ТолькоОбороты, а потом условие куда ставить - перед использовать субконто или перед получинием субконто?
 
H

Hryv

Если ты выгружаешь только остатки, то пропускай такикие субконто смело
Ведь даже при внесении начальных остатков их по субконто разнести нельзя будет
 
K

KiR

это я понял. я не понял где мне поставить проверку нужно - когда я делаю использовать субконто:
Код:
Если КолвоСубконто = 1 Тогда
БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1);  
ИначеЕсли КолвоСубконто = 2 Тогда
БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1); 
БухИт.ИспользоватьСубконто(Счет.ВидСубконто(2),,1); 
ИначеЕсли КолвоСубконто = 3 Тогда
БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1); 
БухИт.ИспользоватьСубконто(Счет.ВидСубконто(2),,1); 
БухИт.ИспользоватьСубконто(Счет.ВидСубконто(3),,1); 
КонецЕсли;
или же или же когда я далее делаю получить субконто?
 
H

Hryv

Я бы так сделал (пример для 2-х )
Код:
Если КолвоСубконто = 1 Тогда
...
ИначеЕсли КолвоСубконто = 2 Тогда
Если Счет.ТолькоОбороты(1)=1 Тогда
КолвоСубконто = КолвоСубконто -1;
Иначе
БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1); 
КонецЕсли;
Если Счет.ТолькоОбороты(2)=1 Тогда
КолвоСубконто = КолвоСубконто -1;
Иначе
БухИт.ИспользоватьСубконто(Счет.ВидСубконто(2),,1); 
КонецЕсли;
ИначеЕсли КолвоСубконто = 3 Тогда
...
КонецЕсли;

Дальше надо только учесть, что субконто вообще может не быть (хотя это и так бывает и надо было сразу делать для КолвоСубконто от 0 до 3)

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

KiR

Только не знаю (не сталкивался и не проверял) может ли быть, например, на втором субконто только обороты, а на третьем как обычно
Могут конечно. вот у мя такая же шняга на 51м) офигивал когда с обороткой эксперементировал. в любом случае спасибо большое! буду ваять
 
V

vitfil

Честно говоря я не совсем понимаю зачем надо делать субконто с флажком "только обороты"
Я таки вам расскажу на примере!
51-й счет (расчетный счет)
Субконто 1 - Банковский счет
Субконто 2 (об) - Вид движения денежных средств.
Если по второму субконто убрать "только обороты", имеем следующую картину:
Поступления:
Поступление от клиентов,
Поступление за конвертацию,
Обязательная продажа валюты...
Списания:
Хознужды,
Оплата поставщикам...

Сальдо закрываться не будет. А налитика по приходам и расходам крайне необходима, т.е. важно видеть, в разрезе каких статей были движения денежных средств.
 
H

Hryv

vitfil, спасибо за наглядный пример - полезно будет знать


Могут конечно. вот у мя такая же шняга на 51м) офигивал когда с обороткой эксперементировал. в любом случае спасибо большое! буду ваять

Незачто
Усеха :(
 
Мы в соцсетях:

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