private function _applyPropertyListTypeValues($id, $values)
 {
     $addValues = array();
     $updateValues = array();
     $useValuesIds = array();
     foreach ($values as $value) {
         $value['PROPERTY_ID'] = $id;
         try {
             $value['ID'] = $this->getReferenceController()->getItemCurrentVersionByReference($value['~reference'])->id;
             $useValuesIds[] = $value['ID'];
             $updateValues[] = $value;
         } catch (\Exception $e) {
             $addValues[] = $value;
         }
     }
     $currentValues = PropertyEnumerationTable::getList(array('filter' => array('=PROPERTY_ID' => $id)))->fetchAll();
     foreach ($currentValues as $value) {
         !in_array($value['ID'], $useValuesIds) && PropertyEnumerationTable::delete(array('ID' => $value['ID'], 'PROPERTY_ID' => $value['PROPERTY_ID']));
     }
     foreach ($addValues as $value) {
         unset($value['ID']);
         unset($value['~reference']);
         $enum = new \CIBlockPropertyEnum();
         $enumElementId = $enum->Add($value);
         if (!$enumElementId) {
             throw new \Exception('Add property list value. Property not save. ' . var_export($value, true));
         }
         $result = PropertyEnumerationTable::update(array('ID' => $enumElementId, 'PROPERTY_ID' => $value['PROPERTY_ID']), $value);
         if (!$result->isSuccess()) {
             throw new \Exception('Add property list value in table. Property not save. ' . var_export($result->getErrorMessages(), true));
         }
         $referenceItem = new ReferenceItem();
         $referenceItem->id = $enumElementId;
         $referenceItem->group = ReferenceController::GROUP_IBLOCK_PROPERTY_LIST_VALUES;
         $referenceItem->reference = $value['~reference'];
         $this->getReferenceController()->registerItem($referenceItem);
     }
     foreach ($updateValues as $value) {
         $vId = $value['ID'];
         unset($value['ID']);
         unset($value['~reference']);
         $result = PropertyEnumerationTable::update(array('ID' => $vId, 'PROPERTY_ID' => $value['PROPERTY_ID']), $value);
         if (!$result->isSuccess()) {
             throw new \Exception('Update property list value. Property not save. ' . var_export($result->getErrorMessages(), true));
         }
     }
 }