Имя: Пароль:
1C
1С v8
Не добавлять штрихкод, если присвоен
,
0 d_pinchuk
 
28.11.19
16:41
Доброго времени, помогите модернизировать, чтобы проверял наличие штрихкода и если присвоен, то пропускал.
И желательно с логированием в сообщениях:
ТабличноеПолеШК  - ТаблицаЗначений со списком номенклатуры

    Для каждого Строка из ТабличноеПолеШК Цикл
        
        новШк = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
        
        Объект = Строка.Номенклатура;
        новШк.Владелец         = Объект.Ссылка;
        новШк.ЕдиницаИзмерения = Объект.ЕдиницаХраненияОстатков;
        новШк.ТипШтрихкода     = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
        новШк.Качество         = Справочники.Качество.Новый;
        новШк.Штрихкод         = РаботаСТорговымОборудованием.СформироватьШтрихКод();
        
        новШк.Записать();
        
    КонецЦикла;
1 Михаил Козлов
 
28.11.19
16:45
Перед записью можно прочитать и, если считанная запись не пустая - записывать.
2 d_pinchuk
 
28.11.19
17:22
(1)     Для каждого Строка из ТабличноеПолеШК Цикл
        
        новШк = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
        
        Объект = Строка.Номенклатура;
        
        новШк.Владелец         = Объект.Ссылка;
        новШк.ЕдиницаИзмерения = Объект.ЕдиницаХраненияОстатков;
        новШк.ТипШтрихкода     = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
        новШк.Качество         = Справочники.Качество.Новый;
        новШк.Штрихкод         = РаботаСТорговымОборудованием.СформироватьШтрихКод();
        
        новШк.Прочитать();
        
        Если новШк.Выбран() Тогда
            Сообщить("Для номенклатуры " + Объект.Наименование + " уже присвоен штрихкод!");
            Продолжить;
        КонецЕсли;    
        новШк.Записать();
        
        Сообщить("Для номенклатуры " + Объект.Наименование + " присвоен штрихкод: " + новШк.Штрихкод);
        
    КонецЦикла;









{ВнешняяОбработка.СозданиеШКдляНоменклатуры.Форма.Форма.Форма(22)}: Ошибка при вызове метода контекста (Записать)
        новШк.Записать();
по причине:
Запись не верна! Значение поля "Владелец" не может быть пустым!: Штрихкоды: , , , , , , , 0 (Регистр сведений: Штрихкоды)
3 Галахад
 
гуру
28.11.19
17:30
Ну наверное, добавить
Если НЕ ЗначениеЗаполнено(Объект) Тогда
Продолжить;
КонецЕсли;
4 d_pinchuk
 
28.11.19
18:31
(3) Не совсем, дело в том что запись в менеджере очищается после метода Прочитать()
5 d_pinchuk
 
28.11.19
18:57
Все дело в том, что штрихкод все время уникален и читать бессмысленно, по логике вещей нужно делать так. Но почему-то по ссылке не хочет считывать..

    Для каждого Строка из ТабличноеПолеШК Цикл
        
        новШк = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
        
        Объект = Строка.Номенклатура;
        
        Если НЕ ЗначениеЗаполнено(Объект) Тогда
            Продолжить;
        КонецЕсли;
        
        новШк.Владелец = Объект.Наименование;
        новШк.Прочитать();
        
        Если новШк.Выбран() Тогда
            Сообщить("Для номенклатуры " + Объект.Наименование + " уже присвоен штрихкод!");
            Продолжить;
        КонецЕсли;    
        
        новШк.Владелец         = Объект.Ссылка;
        новШк.ЕдиницаИзмерения = Объект.ЕдиницаХраненияОстатков;
        новШк.ТипШтрихкода     = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
        новШк.Качество         = Справочники.Качество.Новый;        
        новШк.Штрихкод         = РаботаСТорговымОборудованием.СформироватьШтрихКод();
        
        новШк.Записать();
        
        Сообщить("Для номенклатуры " + Объект.Наименование + " присвоен штрихкод: " + новШк.Штрихкод);
        
    КонецЦикла;
6 d_pinchuk
 
28.11.19
18:59
Пардон

новШк.Владелец = Объект.Ссылка;

Вот..

Не считывает запись по ссылке, хотя их несколько. Ведь ссылка уникальна, в чем дело?
7 d_pinchuk
 
28.11.19
21:30
Т.к. может быть присвоено сразу несколько штрих-кодов решил читать набор записей.
В общем вот что в итоге получилось:

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

Что скажете?
8 mikecool
 
28.11.19
21:38
Если НаборЗаписей.Количество() = 0 Тогда добавляем
Иначе сообщаем и продолжаем
9 mikecool
 
28.11.19
21:39
обычно еще отбирать по типу ШК надо и иногда по единице измерения
10 d_pinchuk
 
28.11.19
21:59
(8)     Для каждого Строка из ТабличноеПолеШК Цикл // ТабличноеПолеШК - реквизит
        
        Ссылка = Строка.Номенклатура; // ссылка на номенклатуру
        
        // Обработка ошибочной ситуации.
        Если Ссылка.Пустая() Тогда
            Продолжить;
        КонецЕсли;
        
        // Проверим, назначен ли штрих-код.
        НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Владелец.Установить(Ссылка);
        НаборЗаписей.Прочитать();
        Если НаборЗаписей.Количество() = 0 Тогда
            
            // Если не назначен, добавим новый штрих-код.
            НовШк = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
            НовШк.Владелец         = Ссылка;
            НовШк.ТипШтрихкода     = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
            НовШк.ЕдиницаИзмерения = Ссылка.ЕдиницаХраненияОстатков;
            НовШк.Качество         = Справочники.Качество.Новый;        
            НовШк.Штрихкод         = РаботаСТорговымОборудованием.СформироватьШтрихКод();
            
            НовШк.Записать();
            
            Сообщить("Для номенклатуры " + Ссылка.Наименование + " назначен штрихкод: " + НовШк.Штрихкод);    
            
        Иначе
            // Уже назначен штрих-код, сообщаем.
            Сообщить("Для номенклатуры " + Ссылка.Наименование + " штрихкод уже назначен!");
            Продолжить;
            
        КонецЕсли;    
        
    КонецЦикла;
11 d_pinchuk
 
28.11.19
22:00
(9) Лично для себя делаю помощника, мне проверки наличия достаточно)
12 mikecool
 
28.11.19
22:37
(11) а мне все равно ))
13 d_pinchuk
 
28.11.19
22:48
(12) Ну в итоге то код нормальный получился?
Не слишком корявый?