Имя: Пароль:
1C
1С v8
уникальность
,
0 del12
 
28.02.12
11:50
как сделать чтобы артикул был уникальным?не повторялся?
1 Ненавижу 1С
 
гуру
28.02.12
11:51
1С это до сих пор не может, надо программировать
2 del12
 
28.02.12
11:51
это уже понял
3 Ненавижу 1С
 
гуру
28.02.12
11:53
проверяешь перед записью запросом наличие такого артикула
4 del12
 
28.02.12
11:53
Процедура ПередЗаписью(Отказ)
   
           
   Если ОбменДанными.Загрузка Тогда
       Возврат;
   КонецЕсли;

   Если Не ЭтоГруппа Тогда

       Если ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Услуга Тогда
           
           ИспользоватьУпаковки = Ложь;
           ВестиУчетПоГТД       = Ложь;
           ПодакцизныйТовар     = Ложь;
   //СтруктураПоискаДублей.Вставить("Артикул", "=") ;
           НаборУпаковок        = Справочники.НаборыУпаковок.ПустаяСсылка();
           Вес                  = 0;
           СкладскаяГруппа      = Справочники.СкладскиеГруппыНоменклатуры.ПустаяСсылка();
           Качество             = Перечисления.ГрадацииКачества.Новый;
       Иначе
           Если Не ИспользоватьУпаковки Тогда
               НаборУпаковок = Справочники.НаборыУпаковок.ПустаяСсылка();
           КонецЕсли;
           
           Если ЗначениеЗаполнено(НаборУпаковок)
               И НаборУпаковок <> Справочники.НаборыУпаковок.ИндивидуальныйДляНоменклатуры
               И ЕдиницаИзмерения <> НаборУпаковок.ЕдиницаИзмерения Тогда
               
               ЕдиницаИзмерения = НаборУпаковок.ЕдиницаИзмерения;
               
           КонецЕсли;
       КонецЕсли;
       
       ФормироватьРабочееНаименование =        Не (ДополнительныеСвойства.Свойство("РабочееНаименованиеСформировано"));
       ФормироватьНаименованиеДляПечати =        Не (ДополнительныеСвойства.Свойство("НаименованиеДляПечатиСформировано"));
       
       Если ФормироватьРабочееНаименование
           Или ФормироватьНаименованиеДляПечати Тогда
           
           СтруктураРеквизитов = Новый Структура;
           СтруктураРеквизитов.Вставить("ШаблонРабочегоНаименованияНоменклатуры");
           СтруктураРеквизитов.Вставить("ЗапретРедактированияРабочегоНаименованияНоменклатуры");
           СтруктураРеквизитов.Вставить("ШаблонНаименованияДляПечатиНоменклатуры");
           СтруктураРеквизитов.Вставить("ЗапретРедактированияНаименованияНоменклатурыДляПечати");
           
           РеквизитыОбъекта = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ВидНоменклатуры, СтруктураРеквизитов);
           
           Если ФормироватьРабочееНаименование
               И ЗначениеЗаполнено(РеквизитыОбъекта.ШаблонРабочегоНаименованияНоменклатуры)
               И (РеквизитыОбъекта.ЗапретРедактированияРабочегоНаименованияНоменклатуры
               Или Не ЗначениеЗаполнено(Наименование)) Тогда
               ШаблонНаименования = РеквизитыОбъекта.ШаблонРабочегоНаименованияНоменклатуры;
               Наименование = Справочники.ВидыНоменклатуры.СформироватьНаименованиеПоШаблону(ШаблонНаименования, ЭтотОбъект);
           КонецЕсли;
           
           Если ФормироватьНаименованиеДляПечати
               И ЗначениеЗаполнено(РеквизитыОбъекта.ШаблонНаименованияДляПечатиНоменклатуры)
               И (РеквизитыОбъекта.ЗапретРедактированияНаименованияНоменклатурыДляПечати
               Или Не ЗначениеЗаполнено(НаименованиеПолное)) Тогда
               ШаблонНаименованияДляПечати = РеквизитыОбъекта.ШаблонНаименованияДляПечатиНоменклатуры;
               НаименованиеПолное = Справочники.ВидыНоменклатуры.СформироватьНаименованиеПоШаблону(ШаблонНаименованияДляПечати, ЭтотОбъект);
           КонецЕсли;
           
       КонецЕсли;
       
       Если Не ЗначениеЗаполнено(Наименование) Тогда
           ТекстИсключения = НСтр("ru='Поле ""Рабочее наименование"" не заполнено'");
           ВызватьИсключение ТекстИсключения;
           Отказ = Истина;
       КонецЕсли;
       
       КонтролироватьРабочееНаименование = Константы.КонтролироватьУникальностьРабочегоНаименованияНоменклатурыИХарактеристик.Получить()
                                           И Не (ДополнительныеСвойства.Свойство("РабочееНаименованиеПроверено"));
   
           Если КонтролироватьРабочееНаименование
               И Не Отказ Тогда
               
               НаименованиеУникально = Справочники.Номенклатура.ПроверитьУникальностьРабочегоНаименования(ЭтотОбъект);
               Если Не НаименованиеУникально Тогда
                   ТекстИсключения = НСтр("ru='Значение поля ""Рабочее наименование"" не уникально'");
                   ВызватьИсключение ТекстИсключения;
                   Отказ = Истина;
               КонецЕсли;
       КонецЕсли;
       
   КонецЕсли;
   
   // Обработка смены пометки удаления.
   Если Не ЭтоНовый()
       И Не ЭтоГруппа Тогда

       Если ПометкаУдаления <> ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "ПометкаУдаления") Тогда
           Справочники.КлючиАналитикиУчетаНоменклатуры.УстановитьПометкуУдаления(Новый Структура("Номенклатура", Ссылка), ПометкаУдаления);
       КонецЕсли;

   КонецЕсли;
   КонецПроцедуры
5 Рэйв
 
28.02.12
11:54
(0)Переименуй шапку колонки код в "Артикул" и включи уникальность
6 del12
 
28.02.12
11:55
переименовать не прокатит.тк артикулы уже создано много,перенеслись с 7
7 Рэйв
 
28.02.12
11:56
(6)Если они уникальны до сих пор - обработкой присвой их коду каждого элемента и потом юзай уже код
8 del12
 
28.02.12
11:58
к сожал уже не уникальны
9 del12
 
28.02.12
11:58
как запрос написать?
10 FIXXXL
 
28.02.12
12:13
(9) почитай в СП про
НайтиПоРеквизиту(<ИмяРеквизита>, <ЗначениеРеквизита>, <Родитель>, <Владелец>)
11 del12
 
28.02.12
12:35
(
12 Jaffar
 
28.02.12
12:50
(8) так сначала эту проблему реши.
13 del12
 
02.03.12
09:38
СтруктураПоискаДублей.Вставить("Артикул", "=");
так не прокатит?