Поиск  Пользователи  Правила  Войти
RSS
Внешняя обработка и Табл. значений
 
Привет, всем.

Написала внешнюю обработку. Оня предназначена для сбора данных по актам списания материалов сч.10.9. Сначала данные собираются в таблицу значений, а потом выводятся на печать. Проблема в том, что таблица значений не хочет сохранять данные (через раз), не хочет удалять нулевые строки и вообще "не слушается", хотя код проверяла триста раз, через отладчик смотрела, как - будто все попадает, но результата нет. Что это за глюки?
 
Если бы еще код был... А так - черт его знает...
 
"Вот, такой замудренный код. Налоговый регистр. Причем, если данные собирать не по операциям, а именно по проводкам документов списания, то все нормально. Только ручные проводки не попадают тогда. Но бухгалтер не хочет совершать лишние колебания руками, чтобы дополнить таблицу вручеую.



Процедура Сформировать()  



ДокОсн = СоздатьОбъект("Операция");

ДокОсн.ВыбратьОперации(Дата1, Дата2);  

Д1 = 0;



ТЗ1.ВыбратьСтроки();

Пока ТЗ1.ПолучитьСтроку() = 1 Цикл

   ТЗ1.УдалитьСтроку();

КонецЦикла;



Пока ДокОсн.ПолучитьОперацию() = 1 Цикл

Если ДокОсн.ПометкаУдаления() = 0 Тогда

// Если ДокОсн.Вид() = "УслугиСтороннихОрганизаций11" Тогда

// ТЗ.Ст =

// ДокОсн = Док.ДокументОприходования.ТекущийДокумент();



//ДокОсн.ВыбратьСтроки();  

а=0;

б=0;

в=0;

г=0;

д=0;

е=0;

ж=0;

з=0;

к=0;

л=0;  

ф=0;

м=0;  

н=0;

о=0;

п=0;

р=0;

с=0;

т=0;

у=0;





ДокОсн.ВыбратьПроводки();

Пока ДокОсн.ПолучитьПроводку() = 1 Цикл

Если ДокОсн.Кредит.Счет = СчетПоКоду("10.9") ТОгда  

ТЗ1.НоваяСтрока();  

ТЗ1.Название = "Акт списания № " +" " +ДокОсн.Документ.НомерДок + " "+ ДокОсн.Кредит.МОЛ +"       "+ ДокОсн.ДатаОперации; //+ "  " + ДокОсн.НомерДок;  

Если  (Лев(ДокОсн.Дебет.Субконто(2), 5) = "Ст254") или (Лев(ДокОсн.Дебет.Субконто(3), 5) = "Ст254") Тогда



// Если ДокОсн.Субконто2.Родитель.Наименование = "Материальные расходы ст.254" Тогда

// Если ДокОсн.Субконто2.ВидРасходовДляНалоговогоУчета = "Материальные расходы"  Тогда

Если ДокОсн.Дебет.Счет = СчетПоКоду("20.1") Тогда

а = а + ДокОсн.Сумма;  

ИначеЕсли ДокОсн.Дебет.Счет = СчетПоКоду("20.2") Тогда

б = б + ДокОсн.Сумма;

ИначеЕсли ДокОсн.Дебет.Счет = СчетПоКоду("20.3") Тогда

в = в + ДокОсн.Сумма;  

ИначеЕсли ДокОсн.Дебет.Счет = СчетПоКоду("20.4") Тогда

г = г + ДокОсн.Сумма;  

ИначеЕсли ДокОсн.Дебет.Счет = СчетПоКоду("20.5") Тогда

д = д + ДокОсн.Сумма;

ИначеЕсли ДокОсн.Дебет.Счет = СчетПоКоду("20.6") Тогда

е = е + ДокОсн.Сумма;

ИначеЕсли ДокОсн.Дебет.Счет = СчетПоКоду("23.1") Тогда

ж = ж + ДокОсн.Сумма;  



//ИначеЕсли ДокОсн.КоррСчет = СчетПоКоду("44.1") Тогда

// л = л + (ДокОсн.Всего - ДокОсн.НДС);

// ТЗ.Код = "Стр. 020";

КонецЕсли;

ТЗ1.Код = "Стр. 020";

КонецЕсли;    



Если  (Лев(ДокОсн.Дебет.Субконто(2), 5) = "Ст264") или (Лев(ДокОсн.Дебет.Субконто(3), 5) = "Ст264") Тогда



// Если ДокОсн.Субконто2.Родитель.Наименование = "Материальные расходы ст.254" Тогда

// Если ДокОсн.Субконто2.ВидРасходовДляНалоговогоУчета = "Материальные расходы"  Тогда

Если ДокОсн.Дебет.Счет = СчетПоКоду("20.1") Тогда

м = м + ДокОсн.Сумма;  

ИначеЕсли ДокОсн.Дебет.Счет = СчетПоКоду("20.2") Тогда

н = н + ДокОсн.Сумма;

