1C: «в строке импортируемых данных №1 требуется (и сейчас отсутствует) поле «name»»

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
  • Тема закрыта
#1 Александр Шарковский
  • Группа: Клиент
  • Сообщений: 21
  • Регистрация: 04.11.2014

04.12.2014 00:21

Никак не можем разобраться что это за поле «name»

Версия 1С соответствует УТ 11.1.4 (белорусская 3.1.5.1)
Версия модуля обмена 4.0.4.2
Вот Лог Системного журнала Мадженты:


URL:                 http://sharx.org/df-1c/cml2/index/?type=catalog&mode=import&filename=rests___ee312333-ed07-48fb-b276-788d58af6ca1.xml&
Версия Magento:      2.40.1 (1.9.0.1)
Версия PHP:          5.4.4-14+deb7u14
Время:               2014-12-03 14:45:15 MSK
Cхема CommerceML:   2.08
Оформительская тема: ultimo / default
***********************************
В строке импортируемых данных №1 требуется (и сейчас отсутствует) поле «name»
Импортируемые данные:
[websites] => 1
[attribute_set] => Товар
[type] => simple
[product_type_id] => simple
[store] => default
[store_id] => 1
[has_options] => 
[meta_title] => 
[meta_description] => 
[image] => 
[small_image] => 
[thumbnail] => 
[url_key] => 
[url_path] => 
[image_label] => 
[small_image_label] => 
[thumbnail_label] => 
[country_of_manufacture] => 
[visibility] => Каталог, поиск
[tax_class_id] => нет
[meta_keyword] => 
[use_config_min_qty] => 1
[is_qty_decimal] => 
[use_config_backorders] => 1
[use_config_min_sale_qty] => 1
[use_config_max_sale_qty] => 1
[low_stock_date] => 
[use_config_notify_stock_qty] => 1
[manage_stock] => 1
[use_config_manage_stock] => 1
[stock_status_changed_auto] => 
[use_config_qty_increments] => 1
[use_config_enable_qty_inc] => 1
[is_decimal_divided] => 
[stock_status_changed_automatically] => 
[use_config_enable_qty_increments] => 1
[rm_1c_id] => bb3927f7-7148-11e3-aa2c-001e670c1afc
[sku] => 8515391800
[category_ids] => 637
[description] => Тестовое описание
Вторая строка описания
Третья 
[short_description] => Тестовое описание
Вторая строка описания
Третья 
[qty] => 524
[price] => 0
[weight] => 0
[is_in_stock] => 1
***********************************
Файл:        app/code/local/Df/Dataflow/Model/Import/Abstract/Row.php
Строка:      118
Субъект:     Df_Dataflow_Model_Import_Abstract_Row::error
Объект:      df_error
Контекст:    
	protected function error($arguments) {
		// Обратите внимание, что функция func_get_args() не может быть параметром другой функции.
		$arguments = is_array($arguments) ? $arguments : func_get_args();
		df_error(
			"%s\r\nИмпортируемые данные:\r\n%s"
			, rm_sprintf($arguments)
			, rm_print_params($this->getAsArray())
		);
	}

	/**
	 * @override
	 * @return void
	 */
	protected function _construct() {
		parent::_construct();
************************************
Файл:        app/code/local/Df/Dataflow/Model/Import/Abstract/Row.php
Строка:      25
Субъект:     Df_Dataflow_Model_Import_Abstract_Row::getFieldValue
Объект:      Df_Dataflow_Model_Import_Abstract_Row::error
Контекст:    
		/** @var string|null $result */
		$result = df_a($this->getAsArray(), $fieldName, $default);
		if ($isRequired && is_null($result)) {
			$this->error(
				'В строке импортируемых данных №%d требуется (и сейчас отсутствует) поле «%s»'
				,$this->getOrdering()
				,$fieldName
			);
		}
		if (!is_null($result)) {
			if (is_bool($result)) {
				// true => '1'
				// false => '0'
				$result = strval(intval($result));
			}
			else if (is_int($result)) {
************************************
Файл:        app/code/local/Df/Dataflow/Model/Importer/Product.php
Строка:      590
Субъект:     Df_Dataflow_Model_Importer_Product::assertRequiredAttributesExistence
Объект:      Df_Dataflow_Model_Import_Abstract_Row::getFieldValue
Контекст:    
			df_assert_string($requiredField);
			/** @var Mage_Eav_Model_Entity_Attribute $attribute */
			$attribute = $this->getAttributeForField($requiredField);
			if (!is_null($attribute)) {
				df_assert($attribute instanceof Mage_Eav_Model_Entity_Attribute);
				if ($attribute->getDataUsingMethod('is_required')) {
					// Убеждаемся в присутствии значений
					$this->getRow()->getFieldValue($requiredField, true);
				}
			}
		}
		return $this;
	}

	/**
	 * @param string $fieldName
************************************
Файл:        app/code/local/Df/Dataflow/Model/Importer/Product.php
Строка:      68
Субъект:     Df_Dataflow_Model_Importer_Product::import
Объект:      Df_Dataflow_Model_Importer_Product::assertRequiredAttributesExistence
Контекст:    
	 * @override
	 * @return Df_Dataflow_Model_Importer_Row
	 */
	public function import() {
		try {
			if ($this->getRow()->isProductNew()) {
				// Убеждаемся в присутствии значений обязательных для нового товара полей
				$this->assertRequiredAttributesExistence();
			}
			$this->importCategoriesUsingStandardTechnology();
			$this->importCategoriesUsingAdvancedTechnology();
			$this->initWebsiteAttributeForProduct();
			$this->importAttributeValues();
			if (!$this->getProduct()->getDataUsingMethod('visibility')) {
				$this->getProduct()
					->getDataUsingMethod(
************************************
Файл:        app/code/local/Df/1C/Model/Cml2/Import/Processor/Product/Type/Simple.php
Строка:      16
Субъект:     Df_1C_Model_Cml2_Import_Processor_Product_Type_Simple::process
Объект:      Df_Dataflow_Model_Importer_Product::import
Контекст:    
		if (!$this->getEntityOffer()->isTypeSimple()) {
			rm_1c_log(
				'Пропускаем товарное предложение «%s» как не являющееся простым товаром.'
				,$this->getEntityOffer()->getName()
			);
		}
		else {
			$this->getImporter()->import();
			/** @var Df_Catalog_Model_Product $product */
			$product = $this->getImporter()->getProduct();
			df_h()->_1c()->cml2()->reindexProduct($product);
			rm_1c_log(
				'%s товар «%s».'
				,!is_null($this->getExistingMagentoProduct()) ? 'Обновлён' : 'Создан'
				,$product->getName()
			);
************************************
Файл:        app/code/local/Df/1C/Model/Cml2/Action/Catalog/Import.php
Строка:      158
Субъект:     Df_1C_Model_Cml2_Action_Catalog_Import::importProductsSimple
Объект:      Df_1C_Model_Cml2_Import_Processor_Product_Type_Simple::process
Контекст:    
			rm_1c_log('Простые товары отсутствуют.');
		}
		else {
			rm_1c_log('Простых товаров: %d.', $count);
			rm_1c_log('Импорт простых товаров начат.');
			foreach ($this->getCollections()->getOffersSimple() as $offer) {
				/** @var Df_1C_Model_Cml2_Import_Data_Entity_Offer $offer */
				Df_1C_Model_Cml2_Import_Processor_Product_Type_Simple::i($offer)->process();
			}
			rm_1c_log('Импорт простых товаров завершён.');
		}
		return $this;
	}

	/** @return Df_1C_Model_Cml2_Action_Catalog_Import */
	private function importProductsSimplePartImages() {
************************************
Файл:        app/code/local/Df/1C/Model/Cml2/Action/Catalog/Import.php
Строка:      47
Субъект:     Df_1C_Model_Cml2_Action_Catalog_Import::processInternal
Объект:      Df_1C_Model_Cml2_Action_Catalog_Import::importProductsSimple
Контекст:    
			/** @var int $count */
			$count = count($this->getCollections()->getOffers());
			if (0 === $count) {
				rm_1c_log('Товарные предложения отсутствуют.');
			}
			else {
				rm_1c_log('Товарных предложений: %d.', $count);
				$this->importProductsSimple();
				/**
				 * Товарные изображения находятся в файле import.xml (import_*.xml).
				 * Учитывая, что начиная с ветки 4 модуля 1С-Битрикс
				 * мы получаем несколько файлов с тегом «ПакетПредложений»
				 * вместо прежнего единого файла offers.xml,
				 * то нам нет смысла по нескольку раз запускать импорт товарных изображений.
				 * Импортируем товарные изображения толь один раз:
				 * при наличии в файле offers_*.xml пути
************************************
Файл:        app/code/local/Df/1C/Model/Cml2/Action.php
Строка:      36
Субъект:     Df_1C_Model_Cml2_Action::process
Объект:      Df_1C_Model_Cml2_Action_Catalog_Import::processInternal
Контекст:    
			if (!df_cfg()->_1c()->general()->isEnabled()) {
				df_error(self::T__MODULE_IS_DISABLED);
			}
			df_h()->dataflow()->registry()->products()->addValidator(Df_1C_Validate_Product::s());
			/** @var string|bool $output */
			$output = null;
			ob_start();
			$this->processInternal();
			/**
			 * Используем @, чтобы избежать сбоя «Failed to delete buffer zlib output compression».
			 * Такой сбой у меня возник на сервере moysklad.magento-demo.ru
			 * в другой точке программы при аналогичном вызове @see ob_get_clean.
			 */
			$output = @ob_get_clean();
			if ($output) {
				ob_start();
************************************
Файл:        app/code/local/Df/1C/Model/Cml2/Action/Front.php
Строка:      86
Субъект:     Df_1C_Model_Cml2_Action_Front::action_catalogImport
Объект:      Df_1C_Model_Cml2_Action::process
Контекст:    
	/** @return void */
	private function action_catalogDeactivate() {
		Df_1C_Model_Cml2_Action_Catalog_Deactivate::i($this->getData())->process();
	}

	/** @return void */
	private function action_catalogImport() {
		Df_1C_Model_Cml2_Action_Catalog_Import::i($this->getData())->process();
	}

	/** @return void */
	private function action_catalogUpload() {
		Df_1C_Model_Cml2_Action_Catalog_Upload::i($this->getData())->process();
	}

	/** @return void */
************************************
Файл:        app/code/local/Df/1C/Model/Cml2/Action/Front.php
Строка:      54
Субъект:     Df_1C_Model_Cml2_Action_Front::processInternal
Объект:      Df_1C_Model_Cml2_Action_Front::action_catalogImport
Контекст:    
						case Df_1C_Model_Cml2_InputRequest_Generic::MODE__DEACTIVATE:
							$this->action_catalogDeactivate();
							break;
						case Df_1C_Model_Cml2_InputRequest_Generic::MODE__FILE:
							$this->action_catalogUpload();
							break;
						case Df_1C_Model_Cml2_InputRequest_Generic::MODE__IMPORT:
							$this->action_catalogImport();
							break;
					}
				}
				else if (
						Df_1C_Model_Cml2_InputRequest_Generic::TYPE__ORDERS
					===
						$this->getRmRequest()->getType()
				) {
************************************
Файл:        app/code/local/Df/1C/Model/Cml2/Action.php
Строка:      36
Субъект:     Df_1C_Model_Cml2_Action::process
Объект:      Df_1C_Model_Cml2_Action_Front::processInternal
Контекст:    
			if (!df_cfg()->_1c()->general()->isEnabled()) {
				df_error(self::T__MODULE_IS_DISABLED);
			}
			df_h()->dataflow()->registry()->products()->addValidator(Df_1C_Validate_Product::s());
			/** @var string|bool $output */
			$output = null;
			ob_start();
			$this->processInternal();
			/**
			 * Используем @, чтобы избежать сбоя «Failed to delete buffer zlib output compression».
			 * Такой сбой у меня возник на сервере moysklad.magento-demo.ru
			 * в другой точке программы при аналогичном вызове @see ob_get_clean.
			 */
			$output = @ob_get_clean();
			if ($output) {
				ob_start();
************************************
Файл:        app/code/local/Df/1C/controllers/Cml2Controller.php
Строка:      17
Субъект:     Df_1C_Cml2Controller::indexAction
Объект:      Df_1C_Model_Cml2_Action::process
Контекст:    
		 * надлежащим для 1C: Управление торговлей способом
		 * (возвращает диагностическое сообщение в 1C: Управление торговлей
		 * по стандарту CommerceML 2)
		 */
		if (df_is_it_my_local_pc()) {
			Mage::log(Mage::app()->getRequest()->getRequestUri());
		}
		Df_1C_Model_Cml2_Action_Front::i($this)->process();
	}

	/**
	 * @override
	 * @return Df_1C_Cml2Controller
	 */
	public function preDispatch() {
		/**
************************************
Файл:        app/code/core/Mage/Core/Controller/Varien/Action.php
Строка:      418
Субъект:     Mage_Core_Controller_Varien_Action::dispatch
Объект:      Df_1C_Cml2Controller::indexAction
Контекст:    
/**
                 * preDispatch() didn't change the action, so we can continue
                 */
                if (!$this->getFlag('', self::FLAG_NO_DISPATCH)) {
                    $_profilerKey = self::PROFILER_KEY.'::'.$this->getFullActionName();

                    Varien_Profiler::start($_profilerKey);
                    $this->$actionMethodName();
                    Varien_Profiler::stop($_profilerKey);

                    Varien_Profiler::start(self::PROFILER_KEY.'::postdispatch');
                    $this->postDispatch();
                    Varien_Profiler::stop(self::PROFILER_KEY.'::postdispatch');
                }
            }
        }
************************************
Файл:        app/code/core/Mage/Core/Controller/Varien/Router/Standard.php
Строка:      250
Субъект:     Mage_Core_Controller_Varien_Router_Standard::match
Объект:      Mage_Core_Controller_Varien_Action::dispatch
Контекст:    
// set parameters from pathinfo
        for ($i = 3, $l = sizeof($p); $i < $l; $i += 2) {
            $request->setParam($p[$i], isset($p[$i+1]) ? urldecode($p[$i+1]) : '');
        }

        // dispatch action
        $request->setDispatched(true);
        $controllerInstance->dispatch($action);

        return true;
    }

    /**
     * Get router default request path
     * @return string
     */
************************************
Файл:        app/code/core/Mage/Core/Controller/Varien/Front.php
Строка:      172
Субъект:     Mage_Core_Controller_Varien_Front::dispatch
Объект:      Mage_Core_Controller_Varien_Router_Standard::match
Контекст:    
$this->_getRequestRewriteController()->rewrite();

        Varien_Profiler::start('mage::dispatch::routers_match');
        $i = 0;
        while (!$request->isDispatched() && $i++ < 100) {
            foreach ($this->_routers as $router) {
                /** @var $router Mage_Core_Controller_Varien_Router_Abstract */
                if ($router->match($request)) {
                    break;
                }
            }
        }
        Varien_Profiler::stop('mage::dispatch::routers_match');
        if ($i>100) {
            Mage::throwException('Front controller reached 100 router match iterations');
        }
************************************
Файл:        app/code/core/Mage/Core/Model/App.php
Строка:      354
Субъект:     Mage_Core_Model_App::run
Объект:      Mage_Core_Controller_Varien_Front::dispatch
Контекст:    
$scopeCode = isset($params['scope_code']) ? $params['scope_code'] : '';
                $scopeType = isset($params['scope_type']) ? $params['scope_type'] : 'store';
                $this->_initCurrentStore($scopeCode, $scopeType);
                $this->_initRequest();
                Mage_Core_Model_Resource_Setup::applyAllDataUpdates();
            }

            $this->getFrontController()->dispatch();
        }
        return $this;
    }

    /**
     * Initialize PHP environment
     *
     * @return Mage_Core_Model_App
************************************
Файл:        app/Mage.php
Строка:      684
Субъект:     Mage::run
Объект:      Mage_Core_Model_App::run
Контекст:    
self::$_events = new Varien_Event_Collection();
            self::_setIsInstalled($options);
            self::_setConfigModel($options);
            self::$_app->run(array(
                'scope_code' => $code,
                'scope_type' => $type,
                'options'    => $options,
            ));
            Varien_Profiler::stop('mage');
        } catch (Mage_Core_Model_Session_Exception $e) {
            header('Location: ' . self::getBaseUrl());
            die();
        } catch (Mage_Core_Model_Store_Exception $e) {
            require_once(self::getBaseDir() . DS . 'errors' . DS . '404.php');
            die();
        } catch (Exception $e) {
************************************
Файл:        index.php
Строка:      87
Субъект:     
Объект:      Mage::run
Контекст:    
/* Store or website code */
$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';

/* Run store or run website */
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';

Mage::run($mageRunCode, $mageRunType);
************************************


#2 Александр Шарковский
  • Группа: Клиент
  • Сообщений: 21
  • Регистрация: 04.11.2014

04.12.2014 14:15

Точнее версия модуля обмена 4.0.5.1

#3 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

05.01.2015 15:46

Исправлено в версии 2.43.3 Российской сборки Magento.

Поделиться темой: