|
Не добавлять штрихкод, если присвоен | ☑ | ||
---|---|---|---|---|
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) Ну в итоге то код нормальный получился?
Не слишком корявый? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |