1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
xmldoc = CreateObject("Msxml2.DOMDocument"); xmlDoc.loadXML("<root/>"); nodeRoot = xmlDoc.documentElement; расходы = xmlDoc.createElement("СправочникРасходы"); Спр = Создатьобъект("Справочник.Расходы"); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент()=1 цикл расход = xmlDoc.createElement("Расход"); расход.setAttribute("Код",Спр.Код); расход.setAttribute("Наименование",Спр.Наименование); расход.setAttribute("Родитель",Строка(Спр.Родитель)); расход.setAttribute("Цена",Строка(Спр.Цена.Получить(ТекущаяДата()))); расход.setAttribute("Количество",Строка(Спр.Количество)); расход.setAttribute("ЭтоГруппа",Строка(Спр.ЭтоГруппа())); расходы.appendChild(расход); КонецЦикла; nodeRoot.appendChild(расходы); ДвижениеСчетов = xmlDoc.createElement("ДвижениеСчетов"); рег = СоздатьОбъект("Регистр.Счет"); рег.ВыбратьДвижения(); Пока Рег.ПолучитьДвижение()=1 цикл Движение = xmlDoc.createElement("Движение"); Движение.setAttribute("Приход",Строка(Рег.Приход)); Движение.setAttribute("Дата",Строка(Рег.ТекущийДокумент().ДатаДок)); Движение.setAttribute("Описатель",Строка(Рег.Описатель)); Движение.setAttribute("СтатьяРасходов",Строка(Рег.СтатьяРасходов)); Движение.setAttribute("СтатьяПоступлений",Строка(Рег.СтатьяПоступлений)); Движение.setAttribute("Кто",Строка(Рег.Кто)); Движение.setAttribute("Кому",Строка(Рег.Кому)); Движение.setAttribute("Остаток",Строка(Рег.Остаток)); Движение.setAttribute("Количество",Строка(Рег.Количество)); ДвижениеСчетов.appendChild(Движение); КонецЦикла; nodeRoot.appendChild(ДвижениеСчетов); xmlDoc.save("C:\budjet.xml"); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 |
Функция Кошель(Кош) стр = ТП2.Найти(Кош,"Описатель"); Возврат Стр.Счет; КонецФункции Функция Вал(Кош) стр = ТП2.Найти(Кош,"Описатель"); Возврат Стр.Валюта; КонецФункции Функция Дата1С(дат) Возврат "20"+сред(дат,7,2)+сред(дат,4,2)+лев(дат,2); КонецФункции Процедура Загрузка(Элемент) xmlDoc = Новый COMОбъект("MSXML2.DOMDocument"); xmlDoc.load("C:\budjet.xml"); nodeRoot = xmlDoc.documentElement; Для каждого nod из nodeRoot.childNodes цикл Если nod.nodeName = "СправочникРасходы" тогда Сообщить("нашли СправочникРасходы"); ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Код"); ТЗ.Колонки.Добавить("Наименование"); ТЗ.Колонки.Добавить("Родитель"); ТЗ.Колонки.Добавить("Цена"); ТЗ.Колонки.Добавить("Количество"); ТЗ.Колонки.Добавить("ЭтоГруппа"); Для Каждого Расход из nod.childNodes Цикл Строка = ТЗ.Добавить(); Строка.Код = Расход.getAttribute("Код"); Строка.Наименование = Расход.getAttribute("Наименование"); Строка.Родитель = Расход.getAttribute("Родитель"); Строка.Цена = Число(Расход.getAttribute("Цена")); Строка.Количество = Число(Расход.getAttribute("Количество")); Строка.ЭтоГруппа = ?(Расход.getAttribute("ЭтоГруппа")="1",True,Ложь); КонецЦикла; //ТЗ.ВыбратьСтроку(); Для Каждого Стр из ТЗ Цикл Родитель = Справочники.СтатьиЗатрат.НайтиПоНаименованию(Стр.Родитель,истина); Справ = Справочники.СтатьиЗатрат.НайтиПоНаименованию(Стр.Наименование,истина); Если Справ = Справочники.СтатьиЗатрат.ПустаяСсылка() тогда Если Стр.ЭтоГруппа тогда Справ = Справочники.СтатьиЗатрат.СоздатьГруппу(); Справ.Код = Стр.Код; Справ.Наименование = Стр.Наименование; Справ.Родитель = Родитель; Справ.Записать(); Иначе Справ = Справочники.СтатьиЗатрат.СоздатьЭлемент(); Справ.Код = Стр.Код; Справ.Наименование = Стр.Наименование; Справ.Родитель = Родитель; Справ.Цена = Стр.Цена; Справ.Количество = Стр.Количество; Справ.Записать(); КонецЕсли; Иначе КонецЕсли; КонецЦикла; ИначеЕсли nod.nodeName = "ДвижениеСчетов" тогда Сообщить("нашли движения счетов"); ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Приход"); ТЗ.Колонки.Добавить("Дата"); ТЗ.Колонки.Добавить("Описатель"); ТЗ.Колонки.Добавить("Статья"); ТЗ.Колонки.Добавить("Цена"); ТЗ.Колонки.Добавить("Количество"); Для каждого движ из nod.childNodes цикл Строка = ТЗ.Добавить(); Строка.Приход = ?(движ.getAttribute("Приход")="1",True,Ложь); Строка.Дата = Дата(Дата1С(движ.getAttribute("Дата"))); Строка.Описатель = движ.getAttribute("Описатель"); Строка.Статья = Справочники.СтатьиЗатрат.НайтиПоНаименованию(движ.getAttribute(?(Строка.Приход,"СтатьяПоступлений","СтатьяРасходов")),истина); Строка.Цена = Число(движ.getAttribute("Остаток")); Строка.Количество = Число(движ.getAttribute("Количество")); КонецЦикла; ТЗ.ВыбратьСтроку(); Доки = Новый ТаблицаЗначений; Доки.Колонки.Добавить("Док"); Доки.Колонки.Добавить("Дата"); Доки.Колонки.Добавить("КошелекС"); Доки.Колонки.Добавить("КошелекНа"); Доки.Колонки.Добавить("Статья"); Доки.Колонки.Добавить("ВалютаС"); Доки.Колонки.Добавить("ВалютаНа"); Доки.Колонки.Добавить("ЦенаС"); Доки.Колонки.Добавить("ЦенаНа"); Доки.Колонки.Добавить("Количество"); УжеЕстьДок=Ложь; док=0; Для Каждого Стр Из ТЗ цикл Если Стр.Приход Тогда Если УжеЕстьДок тогда Док.КошелекНа = Кошель(Стр.Описатель); Док.ВалютаНа = Вал(Стр.Описатель); Док.ЦенаНа = Стр.Цена; Док.Количество = Стр.Количество; Док.Статья = Стр.Статья; УжеЕстьДок=Ложь; Иначе Док = Доки.Добавить(); Док.КошелекНа = Кошель(Стр.Описатель); Док.ВалютаНа = Вал(Стр.Описатель); Док.ЦенаНа = Стр.Цена; Док.Количество = Стр.Количество; Док.Статья = Стр.Статья; Док.Док = "ПоступлениеСредств"; КонецЕсли; Иначе Док = Доки.Добавить(); Док.КошелекС = Кошель(Стр.Описатель); Док.ВалютаС = Вал(Стр.Описатель); Док.ЦенаС = Стр.Цена; Док.Количество = Стр.Количество; Док.Статья = Стр.Статья; Если СокрЛП(Стр.Статья.Наименование)="Обмен валюты" тогда Док.Док = "ОбменВалюты"; УжеЕстьДок=истина; ИначеЕсли СокрЛП(Стр.Статья.Наименование)="Перевод средств" тогда Док.Док = "ПереводСредств"; УжеЕстьДок=истина; Иначе Док.Док = "РасходСредств"; УжеЕстьДок=Ложь; КонецЕсли; КонецЕсли; Док.Дата = Стр.Дата; КонецЦикла; Доки.ВыбратьСтроку(); КонецЕсли; КонецЦикла; Для Каждого Док из Доки Цикл Если Док.Док = "ПоступлениеСредств" тогда Докум = Документы.ПоступлениеСредств.СоздатьДокумент(); Докум.Дата = Док.Дата; Докум.Кошелек = Док.КошелекНа; Докум.Валюта = Док.ВалютаНа; Докум.Сумма = Док.ЦенаНа; Докум.Статья = Док.Статья; Докум.Записать(РежимЗаписиДокумента.Проведение); ИначеЕсли Док.Док = "ПереводСредств" тогда Докум = Документы.ПеремещениеСредств.СоздатьДокумент(); Докум.Дата = Док.Дата; Докум.КошелекКуда = Док.КошелекНа; Докум.КошелекОтКуда = Док.КошелекС; Докум.Валюта = Док.ВалютаНа; Докум.Сумма = Док.ЦенаНа; Докум.Записать(РежимЗаписиДокумента.Проведение); ИначеЕсли Док.Док = "ОбменВалюты" тогда Докум = Документы.ПеремещениеСредств.СоздатьДокумент(); Докум.Дата = Док.Дата; Докум.КошелекКуда = Док.КошелекНа; Докум.КошелекОтКуда = Док.КошелекС; Докум.Валюта = Док.ВалютаС; Докум.Сумма = Док.ЦенаС; Докум.Записать(РежимЗаписиДокумента.Проведение); Докум = Документы.ОбменВалюты.СоздатьДокумент(); Докум.Дата = Док.Дата; Докум.Кошелек = Док.КошелекНа; Докум.ВалютаС = Док.ВалютаС; Докум.ВалютаНа = Док.ВалютаНа; Докум.СуммаС = Док.ЦенаС; Докум.СуммаНа = Док.ЦенаНа; Докум.Курс = Докум.СуммаС / Докум.СуммаНа; Докум.Переключатель = 1; Докум.Записать(РежимЗаписиДокумента.Проведение); Иначе Докум = Документы.РасходСредств.СоздатьДокумент(); Докум.Дата = Док.Дата; Докум.Кошелек = Док.КошелекС; Докум.Валюта = Док.ВалютаС; тч = Докум.Затраты.Добавить(); тч.Сумма = Док.ЦенаС; тч.Статья = Док.Статья; тч.Цена = Док.ЦенаС; тч.Количество = Док.Количество; Докум.Записать(РежимЗаписиДокумента.Проведение); КонецЕсли; КонецЦикла; КонецПроцедуры Процедура ЗаполнитьТЗДанными(Элемент) xmlDoc = Новый COMОбъект("MSXML2.DOMDocument"); xmlDoc.load("C:\budjet.xml"); nodeRoot = xmlDoc.documentElement; Для каждого nod из nodeRoot.childNodes цикл Если nod.nodeName = "ДвижениеСчетов" тогда Сообщить("нашли движения счетов"); ТП1 = Новый ТаблицаЗначений; ТП1.Колонки.Добавить("Описатель"); Типы = Новый Массив(1); Типы[0] = Тип("СправочникСсылка.Кошельки"); Тип = Новый ОписаниеТипов(Типы); ТП1.Колонки.Добавить("Счет",Тип); Типы[0] = Тип("СправочникСсылка.Валюты"); Тип = Новый ОписаниеТипов(Типы); ТП1.Колонки.Добавить("Валюта",Тип); Для каждого движ из nod.childNodes цикл Описатель = движ.getAttribute("Описатель"); если ТП1.Найти(Описатель,"Описатель") = Неопределено тогда стр = ТП1.Добавить(); Стр.Описатель = Описатель; КонецЕсли; КонецЦикла; ТП2=ТП1;//ВыбратьСтроку(); КонецЕсли; КонецЦикла; КонецПроцедуры |