Имя: Пароль:
1C
 
Штрихкод: уже имеет владельца! Как Можно проверить наличие Штрихкода у Владельца.
0 prorokk
 
14.06.09
22:52
Так записываю Штрих код...
       
       ШК = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
       ШК.Владелец = Справочники.Номенклатура.НайтиПоКоду(Элемент.Код);
       ШК.ЕдиницаИзмерения = Элемент.ЕдиницаХраненияОстатков;
       ШК.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
       ШК.Штрихкод = Строкапоставщика.Штрих;
       ШК.Качество = Справочники.Качество.Новый;
       ШК.Записать();



При Повторной Записи... Ругается

Штрихкод: 4605817123209 уже имеет владельца

Как Можно проверить наличие Штрихкода у Владельца... и Заменить его...?

Или если у Номенклатуры Есть Штрих код то пропустить Запись ШтрихКода.. И заверщить Процедуру.
1 ТелепатБот
 
гуру
14.06.09
22:52
2 prorokk
 
14.06.09
22:59
(1) Неа...
3 MishaSan
 
14.06.09
23:12
ШК.Записать(Истина);
4 prorokk
 
14.06.09
23:50
(3) Неа...
Штрихкод: 4605817123209 уже имеет владельца
5 prorokk
 
14.06.09
23:57
Варианты как победить.. Это разрешить неуникальные Штрих Коды
6 prorokk
 
15.06.09
00:02
Этот модуль и проверят на уникальность...


Перем мНеРазрешитьНеуникальныеШтрихкоды;

