Доброго дня ребят!сразу сделаю оговорку я самоучка на стадии развития!))
задачей стоит сделать этикетку на товар с некоторым описанием,штрих кодом и картинкой!
я смотрел много разных обработок,по отдельности все это находил!все вместе нет! решил соместить все сам!
Для начала сделал макет с одной Строкой где в строке было и картинка и все данные! в принципе работало норм!но если картинка не была привязана к номенклатуре то вылетало с ошибкой,ругалось что нет картинки!
я малость доработал по одному из рабочих образцов и макет и код получилось в общем вот так(смотри макет ниже)
Сам доработанный код стал выглядеть вот так

```1c
    Функция ПечатьЦенника() Экспорт

    Если НЕ ЗначениеЗаполнено(Организация) Тогда
    Предупреждение("Не выбрана организация!");
    Возврат Неопределено;
    КонецЕсли;

    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Ценник";

    //Макет = ПолучитьМакет("Ценник");
    СписокМакетов=новый СписокЗначений;
    СписокМакетов.Добавить("ЦенникМаленький","Маленький");
    СписокМакетов.Добавить("ЦенникБольшой","Большой");
    СписокМакетов.Добавить("ЦенникНаБутылку","ЦенникНаБутылку");
    СписокМакетов.Добавить("ЦенникБольшойСШтрихкодом","Большой с штрихкодом");

    ЕстьМакет=СписокМакетов.ВыбратьЭлемент("Выберите формат ценника",ЕстьМакет);
    Макет=ПолучитьМакет(ЕстьМакет.Значение);

    Для Каждого Элем Из Товары Цикл

    Изображение = Элем.Номенклатура.ОсновноеИзображение.Хранилище.Получить();

    Если Изображение = Неопределено Тогда
    СтрокаМакета = "Строка1";
    Иначе
    СтрокаМакета = "Строка";
    КонецЕсли;

    ОбластьЦенника = Макет.ПолучитьОбласть(СтрокаМакета +"|Столбец");
    ОбластьЭскиза = Макет.ПолучитьОбласть(СтрокаМакета +"|Эскиз");

    Если Не Изображение = Неопределено Тогда
    ОбластьЭскиза.Рисунки["Изображение"].Картинка = Изображение;
    КонецЕсли;

    ТекСтолбец = 0;
    ТекСтрока = 0;

    Для Каждого СтрокаТаблицы Из Товары Цикл
    Если СтрокаТаблицы.Печать Тогда
    Для Тмп = 1 По СтрокаТаблицы.Количество Цикл
    ОбластьЦенника.Параметры.Заполнить(СтрокаТаблицы);
    ОбластьЦенника.Параметры.НоменклатураНаименование = СтрокаТаблицы.Номенклатура.НаименованиеПолное;
    ОбластьЦенника.Параметры.Комментарий = СтрокаТаблицы.Номенклатура.Комментарий;
    //ОбластьЦенника.Параметры.Организация = Организация;
    ОбластьЦенника.Параметры.ПринадлежностьКТипу = СтрокаТаблицы.Номенклатура.ПринадлежностьКТипу;
    ОбластьЦенника.Параметры.ДецимальныйНомер = СтрокаТаблицы.Номенклатура.ДецимальныйНомер;

    //Если Макет = "ЦенникБольшойСШтрихкодом" Тогда
    Если ЕстьМакет.Значение = "ЦенникБольшойСШтрихкодом" Тогда

    Попытка
    КомпонентШК = Новый COMОбъект("V8.Barcod.1");
    ОбластьЦенника.Рисунки.Штрихкод.Объект.ТипКода = КомпонентШК.ТипКода;
    ОбластьЦенника.Рисунки.Штрихкод.Объект.Сообщение = "4600490615416";
    Исключение
    Сообщить("Компонента 1С:Печать штрих-кодов не установлена на данном компьютере!");
    Возврат ";
    КонецПопытки;

    Запрос = Новый Запрос("
    |ВЫБРАТЬ
    | РегШтрихкоды.Владелец КАК Владелец,
    | РегШтрихкоды.ШтрихКод КАК Штрихкод
    |ИЗ
    | РегистрСведений.Штрихкоды КАК РегШтрихкоды
    |ГДЕ
    | РегШтрихкоды.Владелец = &Владелец
    |");

    Запрос.УстановитьПараметр("Владелец", Строкатаблицы.Номенклатура);
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    Выборка.следующий();

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

    КомпонентШК.Сообщение = Выборка.ШтрихКод;

    ОбластьЦенника.Рисунки.Штрихкод.Объект.ТипКода = КомпонентШК.ТипКода;
    ОбластьЦенника.Рисунки.Штрихкод.Объект.Сообщение = КомпонентШК.Сообщение;
    ОбластьЦенника.Рисунки.Штрихкод.Объект.ОтображатьТекст = КомпонентШК.ОтображатьТекст;

    КонецЕсли;

    Если ТекСтолбец = 0 Тогда
    ТабДокумент.Вывести(ОбластьЦенника);
    Иначе
    ТабДокумент.Присоединить(ОбластьЭскиза);
    ТабДокумент.Присоединить(ОбластьЦенника);

    КонецЕсли;

    ТекСтолбец = ТекСтолбец + 1;

    Если ЕстьМакет.Значение = "ЦенникМаленький" Тогда
    Если ТекСтолбец = 5 Тогда
    ТекСтрока = ТекСтрока + 1;
    ТекСтолбец = 0;
    КонецЕсли;
    Иначе
    Если ТекСтолбец = 4 Тогда
    ТекСтрока = ТекСтрока + 1;
    ТекСтолбец = 0;
    КонецЕсли;
    КонецЕсли;

    Если ЕстьМакет.Значение = "ЦенникМаленький" Тогда
    Если ТекСтрока = 8 Тогда
    ТекСтрока = 0;
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    Иначе
    Если ТекСтрока = 7 Тогда
    ТекСтрока = 0;
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    ТабДокумент.ТолькоПросмотр = Истина;

    Возврат ТабДокумент;

    КонецФункции
```