ИначеЕсли ДокОсн.Дебет.Счет = СчетПоКоду("20.3") Тогда

о = о + ДокОсн.Сумма;  

ИначеЕсли ДокОсн.Дебет.Счет = СчетПоКоду("20.4") Тогда

п = п + ДокОсн.Сумма;

ИначеЕсли ДокОсн.Дебет.Счет = СчетПоКоду("25") Тогда

т = т + ДокОсн.Сумма;

ИначеЕсли ДокОсн.Дебет.Счет = СчетПоКоду("26.0") Тогда

у = у + ДокОсн.Сумма;    

// ИначеЕсли ДокОсн.КоррСчет = СчетПоКоду("44.1") Тогда

// ф = ф + (ДокОсн.Всего - ДокОсн.НДС);    

//ТЗ.Код = "Стр. 060, 100";

КонецЕсли;

ТЗ1.Код = "Стр. 060, 100";

КонецЕсли;  



Если  (Лев(ДокОсн.Дебет.Субконто(3), 5) = "Ст254") или (Лев(ДокОсн.Дебет.Субконто(3), 5) = "Ст264") Тогда

Если ДокОсн.Дебет.Счет = СчетПоКоду("25") Тогда

т = т + ДокОсн.Сумма;

КонецЕсли;

Если ДокОсн.Дебет.Счет = СчетПоКоду("26.0") Тогда

у = у + ДокОсн.Сумма;

КонецЕсли;

КонецЕсли;

// ТЗ.Расход = ДокОсн.НаименованиеУслуги;

   Если  (Лев(ДокОсн.Дебет.Субконто(2), 5) = "Ст254") или  (Лев(ДокОсн.Дебет.Субконто(2), 5) = "Ст264") Тогда

ТЗ1.Ст = ДокОсн.Дебет.Субконто(2);

ИначеЕсли  (Лев(ДокОсн.Дебет.Субконто(3), 5) = "Ст254") или  (Лев(ДокОсн.Дебет.Субконто(3), 5) = "Ст264") Тогда

ТЗ1.Ст = ДокОсн.Дебет.Субконто(3);

КонецЕсли;



КонецЕсли;

КонецЦикла;  



ТЗ1.М201 = а;  

ТЗ1.М202М = б;

ТЗ1.М203М = в;

ТЗ1.М204М = г; ///здесь должна заполняться таблица

ТЗ1.М205М = д; //через отладчик видно, что заполняется

ТЗ1.М206М = е; //но при просмотре, данных нет

ТЗ1.М231М = ж;





ТЗ1.П201П = м;  

ТЗ1.П202П = н;

ТЗ1.П203П = о;

ТЗ1.П205П = п;





ТЗ1.П25П = т;

ТЗ1.П26П = у;

КонецЕсли;

КонецЦикла;  

ТЗ1.Сортировать("Название");

ТЗ1.ВыбратьСтроки();

Пока ТЗ1.ПолучитьСтроку() = 1 Цикл

ТЗ1.Всего = ТЗ1.М201+ТЗ1.М202М+ТЗ1.М203М+ТЗ1.М204М+ ТЗ1.М205М+ТЗ1.М231М+ ТЗ1.М206М+ ТЗ1.П206П+ТЗ1.П205П+ТЗ1.П203П+ТЗ1.П201П +ТЗ1.П202П+ ТЗ1.П231П+ ТЗ1.П25П+ ТЗ1.П26П+ ТЗ1.П44;

   //Если ТЗ.Всего = 0 Тогда

   //    ТЗ.УдалитьСтроку(); // здесь должны были строки удаляться, но

   //КонецЕсли;              //   увы...

Всего1 = Всего1 + ТЗ1.Всего;

М2011 = М2011+ТЗ1.М201;  

М2021 = М2021+ТЗ1.М202М;

М2031 = М2031+ТЗ1.М203М;

М2041 = М2041+ТЗ1.М204М;

М2051 = М2051+ТЗ1.М205М;

М2061 = М2061+ТЗ1.М206М;

М2311 = М2311+ТЗ1.М231М;

П2011 = П2011+ТЗ1.П201П;

П2021 = П2021+ТЗ1.П202П;

П2031 = П2031+ТЗ1.П203П;

П2051 = П2051+ТЗ1.П205П;

П2061 = П2061+ТЗ1.П206П;



П251 = П251+ТЗ1.П25П;

П261 = П261+ТЗ1.П26П;



КонецЦикла;  





КонецПроцедуры"
 
Может предложите что-то грамотнее. Я, конечно, понимаю, что код можно оптимизировать, но пока речь об этом не идет.
 
"по поводу неудаления строки....заполняется Таблица значений ТЗ1, а удаляешь строку ТЗ.... непорядок

по несохранению данных...какой тип у незаполняемых колонок?

попробуй перед

ТЗ1.М204М = г;

написать вывод переменной "г"

Сообщить(г,"!!!");"
Читают тему

Читайте нас: