Распределение счетов

1. liberto 18 07.02.08 15:23 Сейчас в теме
Доброго времени суток!!!
Имеется "Производство+Услуги+Бухгалтерия", эта информационная база при проведении документа "Закрытие месяца" все счета скидывает на 20, а потом его распределяет.
У бух-ии появилось желание, чтоб счета 23,25,26 при закрытии месяца распределялись по статьям затрат аналогично 20. Как это сделать?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Abadonna 3968 07.02.08 15:29 Сейчас в теме
Так же аналогично и сделать, как сделано на 20-й
3. Abadonna 3968 07.02.08 16:29 Сейчас в теме
Вот тебе приблизительный примерчик:
Код
Функция ПропорцииПоСтатьеЗатрат(Сч,СтЗатр)
   ТЗ=СоздатьОбъект("ТаблицаЗначений");
   ТЗ.НоваяКолонка("Подразделение","Справочник.Подразделения");
   ТЗ.НоваяКолонка("Сальдо","Число");
   ТЗ.НоваяКолонка("Коэфф","Число");
   БИ=СоздатьОбъект("БухгалтерскиеИтоги");
   БИ.ИспользоватьРазделительУчета(Фирма);
   БИ.ИспользоватьСубконто(ВидыСубконто.СтатьиЗатрат,СтЗатр,2); 
   БИ.ИспользоватьСубконто(ВидыСубконто.Подразделения); 
   БИ.ВыполнитьЗапрос(ДатаДок,ДатаДок,Сч);  
   БИ.ВыбратьСубконто((ВидыСубконто.Подразделения));
   СальдоИ=0;
   Пока БИ.ПолучитьСубконто(ВидыСубконто.Подразделения)=1 Цикл   
      Если БИ.СКД()>0 Тогда
         ТЗ.НоваяСтрока();
         ТЗ.Подразделение=БИ.Субконто(ВидыСубконто.Подразделения);
         ТЗ.Сальдо=БИ.СКД(); 
         СальдоИ=СальдоИ+БИ.СКД();
      КонецЕсли; 
   КонецЦикла;   
   КоэффИ=0;
   Для А=1 По ТЗ.КоличествоСтрок()-1 Цикл 
      Коэфф=ТЗ.ПолучитьЗначение(А,2)/СальдоИ;
      КоэффИ=КоэффИ+Коэфф; 
      ТЗ.УстановитьЗначение(А,3,Коэфф);     
   КонецЦикла;
   Остаток=1-КоэффИ;     
   ТЗ.УстановитьЗначение(ТЗ.КоличествоСтрок(),3,Остаток);
   Возврат ТЗ;
КонецФункции

Процедура ЗакрытьСчет25() // 25             
   Сч=СчетПоКоду("25");
   ТЗ=СоздатьОбъект("ТаблицаЗначений");       
   Сообщить("Сворачиваю сальдо на счете "+Сч.Код+"...","!");
   ТЗ.Загрузить(глРазвернутоеСальдоЛюбогоСчета(Сч,ДатаДок,ДатаДок,Фирма));     
   // 1 колонка =Подразделение, 2=СтатьяЗатрат, 10=конечное сальдо    
   Спр=СоздатьОбъект("Справочник.СтатьиЗатрат");
   Спр.НайтиПоКоду("47"); // Все статьи затрат
   Все=Спр.ТекущийЭлемент();     
   СпрП=СоздатьОбъект("Справочник.Подразделения");
   СпрП.НайтиПоКоду("99999"); // Условное подразделение
   УслПодр=СпрП.ТекущийЭлемент();      
   // сгоняем развернутое сальдо на одну статью затрат и одно подразделение        
   ТЗ.ВыбратьСтроки();
   Пока ТЗ.ПолучитьСтроку()=1 Цикл
      Операция.НоваяПроводка();
      Операция.РазделительПоФирме=Фирма; 
      Операция.Дебет.Счет=Сч;
      Операция.Дебет.Подразделения=УслПодр; 
      Операция.Дебет.СтатьиЗатрат=Все;    
      Операция.Кредит.Счет=Сч;
      Операция.Кредит.Подразделения=ТЗ.Суб1; 
      Операция.Кредит.СтатьиЗатрат=ТЗ.Суб2;
      Операция.Сумма=ТЗ.СальдоКонС;
   КонецЦикла;    
   Операция.Записать(); 
   Сообщить("Выполняю проводки на счет 20...","!");
   // разносим сальдо пропорционально ЗП на подразделениях   
   БИ=СоздатьОбъект("БухгалтерскиеИтоги");
   БИ.ИспользоватьРазделительУчета(Фирма);    
   БИ.ВыполнитьЗапрос(ДатаДок,ДатаДок,Сч);                     
   СальдоСч=БИ.СКД();
   Спр.НайтиПоКоду("9");//Основная заработная плата
   СтЗатр=Спр.ТекущийЭлемент();     
   Сч20=СчетПоКоду("20.1");
   ТЗ.Очистить();
   ТЗ.Загрузить( ПропорцииПоСтатьеЗатрат(Сч20,СтЗатр));
   ТЗ.ВыбратьСтроки();
   Пока ТЗ.ПолучитьСтроку()=1 Цикл
      Операция.НоваяПроводка();
      Операция.РазделительПоФирме=Фирма;  
      Операция.Дебет.Счет=Сч20;
      Подр=ТЗ.Подразделение;// запомним, чтобы хвосты потом свалить
      Операция.Дебет.Подразделения=Подр;  
      Операция.Дебет.СтатьиЗатрат=Общепроизводственные;   // это глоб переменная гл. модуля
      Операция.Кредит.Счет=Сч;
      Операция.Кредит.Подразделения=УслПодр; 
      Операция.Кредит.СтатьиЗатрат=Все; 
      Операция.Сумма=Окр(СальдоСч*ТЗ.Коэфф,2);   
   КонецЦикла;               
   Операция.Записать(); 
   // подчистка хвостов  
   ТЗ.Очистить();  
   ТЗ.Загрузить(глРазвернутоеСальдоЛюбогоСчета(Сч,ДатаДок,ДатаДок,Фирма)); 
   Сообщить("Подчищаю хвосты от округления...","!");
   ТЗ.ВыбратьСтроки();
   Пока ТЗ.ПолучитьСтроку()=1 Цикл 
      Если ТЗ.СальдоКонС>0 Тогда
         Операция.НоваяПроводка();
         Операция.РазделительПоФирме=Фирма;  
         Операция.Дебет.Счет=Сч20;
         Операция.Дебет.Подразделения=Подр;
         Операция.Дебет.СтатьиЗатрат=Общепроизводственные;   // это глоб переменная гл. модуля
         Операция.Кредит.Счет=Сч;
         Операция.Кредит.Подразделения=УслПодр; 
         Операция.Кредит.СтатьиЗатрат=Все;   
         Операция.Сумма=ТЗ.СальдоКонС;    
      КонецЕсли;
   КонецЦикла;
   Операция.Записать(); 
   Сообщить("Счет закрыт!","!!!");
КонецПроцедуры      
Показать полностью
4. poppy 09.02.08 23:49 Сейчас в теме
Зачем подчищать хвосты? Имхо можно и без этого обойтись...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот