Обработка для загрузки из файла YML

Тестировалось на Управление торговлей 11.4. Возможна адаптация под другие конфигурации (напишите мне).

Обработка загружает YML файл:

  • создается/обновляется структура каталогов как в файле (поиск по наименованию)
  • создается/обновляется номенклатура (поиск по наименованию)
  • возможно сопоставить свойства из файла — реквизитам, или доп.реквизитам
  • загружаются цены номенклатуры — сравниваются текущие цены в базе и создается установка цен только c изменениями
  • загружаются остатки из файла — сравниваются текущие остатки в базе и создаются документы списания/оприходования на изменения
  • оптимизирована загрузка — записываются только та номенклатура, по которой есть изменения
  • реализовано подробное логирование в указанный каталог
  • реализовано 2 вида загрузки:

полный — обновление каталога
легкий — только обновление цен и остатков

Для автоматического выполнения по расписанию:

  1. Настроить параметры загрузки, запустив обработку интерактивно
  2. Подключить обработку как внешнею
  3. Настроить расписание отдельно для легкой и полной загрузок
  4. Регламентное задание должно запускаться от пользователя, от которого выполнялись настройки интерактивно.

Обработка размещена на infostart
https://infostart.ru/public/1181703/

Разбор XML в 1С с помощью механизма XDTO

XML

Механизм XDTO (XML Data Transfer Objects) собственная разработка 1С, который появился с выходом платформы 8.1. Это очень мощный инструмент, а удобный разбор XML лишь малая часть того, что он может. В рамках этой статьи останавливаться подробно на самом механизме не буду.

Кроме использования XDTO существует множество способов парсинга XML файлов в 1С — от простого последовательного перебора текста, до использования внешних dll библиотек. Вот некоторые преимущества при использования для этой задачи именно этого механизм:

  • Быстродействие — конвертация файла в ОбъектXDTO проходит сравнительно быстро. Стоит отметить, что время выполнения зависит от объема данных линейно.
  • Удобно программировать — тремя строчками кода, мы получаем готовый ОбъектXDTO из любого xml, с которым очень удобно работать используя синтаксис 1С «через точку».
  • В случае наличия xsd-схемы можно на ходу проверять соответствие файла схеме.

Ниже примеры кода.

Для получения ОбъектXDTO достаточно вызвать метод ПрочитатьXML глобальной ФабрикиXDTO

Код с оформлением
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.ОткрытьФайл(ФайлXML, ,);
ОбъектXDTOизФайла = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);

Далее работаем с атрибутами, свойствами и текстом XML.
Свойства и атрибуты можно прочитать методом Свойства() ОбъектаXDTO:

Код с оформлением
//атрибуты и свойства 
Для Каждого Св Из ОбъектXDTO.Свойства() Цикл
	Если Св.Форма = ФормаXML.Атрибут Тогда
		Ключ=Св.Имя;
		Значение = ОбъектXDTO.Получить(Св);
	КонецЕсли;
КонецЦикла;

Текст и свойства XML получаем через Последовательность():

Код с оформлением
Последовательность = ОбъектXDTO.Последовательность();
КолвоЭлементов = Последовательность.Количество(); 
Если КолвоЭлементов = 0 Тогда
	//у объекта только атрибуты
	Возврат;
КонецЕсли; 
	
Для Индекс=0 По КолвоЭлементов1 Цикл		
	Свойство = Последовательность.ПолучитьСвойство(Индекс);
		
	Если Свойство = Неопределено Тогда
		//это текст
		Значение = Последовательность.ПолучитьТекст(Индекс);		
	Иначе
		Значение = Последовательность.ПолучитьЗначение(Индекс);
	КонецЕсли;
		
КонецЦикла; 		

Обработка с примером конвертации данных из XML в дерево значений в приложении:

WPS Office из 1С через COM-объект

WPS Office — один из лучших бесплатных клонов аналогов Microsoft Office созданный китайскими умельцами из Kingsoft .

Бесплатность «оплачивается» небольшим рекламным баннером, периодически появляющимся в углу. Появляется не часто и работе не мешает.

Скачать пакет можно по ссылке: https://www.wps.com/ .

Я использую его вместо Microsoft Office уже несколько лет.

В WPS Office реализована поддержка основных офисных форматов, а функции аналогичны MS Office. Разве что интерфейс, к которому очень быстро привыкаешь, слегка отличается.

