helpf.pro
Регистрация
 +2 
Распечатать

Пример переноса данных из 1С 7.7 в 8.1 посредством XML файла

Код 1C v 7.x
    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"); 


Код 1C v 8.х
 
Функция Кошель(Кош)
    стр = ТП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;//ВыбратьСтроку();
		КонецЕсли;	  
	КонецЦикла;
КонецПроцедуры    
Разместил:   Версии: | 7.x | 8.x |  Дата:   Прочитано: 27750
 +2 
Распечатать
Возможно, вас также заинтересует
1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш
1C: Enterprise Development Tools 52
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем
1Cv8.1CD - Файл данных достиг максимального размера! 9
1С выдает предупреждение " Файл данных достиг максимального размера" . Подскажите из - за чего это и как можно решить ? Превышен размер файла, обычно это сообщение возникает, когда размер файла 1Cv8.1CD приближается к 10 гигабайтам или размер ка
1С 7.x : Как получить курсы валют с сайта НБУ http://www.bank.gov.ua/ за любую дату ? 6
Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 - получем валюты, которые котируются на ежемесячной основе Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯче
Excel файл как Внешний источник данных 17
Подключимся и загрузим из файла Excel данные в таблицу значений 1С. Сделать теперь это очень просто. 1. В конфигурации добавляет новый объект метаданных типа " Внешние источники данных" и назовем его просто " Excel" . https://helpf.pro/uploads/img
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!