При проведении Ошибка "Поле объекта не обнаружено (Штрихкод)"
1С:Управление нашей фирмой 3.0
Оптовая торговля, дистрибуция, логистика
Windows
Россия
Программист
Системный администратор
Добрый вечер, Имеется самописный документ, для печати этикетки на паллет, уже работает давно. На данный момент необходимо вести учет каждого паллета, так как постоянно недостачи, попросили ввести уникальный штрихкод на каждый паллет, чтобы с производства принимали на склад по штрихкоду. В документ было добавлено поле штрихкода и кнопка генерирования штрихкода и есть вывод на печать. Соответственно, чтобы его приняли на складе, нужно чтобы номер штрихкода на этапе печати этикетки добавлялся автоматически в регистр сведений. Сделали это через подчинение регистру, изначально все работало, но потом начала выпадать ошибка, что поле объекта не не обнаружено. Можете подсказать, пожалуйста, из-за чего выпадает эта ошибка.
Платформа УНФ 3.0
Код из конструктора движений:
Код в форме документа
Платформа УНФ 3.0
Код из конструктора движений:
Код из конструктора движений]Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
// регистр ШтрихкодыНоменклатуры
Движения.ШтрихкодыНоменклатуры.Записывать = Истина;
Движение = Движения.ШтрихкодыНоменклатуры.Добавить();
Движение.Штрихкод = Штрихкод;
Движение.Номенклатура = Номенклатура;
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
ПоказатьКод в форме документа
Код на генерацию штрихкода]#Область ОбработчикиСобытийФормы
// Процедура - обработчик события ОбработкаПроверкиЗаполненияНаСервере.
//
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
Запрос = РегистрыСведений.ШтрихкодыНоменклатуры.НовыйЗапросШтрихкоды(Объект);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() // Штрихкод уже записан в БД
И Объект.ИсходныйКлючЗаписи.Штрихкод <> Объект.Штрихкод Тогда
ОписаниеОшибки = НСтр("ru='Такой штрихкод уже назначен для номенклатуры %Номенклатура%'");
ОписаниеОшибки = СтрЗаменить(ОписаниеОшибки, "%Номенклатура%", """" + Выборка.НоменклатураПредставление + """"
+ ?(ЗначениеЗаполнено(Выборка.Характеристика), " " + НСтр("ru='с характеристикой'") + " """
+ Выборка.ХарактеристикаПредставление + """", "") + ?(ЗначениеЗаполнено(Выборка.Партия), " """ + НСтр(
"ru='с партией'") + " " + Выборка.ПартияПредставление + """", ""));
ОбщегоНазначения.СообщитьПользователю(ОписаниеОшибки,, "Объект.Штрихкод",, Отказ);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ПерезаписатьЗначениеШтрихКодаВНоменклатуре = Объект.ИсходныйКлючЗаписи.Штрихкод = Объект.Номенклатура.ШтрихКод;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
ПараметрыОповещения = Новый Структура;
ПараметрыОповещения.Вставить("Номенклатура", Объект.Номенклатура);
ПараметрыОповещения.Вставить("ШтрихКод", Объект.ШтрихКод);
//ПараметрыОповещения.Вставить("ПерезаписатьЗначениеШтрихКодаВНоменклатуре", ПерезаписатьЗначениеШтрихКодаВНоменклатуре);
ПараметрыОповещения.Вставить("ШтрихКодУдален", Ложь);
Оповестить("ОбъектШтрихКода", ПараметрыОповещения);
Элементы.ФормаУдалитьЗапись.Доступность = Истина;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
// Процедура обработчик команды НовыйШтрихкод.
//
&НаКлиенте
Процедура НовыйШтрихкод(Команда)
Если Не ЗначениеЗаполнено(Объект.Номенклатура) Тогда
СтрокаСообщения = НСтр("ru = 'Штрихкод не сгенерирован. Предварительно выберите номенклатуру.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(СтрокаСообщения);
Возврат
КонецЕсли;
Объект.Штрихкод = СформироватьШтрихкодEAN13();
КонецПроцедуры
&НаКлиенте
Процедура УдалитьЗапись(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("УдалитьЗаписьНаКлиенте", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, НСтр("ru = 'Удалить ""Штрихкоды номенклатуры"" ?'"), РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ПечатьЭтикетки(Команда)
Если Не ЗначениеЗаполнено(Объект.Штрихкод) Тогда
Возврат;
КонецЕсли;
ТабДок = ТабличныйДокументСШтрихКодом();
ТабДок.Показать();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура УдалитьЗаписьНаКлиенте(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
УдалитьЗаписьНаСервере();
ПараметрыОповещения = Новый Структура;
ПараметрыОповещения.Вставить("Номенклатура", Объект.Номенклатура);
ПараметрыОповещения.Вставить("ШтрихКод", Объект.ШтрихКод);
ПараметрыОповещения.Вставить("ПерезаписатьЗначениеШтрихКодаВНоменклатуре", Ложь);
ПараметрыОповещения.Вставить("ШтрихКодУдален", Истина);
Оповестить("ОбъектШтрихКода", ПараметрыОповещения);
ЭтаФорма.Закрыть();
КонецПроцедуры
&НаСервере
Процедура УдалитьЗаписьНаСервере()
НаборЗаписей = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Номенклатура.Установить(Объект.Номенклатура);
НаборЗаписей.Отбор.Штрихкод.Установить(Объект.Штрихкод);
НаборЗаписей.Отбор.Партия.Установить(Объект.Партия);
НаборЗаписей.Отбор.ЕдиницаИзмерения.Установить(Объект.ЕдиницаИзмерения);
НаборЗаписей.Отбор.Характеристика.Установить(Объект.Характеристика);
НаборЗаписей.Записать();
КонецПроцедуры
// ПодключаемоеОборудование
&НаКлиенте
Функция ПолученыШтрихкоды(ДанныеШтрихкодов)
Модифицированность = Истина;
Если ДанныеШтрихкодов.Количество() > 0 Тогда
Объект.Штрихкод = ДанныеШтрихкодов[ДанныеШтрихкодов.Количество() - 1].Штрихкод;
КонецЕсли;
Возврат Истина;
КонецФункции // ПолученыШтрихкоды()
// Конец ПодключаемоеОборудование
// Формирует штрихкод EAN13.
//
&НаСервереБезКонтекста
Функция СформироватьШтрихкодEAN13()
Возврат РегистрыСведений.ШтрихкодыНоменклатуры.СформироватьШтрихкодEAN13();
КонецФункции // СформироватьШтрихкодEAN13()
&НаСервере
Функция ТабличныйДокументСШтрихКодом()
Результат = Новый ТабличныйДокумент;
ПараметрыШтрихкода = ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода();
ПараметрыШтрихкода.Ширина = 200;
ПараметрыШтрихкода.Высота = 100;
ПараметрыШтрихкода.УровеньКоррекцииQR = 0;
ПараметрыШтрихкода.Штрихкод = Объект.Штрихкод;
ПараметрыШтрихкода.ТипКода = 1;
ПараметрыШтрихкода.ОтображатьТекст = Истина;
ПараметрыШтрихкода.РазмерШрифта = 11;
ПараметрыШтрихкода.УголПоворота = 0;
ИзображениеШтрихкода = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода);
Макет = Документы.Банка_I_82_500.ПолучитьМакет("Тест");
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
Результат.Вывести(ОбластьЗаголовок);
Контакты = Макет.ПолучитьОбласть("Контакты");
Результат.Вывести(Контакты);
Шапка = Макет.ПолучитьОбласть("Шапка");
Шапка.Параметры.Дата = Объект.Дата;
Шапка.Параметры.Сортировщик1 = Объект.Сортировщик1;
Шапка.Параметры.Сортировщик2 = Объект.Сортировщик2;
Шапка.Параметры.Смена = ПараметрыСеанса.ТекущийПользователь.Смена;
Шапка.Параметры.ОТК = ПараметрыСеанса.ТекущийПользователь.ОТК;
Результат.Вывести(Шапка);
Сноска = Макет.ПолучитьОбласть ("Сноска");
Сноска.Параметры.НомерПаллета = Объект.НомерПаллета;
Результат.Вывести(Сноска);
ОбластьШК = Макет.ПолучитьОбласть("Штрихкод");
НовыйРисунок = ОбластьШК.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
НовыйРисунок.Картинка = ИзображениеШтрихкода.Картинка;
НовыйРисунок.Верх = 0;
НовыйРисунок.Лево = 0;
НовыйРисунок.Ширина = 40;
НовыйРисунок.Высота = 20;
Результат.Вывести(ОбластьШК);
Возврат Результат;
КонецФункции
#КонецОбласти
ПоказатьПрикрепленные файлы:
По теме из базы знаний
- Рассылка актов сверки
- Пример переноса справочников, документов и движений через Эксель и "Конвертацию данных 2" из оптовой учетной системы 1С 7.7 Комплексной 4.2 и розничной учетной системы Рарус Торговый комплекс -> в 1С 8.3 ЕРП 2.4 (расширение и дополнительные реквизиты)
- ЕГАИС от А до Я
- Обзор полезных методов БСП 3.1.4. Часть 2
- Результаты ревью кода 1500+ решений каталога Инфостарт: наиболее частые ошибки разработчиков в коде
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
если все работало, а потом "вдруг" перестало
то как люди с аналитическим складом ума мы понимаем, что так не бывает
а значит либо это ошибка железа, и вам надо почистить кэш, протестить базу на целостность и т.п.
либо вы нам что то недоговариваете
П.С. Ошибка возникает в модуле обмена данными, вы нам приводите куски кода из самописного документа, на что надеетесь непонятно
то как люди с аналитическим складом ума мы понимаем, что так не бывает
а значит либо это ошибка железа, и вам надо почистить кэш, протестить базу на целостность и т.п.
либо вы нам что то недоговариваете
П.С. Ошибка возникает в модуле обмена данными, вы нам приводите куски кода из самописного документа, на что надеетесь непонятно
(3) Ну получилось как. Все работало, потом решили изменить форму документа, создали на всякий случай еще один, а потом когда удалили его, стала выпадать ошибка. Возможно, мы что-то и изменили, но что непонятно. Все кода уже вдоль и поперек проверили. Даже новую базу пробовали создать, все равно выпадает ошибка. Поэтому и пишем сюда, та как сами уже не можем понять в чем может быть причина.
Скрин приложили на каком этапе в обмене данных выпала ошибка, а самописный скинули на всякий случай, может там где-то не состыковка.
Ошибка выпадает на этой строчке:
Запрос.УстановитьПараметр("Значение", Источник.Отбор.Штрихкод.Значение);
Модуль обмена данными
Запрос.УстановитьПараметр("Значение", Источник.Отбор.Штрихкод.Значение);
Скрин приложили на каком этапе в обмене данных выпала ошибка, а самописный скинули на всякий случай, может там где-то не состыковка.
Ошибка выпадает на этой строчке:
Запрос.УстановитьПараметр("Значение", Источник.Отбор.Штрихкод.Значение);
Модуль обмена данными
Процедура ЗарегистрироватьИзмененияРегистраСведений(Источник, Отказ, Замещение) Экспорт
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьОбменСПодключаемымОборудованиемOffline") Тогда
Возврат;
КонецЕсли;
ТипИсточника = ТипЗнч(Источник);
Если ТипИсточника = Тип("РегистрСведенийНаборЗаписей.ШтрихкодыНоменклатуры") Тогда
Запрос = Новый Запрос(
"ВЫБРАТЬ
| КодыТоваровPLUНаОборудовании.ПравилоОбмена КАК ПравилоОбмена,
| КодыТоваровPLUНаОборудовании.КодТовараPLU КАК Код,
| ПодключаемоеОборудование.УзелИнформационнойБазы КАК УзелИнформационнойБазы
|ИЗ
| РегистрСведений.КодыТоваровPLUНаОборудовании КАК КодыТоваровPLUНаОборудовании
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КодыТоваровSKU КАК КодыТоваровSKU
| ПО КодыТоваровPLUНаОборудовании.КодТовараSKU = КодыТоваровSKU.SKU
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование
| ПО КодыТоваровPLUНаОборудовании.ПравилоОбмена = ПодключаемоеОборудование.ПравилоОбмена
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
| ПО (КодыТоваровSKU.Номенклатура = ШтрихкодыНоменклатуры.Номенклатура)
| И (КодыТоваровSKU.Характеристика = ШтрихкодыНоменклатуры.Характеристика)
| И (КодыТоваровSKU.Партия = ШтрихкодыНоменклатуры.Партия)
| И (КодыТоваровSKU.ЕдиницаИзмерения = ШтрихкодыНоменклатуры.ЕдиницаИзмерения)
|ГДЕ
| ПодключаемоеОборудование.УзелИнформационнойБазы <> ЗНАЧЕНИЕ(ПланОбмена.ОбменСПодключаемымОборудованиемOffline.ПустаяСсылка)
| И ШтрихкодыНоменклатуры.Штрихкод = &Значение
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| КодыТоваровPLUНаОборудовании.ПравилоОбмена,
| КодыТоваровPLUНаОборудовании.КодТовараPLU,
| ПодключаемоеОборудование.УзелИнформационнойБазы
|ИЗ
| РегистрСведений.КодыТоваровPLUНаОборудовании КАК КодыТоваровPLUНаОборудовании
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КодыТоваровSKU КАК КодыТоваровSKU
| ПО КодыТоваровPLUНаОборудовании.КодТовараSKU = КодыТоваровSKU.SKU
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОфлайнОборудование КАК ПодключаемоеОборудование
| ПО КодыТоваровPLUНаОборудовании.ПравилоОбмена = ПодключаемоеОборудование.ПравилоОбмена
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
| ПО (КодыТоваровSKU.Номенклатура = ШтрихкодыНоменклатуры.Номенклатура)
| И (КодыТоваровSKU.Характеристика = ШтрихкодыНоменклатуры.Характеристика)
| И (КодыТоваровSKU.Партия = ШтрихкодыНоменклатуры.Партия)
| И (КодыТоваровSKU.ЕдиницаИзмерения = ШтрихкодыНоменклатуры.ЕдиницаИзмерения)
|ГДЕ
| ПодключаемоеОборудование.УзелИнформационнойБазы <> ЗНАЧЕНИЕ(ПланОбмена.ОбменСПодключаемымОборудованиемOffline.ПустаяСсылка)
| И ШтрихкодыНоменклатуры.Штрихкод = &Значение");
ПоказатьЗапрос.УстановитьПараметр("Значение", Источник.Отбор.Штрихкод.Значение);
ИначеЕсли ТипИсточника = Тип("РегистрСведенийНаборЗаписей.ЦеныНоменклатуры") Тогда
Запрос = Новый Запрос(
"ВЫБРАТЬ
| КодыТоваровPLUНаОборудовании.ПравилоОбмена КАК ПравилоОбмена,
| КодыТоваровPLUНаОборудовании.КодТовараPLU КАК Код,
| ПодключаемоеОборудование.УзелИнформационнойБазы КАК УзелИнформационнойБазы
|ИЗ
| РегистрСведений.КодыТоваровPLUНаОборудовании КАК КодыТоваровPLUНаОборудовании
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование
| ПО КодыТоваровPLUНаОборудовании.ПравилоОбмена = ПодключаемоеОборудование.ПравилоОбмена
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КодыТоваровSKU КАК КодыТоваровSKU
| ПО КодыТоваровPLUНаОборудовании.КодТовараSKU = КодыТоваровSKU.SKU
|ГДЕ
| ПодключаемоеОборудование.УзелИнформационнойБазы <> ЗНАЧЕНИЕ(ПланОбмена.ОбменСПодключаемымОборудованиемOffline.ПустаяСсылка)
| И КодыТоваровSKU.Номенклатура = &Значение
| И КодыТоваровPLUНаОборудовании.ПравилоОбмена.ВидЦеныНоменклатуры = &ВидЦен
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| КодыТоваровPLUНаОборудовании.ПравилоОбмена,
| КодыТоваровPLUНаОборудовании.КодТовараPLU,
| ПодключаемоеОборудование.УзелИнформационнойБазы
|ИЗ
| РегистрСведений.КодыТоваровPLUНаОборудовании КАК КодыТоваровPLUНаОборудовании
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОфлайнОборудование КАК ПодключаемоеОборудование
| ПО КодыТоваровPLUНаОборудовании.ПравилоОбмена = ПодключаемоеОборудование.ПравилоОбмена
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КодыТоваровSKU КАК КодыТоваровSKU
| ПО КодыТоваровPLUНаОборудовании.КодТовараSKU = КодыТоваровSKU.SKU
|ГДЕ
| ПодключаемоеОборудование.УзелИнформационнойБазы <> ЗНАЧЕНИЕ(ПланОбмена.ОбменСПодключаемымОборудованиемOffline.ПустаяСсылка)
| И КодыТоваровSKU.Номенклатура = &Значение
| И КодыТоваровPLUНаОборудовании.ПравилоОбмена.ВидЦеныНоменклатуры = &ВидЦен");
Запрос.УстановитьПараметр("Значение", Источник.Отбор.Номенклатура.Значение);
Запрос.УстановитьПараметр("ВидЦен", Источник.Отбор.ВидЦен.Значение);
Иначе
Возврат;
КонецЕсли;
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Набор = РегистрыСведений.КодыТоваровPLUНаОборудовании.СоздатьНаборЗаписей();
Пока Выборка.Следующий() Цикл
Набор.Отбор.ПравилоОбмена.Значение = Выборка.ПравилоОбмена;
Набор.Отбор.ПравилоОбмена.Использование = Истина;
Набор.Отбор.КодТовараPLU.Значение = Выборка.Код;
Набор.Отбор.КодТовараPLU.Использование = Истина;
ПланыОбмена.ЗарегистрироватьИзменения(Выборка.УзелИнформационнойБазы, Набор);
КонецЦикла;
КонецПроцедуры
Показать
(4)
Или менять его, если он не может разобраться.
создали на всякий случай еще один, а потом когда удалили его, стала выпадать ошибка
До отвращения надоевший вопрос: кэш чистили?
самописный скинули на всякий случай
Если проблема с самописным документом, надо трясти самописателя.
Или менять его, если он не может разобраться.
Сами разобрались, сделали регистр снова независимым и сделали запись через менеджер. Теперь ошибок нет и реализовано то, что требовалось- запись в регистр сведений штрихкодов на этапе печати этикетки.
Код на запись в регистр
Код на запись в регистр
Процедура ПриЗаписи (ПараметрыЗаписи)
ШтрихкодыНоменклатурыМенеджерЗаписи = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
ШтрихкодыНоменклатурыМенеджерЗаписи.Номенклатура = Номенклатура;
ШтрихкодыНоменклатурыМенеджерЗаписи.Штрихкод = Штрихкод;
ШтрихкодыНоменклатурыМенеджерЗаписи.Записать();
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот