/**
  * Осуществляет вставку новой записи в прайс-лист
  * @param array $arFieldVals массив с значениями полей; key->имя поля, value->значение
  * @return bool Возвращает успех или неудачу
  */
 public function insertItem($arFieldVals)
 {
     $gprice_gen_obj = new GeneralPrice(0, $this->_dbase);
     if (!isset($this->_alloysFieldsNamesArray)) {
         $this->_alloysFieldsNamesArray = $this->_dbase->getFieldsNames('alloys');
     }
     if (!isset($this->_productFieldsNamesArray)) {
         $this->_productFieldsNamesArray = $this->_dbase->getFieldsNames('production');
     }
     // возможно, логичнее сделать проверку на необходимые размеры на клиенте
     // составляем запросы для поучения id_alloys и id_production и заполняем некоторые поля general_price
     foreach ($arFieldVals as $field => $value) {
         if (in_array($field, $this->_alloysFieldsNamesArray)) {
             $alloy_fields[$field] = array($arFieldVals[$field]);
             // array() ставим, чтобы корректно отработала функция _getFilterQuery()
             continue;
         } elseif (in_array($field, $this->_productFieldsNamesArray)) {
             $product_fields[$field] = array($arFieldVals[$field]);
             // array() ставим, чтобы корректно отработала функция _getFilterQuery()
             continue;
         } else {
             $gprice_gen_obj->__set($field, $value);
         }
     }
     $alloy_query = $this->_getFilterQuery('alloys', $alloy_fields, array('id'));
     $product_query = $this->_getFilterQuery('production', $product_fields, array('id'));
     // проверяем наличие записей в alloys и production, удовлетворяющих заданным требованиям
     try {
         $ids = $this->_dbase->select($alloy_query);
         $alloy_id = $ids[0]['id'];
         $ids = $this->_dbase->select($product_query);
         $product_id = $ids[0]['id'];
     } catch (Exception $e) {
         print $e->getMessage();
         return false;
     }
     // если такой записи в alloys нет, то создаем ее и записываем полученный id
     if (!($alloy_id > 0)) {
         $alloy_gen_obj = new Alloy(0, $this->_dbase);
         foreach ($alloy_fields as $field => $value) {
             $alloy_gen_obj->__set($field, $value[0]);
         }
         if (!$alloy_gen_obj->save()) {
             return false;
         }
         $alloy_id = $alloy_gen_obj->id;
     }
     // если такой записи в production нет, то создаем ее и записываем полученный id
     if (!($product_id > 0)) {
         $class_name = getProductGenObject($product_fields);
         $s = "\$product_gen_obj = new {$class_name}(0, \$this->_dbase);";
         eval($s);
         foreach ($product_fields as $field => $value) {
             $product_gen_obj->__set($field, $value[0]);
         }
         if (!$product_gen_obj->save()) {
             return false;
         }
         $product_id = $product_gen_obj->id;
     }
     // задаем недостающие поля для
     $gprice_gen_obj->alloy_id = $alloy_id;
     $gprice_gen_obj->product_id = $product_id;
     if (!$gprice_gen_obj->save()) {
         return false;
     }
     $gprice_id = $gprice_gen_obj->id;
     // получаем все необходимые записи общего прайс-листа из таблицы general_price
     $query = "SELECT `id` FROM `metotech_metalls`.`special_prices` WHERE `price_name` = '" . mysql_real_escape_string($this->_priceName) . "'";
     try {
         $ids = $this->_dbase->select($query);
         $sprice_id = $ids[0]['id'];
     } catch (Exception $e) {
         print $e->getMessage();
         return false;
     }
     $mapping_gen_obj = new GenericObject();
     $mapping_gen_obj->initialize(0, 'prices_mapping', $this->_dbase);
     $mapping_gen_obj->sprice_id = $sprice_id;
     $mapping_gen_obj->gprice_id = $gprice_id;
     if (!$mapping_gen_obj->save()) {
         return false;
     }
     return true;
 }