<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55
global $wpdb2;
global $failure;
global $file_hist;
///// echo '<H2><b>Старт загрузки</b></H2><br>';
$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
///// echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}
$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
///// echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}
/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
///// echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
///// echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file
///// echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
///// echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
///// echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);
if ($results)
{ foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));
////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
///// echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}
////загружаем данные
$table='vin_history'; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=';'; // Разделитель полей в CSV файле
$enclosed='"'; // Кавычки для содержимого полей
$escaped='\
Похоже на развод: вместо нормальной обработки приходит какой-то «левый» файл. Куда смотрит модератор (обработка-то платная)?
(1) Omega.Vit, примите мои извинения. Действительно сначала выложил не тот файл. Перекачайте его заново.
Чтож, похоже, что я погорячился: файл, с извинениями, заменен на верный. «Инфостарт» рулит! ))
Ну, что… В принципе — работает.
Пока, вылезли две ошибки — по «импортному» производителю, когда нет ИНН:
Содержимое.ИНН = Node.selectSingleNode(«./oref:INN»).text;
{C:TESTXMLЕГАИС.ERT(681)}: Плохой тип переменной
(данные по этому контрагенту были получены другим способом, не по ИНН, а по егаис ID,
вручную, через cUrl вот так:
<qp:Parameters>
<qp:Parameter>
<qp:Name>СИО</qp:Name>
<qp:Value>***Код по ЕГАИС***</qp:Value>
</qp:Parameter>
</qp:Parameters>
)
и вторая, что-то в номере накладной не нравится:
[1/2] Ошибка: Проверка по ХSD завершилась с ошибками: Элемент «http://fsrar.ru/WEGAIS/ActTTNSingle:ACTNUMBER» недействителен: значение «[IMP] 2599498СОЛВ » недействительно с точки зрения его типа данных «http://fsrar.ru/WEGAIS/Common:NoEmptyString50» — Сбой ограничения Pattern.
Но, тут похоже «БРАВО-Д» с номером перемудрила: «[IMP] 2599498СОЛВ » — квадратные скобки, пробелы, символы и латиницы и кирилицы… Что-то в шаблон не вписывается…
(4) M_W_W, буквально вчера в егаис изменились xsd-схемы, но документацию пока не обновили. У меня даже в УТАП проверка XSD иногда не проходит.
Отображение импортных производителей в ближайшее время исправлю.
Подписался на тему…
В целом, Ваш подход, через MS-скрипт, мне нравится больше, чем в аналогичной разработке — через cUrl, хотя, там для меня понятнее код, пробел у меня в знаниях по MS-скриптам… Но, думаю, разберусь потихоньку, и все-таки Вашу разработку буду использовать как основу для доработки своей конфы под егаис…
Вот только пока не определился, насколько надо все на конфигурацию, и БД завязывать, сейчас, то, что требуется с 01.01.16, может «жить самостоятельно», вроде как и незачем с БД стыковать…. Автоматизированная загрузка накладных от поставщика через ЕГАИС пока не получится, так, как в ЕГАИС нет основных данных для товароучетной системы — ЩтрихКодов EAN-13…
Что нужно будет фронту от бека, когда наступит 01.07.16, тоже пока не понятно, фронты для моей системы пока дорабатываются фирмой-производителем софта, и что там будет на входе/выходе, пока не понятно. Поэтому, я пока в раздумьях — стоит сейчас делать синхронизацию БД с егаис, или нет…
Пока код сильно не смотрел, но с виду — работа проделана большая — спасибо!
Возможно на каких то этапах пригодится.
Спасибо! У меня заработало. Очень пригодится. Здорово, что есть не жадные люди!!!
Добрый день! У нас 2 подразделения магазин и ресторан, получается нужно еще фиксировать в ЕГАИС перемещения между ними. Можно в данной обработке это как-то реализовать?
(9) basil_m, нет, отправка ТТН в обработке не предусмотрена.
(4) M_W_W,
а зачем вы в «ACTNUMBER» записываете номер накладной?
Это же Ваш номер акта, присваивайте свой номер!?
(11) СергейК,
???
Я ничего там не переделывал, это ошибка из исходной обработки, так, что вопрос не ко мне а к автору.
Кстати, в обновленной обработке, эта ошибка не возникает.
это только для розницы? для опта не подойдет?
А кто пробовал запросить справку А метод: QueryFormA ?
Чё та пишет «org.xml.sax.SAXParseException; lineNumber: 7; columnNumber: 15; The prefix «qf» for element «qf:FormRegId» is not bound.»
хотя по документации узел qf:FormRegId есть и содержит идентификатор нужной мне справки.
сам нашел — ошибся в шапке запроса
(13) knight070119863, только для розницы
Для опта что-нибудь есть?
Может в проекте что-то существует или закрытая тема?
(16) viktorn, для опта мы используем УТАП. Хотя там очень много проблем.
(18)
А что за УТАП?
(19)Специализированная конфигурация на базе УТ — Управление Торговлей Алкогольной Продукцией
Станислав, можно вопрос по поводу подтверждение акта разногласия
— мне через УТМ пришло два уведомления: первое что акт принят и второе что накладная проведена
а где же подтверждение от поставщика, что он согласен на уменьшение количества согласно акта?
как у вас реализовано?????
спасибо
Спасибо за обработку! Действительно делает то, что описано!
amoarok, а через совместное использование объектов WinHttpRequest и Stream (ADO) обойти curl никак нельзя?
Возможно ли обойти в 7.7 ResponseBody «Тип переменой не поддерживается» ограничение?
(23) Pin, моя обработка не использует cUrl по умолчанию, а как раз работает с WinHttp и ResponseBody.
Подскажите, как получить файл? Уже и зарегистрировались. Это полноценная обработка? Сколько она стоит, ничего не могу понять. Объясните пожалуйста.
подпишусь на актуальную обработку. вопросы задам вам в личку если не возражаете.
Да. Вещь! Работы автор проделал море. Я на полпути встрял, когда до ДОМ дошел. Полез читать про MSXML2.DOMDocument.6.0 и 1C 7.7 А тут все на месте. Спасибо тебе добрый человек!
Хорошая штука … Допилил правда немного для универсальности, ну и добавил запросы реквизитов организации по ИНН и их номенклатуры … чисто для справочной информации …
(24) А для чего в описании сказано, что для скачивания файлов >570кБ используется cUrl?
(30) В коде обработки в комментариях написано что при скачивании файла больше 570 кБ через скрипт 1с падает …
Заслуженный плюс. Документов пока по ЕГАИС никто не присылает, но вроде всё работает.
Единственное, я так смотрю, не удаляются исходящие документы (/opt/in). Изредка это надо делать, а то там когда-нибудь накопится слишком много запросов и база данных УТМ встанет. Но это надо, наверное, лет 10 работать 🙂
(32) leonidt84,
Да вроде удаляются исходящие. Поставщики прислали нам одну ТТН (по техническим причинам на их стороне пока не могут больше к сожалению). Ну так вот после подтверждения этой ТТН всё удалилось, и ТТН и всё что с ней связано. Ждем от них еще несколько ТТН, чтобы проверить отказ и расхождение …
Помогите. Чем прочитать ответ от егаис в 7.7? Msxml.DOMDocument на больших файлах просто падает, 90% ответов со списком продукции производителей обработать не удается, AddIn.XMLParser не умеет работать в префиксами. Прошу любые ссылки.
(34) Yury1001, Msxml.DOMDocument отлично работает на больших объемах данных, просто не надо гонять эти данные туда-сюда загружать-выгружать через «строку», даю наводку 😉http://infostart.ru/public/435130/
вчера было все нормально седня пишет, что возможно УТМ не запущен помогите плиз
в службах смотрел все работает
брандмаувер отключен
amoarok, подскажи где косяк, добавил запрос на справки А, а он не уходит. Ошибка (<>200) не удалось выгрузить документ
код:
XML_DOM=CreateObject(«MSXML2.DOMDocument.6.0»);
XML_HELPER=CreateObject(«Msxml2.MXNamespaceManager.6.0»);
XML_HELPER.declarePrefix(«qf», «http://fsrar.ru/WEGAIS/QueryFormAB»);
XML_HELPER.declarePrefix(«ns», «http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01»);
Header = XML_DOM.createProcessingInstruction(«xml», «version=»»1.0″» encoding=»»UTF-8″»» );
XML_DOM.appendChild(Header);
XML_ROOT = ДобавитьУзел(XML_DOM, XML_HELPER, XML_DOM, «Documents», «ns»);
ДобавитьАттрибут(XML_DOM, XML_ROOT, «xmlns:xsi», «http://www.w3.org/2001/XMLSchema-instance»);
ДобавитьАттрибут(XML_DOM, XML_ROOT, «xmlns:ns», «http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01»);
ДобавитьАттрибут(XML_DOM, XML_ROOT, «xmlns:qf», «http://fsrar.ru/WEGAIS/QueryFormAB»);
XML_OWNER = ДобавитьУзел(XML_DOM, XML_HELPER, XML_ROOT, «Owner», «ns»);
XML_FSRAR_ID = ДобавитьУзел(XML_DOM, XML_HELPER, XML_OWNER, «FSRAR_ID», «ns»);
ДобавитьТекст(XML_DOM, XML_FSRAR_ID, ФСРАР_ID);
XML_DOCUMENT = ДобавитьУзел(XML_DOM, XML_HELPER, XML_ROOT, «Document», «ns»);
XML_QUERYFORMA = ДобавитьУзел(XML_DOM, XML_HELPER, XML_DOCUMENT, «QueryFormA»,»ns»);
для с=1 по списокА.размерсписка() цикл
XML_FORMREGID=ДобавитьУзел(XML_DOM, XML_HELPER, XML_QUERYFORMA, «FormRegId»,»qf»);
IDFORMA=списокА.ПолучитьЗначение(с);
ДобавитьТекст(XML_DOM, XML_FORMREGID, IDFORMA);
конеццикла;
RESULT_XML_DOM = ВыгрузитьDOM(XML_DOM, УТМ_URL+»opt/in/QueryFormA»); здесь ошибка
УТМ_URL = «http://127.0.0.1:8080/»;
Так и оставлять? Пишет, что EGAIS.ERT(167)}: WinHttp.WinHttpRequest: Не удается установить соединение с сервером
Поясните что делаю не так мне приходят только остатки. Тут нужно как то закреплять за определенным магазином обработку?
Мы поставщикам выдали ИНН и КПП каждого магазина и все автоматом стало появляться. А пока этого не сделали тоже только остатками баловался — проверял работает ли…
(38) vsy, сохрани xml файл, который создает обработка, и выгрузи его через curl. Хотя один косяк вижу и так — запрашивать можно только одну справку за раз.
(40) alexzer0r, если остатки приходят — все работает. Видимо поставщики еще не отправляют накладные через егаис. Или отправляют не на тот фсрар id. Или еще любая из сотни причин.
(36) serg1983, открой в браузереhttp://127.0.0.1:8080/ . Если открывается, то проверь фсрар id организации в настройках обработки.
Спасибо огромное!!!! Обработка просто супер!! то что надо!!!
При нажатии на документы в УТМ с префиксом А (накладные?):
DocumentNode = XML_DOM.selectSingleNode(«/ns:Documents/ns:Document»).firstChild;
{C:DOCUMENTS AND SETTINGSАДМИНИСТРАТОРРАБОЧИЙ СТОЛЕГАИС.ERT(1850)}: Плохой тип переменной
Подскажите, с этим можно что-то сделать?
(45) Brravo, что за префикс А? Покажите скриншот обработки и содержимоеhttp://127.0.0.1:8080/opt/out
Смотрите…
(47) Brravo, это явно какой-то сбой УТМ. Таких документов появляться не должно. Советую обратиться в техподдержку ЕГАИС.
(47) Иногда помогает перезагрузка УТМ / компа.
1. возможно ли реализовать в обработке открытие квитанции онлайн (через вебморду)?
2. возможно ли дописать повторный запрос на отправку накладной?
(50) kulispb,
1. Вам нужно просто открывать XML файл в браузере из обработки? Уже сейчас можно скопировать URL из обработки и вставить его в адресную строку.
2. Повторный запрос ТТН есть на вкладке «Дополнительно».
(51)
Большое спасибо все нашел.
Подскажите пожалуйста можно ли вас попросить за дополнительную плату помочь разобраться с косяком? (Каким то образом от нас уходят с подтверждением накладные, которые мы не получали.)
Розничные продажи (ЧекККМ) из ТИС в ЕГАИС кто нибудь не реализовал?
(53) Да, реализовано здесь:http://infostart.ru/public/433840/
И не только фиксация розничных продажи, а полный функционал для обмена с УТМ присутствует.
(54) С Меркурий МС-К работает? (QR код)
Добрый день. Не получается сделать возврат, выдает ошибку, что не установлена связь с УТМ. В чем может быть проблема?
WinHTTP.Status возвращает код 500.
Спасибо.
(56) Fenin, поищите в директории резервного хранилища (по умолчанию E:ЕГАИС) папку «err» и выложите здесь самый свежий файл из неё.
amoarok,
планируете реализацию документооборота версии 2?
(58) copybases, в ближайшее время — нет. Может быть через месяц-другой.
(57) Файл в архиве, так же немного допилил обработку (настройки нескольких УТМ сохраняются в файле Setting.ini, который необходимо закинуть в хранилище).
В обработке сделал возможность редактировать строки возврата, так как приход по этому возврату был давно и в базе нет данных по первоначальной ТТН.
(Сначала не сообразил, что можно возврат делать по первой закладке).
Спасибо.
(60) Fenin, найдите в коде строки:
и замените что-то наподобие:
В ЕГАИС в качестве разделителя используется точка, а значение в файле с запятой.
(61) Спасибо большое. Ошибку исправил, действительно в количестве стояла запятая и еще реквизит цена — обязательный, без него тоже выдавал ошибку.
Спасибо за обработку, но хотелось бы видеть список подтвержденных накладных! Раз уж есть база то как её можно посмотреть?
(63) vitnaut, к сожалению пока список подтвержденных накладных посмотреть не получится. В базе хранятся только запросы с replyId и информация по formBRegInfo. ТТН, квитанции и прочие документы просто лежат в папке в виде файлов.
(64) понятно, спасибо и на том что есть. а насчет перемещения из регистра1 в регистр2 (торговый зал) не думали ещё?
Станислав, помогите пожалуйста найти ошибку в постановке на баланс, файл прикрепил.
Файл
(67) Fenin,
Когда сканируете марку, переключайтесь на английскую раскладку клавиатуры.
Станислав, спасибо акт прошел, но вернул ответ:
Получен ответ на акт согласования/разногласий для документа Акт постановки на баланс от 2016-09-29 продукция 0378249000001295909
http://192.168.0.15:8080/opt/out/Ticket/3203
Удаляем документ:
[2/2] Ошибка: Ошибка проверки акта № 20160929-160808 от 29.09.2016 00:00:00. Позиция 1: Штрихкода содержат отличные от позиции акта коды продукции.
Что это может быть?
Каким образом Вы узнаете где в файле ошибка? Есть какой-то сервис?
(69) Fenin, одна из марок считана некорректно или относится в другой продукции. Проверить алкокод можно через сервис проверки марок в лк фсрар или поискать на инфостарте обработку, которая из кода марки вытаскивает алкокод.
Спасибо, действительно марка была от другой позиции.
Странно, запрашиваю остатки, они подгружаются нормально, но при попытке списания выдаёт ошибку «не удалось выгрузить документ. Возможно служба УТМ не запущена». При этом УТМ работает корректно 100% В чём может быть проблема?
(72) Добрый день. Проверяйте содержимое файла, скорее всего там неверно указана либо цена, либо количество. (Разделить не тот стоит, либо не указана цена). Файл можно найти в папке хранилища.
Скажите, пожалуйста, а с регистром 2 обработка работать уже умеет?
И с новым форматом обмена, как дружит?
(74) Эта обработка была обновлена последний раз 22.03.16.
Есть же другие обработки, которые до сих пор поддерживаются.
Или вы выбираете среди бесплатных?
Нет, можно и платную. Проблема в том, что я не могу найти обработку под 7.7 под самописную конфигурацию. Все имеющиеся цепляются или к ТиС, или к Бух. Эта — единственная, которая работает полностью автономно.
(76) Напишите в личку. Есть у меня решение под вашу конфигурацию (самописную).
Подскажите пжл. С недавнего времени обработка стала выдавать ошибку
НомерДок = XML_DOM.selectSingleNode(«/ns:Documents/ns:Document/ns:WayBill/wb:Header/wb:NUMBER»).text;
{D:ИБEGAISЕГАИС.ERT(800)}: Плохой тип переменной
ТиС 938
Подскажите в чем дело или может сделаете обновление?
(78) Переход на использование документов версии 2 в УТМhttp://egais.ru/news/view?id=1507
Видимо, данная обработка не умеет работать с версией 2.
Обработка очень ценная была в самом начале, когда только появилась. В ней реализован весь принцип обмена с ЕГАИС. А дальше, используя все принципы из этой обработки, разобравшись, как это работает, кто хотел, написал под себя доработки своих систем, и дальше уже «воюет» с этим сам, со второй версией документооборота, регистрами и т.д…
Но, автор сообщения(78) видимо использует ее в первозданном виде(странно, оказывается еще такие есть????). Поэтому, либо сами(своих программистов просите) дорабатывайте до текущих требований, либо просите автора, может переделает под вторую версию… Хотя, функционала данной обработки для полноценной «борьбы» с ЕГАИС явно мало на текущий момент…