|
v7: Число фильтров субконто превысило допустимое значение | ☑ | ||
---|---|---|---|---|
0
toshen
20.03.13
✎
13:09
|
Бух.учет, редакция 4.5(7.70.547)
Процедура выгружает итоги по всем счетам в xml-Файл. дойдя до счета 10.7 возникает ошибка "Число фильтров субконто превысило допустимое значение!". Где я ошибся? Процедура Сформировать() ДатаНач = "01.01.1900"; счетч = 0; //счетчик для отладки //открытие хмл файла Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") <> 1 Тогда Предупреждение("Компонента v7plus.dll не найдена!"); Возврат; КонецЕсли; XMLАнализатор = СоздатьОбъект("AddIn.XMLParser"); XMLКорневойРаздел = XMLАнализатор.СоздатьДокумент(); ДанныеXML = XMLКорневойРаздел.СоздатьПодчиненныйЭлемент("root"); //*** Счета = СоздатьОбъект("Счет.Основной"); Счета.ВыбратьСчета(); Пока Счета.ПолучитьСчет()=1 Цикл //фрагмет кода для отладки счетч = счетч +1; Если счетч=36 Тогда // в данной итерации возникает ошибка (счет 10.7 "Материалы, переданные в переработку на сторону". данный счет содержит 3 субконто, метод ИспользоватьСубконто также будет вызван 3 раза) Предупреждение(Строка(счетч)); Конецесли; //*** ТекСчет = Счета.ТекущийСчет(); ТЗ = СоздатьОбъект("ТаблицаЗначений"); БИ = СоздатьОбъект("БухгалтерскиеИтоги"); Для Сч=1 По ТекСчет.КоличествоСубконто() Цикл БИ.ИспользоватьСубконто(ТекСчет.ВидСубконто(Сч),,1); ТЗ.НоваяКолонка(СтрЗаменить(СтрЗаменить(ТекСчет.ВидСубконто(Сч),".","")," ","")); Конеццикла; ТЗ.НоваяКолонка("Счет"); ТЗ.НоваяКолонка("ДтКолво"); ТЗ.НоваяКолонка("ДтСумма"); ТЗ.НоваяКолонка("КтКолво"); ТЗ.НоваяКолонка("КтСумма"); БИ.ИСпользоватьсубконто(); //тут возникает ошибка Если БИ.ВыполнитьЗапрос(ДатаНач,ДатаКонца,,,1,1,) = 0 Тогда Продолжить; КонецЕсли; БИ.ВыбратьСубконто(); Пока БИ.ПолучитьСубконто() = 1 Цикл Счет = БИ.Счет.Код; ДтСум = БИ.СКД(); ДтКол = БИ.СКД("К"); КтСум = БИ.СКК(); КтКол = БИ.СКК("К"); Если (ДтСум <> 0) ИЛИ (КтСум <> 0) Тогда ТЗ.НоваяСтрока(); ТЗ.Счет = ТекСчет; Для Сч=1 По ТекСчет.КоличествоСубконто() Цикл ТЗ.УстановитьЗначение(ТЗ.НомерСтроки,СтрЗаменить(СтрЗаменить(ТекСчет.ВидСубконто(Сч),".","")," ",""), БИ.Субконто(Сч)); КонецЦикла; ТЗ.ДтКолво = ДтКол; ТЗ.ДтСумма = ДтСум; ТЗ.КтКолво = КтКол; ТЗ.КтСумма = КтСум; КонецЕсли; КонецЦикла; //доавить итоги по счету в хмл файл Для НС = 1 По ТЗ.КоличествоСтрок() Цикл ТЗ.ПолучитьСтрокуПоНомеру(НС); Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("Данные" + НС); Для НК = 1 По ТЗ.КоличествоКолонок() Цикл Ветка.УстановитьАтрибут(ТЗ.ПолучитьПараметрыКолонки(НК), Строка(ТЗ.ПолучитьЗначение(НС,НК))); КонецЦикла; КонецЦикла; //*** КонецЦикла; //запись в хмл файл XMLКорневойРаздел.Записать(ФормИмяФайлаДанных); Предупреждение("ОК"); //**** КонецПроцедуры |
|||
1
KishMish
20.03.13
✎
13:10
|
ну ты выбираешь один раз ВЫБРАТЬ СУБКОНТО а птыаешься получить ВСЕ СУБКОНТО НА СЧЕТЕ
|
|||
2
1Сергей
20.03.13
✎
13:11
|
Вот это зачем?
БИ.ИСпользоватьсубконто(); //тут возникает ошибка |
|||
3
toshen
20.03.13
✎
13:31
|
(1) ошибка возникает раньше вызова ВыбратьСубконто
(2) пытался без данной строки - ошибка возникает при вызове ВыбратьСубконто "Данная операция допустима только в режиме запроса по аналитике". Хотя в ранее в цикле было БИ.ИспользоватьСубконто(ТекСчет.ВидСубконто(Сч),,1). Не пойму в чём дело. |
|||
4
zak555
20.03.13
✎
13:33
|
на счете ТекСчет.КоличествоСубконто(), а ты пытаешься использовать ТекСчет.КоличествоСубконто() + 1
=) |
|||
5
zak555
20.03.13
✎
13:34
|
функцию рекурсии напиши по обходу аналитики
|
|||
6
zak555
20.03.13
✎
13:34
|
+ исключай аналитику по которой нет остатков
|
|||
7
KishMish
20.03.13
✎
14:05
|
сделай проверку, если у счета нет субконто, то его продолжить
|
|||
8
zak555
20.03.13
✎
14:06
|
(7) в цикл с 1 по 0 не зайдёт
|
|||
9
KishMish
20.03.13
✎
14:08
|
зато не сработают вот жти строки
|
|||
10
KishMish
20.03.13
✎
14:08
|
БИ.ИСпользоватьсубконто(); //тут возникает ошибка
Если БИ.ВыполнитьЗапрос(ДатаНач,ДатаКонца,,,1,1,) = 0 Тогда Продолжить; КонецЕсли; БИ.ВыбратьСубконто(); |
|||
11
KishMish
20.03.13
✎
14:08
|
я имел ввиду вот этот цикл
Счета = СоздатьОбъект("Счет.Основной"); Счета.ВыбратьСчета(); Пока Счета.ПолучитьСчет()=1 Цикл |
|||
12
zak555
20.03.13
✎
14:10
|
я даже не посмотрел, что он запрос по всем счетам выполняет
только автора нет и обясзнить зачем он это делает -- некому |
|||
13
toshen
20.03.13
✎
14:12
|
Необходимо перенести итоги на определённый месяц в 8. Конечно, есть стандартный механизм, но необходимо сделать своей обработкой.
|
|||
14
zak555
20.03.13
✎
14:40
|
(13) зачем своей ?
|
|||
15
toshen
20.03.13
✎
15:46
|
(14) Если я воспользуюсь стандартным механизмом, то не задержусь на работе и по возвращению домой застану жену с любовником. В состоянии аффекта схвачу нож и после нескольких минут ужаснусь сделанному. А после решу, что нет смысла дальше жить, сяду в автомобиль, сдавлю педаль на полную, что бы разбиться, но меня остановят работники ГАИ за превышение скорости и мне придётся платить штраф. Вот что бы не платить штраф, нужно писать обработку=)
По теме. Спасибо за советы, кажется понял куда двигаться. Если что, ещё спрошу. |
|||
16
toshen
21.03.13
✎
12:26
|
Для тех, кто будет интересоваться данным вопросом.
Далее предоставлен исправленный код. Результатом обработки является выгрузка итогов на указанный месяц в xml файл. Пример структуры файла: <Данные172 Счет="62" ИмяСубконто1="Контрагенты" Субконто1="Наш контрагент номер 24" ИмяСубконто2="Договоры" Субконто2="Договор поставки №08/11-11Н от 08.11.11" ДтКолво="0" ДтСумма="59553.15" КтКолво="0" КтСумма="0" /> (количество субконто в строке файла зависит от счета) Процедура ОбходПоСубконто(БИ, ТЗ, КоличествоСубконто, НомерСубконто = 1) Если НомерСубконто<=КоличествоСубконто Тогда БИ.ВыбратьСубконто(НомерСубконто); Пока БИ.ПолучитьСубконто(НомерСубконто) = 1 Цикл ОбходПоСубконто(БИ, ТЗ, КоличествоСубконто, НомерСубконто + 1); КонецЦикла; Иначе ДтСум = БИ.СКД(); ДтКол = БИ.СКД("К"); КтСум = БИ.СКК(); КтКол = БИ.СКК("К"); Если (ДтСум <> 0) ИЛИ (КтСум <> 0) Тогда ТЗ.НоваяСтрока(); ТЗ.Счет = БИ.Счет.Код; Для Сч=1 По КоличествоСубконто Цикл ТЗ.УстановитьЗначение(ТЗ.НомерСтроки,"ИмяСубконто"+Сч, БИ.Счет.ВидСубконто(Сч)); ТЗ.УстановитьЗначение(ТЗ.НомерСтроки,"Субконто"+Сч, БИ.Субконто(Сч)); КонецЦикла; ТЗ.ДтКолво = ДтКол; ТЗ.ДтСумма = ДтСум; ТЗ.КтКолво = КтКол; ТЗ.КтСумма = КтСум; КонецЕсли; КонецЕсли; КонецПроцедуры //****************************************************************************************** Процедура Сформировать() ДатаНач = "01.01.1900"; //открытие xml файла Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") <> 1 Тогда Предупреждение("Компонента v7plus.dll не найдена!"); Возврат; КонецЕсли; XMLАнализатор = СоздатьОбъект("AddIn.XMLParser"); XMLКорневойРаздел = XMLАнализатор.СоздатьДокумент(); ДанныеXML = XMLКорневойРаздел.СоздатьПодчиненныйЭлемент("root"); //конец открытие xml файла Счета = СоздатьОбъект("Счет.Основной"); Счета.ВыбратьСчета(); Пока Счета.ПолучитьСчет()=1 Цикл ТекСчет = Счета.ТекущийСчет(); Сообщить("Обрабатывается счет " + ТекСчет); ТЗ = СоздатьОбъект("ТаблицаЗначений"); БИ = СоздатьОбъект("БухгалтерскиеИтоги"); ТЗ.НоваяКолонка("Счет"); Для Сч=1 По ТекСчет.КоличествоСубконто() Цикл БИ.ИспользоватьСубконто(ТекСчет.ВидСубконто(Сч),,1); ТЗ.НоваяКолонка("ИмяСубконто"+Сч); ТЗ.НоваяКолонка("Субконто"+Сч); Конеццикла; ТЗ.НоваяКолонка("ДтКолво"); ТЗ.НоваяКолонка("ДтСумма"); ТЗ.НоваяКолонка("КтКолво"); ТЗ.НоваяКолонка("КтСумма"); Если БИ.ВыполнитьЗапрос(ДатаНач,ДатаКонца,,,1,1,) = 0 Тогда Продолжить; КонецЕсли; ОбходПоСубконто(БИ, ТЗ, ТекСчет.КоличествоСубконто()); //добавить итоги по счету в xml файл Для НС = 1 По ТЗ.КоличествоСтрок() Цикл ТЗ.ПолучитьСтрокуПоНомеру(НС); Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("Данные" + НС); Для НК = 1 По ТЗ.КоличествоКолонок() Цикл Ветка.УстановитьАтрибут(ТЗ.ПолучитьПараметрыКолонки(НК), Строка(ТЗ.ПолучитьЗначение(НС,НК))); КонецЦикла; КонецЦикла; //конец добавить итоги по счету в xml файл КонецЦикла; //запись в хмл файл XMLКорневойРаздел.Записать(ФормИмяФайлаДанных); Предупреждение("ОК"); //конец запись в хмл файл КонецПроцедуры |
|||
17
zak555
21.03.13
✎
12:26
|
(15) сколько раз падал на голову ?
|
|||
18
toshen
21.03.13
✎
12:27
|
сильно только 1 раз=)
|
|||
19
zak555
21.03.13
✎
12:28
|
(16) ты не учёл (6) -- ниЗачёт
|
|||
20
zak555
21.03.13
✎
12:28
|
(18) думаю, что больше
|
|||
21
toshen
21.03.13
✎
12:37
|
(19) есть отбор Если (ДтСум <> 0) ИЛИ (КтСум <> 0) Тогда
а исключать аналитику по которой нет остатков не для всех счетов нужно, насколько я понимаю. Проверку на товарный/взаиморасчётный счёт планирую делать при загрузке данных, хотя можно и при выгрузке. |
|||
22
zak555
21.03.13
✎
12:38
|
(21) я просто помню, что в бухии для бюджета из 5 аналитик 2 была оборотной и если её не исключить, то остатков по 3,4,5 не будет
|
|||
23
toshen
21.03.13
✎
12:46
|
(22) Не понял о чём речь, я в бухгалтерии всего несколько дней. В любом случае попробую загрузить данные и проверю оборотно-сальдовой ведомостью. Если будут расхождения, пойду в гости к Гуглу.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |