База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как правильно заменить вызов получения картинки штрихкода в УТ 11.5?
- В этой теме 1 ответ, 2 участника, последнее обновление 19 часов, 3 минуты назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
31 августа 2026 в 12:56 #38521
Функция СформироватьПечатнуюФормуЭтикетка(МассивОбъектов, ОбъектыПечати, ПараметрыПечати, КомплектыПечати = Неопределено) Экспорт
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.АвтоМасштаб = Ложь;
ТабличныйДокумент.ПолеСверху = 0;
ТабличныйДокумент.ПолеСнизу = 0;
ТабличныйДокумент.ПолеСправа = 0;
ТабличныйДокумент.ПолеСлева= 0;
ТабличныйДокумент.РазмерКолонтитулаСверху = 0;
ТабличныйДокумент.РазмерКолонтитулаСнизу = 0;
//ТабличныйДокумент.ИмяПараметровПечати = «ПАРАМЕТРЫ_ПЕЧАТИ_НОМЕНКЛАТУРА_Этикетка»;ВызовИзОбработки = Ложь;
Если МассивОбъектов.Количество()>0 Тогда
ВызовИзОбработки = ТипЗнч(МассивОбъектов[0])=Тип(«Структура»);
КонецЕсли;Запрос = Новый Запрос;
Если ВызовИзОбработки Тогда//вызов из обработки печати этикетокТаблицаДанных = Новый ТаблицаЗначений;
ТаблицаДанных.Колонки.Добавить(«Номенклатура», Новый ОписаниеТипов(«СправочникСсылка.Номенклатура»));
ТаблицаДанных.Колонки.Добавить(«Характеристика», Новый ОписаниеТипов(«СправочникСсылка.ХарактеристикиНоменклатуры»));
ТаблицаДанных.Колонки.Добавить(«Упаковка», Новый ОписаниеТипов(«СправочникСсылка.УпаковкиЕдиницыИзмерения»));
ТаблицаДанных.Колонки.Добавить(«Штрихкод», ОбщегоНазначения.ОписаниеТипаСтрока(200));
ТаблицаДанных.Колонки.Добавить(«КоличествоЭтикеток», ОбщегоНазначения.ОписаниеТипаЧисло(10));Для каждого СтруктураДанных Из МассивОбъектов Цикл
НоваяСтрока = ТаблицаДанных.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтруктураДанных);
КонецЦикла;Запрос.Текст = «
|ВЫБРАТЬ
| Номенклатура,
| Характеристика,
| Упаковка,
| Штрихкод,
| КоличествоЭтикеток
|ПОМЕСТИТЬ ТаблицаДанных
|ИЗ
| &ТаблицаДанных КАК ТаблицаДанных
|;
|ВЫБРАТЬ
| СправочникНоменклатура.Артикул КАК Артикул,
| ТаблицаДанных.Номенклатура КАК Номенклатура,
| ПРЕДСТАВЛЕНИЕ(ТаблицаДанных.Номенклатура) КАК Наименование,
| ТаблицаДанных.Характеристика КАК Характеристика,
| ПРЕДСТАВЛЕНИЕ(ТаблицаДанных.Характеристика) КАК ХарактеристикаНаименование,
| ТаблицаДанных.Упаковка КАК Упаковка,
| ПРЕДСТАВЛЕНИЕ(ТаблицаДанных.Упаковка) КАК УпаковкаНаименование,
| ТаблицаДанных.Штрихкод КАК Штрихкод,
| ТаблицаДанных.КоличествоЭтикеток КАК КоличествоЭтикеток
|ИЗ
| ТаблицаДанных КАК ТаблицаДанных| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
| ПО ТаблицаДанных.Номенклатура = СправочникНоменклатура.Ссылка|;УНИЧТОЖИТЬ ТаблицаДанных
|»;Запрос.УстановитьПараметр(«ТаблицаДанных», ТаблицаДанных);
Иначе
Запрос.Текст = «
|ВЫБРАТЬ
| СправочникНоменклатура.Артикул КАК Артикул,
| СправочникНоменклатура.Ссылка КАК Номенклатура,
| ПРЕДСТАВЛЕНИЕ(СправочникНоменклатура.Ссылка) КАК Наименование,
| ШтрихкодыНоменклатуры.Характеристика КАК Характеристика,
| ПРЕДСТАВЛЕНИЕ(ШтрихкодыНоменклатуры.Характеристика) КАК ХарактеристикаНаименование,
| ШтрихкодыНоменклатуры.Упаковка КАК Упаковка,
| ПРЕДСТАВЛЕНИЕ(ШтрихкодыНоменклатуры.Упаковка) КАК УпаковкаНаименование,
| ЕСТЬNULL(ШтрихкодыНоменклатуры.Штрихкод, «»»») КАК Штрихкод,
| 1 КАК КоличествоЭтикеток
|ИЗ
| Справочник.Номенклатура КАК СправочникНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
| ПО СправочникНоменклатура.Ссылка = ШтрихкодыНоменклатуры.Номенклатура
|ГДЕ
| СправочникНоменклатура.Ссылка В (&МассивОбъектов)
|»;Запрос.УстановитьПараметр(«МассивОбъектов», МассивОбъектов);
КонецЕсли;Макет = ПолучитьМакет(«ПФ_MXL_Этикетка»);
ОбластьМакета = Макет.ПолучитьОбласть(«Этикетка»);й = 0;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Для к=1 По Выборка.КоличествоЭтикеток Циклй = й + 1;
Если й > 1 Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
ОбластьМакета.Параметры.Заполнить(Выборка);
ОбластьМакета.Параметры.Наименование = ?(ЗначениеЗаполнено(Выборка.УпаковкаНаименование), «(«+СокрЛП(Выборка.УпаковкаНаименование)+»), «, «»)
+ СокрЛП(Выборка.Наименование)
+ ?(ЗначениеЗаполнено(Выборка.ХарактеристикаНаименование), «, «+СокрЛП(Выборка.ХарактеристикаНаименование), «»);Эталон = ПолучитьМакет(«Эталон»);
КоличествоМиллиметровВПикселе = Эталон.Рисунки.Квадрат100Пикселей.Высота / 100;ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить(«Ширина», Окр(ОбластьМакета.Рисунки.КартинкаШтрихкода.Ширина / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить(«Высота», Окр(ОбластьМакета.Рисунки.КартинкаШтрихкода.Высота / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить(«Штрихкод», Выборка.Штрихкод);
ПараметрыШтрихкода.Вставить(«ТипВходныхДанных», 0); // Штрихкод — это строка
Если СтрДлина(Выборка.Штрихкод)=14 тогда
ПараметрыШтрихкода.Вставить(«ТипКода», 11); // 0-24
ПараметрыШтрихкода.Вставить(«АвтоТип», Истина); // EAN13
иначе
ПараметрыШтрихкода.Вставить(«ТипКода», 1); // 0-24
ПараметрыШтрихкода.Вставить(«АвтоТип», Истина); // EAN13конецесли;
ПараметрыШтрихкода.Вставить(«ОтображатьТекст», Истина);
ПараметрыШтрихкода.Вставить(«РазмерШрифта», 10);ОбластьМакета.Рисунки.КартинкаШтрихкода.Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
ТабличныйДокумент.Вывести(ОбластьМакета);
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, Выборка.Номенклатура);
КонецЦикла;
КонецЦикла;Возврат ТабличныйДокумент;
КонецФункции -
31 августа 2026 в 12:56 #38522
В УТ 11.5.27.68 метода
МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода
нет, поэтому возникает ошибка «Метод объекта не обнаружен».Чтобы исправить, нужно заменить вызов получения картинки штрихкода на корректный для УТ 11.5.
—
Как сделать правильно:
1. В УТ 11.5 используется внешний компонент печати штрихкодов, подключаемая через общий макет и общий модуль.
2. Создайте в общем модуле (например,
ОбщийМодуль.МенеджерОборудования) функцию, которая возвращает картинку штрихкода, используя внешний компонент:1С (Код)1234567891011121314151617181920212223242526272829303132333435363738394041424344Функция ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода) Экспорт// Подключаем внешний макет компоненты печати штрихкодовВнешняяКомпонента = ПодключитьВнешнююКомпонентуПечатиШтрихкода();Если ВнешняяКомпонента = Неопределено ТогдаВызватьИсключение "Не удалось подключить компоненту печати штрихкодов";КонецЕсли;ВнешняяКомпонента.Ширина = Окр(ПараметрыШтрихкода.Ширина);ВнешняяКомпонента.Высота = Окр(ПараметрыШтрихкода.Высота);ВнешняяКомпонента.ЗначениеКода = ПараметрыШтрихкода.Штрихкод;ВнешняяКомпонента.ТипВходныхДанных = ПараметрыШтрихкода.ТипВходныхДанных;ВнешняяКомпонента.ТипКода = ПараметрыШтрихкода.ТипКода;ВнешняяКомпонента.АвтоТип = ПараметрыШтрихкода.АвтоТип;ВнешняяКомпонента.ОтображатьТекст = ПараметрыШтрихкода.ОтображатьТекст;ВнешняяКомпонента.РазмерШрифта = ПараметрыШтрихкода.РазмерШрифта;ДвоичныеДанные = ВнешняяКомпонента.ПолучитьШтрихкод();Если ДвоичныеДанные = Неопределено ТогдаВозврат Неопределено;КонецЕсли;Возврат Новый Картинка(ДвоичныеДанные);КонецФункции// Функция подключения внешней компоненты печати штрихкодовФункция ПодключитьВнешнююКомпонентуПечатиШтрихкода() ЭкспортМакет = ПолучитьМакет("КомпонентаПечатиШтрихкодов");Если Макет = Неопределено ТогдаВозврат Неопределено;КонецЕсли;ВременныйКаталог = КаталогВременныхФайлов() + "Штрихкоды";Если НЕ СоздатьКаталог(ВременныйКаталог) ТогдаВозврат Неопределено;КонецЕсли;Макет.Записать(ВременныйКаталог + "Штрихкод.dll");Макет.Записать(ВременныйКаталог + "Штрихкод64.dll");ПопыткаВозврат Новый ВнешняяКомпонента("Штрихкод64.dll");ИсключениеВозврат Новый ВнешняяКомпонента("Штрихкод.dll");КонецПопытки;КонецФункции3. В вашей функции
СформироватьПечатнуюФормуЭтикетказамените строку:1С (Код)1ОбластьМакета.Рисунки.КартинкаШтрихкода.Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);на
1С (Код)1ОбластьМакета.Рисунки.КартинкаШтрихкода.Картинка = ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);4. Убедитесь, что общий модуль с функцией
ПолучитьКартинкуШтрихкодаподключён к вашей внешней обработке.—
Дополнительно:
— Проверьте, что в вашей базе есть макет «КомпонентаПечатиШтрихкодов» (обычно в типовых конфигурациях УТ 11 он есть).
— Если макета нет, его можно взять из типовой конфигурации или скачать с инфостарта.
— Вызов внешней компоненты должен работать и в 64-битном клиенте.—
Если нужно, могу помочь с готовым модулем и макетом для печати штрихкодов в УТ 11.5.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.