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");
Функция Кошель(Кош) стр = ТП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;//ВыбратьСтроку(); КонецЕсли; КонецЦикла; КонецПроцедуры
// Эта функция пересчитывает сумму из валюты ВалютаНач по курсу ПоКурсуНач // в валюту ВалютаКон по курсу ПоКурсуКон // // Параметры: // Сумма - сумма, которую следует пересчитать; // ВалютаНач - ссылка на элемент справочника Валют; // определяет валюты из которой надо пересчитвать; // ВалютаКон - ссылка на элемент справочника Валют; // определяет валюты в которую надо пересчитвать; // ПоКурсуНач - курс из которого надо пересчитать; // ПоКурсуКон - курс в который надо пересчитать; // ПоКратностьНач - кратность из которого надо пересчитать (по умолчанию = 1); // ПоКратностьКон - кратность в который надо пересчитать (по умолчанию = 1); // // Возвращаемое значение: // Сумма, пересчитанная в другую валюту // Функция ПересчитатьИзВалютыВВалюту(Сумма, ВалютаНач, ВалютаКон, ПоКурсуНач, ПоКурсуКон, ПоКратностьНач = 1, ПоКратностьКон = 1 ) Экспорт Если (ВалютаНач = ВалютаКон) Тогда // Считаем, что пересчет не нужен. Возврат Сумма; КонецЕсли; Если (ПоКурсуНач = ПоКурсуКон) и (ПоКратностьНач = ПоКратностьКон) Тогда // ну, тут и считать нечего... Возврат Сумма; КонецЕсли; Если ПоКурсуНач = 0 или ПоКурсуКон = 0 или ПоКратностьНач = 0 или ПоКратностьКон = 0 Тогда СообщитьОбОшибке(" при пересчете обнаружен нулевой курс."); Возврат 0; КонецЕсли; Возврат Окр((Сумма * ПоКурсуНач * ПоКратностьКон) / (ПоКурсуКон * ПоКратностьНач), 2); КонецФункции