|   |   | 
| 
 | 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) Не понял о чём речь, я в бухгалтерии всего несколько дней. В любом случае попробую загрузить данные и проверю оборотно-сальдовой ведомостью. Если будут расхождения, пойду в гости к Гуглу.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |