Имя: Пароль:
1C
1С v8
РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
0 Popkorm
 
30.09.11
09:23
Подскажите что не так делаю..
Есть строки с одинаковыми наименование+штрихкод строки,я в условиях делаю отказ если нахожу в базе такой штрих код

 ШтрихНовый = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
         НомерПервойСтроки = 2;
       Для Row = НомерПервойСтроки По RowCount Цикл
           НомЕксель  = СокрЛП(ExcelЛист.Cells(Row,1).Text);
           ISBNЕксель = СтрЗаменить((ExcelЛист.Cells(Row,2).Text)," ","");
           Если ЗначениеЗаполнено(НомЕксель) Тогда
           //    Если Выборка.Номенклатура.Наименование <> НомЕксель Тогда
                  СтрНом = ТЗ.Найти(НомЕксель,"Номенклатура");
               Если СтрНом = Неопределено Тогда
                       СпрНовый = Справочники.Номенклатура.СоздатьЭлемент();
                       СпрНовый.Наименование = НомЕксель;
                       СпрНовый.НоменклатурнаяГруппа    = Справочники.НоменклатурныеГруппы.НайтиПоКоду("О0037314");
                       СпрНовый.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("796");
                       СпрНовый.ВидНоменклатуры         = Справочники.ВидыНоменклатуры.НайтиПоКоду("FKO000013");
                       СпрНовый.Записать();
                   Иначе    
                   СтрШтрих = ТЗ.Найти(ISBNЕксель,"Штрихкод");    
                   Если СтрШтрих= Неопределено Тогда
                       Запись= ШтрихНовый.Добавить();
                       Запись.Владелец     = Справочники.Номенклатура.НайтиПоНаименованию(НомЕксель);
                       Запись.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.НайтиПоКоду("FKO00000001");
                       Запись.Качество     = Справочники.Качество.НайтиПоНаименованию("Новый");
                       Запись.Штрихкод     = ISBNЕксель;
                   КонецЕсли;
               КонецЕсли;
               СтрШтрих = ТЗ.Найти(ISBNЕксель,"Штрихкод");    
               Если СтрШтрих= Неопределено Тогда
                   Запись= ШтрихНовый.Добавить();
                   Запись.Владелец     = Справочники.Номенклатура.НайтиПоНаименованию(НомЕксель);
                   Запись.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.НайтиПоКоду("FKO00000001");
                   Запись.Качество     = Справочники.Качество.НайтиПоНаименованию("Новый");
                   Запись.Штрихкод     = ISBNЕксель;
               КонецЕсли;
           КонецЕсли;
       КонецЦикла;
   //    ШтрихНовый.ОбменДанными.Загрузка = Истина;
       ШтрихНовый.Записать();


ошибка:
Штрихкод: 978-5-222-18823-1 уже имеет владельца "Самые..........".
Штрихкод: 978-5-222-18821-7 уже имеет владельца "Монстры.........".
Штрихкод: 978-5-222-18829-3 уже имеет владельца "Планета вирусов".
1 Maxus43
 
30.09.11
09:37
штрихкод 2 раза пишеш если СтрНом = Неопределено.
и шо такое ТЗ?
2 Maxus43
 
30.09.11
09:37
короче логику просто проверь в коде. в условиях заплутал имхо
3 Popkorm
 
30.09.11
09:48
(1)
   Запрос= Новый Запрос();
   Запрос.Текст =    "ВЫБРАТЬ
                     |    СпрНоменклатура.Код,
                     |    СпрНоменклатура.Наименование КАК Номенклатура,
                     |    ЕСТЬNULL(Штрихкоды.Штрихкод, 0) КАК Штрихкод,
                     |    Штрихкоды.ТипШтрихкода
                     |ИЗ
                     |    Справочник.Номенклатура КАК СпрНоменклатура
                     |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
                     |        ПО (Штрихкоды.ТипШтрихкода = &ISBN)
                     |            И СпрНоменклатура.Наименование = Штрихкоды.Владелец.Наименование
                     |ГДЕ
                     |    (НЕ СпрНоменклатура.ЭтоГруппа)
                     |    И (НЕ СпрНоменклатура.ПометкаУдаления)
                     |    И СпрНоменклатура.Ссылка В ИЕРАРХИИ(&Ном)"
   Запрос.УстановитьПараметр("ISBN",ISBN.Ссылка);
   Запрос.УстановитьПараметр("Ном",Ном.Ссылка);
   ТЗ    = Запрос.Выполнить().Выгрузить();
4 Popkorm
 
30.09.11
09:51
(1)Если СтрНом = Неопределено
тогда 1-й Штрих пропускаю и иду ко 2-му штриху...
Если СтрНом Определено то к 1-му штриху,2-й пропускаем
5 Maxus43
 
30.09.11
09:55
проверь в отладчике - ТЗ.Найти(ISBNЕксель,"Штрихкод");
типы проверь, может различаются. пробелы всякие СОКРЛП убирай
6 Popkorm
 
