7.7 Ошибкав В выгрузке ХМЛ

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем Дмитрий Игоревич, 13 май 2013.

  1. TopicStarter Overlay
    Дмитрий Игоревич
    Offline

    Дмитрий Игоревич Опытный в 1С

    Регистрация:
    11 апр 2013
    Сообщения:
    152
    Симпатии:
    0
    Баллы:
    26
    Всем доброго времени суток, столкнулсясо следующей проблемой, всю голову сломал как делать. идеи на данный моментвсе закончились. формирую выгрузку в хмл, вот код:

    Код:
    //*******************************************
    Перем Таб,НомерСтроки;//////////////////////////////////////////////////////////////  Общие функции подбора ЦФО
    Процедура ВыбратьФайл()
    Каталограсылки="C:\";
    ФС.ВыбратьКаталог(Каталограсылки,"Выбор каталога для выгрузки",120);
    ФайлРассылки=Каталограсылки+"\FailVigruzkiFinPlan.xml";
    КонецПроцедуры
    
    
    Процедура Выгрузить(СтатьяБДРС,ЦФО,Сумма,СчетДт,СубконтоДт1,СубконтоДт2,СчетКт,СубконтоКт1,СубконтоКт2)
    ЗагрузитьВнешнююКомпоненту("V7Plus.dll");
    Анализатор = СоздатьОбъект("AddIn.XMLParser");
    Корень=Анализатор.СоздатьДокумент(); 
    node = Корень.CreateProcessingInstruction("xml", "version='1.0'");
    // encoding='utf-8'");
    Корень.preserveWhiteSpace = 1;
    Корень.AppendChild(node);
    
    ДанныеОСтатье=Корень.СоздатьПодчиненныйЭлемент("Статья");
    ДанныеОСтатье.УстановитьАтрибут("CodeFim","01");Данные=ДанныеОСтатье.СоздатьПодчиненныйЭлемент("Данные");
    Статья=Данные.СоздатьПодчиненныйЭлемент("Element");
    Статья.УстановитьАтрибут("StatiaBDRS",СокрЛП(СтатьяБДРС));
    Статья.УстановитьАтрибут("CFO",СокрЛП(ЦФО));
    Статья.УстановитьАтрибут("Sum",СокрЛП(Сумма));
    Статья.УстановитьАтрибут("SchetDt",СокрЛП(СчетДт));
    Статья.УстановитьАтрибут("SubkontoDt1",СокрЛП(СубконтоДт1));
    Статья.УстановитьАтрибут("SubkontoDt2",СокрЛП(СубконтоДт2));
    Статья.УстановитьАтрибут("SchetKt",СокрЛП(СчетКт));
    Статья.УстановитьАтрибут("SubkontoKt1",СокрЛП(СубконтоКт1));
    Статья.УстановитьАтрибут("SubkontoKt2",СокрЛП(СубконтоКт2));
    
    Корень.Записать(Файлрассылки);КонецПроцедуры
    Процедура ВыводРезультата(Спр) // Выводим результат бух.запросаБухИтоги=СоздатьОбъект("БухгалтерскиеИтоги");
    
    ФлагСубДТ=0;
    Если ПустоеЗначение(Спр.СубконтоДт1)=0 тогда
    БухИтоги.ИспользоватьСубконто(Спр.СубконтоДт1.Вид(),Спр.СубконтоДт1,1,0);
    ФлагСубДТ=1;
    КонецЕсли;
    Если ПустоеЗначение(Спр.СубконтоДт2)=0 тогда
    БухИтоги.ИспользоватьСубконто(Спр.СубконтоДт2.Вид(),Спр.СубконтоДт2,1,0);
    ФлагСубДТ=1;
    КонецЕсли;
    Если ПустоеЗначение(Спр.СубконтоДт3)=0 тогда
    БухИтоги.ИспользоватьСубконто(Спр.СубконтоДт3.Вид(),Спр.СубконтоДт3,1,0);
    ФлагСубДТ=1;
    КонецЕсли;Если ПустоеЗначение(Спр.СубконтоКт1)=0 тогда
    Если ФлагСубДТ=1 тогда
    БухИтоги.ИспользоватьКорСубконто(Спр.СубконтоКт1.Вид(),Спр.СубконтоКт1,1,0);
    Иначе
    БухИтоги.ИспользоватьСубконто(Спр.СубконтоКт1.Вид(),Спр.СубконтоКт1,1,0);
    КонецЕсли;
    КонецЕсли;
    Если ПустоеЗначение(Спр.СубконтоКт2)=0 тогда
    Если ФлагСубДТ=1 тогда
    БухИтоги.ИспользоватьКорСубконто(Спр.СубконтоКт2.Вид(),Спр.СубконтоКт2,1,0);
    Иначе
    БухИтоги.ИспользоватьСубконто(Спр.СубконтоКт2.Вид(),Спр.СубконтоКт2,1,0);
    КонецЕсли;
    КонецЕсли;Если ПустоеЗначение(Спр.СубконтоКт3)=0 тогда
    Если ФлагСубДТ=1 тогда
    БухИтоги.ИспользоватьКорСубконто(Спр.СубконтоКт3.Вид(),Спр.СубконтоКт3,1,0);
    Иначе
    БухИтоги.ИспользоватьСубконто(Спр.СубконтоКт3.Вид(),Спр.СубконтоКт3,1,0);
    КонецЕсли;
    КонецЕсли;
    Если Спр.ДатаНачала>КонДата тогда
    возврат;
    КонецЕсли;НачДатаЗапроса=?(ПустоеЗначение(Спр.ДатаНачала)=1,НачДата,Макс(НачДата,Спр.ДатаНачала));
    КонДатаЗапроса=?(ПустоеЗначение(Спр.ДатаКонца)=1,КонДата,Мин(КонДата,Спр.ДатаКонца));
    
    //ТТ.НоваяСтрока();
    //ТТ.ЦФО=Спр.ЦФО;
    //ТТ.СтатьяБДРС=Спр.СтатьяБДРС;
    Сумма =0;Если ((ПустоеЗначение(Спр.СчетДТ)=0) и (ПустоеЗначение(Спр.СчетКТ)=0))  тогда
    БухИтоги.ВыполнитьЗапрос(НачДатаЗапроса,КонДатаЗапроса,?(ПустоеЗначение(Спр.СчетДТ)=0,Спр.СчетДТ,""),?(ПустоеЗначение(Спр.СчетКТ)=0,Спр.СчетКТ,""),,2,,1);
    Сумма = БухИтоги.ДО()-БухИтоги.КО();КонецЕсли;
    Если ((ПустоеЗначение(Спр.СчетДТ)=1) и (ПустоеЗначение(Спр.СчетКТ)=0))  тогда
    БухИтоги.ВыполнитьЗапрос(НачДатаЗапроса,КонДатаЗапроса,?(ПустоеЗначение(Спр.СчетДТ)=0,Спр.СчетДТ,""),?(ПустоеЗначение(Спр.СчетКТ)=0,Спр.СчетКТ,""),,3,,1);
    Сумма = БухИтоги.КО();
    КонецЕсли;Если ((ПустоеЗначение(Спр.СчетДТ)=0) и (ПустоеЗначение(Спр.СчетКТ)=1))  тогда
    БухИтоги.ВыполнитьЗапрос(НачДатаЗапроса,КонДатаЗапроса,?(ПустоеЗначение(Спр.СчетДТ)=0,Спр.СчетДТ,""),?(ПустоеЗначение(Спр.СчетКТ)=0,Спр.СчетКТ,""),,3,,1);
    Сумма = БухИтоги.ДО();
    КонецЕсли;
    ЦФО=Спр.ЦФО;
    СтатьяБДРС=Спр.СтатьяБДРС;
    СчетДт=Спр.СчетДТ;
    СчетКт=Спр.СчетКТ;
    СубконтоДт1=Спр.СубконтоДт1;
    СубконтоДт2=Спр.СубконтоДт2;
    СубконтоДт3=Спр.СубконтоДт3;СубконтоКт1=Спр.СубконтоКт1;
    СубконтоКт2=Спр.СубконтоКт2;
    СубконтоКт3=Спр.СубконтоКт3;
    НомерСтроки=НомерСтроки+1;//Выгрузка или печать
    Если ФлагВыгрузитьВХМЛ =1 тогда
    Выгрузить(СтатьяБДРС,ЦФО,Сумма,СчетДт,СубконтоДт1,СубконтоДт2,СчетКт,СубконтоКт1,СубконтоКт2);
    иначе
    Таб.ВывестиСекцию("Подвал");
    КонецЕсли;
    КонецПроцедуры//процедураДобавит
    Процедура Добавить()
    ОткрытьПодбор("Справочник.ШаблонВыгрузкиФинПланСтатейРасходов",,,1);
    КонецПроцедуры
    //процедураУдалить
    Процедура Удалить()
    СписокСтатей.УдалитьЗначение(СписокСтатей.ТекущаяСтрока());
    КонецПроцедуры//процедураОчитстить
    Процедура Очистить()
    СписокСтатей.УдалитьВсе();КонецПроцедуры
    //процедураПодборЗначенийЦфо
    Процедура ОбработкаПодбора(Зн)СписокСтатей.ДобавитьЗначение(Зн,СокрЛП(Зн.ЦФО)+" "+СокрЛП(Зн.СтатьяБДРС));
    КонецПроцедуры////////////////////////////////////////////////////////////
    //функцияПолучитьЦфо
    Функция ПолучитьЦФО(Подразделение)
    
    СпрЦФО = СоздатьОбъект("Справочник.ЦФО");
    СпрЦФО.НайтиПоРеквизиту("Подразделение",Подразделение,1);возврат(СпрЦФО.ТекущийЭлемент());
    КонецФункцииПроцедура Сформировать()
    НомерСтроки=0;
    
    Таб=СоздатьОбъект("Таблица");  
    Таб.ИсходнаяТаблица("Таблица");  
    Таб.ВывестиСекцию("Шапка");  
    Если СписокСтатей.РазмерСписка()=0 тогда
    Спр=СоздатьОбъект("Справочник.ШаблонВыгрузкиФинПланСтатейРасходов");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()=1 Цикл
    Если Спр.ЭтоГруппа()=1 тогда
    продолжить;
    КонецЕсли;
    Если Спр.ПометкаУдаления()=1 тогда
    продолжить;
    КонецЕсли;
    ВыводРезультата(Спр.ТекущийЭлемент());
    КонецЦикла;Иначе // по списку
    Для а=1 По СписокСтатей.РазмерСписка() ЦиклСпр=СписокСтатей.ПолучитьЗначение(а);
    Если Спр.ЭтоГруппа()=1 тогда
    продолжить;
    КонецЕсли;Если Спр.ПометкаУдаления()=1 тогда
    продолжить;
    КонецЕсли;
    
    ВыводРезультата(Спр.ТекущийЭлемент());
    
    КонецЦикла;
    КонецЕсли;/// Выгрузка розничных возвратов
    Если ФлагВозвратИзРозницы=1 тогда
    ТТ=СоздатьОбъект("ТаблицаЗначений");
    ТТ.НоваяКолонка("СтатьяБДРС","Справочник.СтатьиДоходовИРасходов");
    ТТ.НоваяКолонка("ЦФО","Справочник.ЦФО");
    ТТ.НоваяКолонка("Сумма","Число",12,2);
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Спр.НайтиПоНаименованию("ВЫРУЧКА ОТ ОСНОВНОЙ ДЕЯТЕЛЬНОСТИ (без НДС + ИП)",0,1);
    Выручка = Спр.ТекущийЭлемент();
    Спр.НайтиПоНаименованию("ПОКУПНАЯ СТОИМОСТЬ РЕАЛИЗОВАННЫХ ТОВАРОВ",0,1);
    Себестоимость = Спр.ТекущийЭлемент();
    Док=СоздатьОбъект("Документ.ВозвратОтПокупателя");
    Док.ВыбратьДокументы(НачДата,КонДата);
    Пока Док.ПолучитьДокумент()=1 Цикл
    Если Док.Проведен()=0 тогда
    продолжить;
    Конецесли;
    ЦФО=ПолучитьЦФО(Док.Склад.Подразделение);Док.ВыбратьСтроки();
    Пока Док.ПолучитьСтроку()=1 Цикл
    ТТ.НоваяСтрока();
    ТТ.СтатьяБДРС = Выручка;
    ТТ.ЦФО = ЦФО;
    ТТ.Сумма = -Док.СуммаПродажи;
    ТТ.НоваяСтрока();
    ТТ.СтатьяБДРС = Себестоимость;
    ТТ.ЦФО = ЦФО;
    ТТ.Сумма = -Док.Сумма;
    КонецЦикла;
    КонецЦикла;
    // Свернем таблицу и выведем
    ТТ.Свернуть("СтатьяБДРС,ЦФО","Сумма");
    Для е=1 по тт.КоличествоСтрок() Цикл
    тт.ПолучитьСтрокуПоНомеру(е);
    НомерСтроки=НомерСтроки+1;
    Таб.ВывестиСекцию("ПодвалВозврат");
    КонецЦикла;КонецЕсли;
    
    Таб.Опции(0,0,6,0,0,0,0,0);   
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Реестр выгрузки данных");КонецПроцедуры
    
    
    Но проблема в следующем при прохождении цикла он каждый раз перезаписывет ХМЛ файл и добавляет только последнюю запись из цикла, побывал различными методами переставлять саму процедуру выгрузки и разбивать ее но без успешно, есть идею что внутри этой процедуры необходимо задать цикл, но мои идеи связаны с тем как размножить код и сделать его корявым, как можно грамотно решить данную проблему, буду весьма признателен.
  2. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    ну так вы именно этого от 1с и просите :)

    1. открытие парсера и до создания переменной корень из процедуры Выгрузить перенести в процедуру ПолучитьЦФО в начало
    2. сделать ее параметром процедур Выгрузить и ВыводРезультата
    3. в цикле в процедуре ПолучитьЦФО, где вызывается процедура ВыводРезультата, добавить параметр корень
    4. запись делать после этого цикла (перенести из процедуры Выгрузить)
  3. TopicStarter Overlay
    Дмитрий Игоревич
    Offline

    Дмитрий Игоревич Опытный в 1С

    Регистрация:
    11 апр 2013
    Сообщения:
    152
    Симпатии:
    0
    Баллы:
    26
    Спасибо за совет, все получилось, не много другим методом но принцип один!

Поделиться этой страницей