Тут и начались проблемы
1. Стало выходить по две этикетки к одному рисунку(пример см ниже скрин)
    пытался найти где именно это происходит в силу своей неопытности не смог....
2. Если картинки нет у номенклатуры он не начал выводить этикетку без картинки,а начал ругаться вообще на что то новое,плюс ко всему компонента 1с печать штрих кода еще с какго то перепуга вылезла(пример тоже ниже)

Ребят помогите пожалуйста разобраться где я допустил ошибки и как исправить?
конфа Управление производственным предприятием, редакция 1.3 (1.3.111.1)
формы обычные
---
как-то так, если разъедется уже в отладчике смотреть надо

```1c
    ТекСтолбец = 0; // начало с нулевого столбца (карточки)

    Для Каждого СтрокаТаблицы Из Товары Цикл

    Изображение = СтрокаТаблицы.Номенклатура.ОсновноеИзображение.Хранилище.Получить();

    Если Изображение = Неопределено Тогда
    СтрокаМакета = "Строка1";
    Иначе
    СтрокаМакета = "Строка";
    КонецЕсли;

    ОбластьЦенника = Макет.ПолучитьОбласть(СтрокаМакета +"|Столбец");
    ОбластьЭскиза = Макет.ПолучитьОбласть(СтрокаМакета +"|Эскиз");

    Если Не Изображение = Неопределено Тогда
    ОбластьЭскиза.Рисунки["Изображение"].Картинка = Изображение;
    КонецЕсли;

    ТекСтолбец = ТекСтолбец + 1; // для каждого обрабатываемого СтрокаТаблицы добавляем единичку

    Если ТекСтолбец < 4 Тогда
    ТабДокумент.Присоединить(ОбластьЭскиза); // пока обрабатываемых меньше 4, т.е. 1-2-3 секции присоединяются справа, самая первая добавится в самое начало листа
    Иначе
    ТабДокумент.Вывести(ОбластьЭскиза); // как только появился 4 элемент для вывода секцию добавляем снизу
    ТекСтолбец = 0; // и обнуляем опять число начала столбцов, чтобы последующие секции к добавленной снизу, присоединялись справа
    КонецЕсли;

    Если СтрокаТаблицы.Печать Тогда // дальше без изменений
```
---
.
---
в общем вот макет с которым я работаю
---
а зачем цикл в цикле?

```1c
    Для Каждого Элем Из Товары Цикл
    Для Каждого СтрокаТаблицы Из Товары Цикл
```

и вот здесь не очень понятно,что хотите получить

```1c
    Если ТекСтолбец = 0 Тогда
    ТабДокумент.Вывести(ОбластьЦенника); // выводится секция
    Иначе
    ТабДокумент.Присоединить(ОбластьЭскиза);
    ТабДокумент.Присоединить(ОбластьЦенника); // опять таже секция, только присоединяется

    КонецЕсли;
```

