Перейти к содержанию
Официальный форум поддержки Simpla

Вопрос по 1с_exchange


Перейти к решению Решено phukortsin,

Рекомендуемые сообщения

Здравствуйте. Сделал сервис по проверки статуса заказ наряда (добавил поля в БД, интерфейс в админке, импорт через 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</Значение>
			</ЗначениеРеквизита>
		</ЗначенияРеквизитов>
	</Документ>

 

 

 

 
Ссылка на сообщение
Поделиться на другие сайты

$_SESSION['last_1c_imported_product_num'] - переменная, которая УЖЕ используется и ее в новом функционале использовать нельзя.

Заменяйте на что-то типа  $_SESSION['last_1c_imported_zakazs_num'].

Ссылка на сообщение
Поделиться на другие сайты

$_SESSION['last_1c_imported_product_num'] - переменная, которая УЖЕ используется и ее в новом функционале использовать нельзя.

Заменяйте на что-то типа  $_SESSION['last_1c_imported_zakazs_num'].

 

Дело было не в этом. Странно почему не встаёт в поле id поле из XML - Документ->Ид

Ссылка на сообщение
Поделиться на другие сайты
  • Решение

Дело было не в этом. Странно почему не встаёт в поле id поле из XML - Документ->Ид

 

Проверяйте точно все детали. Похоже, Вы, в поле типа int пытаетесь пихнуть значение вроде '618c5c27-17b2-11e9-8066-002590597037' - отсюда и результат...

Ссылка на сообщение
Поделиться на другие сайты

Проверяйте точно все детали. Похоже, Вы, в поле типа int пытаетесь пихнуть значение вроде '618c5c27-17b2-11e9-8066-002590597037' - отсюда и результат...

 

Спасибо. Изменил на varchar

Ссылка на сообщение
Поделиться на другие сайты

Опять таки, надо проверять все детали. Для данного вопроса, проверять как минимум

1. $full_update,

2. Приходит ли из 1С изменение,

3. Работает ли правильно zakazs->update_zakaz($id, $z) с Вашим нестандартным типом поля.

 

И, как обычно, возможны и прочие причины...

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...