bookresearch.ru / Разработчику / Библиотека работы с ONIX XML / onix 1C price sample /

Библиотека работы с ONIX XML: Пример выгрузки прайс-листа ONIX XML из 1С

Untitled
//programming by Andrey Davidov
//e-mail: webmaster@dashkov.ru

Процедура ВыгрузитьХМЛ()    
	
	Путь="";   
	                  
		Попытка 
			//Создаем обьект для работы с XML и сразу заполняем заголовок
			//Поля Получатель, ИННПолучателя и НазвПолучателя расположениы 
			//в диалоге формы (текстовые поля)
			//Получатель     - ФИО получателя
			//НазвПолучателя - Название Фирмы получателя
			//ИННПолучателя  - ИНН поучателя :)
			ХМЛ = СоздатьОбъект("onixxml.tonixxml");
			//предполагается что в конфигурации есть константа, содержащая фирму, от лица
			//которой выполняется большинство торговых операций
			НашаФирма = Константа.ОсновнаяФирма;
			ХМЛ.Header.FromSAN = СокрЛП(НашаФирма.ИНН);
			ХМЛ.Header.FromCompany = СокрЛП(НашаФирма.ПолнНаименование);
			// глПользователь - переменная определенная в глобальном модуле конфигурации
			//содержит текущего пользователя системы (ФИО)
			//в принципе это можно вынести в диалог и при выгрузке прайса заполнять его вручную
			ХМЛ.Header.FromPerson = СокрЛП(глПользователь.Сотрудник.Наименование);
			ХМЛ.Header.ToSAN = СокрЛП(ИННполучателя);
			ХМЛ.Header.ToCompany = СокрЛП(НазвПолучателя);
			ХМЛ.Header.ToPerson = СокрЛП(Получатель);
			ХМЛ.Header.MessageDate = ТекущаяДата();
			ХМЛ.Header.DefaultLanguageOfText = "рус";
			// Создаем обьект для выборки позиций товаров
			Товары = СоздатьОбъект("Справочник.Номенклатура");
		Исключение
			Сообщить("Не установлен COM-компонент onixxml.dll. Обратитесь к администратору БД.");
			Возврат;	
		КонецПопытки;
	
   	Если ФС.ВыбратьКаталог(Путь,"Выберите каталог для сохранения файла",)=0 Тогда
		Возврат;
	КонецЕсли;     
	   
	Товары.ВыбратьЭлементы();

	Пока Товары.ПолучитьЭлемент() = 1 Цикл
		
			Тов = Товары.ТекущийЭлемент(); 
			                                                                                     
			//получаем остаток текущего товара по всем фирмам и складам
			ОстатокТов = Регистр.ОстаткиТоваров.СводныйОстаток("",Тов,,"ОстатокТовара");
			
			Если ОстатокТов = 0 Тогда//не выгружаем товары в прайс, у которых нулевой остаток
				Продолжить;
			КонецЕсли;
					
			//добавляем новую позицию товара в XML-объект
			Product = ХМЛ.Products.Add();   
			                                 
			//Номер в базе данных отправителя (артикул)
			Product.RecordReference = СокрЛП(Тов.Код);
			
			//ИНН составителя записи о данной товарной позиции
			Product.RecordSourceIdentifier = СокрЛП(НашаФирма.ИНН);    
			
			//Статус записи
			//В данном случае предполагается что в карточке товара есть поле
			//СтепеньНовизны, которое содержит информацию о степени новизны товара. Значения поля:
			//1-новинка, 2-обычная, 3-устаревшая,4-в печати, 5-закончилась(тиражей больше не будет)
			//Тег NotificationType может принимать следующие числовые значения
			//0-непределено
			//1-в плане
			//2-в печати  
			//3-вышла в свет (новинки и обычные)
			//4-распрдано 
            //расставляем соответствия
			Если (Тов.СтепеньНовизны = 1) или (Тов.СтепеньНовизны = 2) Тогда//новинка или обычная
				
				Product.NotificationType = 3;
				
			ИначеЕсли (Тов.СтепеньНовизны = 3) или (Тов.СтепеньНовизны = 5) Тогда//устаревшая или закончилась     
				
				Product.NotificationType = 4; 
				
			ИначеЕсли Тов.СтепеньНовизны = 4 Тогда//в печати(скоро)
				
				Product.NotificationType = 2; 
				
			КонецЕсли;
			
			//записывем только правильный ISBN (длина 13 символов), если ISBN неправильный или
			//неизвестен, лучше ничего не указывать
	 		Если  СтрДлина(СокрЛП(Тов.ISBN1)) =13 Тогда
				Product.ISBN =  СокрЛП(Тов.ISBN1);
			КонецЕсли;      
			
			//выгружаем штрих-код
			Product.EAN13 = СокрЛП(Тов.ШтрихКод);
			
			//Номер в базе данных составителя записи  (артикул) 
			//У нас он совпадает с RecordReference, т.к. мы и отправители и составители
			Product.PublisherProductNo = СокрЛП(Тов.Код);
			
			//указываем наименование товара
			Product.DistinctiveTitle = СокрЛП(Тов.Наименование);
			
			//добавляем в позицию нового автора
			Contributor = Product.Contributors.Add();
			
			//указываем порядковый номер записи об авторе в текущей позиции
			Contributor.ContributorSequenceNumber = 0;
			
			//и выгружаем туда всех авторов из поля авторы:)
			//так делать можно, если все автору в Вашей БД хранятся в одном текстовом поле
			Contributor.KeyNames = СокрЛП(Тов.Авторы);
			
			//указываем число страниц
			Product.NumberOfPages = СокрЛП(Строка(Тов.ЧислоСтраниц));
			
			//издательство
			Product.PublisherName = СокрЛП(Тов.Издательство.Наименование);
			
			//дата издания(выхода в свет)
			Product.PublicationDate = СокрЛП(Строка(ДатаГод(Тов.ДатаВыхода))); 
			                                                                   
			//Предположим в катрочке товара есть поле хранящее инфу о внешем виде товара (обложка/переплет)
			//тогда получаем первую букву этого поля...
			ПечВВ	 = Лев(Тов.ВнешнийВид,1);
			//...и проставляем значение тега
			Если ПечВВ = "О" Тогда
				Product.ProductForm = 10;
			ИначеЕсли ПечВВ = "П" Тогда
				Product.ProductForm = 9;                                   
			КонецЕсли;
			
			//выгружаем аннотацию
			Product.MainDescription = СокрЛП(Тов.Аннотация);
			
			//выгружаем город издания
			//у нас(в примере) он статический 
			Product.CityOfPublication = "М.";
			
			//указываем вес книги в ктллограммах (в карточке товара он хранится в граммах)
			Product.Height = СокрЛП(Строка(Тов.Вес*1000)); 
			
			//указываем тираж
			Product.InitialPrintRun = СокрЛП(Строка(Тов.Тираж));
			                 
			//В ГЛОБАЛЬНОМ МОДУЛЕ есть ф-ция МглВернутьЦенуДня которая возвращает
			//для переданного ей товара и типа цен (например оптовая) цену с НДС на указанную дату
			ПечЦена  =МглВернутьЦенуДня(Тов, Константа.КатегорияЦен,РабочаяДата());
			                                                  
			//Получаем объект типа "Справочник.СтавкаНДС", он у нас периодический 
			//поэтому получаем его на текущую ату
			СтавкаНДС = Тов.СтавкаНДС.Получить(ТекущаяДата());
			
			//получаем численное значение ставки НДС
			НДСЧислом = СтавкаНДС.Ставка;
			
			//КоэфициентНДС нужен, что бы затем получить Оптовую цену Без НДС
			//например при 10% НДС КоэфициентНДС будет равен 1.1
			КоэфициентНДС = (100+НДСЧислом)/100;
			
			//в тег  PriceAmount записываем оптовую цену без НДС
			Product.SupplyDetail.Price.PriceAmount = Окр(ПечЦена/КоэфициентНДС,2,1);
			
			//указываем ставку НДС для товара
	    	Product.SupplyDetail.Price.TaxRatePercent1 = НДСЧислом;	
	
	КонецЦикла; 
		
	    СохранитьВ = Путь+"\price.xml";
		//записываем прайс в файл
		ХМЛ.SaveToFile(СохранитьВ);
		Сообщить("Файл успешно выгружен в каталог"+Путь);
      
КонецПроцедуры


www.bookresearch.ru
Home  : Издателю и книготорговцу : Библиографу : Разработчику : IT-менеджеру : О проекте : Форум : Software - программное обеспечение для книжной отрасли :

  дизайн —
  SiteBuilder.ru

Home  Издателю и книготорговцу Библиографу Разработчику IT-менеджеру О проекте Форум Software - программное обеспечение для книжной отрасли

Этот сайт создан при помощи программы Globus SiteBuilder
Этот сайт создан при помощи программы Globus SiteBuilder