public function ToArray($fields = self::ALL, $notNull = array(), $forSQL = false, $row = null)
 {
     $row = $this->checkRow($row);
     $res = array();
     $arFields = CSupportTools::prepareParamArray($fields, array_keys($this->_arFields[$row]));
     foreach ($arFields as $key => $name) {
         $fName = is_int($key) ? $name : $key;
         if (!array_key_exists($fName, $this->_arFieldsTypes)) {
             continue;
         }
         $v = $this->_arFields[$row][$fName];
         $ft = $this->_arFieldsTypes[$fName];
         if (in_array(self::ONLY_CHANGED, $notNull) && (!isset($this->_arModifiedFields[$row][$fName]) || $this->_arModifiedFields[$row][$fName] != true)) {
             continue;
         } elseif (in_array(self::NOT_NULL, $notNull) && $v === null) {
             continue;
         } elseif (in_array(self::NOT_DEFAULT, $notNull) && $v === $ft["DEF_VAL"]) {
             continue;
         }
         if ($forSQL) {
             if (array_key_exists("AUTO_CALCULATED", $ft)) {
                 continue;
             }
             $res[$name] = self::ConvertForSQL($ft["TYPE"], $v);
         } else {
             $res[$name] = $v;
         }
     }
     return $res;
 }