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(СохранитьВ);
Сообщить("Файл успешно выгружен в каталог"+Путь);
КонецПроцедуры
|
|
|