вообще отладчик, карандаш в руки, пару товаров к печати и поехали записывать какая секция определилась и что в таб.документ вывелось, в конце будет на листике понятная картина где косяк
---
а зачем цикл в цикле?

Да я исправил этот момент уже убрал внутренний цикл!результат по одному вопросу улучшился,т.е. повторения ушли!но
1.Получилась каша какая то и поля съузились и разъехались (ниже скрин)
2. С номенклатурой у которых нет изображения вылазиет все таже ошибка!!!

и вот здесь не очень понятно,что хотите получить
 с этим я сам малость не понял что это за пляски с бубном..
---
а это как раз результат того самого непонятного кода с выводом и присоединением областей
и я бы еще вот эту часть проверил

```1c
    Для Тмп = 1 По СтрокаТаблицы.Количество Цикл
```

что делает этот цикл?
заполняет параметры области
а внутри этого цикла что?
а внутри вы области выводите и присоединяете

а зачем?
будет у вас в СтрокаТаблицы.Количество больше 1 и все - несколько раз одно и тоже и выведется\присоединится, что и наблюдаете
---
я попробывал закоментировать строки, в общем результат улучшился!
 но там где нет картинки пишет всю туже ошибку!
где картинки есть вот результат скрин ниже и код который получился,можете подсказать как сделать что бы на листе в длинну три карточки были остальные переносились на след строку?

```1c
    Функция ПечатьЦенника() Экспорт

    Если НЕ ЗначениеЗаполнено(Организация) Тогда
    Предупреждение("Не выбрана организация!");
    Возврат Неопределено;
    КонецЕсли;

    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Ценник";

    //Макет = ПолучитьМакет("Ценник");
    СписокМакетов=новый СписокЗначений;
    СписокМакетов.Добавить("ЦенникМаленький","Маленький");
    СписокМакетов.Добавить("ЦенникБольшой","Большой");
    СписокМакетов.Добавить("ЦенникНаБутылку","ЦенникНаБутылку");
    СписокМакетов.Добавить("ЦенникБольшойСШтрихкодом","Большой с штрихкодом");

    ЕстьМакет=СписокМакетов.ВыбратьЭлемент("Выберите формат ценника",ЕстьМакет);
    Макет=ПолучитьМакет(ЕстьМакет.Значение);

    Для Каждого СтрокаТаблицы Из Товары Цикл

    Изображение = СтрокаТаблицы.Номенклатура.ОсновноеИзображение.Хранилище.Получить();

    Если Изображение = Неопределено Тогда
    СтрокаМакета = "Строка1";
    Иначе
    СтрокаМакета = "Строка";
    КонецЕсли;

    ОбластьЦенника = Макет.ПолучитьОбласть(СтрокаМакета +"|Столбец");
    ОбластьЭскиза = Макет.ПолучитьОбласть(СтрокаМакета +"|Эскиз");

    Если Не Изображение = Неопределено Тогда
    ОбластьЭскиза.Рисунки["Изображение"].Картинка = Изображение;
    КонецЕсли;
    ТабДокумент.Присоединить(ОбластьЭскиза);

    ТекСтолбец = 0;
    ТекСтрока = 0;

    Если СтрокаТаблицы.Печать Тогда
    //Для Тмп = 1 По СтрокаТаблицы.Количество Цикл
    ОбластьЦенника.Параметры.Заполнить(СтрокаТаблицы);
    ОбластьЦенника.Параметры.НоменклатураНаименование = СтрокаТаблицы.Номенклатура.НаименованиеПолное;
    ОбластьЦенника.Параметры.Комментарий = СтрокаТаблицы.Номенклатура.Комментарий;
    //ОбластьЦенника.Параметры.Организация = Организация;
    ОбластьЦенника.Параметры.ПринадлежностьКТипу = СтрокаТаблицы.Номенклатура.ПринадлежностьКТипу;
    ОбластьЦенника.Параметры.ДецимальныйНомер = СтрокаТаблицы.Номенклатура.ДецимальныйНомер;

    //Если Макет = "ЦенникБольшойСШтрихкодом" Тогда
    Если ЕстьМакет.Значение = "ЦенникБольшойСШтрихкодом" Тогда

    Попытка
    КомпонентШК = Новый COMОбъект("V8.Barcod.1");
    ОбластьЦенника.Рисунки.Штрихкод.Объект.ТипКода = КомпонентШК.ТипКода;
    ОбластьЦенника.Рисунки.Штрихкод.Объект.Сообщение = "4600490615416";
    Исключение
    Сообщить("Компонента 1С:Печать штрих-кодов не установлена на данном компьютере!");
    Возврат ";
    КонецПопытки;

    Запрос = Новый Запрос("
    |ВЫБРАТЬ
    | РегШтрихкоды.Владелец КАК Владелец,
    | РегШтрихкоды.ШтрихКод КАК Штрихкод
    |ИЗ
    | РегистрСведений.Штрихкоды КАК РегШтрихкоды
    |ГДЕ
    | РегШтрихкоды.Владелец = &Владелец
    |");

    Запрос.УстановитьПараметр("Владелец", Строкатаблицы.Номенклатура);
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    Выборка.следующий();

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

    КомпонентШК.Сообщение = Выборка.ШтрихКод;

    ОбластьЦенника.Рисунки.Штрихкод.Объект.ТипКода = КомпонентШК.ТипКода;
    ОбластьЦенника.Рисунки.Штрихкод.Объект.Сообщение = КомпонентШК.Сообщение;
    ОбластьЦенника.Рисунки.Штрихкод.Объект.ОтображатьТекст = КомпонентШК.ОтображатьТекст;

    КонецЕсли;

    ТабДокумент.Присоединить(ОбластьЦенника);

    //Если ТекСтолбец = 0 Тогда
    // ТабДокумент.Вывести(ОбластьЦенника);
    //Иначе
    // ТабДокумент.Присоединить(ОбластьЦенника);
    //
    //КонецЕсли;

    //ТекСтолбец = ТекСтолбец + 1;

    //Если ЕстьМакет.Значение = "ЦенникМаленький" Тогда
    // Если ТекСтолбец = 5 Тогда
    // ТекСтрока = ТекСтрока + 1;
    // ТекСтолбец = 0;
    // КонецЕсли;
    //Иначе
    // Если ТекСтолбец = 4 Тогда
    // ТекСтрока = ТекСтрока + 1;
    // ТекСтолбец = 0;
    // КонецЕсли;
    //КонецЕсли;
    //
    //Если ЕстьМакет.Значение = "ЦенникМаленький" Тогда
    // Если ТекСтрока = 8 Тогда
    // ТекСтрока = 0;
    // ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    // КонецЕсли;
    //Иначе
    // Если ТекСтрока = 7 Тогда
    // ТекСтрока = 0;
    // ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    // КонецЕсли;
    //КонецЕсли;
    //КонецЦикла;
    КонецЕсли;

    КонецЦикла;
    ТабДокумент.ТолькоПросмотр = Истина;

    Возврат ТабДокумент;

    КонецФункции // ПечатьЦенника()
```
---
как-то так, если разъедется уже в отладчике смотреть надо

```1c
    ТекСтолбец = 0; // начало с нулевого столбца (карточки)

    Для Каждого СтрокаТаблицы Из Товары Цикл

    Изображение = СтрокаТаблицы.Номенклатура.ОсновноеИзображение.Хранилище.Получить();

    Если Изображение = Неопределено Тогда
    СтрокаМакета = "Строка1";
    Иначе
    СтрокаМакета = "Строка";
    КонецЕсли;

    ОбластьЦенника = Макет.ПолучитьОбласть(СтрокаМакета +"|Столбец");
    ОбластьЭскиза = Макет.ПолучитьОбласть(СтрокаМакета +"|Эскиз");

    Если Не Изображение = Неопределено Тогда
    ОбластьЭскиза.Рисунки["Изображение"].Картинка = Изображение;
    КонецЕсли;

    ТекСтолбец = ТекСтолбец + 1; // для каждого обрабатываемого СтрокаТаблицы добавляем единичку

    Если ТекСтолбец < 4 Тогда
    ТабДокумент.Присоединить(ОбластьЭскиза); // пока обрабатываемых меньше 4, т.е. 1-2-3 секции присоединяются справа, самая первая добавится в самое начало листа
    Иначе
    ТабДокумент.Вывести(ОбластьЭскиза); // как только появился 4 элемент для вывода секцию добавляем снизу
    ТекСтолбец = 0; // и обнуляем опять число начала столбцов, чтобы последующие секции к добавленной снизу, присоединялись справа
    КонецЕсли;

    Если СтрокаТаблицы.Печать Тогда // дальше без изменений
```
---
отлично спасибо!)но опять же работает с той номенклатурой у которой есть картинка если картинки нет то вот такая лажа как на скрине
---
куда перекидывает видно по ошибке
в отладчике надо смотреть, откуда именно туда отправляет из печати и просто по условию наличия картинки вывести вызов в исключение

к сожалению у меня такой конфы нет, чтобы поглядеть и подсказать