jonny008 Опубликовано 16 января, 2019 Жалоба Поделиться Опубликовано 16 января, 2019 Здравствуйте. Сделал сервис по проверки статуса заказ наряда (добавил поля в БД, интерфейс в админке, импорт через csv, клиентская часть - здесь всё отлично). Не совсем правильно прогружаются поля в БД через 1С. Делал по подобию импорта товаров. Иногда парсится нормально, иногда только 4-5 позиций. Никак не хочет в id заказ наряда встать внешний id из 1С. Если полностью очистить таблицу, то первая выгрузка проходит отлично. Дальше через раз. Вот код: if($simpla->request->get('type') == 'usc' && $simpla->request->get('mode') == 'checkauth') { print "success\n"; print session_name()."\n"; print session_id(); } if($simpla->request->get('type') == 'usc' && $simpla->request->get('mode') == 'init') { $tmp_files = glob($dir.'*.*'); if(is_array($tmp_files)) foreach($tmp_files as $z) { unlink($z); } unset($_SESSION['last_1c_imported_product_num']); print "zip=no\n"; print "file_limit=1000000\n"; } if($simpla->request->get('type') == 'usc' && $simpla->request->get('mode') == 'file') { $filename = basename($simpla->request->get('filename')); $f = fopen($dir.$filename, 'ab'); fwrite($f, file_get_contents('php://input')); fclose($f); print "success\n"; } if($simpla->request->get('type') == 'usc' && $simpla->request->get('mode') == 'import') { print "success\n"; $filename = basename($simpla->request->get('filename')); echo $filename; if($filename === 'usc_exchange.xml') { // Заказ наряды $z = new XMLReader; $z->open($dir.$filename); while ($z->read() && $z->name !== 'Документ'); // Последний заказ-наряд, на котором остановились $last_product_num = 0; if(isset($_SESSION['last_1c_imported_product_num'])) $last_product_num = $_SESSION['last_1c_imported_product_num']; // Номер текущего товара $current_product_num = 0; while($z->name === 'Документ') { if($current_product_num >= $last_product_num) { $xml = new SimpleXMLElement($z->readOuterXML()); // Товары import_zakaz($xml); $exec_time = microtime(true) - $start_time; if($exec_time+1>=$max_exec_time) { header ( "Content-type: text/xml; charset=utf-8" ); print "\xEF\xBB\xBF"; print "progress\r\n"; print "Выгружено заказ-нарядов: $current_product_num\r\n"; $_SESSION['last_1c_imported_product_num'] = $current_product_num; exit(); } } $z->next('Документ'); $current_product_num ++; } $z->close(); print "success"; print "Выгружено заказ-нарядов: $current_product_num\r\n"; //unlink($dir.$filename); unset($_SESSION['last_1c_imported_product_num']); } } function import_zakaz($xml) { global $simpla; global $dir; global $full_update; // Товары0 // Id товара и варианта (если есть) по 1С @list($usc_1c_id) = explode('#', $xml->Ид); if(empty($usc_1c_id)) $usc_1c_id = ''; // Подгатавливаем вариант $zakaz_id = null; $zakaz = new stdClass; $zakaz->sku = (string)$xml->Номер; $zakaz->id = $usc_1c_id; // Ищем заказанаряд $simpla->db->query('SELECT id FROM __zakazs WHERE id=?', $usc_1c_id); $id = $simpla->db->result('id'); if(empty($id)) { $id = $simpla->zakazs->add_zakaz( array( 'id'=>$usc_1c_id, 'name'=>$xml->name, 'sku'=>$xml->Номер, 'equipment'=>$xml->equipment, 'status'=>$xml->status ) ); } else { if($full_update) { $z = new stdClass(); $z->id = $usc_1c_id; $z->sku = $xml->Номер; $z->name = $xml->name; $z->equipment = $xml->equipment; $z->status = $xml->status; $id = $simpla->zakazs->update_zakaz($id, $z); } } } и содержимое xml (блок Документ) <Документ> <ТипДокумента>ЗаказНаряд</ТипДокумента> <Ид>618c5c27-17b2-11e9-8066-002590597037</Ид> <Номер>Ц0000528790</Номер> <sku>0528790</sku> <Дата>2019-01-14</Дата> <ХозОперация>Ремонт</ХозОперация> <Роль>Продавец</Роль> <Контрагенты> <Контрагент> <Ид>618c5c18-17b2-11e9-8066-002590597037</Ид> <Наименование>Мавлеева Наиля Исламгалеевна</Наименование> <ПолноеНаименование>Мавлеева Наиля Исламгалеевна</ПолноеНаименование> <Роль>Покупатель</Роль> </Контрагент> </Контрагенты> <name>Мавлеева Наиля Исламгалеевна</name> <equipment>СТИРАЛЬНАЯ МАШИНА BOSCH </equipment> <publish_date>2019-01-14</publish_date> <Время>09:34:44</Время> <Комментарий>Позвонить за 1 час!!!! Модель не знают</Комментарий> <status>Утверждено</status> <ЗначенияРеквизитов> <ЗначениеРеквизита> <Наименование>НомерПо1С</Наименование> <Значение>Ц0000528790</Значение> </ЗначениеРеквизита> <ЗначениеРеквизита> <Наименование>ДатаПо1С</Наименование> <Значение>2019-01-14</Значение> </ЗначениеРеквизита> <ЗначениеРеквизита> <Наименование>ПометкаУдаления</Наименование> <Значение>false</Значение> </ЗначениеРеквизита> <ЗначениеРеквизита> <Наименование>Проведен</Наименование> <Значение>true</Значение> </ЗначениеРеквизита> </ЗначенияРеквизитов> </Документ> Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 16 января, 2019 Жалоба Поделиться Опубликовано 16 января, 2019 $_SESSION['last_1c_imported_product_num'] - переменная, которая УЖЕ используется и ее в новом функционале использовать нельзя.Заменяйте на что-то типа $_SESSION['last_1c_imported_zakazs_num']. Цитата Ссылка на сообщение Поделиться на другие сайты
jonny008 Опубликовано 17 января, 2019 Автор Жалоба Поделиться Опубликовано 17 января, 2019 $_SESSION['last_1c_imported_product_num'] - переменная, которая УЖЕ используется и ее в новом функционале использовать нельзя.Заменяйте на что-то типа $_SESSION['last_1c_imported_zakazs_num']. Дело было не в этом. Странно почему не встаёт в поле id поле из XML - Документ->Ид Цитата Ссылка на сообщение Поделиться на другие сайты
Решение phukortsin Опубликовано 17 января, 2019 Решение Жалоба Поделиться Опубликовано 17 января, 2019 Дело было не в этом. Странно почему не встаёт в поле id поле из XML - Документ->Ид Проверяйте точно все детали. Похоже, Вы, в поле типа int пытаетесь пихнуть значение вроде '618c5c27-17b2-11e9-8066-002590597037' - отсюда и результат... Цитата Ссылка на сообщение Поделиться на другие сайты
jonny008 Опубликовано 17 января, 2019 Автор Жалоба Поделиться Опубликовано 17 января, 2019 Проверяйте точно все детали. Похоже, Вы, в поле типа int пытаетесь пихнуть значение вроде '618c5c27-17b2-11e9-8066-002590597037' - отсюда и результат... Спасибо. Изменил на varchar Цитата Ссылка на сообщение Поделиться на другие сайты
jonny008 Опубликовано 18 января, 2019 Автор Жалоба Поделиться Опубликовано 18 января, 2019 Новые заявки прогружаются, но не обновляются в случае изменения статуса. Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 18 января, 2019 Жалоба Поделиться Опубликовано 18 января, 2019 Опять таки, надо проверять все детали. Для данного вопроса, проверять как минимум1. $full_update,2. Приходит ли из 1С изменение,3. Работает ли правильно zakazs->update_zakaz($id, $z) с Вашим нестандартным типом поля. И, как обычно, возможны и прочие причины... Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.