// Обработчик события "ПередЗаписью".
//
Процедура ПередЗаписью(Отказ, Замещение)

   Если ОбменДанными.Загрузка Тогда
       Возврат;
   КонецЕсли;

   Для Каждого ТекущаяЗапись Из ЭтотОбъект Цикл
       Если ТипЗнч(ТекущаяЗапись.Владелец) = Тип("СправочникСсылка.Номенклатура") И Не ЗначениеЗаполнено(ТекущаяЗапись.Качество) Тогда
           Сообщить("Для товара """ + СокрЛП(ТекущаяЗапись.Владелец) + """ со штрихкодом: " + ТекущаяЗапись.ШтрихКод + " не заполнено качество.");
           Отказ = Истина;
       КонецЕсли;
   КонецЦикла;

   Если мНеРазрешитьНеуникальныеШтрихкоды Тогда
       Для Каждого ТекущаяЗапись Из ЭтотОбъект Цикл
           Если ЗначениеЗаполнено(ТекущаяЗапись.ШтрихКод) Тогда
               Запрос = Новый Запрос("
               |ВЫБРАТЬ ПЕРВЫЕ 1
               |    РегШтрихкоды.Владелец КАК Владелец,
               |    РегШтрихкоды.ШтрихКод КАК Штрихкод
               |ИЗ
               |    РегистрСведений.Штрихкоды КАК РегШтрихкоды
               |ГДЕ
               |    РегШтрихкоды.ШтрихКод = &ШтрихКод
               |");

               Запрос.УстановитьПараметр("ШтрихКод", ТекущаяЗапись.ШтрихКод);

               РезультатЗапроса = Запрос.Выполнить();
               Если Не РезультатЗапроса.Пустой() Тогда
                   Выборка = РезультатЗапроса.Выбрать();
                   Выборка.Следующий();

                   Сообщить("Штрихкод: " + Выборка.ШтрихКод + " уже имеет владельца """ + СокрЛП(Выборка.Владелец) + """.");
                   Отказ = Истина;
               КонецЕсли;
           КонецЕсли;
       КонецЦикла;
   КонецЕсли;

КонецПроцедуры // ПередЗаписью()

мНеРазрешитьНеуникальныеШтрихкоды = Не Константы.РазрешитьНеуникальныеШтрихкоды.Получить();
7 prorokk
 
15.06.09
00:24
UP
8 prorokk
 
15.06.09
01:42
Должно работать... А не Хочет(((

       ЗаписьШК = Истина;
           РегСведШК = РегистрыСведений.Штрихкоды;
           ВыборкаРегСведШК = РегистрыСведений.Штрихкоды.Выбрать();
           Пока ВыборкаРегСведШК.Следующий() Цикл
               Если ВыборкаРегСведШК.Штрихкод = СтрокаПоставщика.ШтрихКод Тогда
                   ЗаписьШК = Ложь;
               КонецЕсли;
           КонецЦикла;
           ЗаписьВРегистрСвед = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
           ЗаписьВРегистрСвед.Владелец = Элемент.Ссылка;
           ЗаписьВРегистрСвед.ЕдиницаИзмерения = Элемент.ЕдиницаХраненияОстатков;
           ЗаписьВРегистрСвед.Штрихкод = Строкапоставщика.ШтрихКод;
           ЗаписьВРегистрСвед.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
           ЗаписьВРегистрСвед.Качество = Справочники.Качество.Новый;
           ЗаписьВРегистрСвед.Записать();
9 prorokk
 
15.06.09
01:45
Вот так Работает))))))))))))))!!!!!!!!!!!!!!! РЕСПЕКТ ВСЕМ))))))))))))))


           ЗаписьШК = Истина;
           РегСведШК = РегистрыСведений.Штрихкоды;
           ВыборкаРегСведШК = РегистрыСведений.Штрихкоды.Выбрать();
           Пока ВыборкаРегСведШК.Следующий() Цикл
               Если ВыборкаРегСведШК.Штрихкод = СтрокаПоставщика.ШтрихКод Тогда
                   ЗаписьШК = Ложь;
                   Возврат;
               КонецЕсли;
           КонецЦикла;
           ЗаписьВРегистрСвед = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
           ЗаписьВРегистрСвед.Владелец = Элемент.Ссылка;
           ЗаписьВРегистрСвед.ЕдиницаИзмерения = Элемент.ЕдиницаХраненияОстатков;
           ЗаписьВРегистрСвед.Штрихкод = Строкапоставщика.ШтрихКод;
           ЗаписьВРегистрСвед.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
           ЗаписьВРегистрСвед.Качество = Справочники.Качество.Новый;
           ЗаписьВРегистрСвед.Записать();
10 Бусидо
 
15.06.09
01:48
Сегодня день дебилов?
12 prorokk
 
15.06.09
02:09
(10) Судя по твое Анкете
Род занятий:    Каждое утро приводить волосы в порядок и правильно брить лоб
не только Сегодня)))
и.т.д....

Есть предложеия, критика? Рад выслушать))) Можешь написать Лучше??!! Так и напиши...

(11) что-то трудно... Утром подумаю)))
13 prorokk
 
15.06.09
02:11
(11) Не похоже что Это в эту тему написано...
14 H A D G E H O G s
 
15.06.09
02:24
Можно лучше - запросом.
16 prorokk
 
16.06.09
00:01
Буду Думать)))
17 prorokk
 
17.06.09
18:50
Подскажите)))
18 prorokk
 
17.06.09
22:25
Уважаемые Гуру... Подскажите пожалуйста...
Код в (9) Слишком медленный Обработка с ним работает на 40минут дольше над обработкой 10.000 позиций...(((( без нее за 8минут обрабатывает...))))  Как сделать запросом??? На сколько быстрее будет?
19 alxbzm
 
17.06.09
22:41
(18) если вкратце, то чтобы совсем было быстро, алгоритм такой:
1. Готовишь ТЗ с ШК поставщиков которые надо загрузить.
2. Делаешь запрос, в котором левое с ТЗ регистром сведений "Штрихкоды" по всем нужным полям ПЛЮС условие "Штрихкод Есть NULL".
3. В результате получаешь все записи в ТЗ, для которых нет ШК в твоей базе.
4. Ну а потом просто обход результатов запроса и просто запись ШК в базу данных без всяких проверок.

Работает намного быстрее чем простой обход ТЗ с проверкой каждой строчки на существование ШК в базе данных.
20 alxbzm
 
17.06.09
22:43
+(19): в п. 2 недописал: ЛЕВОЕ СОЕДИНЕНИЕ имелось ввиду.
21 prorokk
 
17.06.09
22:57
(19)(20) Большое спасибо))) Пойду изучать Запросы и Левое соединение )))
Алгоритм действий понятен))) По мере появления "кусков" кода буду публиковать)))