Китайцы не ограничились пользовательскими функциями, а создали и полноценную объектную модель, которая полностью копирует модель MS Office.

Это значит, что можно в работающем коде, который используется Excel, поменять ProgID «Excel.Application» на «KET.Application» и установка платного пакета для работы обработки 1С уже не потребуется.

excel wps
Excel excel excel excel wps excel

Небольшой нюанс с установкой для серверного кода. Если необходима работа с Spreadsheets (замена Excel) на стороне сервера (например периодическое обновление прайс-листа), то необходимо запустить установку от пользователя, от которого работает сервер 1С. Установка от другого пользователя, даже с правами администратора, не регистрирует необходимые компоненты для всех пользователей.

Пример кода открытия рабочей книги и установка активного листа:

	Попытка
		//Если установлен MS Office
		//Excel = Новый COMОбъект("Excel.Application");
		
		//Если установлен WPS Office
		Excel = Новый COMОбъект("KET.Application");
		
		Excel.DisplayAlerts = 0;
		Excel.ScreenUpdating = 0;
		Excel.EnableEvents = 0; 
		Excel.Visible = 0;
		РабочаяКнига = Excel.WorkBooks.Open(ВременныйФайл, 0);
		Лист = Excel.Sheets(1);
	Исключение
		Сообщить("Не удалось загрузить объект ""Excel/Spreadsheets""!");
		Возврат;
	КонецПопытки;

MySQL и 1С через ODBC драйвер

Часто для интеграции с сайтами требуется прямая работа с базой данных MySQL.
Рассмотрим пример реализации интеграции MySQL и 1С.

Для начала необходимо установить ODBC Connector, скачать его можно с официального сайта https://dev.mysql.com/downloads/connector/odbc/.

Важно выбрать установщик нужной разрядности равной разрядности 1С, в которой будет работать код.
Для скачивания можно не регистрироваться, а нажать соответствующею ссылку (No thanks, just start my download).

Проверяем установку коннектора в «Администрировании»:
ODBC Data Sources (32-bit) или Источники данных ODBC (для 32 или 64 битной ОС соответственно).

ODBC Data
MySQL ODBC Driver

На вкладке «Драйвер» нужная нам информация о названии драйвера.
В коде подставляем его вместо DRIVER, в обычных ситуациях используем Unicode.
В нашем случае driver = «MySQL ODBC 8.0 Unicode Driver»

Ниже код проверки соединения и выполнения произвольного запроса.
STMT — отвечает за корректную обработку кириллицы, используем «set character_set_results=cp1251»

Проверка подключения

Функция ТестПодключенияMySQL()
	
	//сформируем строку подключения
	СтрокаПодключенияКMySQL = "DRIVER={"+DRIVER+"};SERVER="+SERVER+";Database="+Database+";DataSource="+DataSource+";UID="+UID+";PWD="+PWD+";STMT="+STMT+";";
	
	//создадим подключение
	Попытка
		Connection = Новый COMОбъект("ADODB.Connection"); 
		Connection.Open(СтрокаПодключенияКMySQL);
		Connection.Close();
		Возврат "ОК";
	Исключение
		Возврат ОписаниеОшибки();	
	КонецПопытки
	
КонецФункции

Выполнение произвольного запроса и обработка его результата

Процедура ВыполнениеЗапроса(Команда)
	
	//сформируем строку подключения
	СтрокаПодключенияКMySQL = "DRIVER={"+DRIVER+"};SERVER="+SERVER+";Database="+Database+";DataSource="+DataSource+";UID="+UID+";PWD="+PWD+";STMT="+STMT+";";
	Connection = Новый COMОбъект("ADODB.Connection"); 
	Connection.Open(СтрокаПодключенияКMySQL);

	//Теперь выполняем запрос
	Command= Новый COMObject("ADODB.Command"); 
	Command.CommandText = ЗапросSQL;
	Command.ActiveConnection = Connection;
	Command.CommandType = 1;
	РезультатMySQL = Command.Execute();
	
	//обходим результат запроса	
	РезультатMySQL.MoveFirst();
	Пока РезультатMySQL.EOF() = 0 Цикл
		
		РезультатMySQL.MoveNext();
		//обработчик разбора результата
		
	КонецЦикла;
	
	//Закрываем соединение.
	Connection.Close();
	
КонецПроцедуры

Ниже можно скачать обработку с примером кода.