Перейти к содержимому


Фото
- - - - -

Вопрос по 1с_exchange


Best Answer phukortsin , 17.01.2019 - 08:33

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

 

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

Перейти к посту


  • Чтобы отвечать, сперва войдите на форум
6 ответов в теме

#1 jonny008

jonny008
  • Пользователь
  • 117 сообщений

Опубликовано 16.01.2019 - 11:56

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

 

 

 

 


#2 phukortsin

phukortsin
  • Фрилансер
  • 729 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 16.01.2019 - 12:37

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

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



#3 jonny008

jonny008
  • Пользователь
  • 117 сообщений

Опубликовано 17.01.2019 - 07:03

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

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

 

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



#4 phukortsin

phukortsin
  • Фрилансер
  • 729 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 17.01.2019 - 08:33   Best Answer

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

 

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



#5 jonny008

jonny008
  • Пользователь
  • 117 сообщений

Опубликовано 17.01.2019 - 13:55

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

 

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



#6 jonny008

jonny008
  • Пользователь
  • 117 сообщений

Опубликовано 18.01.2019 - 09:35

Новые заявки прогружаются, но не обновляются в случае изменения статуса. 



#7 phukortsin

phukortsin
  • Фрилансер
  • 729 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 18.01.2019 - 09:51

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

1. $full_update,

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

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

 

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






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых