ОБРАБОТКА
Представлю небольшую обработку по парсингу файла xml, загруженного из УТМ модуля ЕГАИС. Подобных примеров уже достаточно много, но данный всего скорей, самый "бюджетный". Поставлена задача загрузить справоники номенклатуры и контрагентов из заранее сформированных с УТМ файлов, из 65 запрошенных поставщиков получилось порядка 100 тыс. наименований, совсем немало, если учесть, что сопоставить нужно только примерно 2 тысячи наименований. Загрузку классификаторов можно произвести с использовани ПО Центринформ для оптовиков http://egais2016.ru/files/, но ОК может эксплуатироватся бесплатно в течении периода до 31.03.2016 (триальная версия).
Для парсинга используем COMОбъект("MSXML2.DomDocument.4.0") и COMОбъект("Scripting.FileSystemObject"), можно и стандарные 1С: методы, но больше удобны при формировании. Отличительный момент: файлы содержат ns имена, соответственно их нужно задать в свойства:
xmlDoc.setProperty("SelectionNamespaces","xmlns:rap=""http://fsrar.ru/WEGAIS/ReplyAP"" xmlns:pref=""http://fsrar.ru/WEGAIS/ProductRef"" xmlns:oref=""http://fsrar.ru/WEGAIS/ClientRef""");
Структура 1С справочников, думаю, для специалистов будет понятна из текста самой обработки, ее расписывать не буду.
Вторым этапом будет выполнена загрузка и выгрузка ТТН из(в) УТМ, после того как специально обученные люди сопоставят справочники с номенклатурой и контрагентами КИС.
Безусловные минусы это скорость обработки такого количества элементов, но xml быстрее, всего скорей, не обработать в объектные данные. Было бы неплохо, если бы УТМ готовил файлы в JSON формате. Возможно, как вариант, предварительно конвертировать файлы в СУБД, к примеру, в SQL классический вид, а далее уже com-маccивом тянуть в базу. Думаю, данный финт позволит обработать более 100 тыс. позиций быстрее. Замер времени загрузки на сделанных примерах выполняет это примерно минут за 15, в то время как представленная "обработка" парсила значения сразу в 1С базу более 2-х часов.
ИНТЕГРАЦИЯ ЕГАИС
Внесен модуль интеграции ЕГАИС в демо режиме. За основу взяты модули от Розница 2.0 и УТ 11, и модернизированы под интеграцию кастомной КИС на платформе 8.3, проверенный функционал: соединение с УТМ и загрузка классификаторов. На текущий момент тестируются ТТН, Справки А и В, соответствия к партиям.
Как писал ранее, выполняется задача по сопоставлению номенклатуры, но на практике эта задача не самая простая оказалась, т.к. ЕГАИС поленился внести штрихкоды в классификатор продукции и теперь вместо того чтобы отобрать два три завода на позицию, приходиться рыскать во всей номенклатуре производителя, а если это импортер "???", как на пример Лудинг это более 10 тыс. товаров на один ИНН.
ТТН и СПРАВКА А
Сегодня прогрузили ТТН и справки АБ, и сразу возник вопрос почему в справках А нет номера и даты подтверждения фиксации ЕГАИС? Что дает данный сервис получается не понятно, как проверять поставку б без данной информации? Попытка подгрузить расширенную Справку А, кроме потерянных 30 минут на парсинг ни чего нового не дало, обновились только поля дата отгрузки и кол-во. Погуглил, на данный вопрос пользователя в егаис ответа нет. Поражает и скорость тех. поддержки егаис, вопрос задан 12 ноября , сегодня на дворе 16 декабря 2015 г. :
http://egais2016.ru/forum/viewtopic.php?t=202
ИНВЕНТАРИЗАЦИЯ МАРОК
Тестируем инвентаризацию марок на складе с использование подготовленной WMS и приложения для ТСД на базе 1с:расширение для кпк. ТСД выбираем корейской марки MobileBase DS5 на базе WM 6.5 ОС. Серверная база подготовлена с учетом партий, поэтому привязывать марки будем не только к ШК но и к партиям. Ранее делал публикацию "Складские операции на ТСД", в ней описан принцип сделаных партий //infostart.ru/public/418190. Скрин работы приложения в прил., проводим инвентаризацию на складе, делаем обработку по переносу в Акт постановки на баланс для ЕГАИС.
В ходе полученной информации по содержанию алкокода в PDF, задача для операторов сопоставить номенклатуру упразднились, т.к. теперь все связки есть и обработка автоматически делает сопоставление через ШК. Для окончательного результата остается привязать к партиям справки А (пошли немного другим путем ,проставляем к партиям номера фиксации, если больше одного номера через запятую), либо попросить поставщиков скинуть через УТМ все поставки за 2015 год, тогда через номер ТТН их можно привязать к данным номенклатуры КИС.
АКТ ПОСТАНОВКИ НА БАЛАНС
Ни для кого не новость, что ипортеры вписывали в Справку А по несколько номеров фиксации и куча диапозонов марок без всякого соотвествия, эти поставщики/имортеры и не слишком то спешат выгрузить запрошенные ТТН. Что получили при отправке акта постановки, где попалась такая Справка А, а их как правило процентов 50-75 от всех приходов, а получили отказ в постановке. В первой попытке не совпадает общее количество по Справке А, вторая попытка отправляем равное количеству марок - акт выдает, что данная марка не в диапозоне номера фиксации, начинаем перебирать номера фиксации попорядку, угадали на втором, а их может быть и три и шесть и т.д! Привязка к партиям номеров фиксации особо не спасает ситуацию, т.к. к одной позиции склада может быть два-три алкокода ЕГАИС, причем эти коды в одном диапозоне марок.
Перенос инвентаризаций в Акт постановки на баланс, переносим каждую партию в отдельный акт, т.к. не понятно нужно будет перебирать номера фиксации или нет:
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Проведен",Истина);
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ИнвентаризацияТовары.Партия.Ссылка КАК Партия
|ИЗ
| Документ.Инвентаризация.Товары КАК ИнвентаризацияТовары
|ГДЕ
| НЕ ИнвентаризацияТовары.Партия.НомерТТН В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЕГАИСТовары.Ссылка.НомерВходящий
| ИЗ
| Документ.алкТоварноТранспортнаяНакладнаяЕГАИС.Товары КАК ЕГАИСТовары
| ГДЕ
| ЕГАИСТовары.Ссылка.Проведен = &Проведен)";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Док = Документы.алкАктПостановкиНаБалансЕГАИС.СоздатьДокумент();
Док.Организация = Справочники.Организации.НайтиПоКоду("000000001");
Док.алкПунктРазгрузкиОрганизации = "Склад";
Док.Дата = ТекущаяДата();
Док.РежимВводаДанныхПоСправкеА = Истина;
Док.СтатусДокумента = Перечисления.алкСтатусыДокументовЕГАИС.Создан;
Товары = Док.Товары;
СтрокаТовара = Товары.Добавить();
Партия = ВыборкаДетальныеЗаписи.Партия;
СтрокаТовара.АлкогольнаяПродукция = Партия.Владелец.НоменклатураЕГАИС;
СтрокаТовара.ДатаРозливаПоСправкеА = Формат(Сред(Партия.ДатаРозлива,7,4)+Сред(Партия.ДатаРозлива,4,2)+Сред(Партия.ДатаРозлива,1,2),"ДФ=дд.ММ.гггг");
СтрокаТовара.ДатаТТНПоСправкеА = Партия.ДатаТТН;
СтрокаТовара.ДатаФиксацииТТНПоСправкеА = Партия.ДатаФиксацииЕГАИС;
СтрокаТовара.Количество = Партия.Остаток;
СтрокаТовара.КоличествоПоСправкеА = Партия.КолРА;
Если СтрокаТовара.АлкогольнаяПродукция.Производитель.КодСтраны = "643" Тогда
СтрокаТовара.НомерТТНПоСправкеА = Партия.НомерТТН;
Иначе
СтрокаТовара.НомерТТНПоСправкеА = Сред(Партия.ГТД,1,8)+Сред(Партия.ГТД,16);
КонецЕсли;
СтрокаТовара.НомерФиксацииТТНПоСправкеА = Партия.НомерФиксацииЕГАИС;
ЗапросМАрок = Новый Запрос;
ЗапросМАрок.УстановитьПараметр("Партия",Партия);
ЗапросМАрок.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ИнвентаризацияТовары.Марка КАК Марка
|ИЗ
| Документ.Инвентаризация.Товары КАК ИнвентаризацияТовары
|ГДЕ
| ИнвентаризацияТовары.Партия = &Партия";
РезультатЗапроса = ЗапросМАрок.Выполнить();
ВыборкаМарок = РезультатЗапроса.Выбрать();
i = 0;
Пока ВыборкаМарок.Следующий() Цикл
СтрокаМАрки = Док.КодыМарок.Добавить();
СтрокаМАрки.Код = ВыборкаМарок.Марка;
i = i + 1;
КонецЦикла;
СтрокаТовара.Количество = i;
Док.Комментарий = Строка(Партия)+ " К:" +Строка(СтрокаТовара.АлкогольнаяПродукция.Производитель.КодСтраны)+" П:"+ Строка(СтрокаТовара.АлкогольнаяПродукция.Производитель) +
" И:"+ Строка(СтрокаТовара.АлкогольнаяПродукция.Импортер);
Док.Записать();
КонецЦикла;