30.09.11
10:00
(5) если бы различались то: ТЗ.Найти(ISBNЕксель,"Штрихкод")= было бы Неопределено...
7 Maxus43
 
30.09.11
10:11
(6) отладчик всё скажет, точку останова с условием поставь на свои непроходящие штрихкоды
8 Maxus43
 
30.09.11
10:18
ISBN.Ссылка = ПланыВидовХарактеристик.ТипыШтрихкодов.НайтиПоКоду("FKO00000001") ?
9 Popkorm
 
30.09.11
10:20
(7)понял в чем проблема,при первом проходе я создаю Штрих,после чего мне надо её Записать,что бы во 2-й раз Штрих уже был в базе.Только не понятно теперь это ШтрихНовый = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей(); надо при каждом условии стовлять?!Вообщем щас гляну
10 Maxus43
 
30.09.11
10:22
кстати когда юзаеш ШтрихНовый = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
то после записи весь регистр будет очищен и записан новым набором
11 Popkorm
 
30.09.11
10:24
(10)млян точно,
12 Popkorm
 
30.09.11
10:32
(10)есть какие нибудь мысли?!
13 Maxus43
 
30.09.11
10:45
Менеджером записи можеш каждый новый штрих код записывать, или после РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
добавить Прочитать()
14 Popkorm
 
30.09.11
11:01
(13)вообщем через Менеджер запись происходит только по одной строке,
15 Maxus43
 
30.09.11
11:02
(14) я про это и писал, каждый штрихкод через менеджер писать, а не всё скопом
16 Popkorm
 
30.09.11
11:17
(15)Вот так не по одной строчки запись происходит :
       Для Row = НомерПервойСтроки По RowCount Цикл
           НомЕксель  = СокрЛП(ExcelЛист.Cells(Row,1).Text);
           ISBNЕксель = СтрЗаменить((ExcelЛист.Cells(Row,2).Text)," ","");
           Если ЗначениеЗаполнено(НомЕксель) Тогда
               СтрНом = ТЗ.Найти(НомЕксель,"Номенклатура");
               Если СтрНом = Неопределено Тогда
                   СпрНовый = Справочники.Номенклатура.СоздатьЭлемент();
                   СпрНовый.Наименование = НомЕксель;
                   СпрНовый.НоменклатурнаяГруппа    = Справочники.НоменклатурныеГруппы.НайтиПоКоду("О0037314");
                   СпрНовый.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("796");
                   СпрНовый.ВидНоменклатуры         = Справочники.ВидыНоменклатуры.НайтиПоКоду("FKO000013");
                   СпрНовый.Записать();
               Иначе    
                   СтрШтрих = ТЗ.Найти(ISBNЕксель,"Штрихкод");    
                   Если СтрШтрих= Неопределено Тогда
                       ШтрихНовый = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();    
                       //    Запись= ШтрихНовый.Добавить();
                       ШтрихНовый.Владелец     = Справочники.Номенклатура.НайтиПоНаименованию(НомЕксель);
                       ШтрихНовый.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.НайтиПоКоду("FKO00000001");
                       ШтрихНовый.Качество     = Справочники.Качество.НайтиПоНаименованию("Новый");
                       ШтрихНовый.Штрихкод     = ISBNЕксель;
                       ШтрихНовый.Записать();
                   КонецЕсли;
               КонецЕсли;
               СтрШтрих = ТЗ.Найти(ISBNЕксель,"Штрихкод");    
               Если СтрШтрих= Неопределено Тогда
                   ШтрихНовый = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
                   //    Запись= ШтрихНовый.Добавить();
                   ШтрихНовый.Владелец     = Справочники.Номенклатура.НайтиПоНаименованию(НомЕксель);
                   ШтрихНовый.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.НайтиПоКоду("FKO00000001");
                   ШтрихНовый.Качество     = Справочники.Качество.НайтиПоНаименованию("Новый");
                   ШтрихНовый.Штрихкод     = ISBNЕксель;
                   ШтрихНовый.Записать();    
               КонецЕсли;
           КонецЕсли;
       КонецЦикла;
17 Popkorm
 
30.09.11
11:19
(16)наврал...ошибка Штрихкод: 978-5-222-18821-7 уже имеет владельца "Монстры
18 Popkorm
 
30.09.11
11:23
(16)но запись в регистр происходит по одной записи,1-й Менеджер прорабатывает,2-й СтрШтрих = ТЗ.Найти(ISBNЕксель,"Штрихкод"); не находить в базе 1-й Менеджер и начинает записывать
19 hhhh
 
30.09.11
11:44
(18) так ты и в ТЗ добавляй.
20 Popkorm
 
30.09.11
11:54
(19)ТЗ это  ТЗ = Запрос.Выполнить().Выгрузить();
обновить запрос как то надо