Делаю обработку по выгрузке в excel.
Все хорошо,но _ШК не могу получить. Подскажите кто нибудь пожалуйста...

```1c
    Процедура ВыгрузитьШаблон(ВхСтрокаКонтрагент)

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ВариантыИсполнения.Владелец КАК Номенклатура,
    | ВариантыИсполнения.Ссылка КАК ВИ
    |ИЗ
    | Справочник.ВариантыИсполнения КАК ВариантыИсполнения
    |ГДЕ
    | ВариантыИсполнения.ПометкаУдаления = ЛОЖЬ
    | И ВариантыИсполнения.Владелец.ПометкаУдаления = ЛОЖЬ
    | И ВариантыИсполнения.Владелец В ИЕРАРХИИ(&Номенклатура)
    | И ВариантыИсполнения.Активность
    | И ВариантыИсполнения.Владелец.Активность
    | И ВариантыИсполнения.ТипВИ = ЗНАЧЕНИЕ(Перечисление.ТипыВариантовИсполнения.Стандартный)
    |
    |СГРУППИРОВАТЬ ПО
    | ВариантыИсполнения.Владелец,
    | ВариантыИсполнения.Ссылка
    |ИТОГИ ПО
    | Номенклатура ИЕРАРХИЯ
    |АВТОУПОРЯДОЧИВАНИЕ";
    Запрос.УстановитьПараметр("Номенклатура", НоменклатураИерархия.ВыгрузитьЗначения());

    ВыборкаДетали = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    ТабДок = Новый ТабличныйДокумент;

    Макет = ПолучитьМакет("Макет");
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьСтрока = Макет.ПолучитьОбласть("Тело");
    струк=Новый Структура;
    струк.Вставить("Код",ВхСтрокаКонтрагент.Контрагент.Код);
    струк.Вставить("Наименование",ВхСтрокаКонтрагент.Контрагент.Наименование);
    струк.Вставить("Адрес",ВхСтрокаКонтрагент.Контрагент.Адрес);
    ОбластьШапка.Параметры.Заполнить(струк);
    ТабДок.Вывести(ОбластьШапка);

    ТабДок.НачатьАвтогруппировкуСтрок();

    РекурсивныйВыводСтрок(ТабДок,ОбластьСтрока,ВыборкаДетали);
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.Показать();
    //ТабДок.Записать("C:\Users\User\Desktop\1.xls", ТипФайлаТабличногоДокумента.XLS);

    КонецПроцедуры
    Процедура РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаДетали)

    Пока ВыборкаДетали.Следующий() Цикл

    ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, ВыборкаДетали);
    ТабДок.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень());
    ВыборкаРезультат = ВыборкаДетали.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаРезультат);

    КонецЦикла;
    Если НЕ глПустоеЗначение(ВыборкаДетали.ВИ) Тогда
    _Дополнительно = Новый Структура;
    _Дополнительно.Вставить("ВариантИсполнения",ВыборкаДетали.ВИ);
    _Дополнительно.Вставить("ЕдИзм",ВыборкаДетали.Номенклатура.БазоваяЕдИзм);
    _ШК = глСформироватьВнутреннийШтрихкод(ВыборкаДетали.Номенклатура,_Дополнительно);
    _Дополнительно.Вставить("_ШК",_ШК);
    ОбластьСтрока.Параметры.Заполнить(_Дополнительно);

    Пока ВыборкаДетали.Следующий() Цикл
    _Дополнительно = Новый Структура;
    _Дополнительно.Вставить("ВариантИсполнения",ВыборкаДетали.ВИ);
    _Дополнительно.Вставить("ЕдИзм",ВыборкаДетали.Номенклатура.БазоваяЕдИзм);
    _ШК = глСформироватьВнутреннийШтрихкод(ВыборкаДетали.Номенклатура,_Дополнительно);
    _Дополнительно.Вставить("_ШК",_ШК);
    ОбластьСтрока.Параметры.Заполнить(_Дополнительно);

    КонецЦикла;
    КонецЕсли;
    КонецПроцедуры
```
---
Конечно, мы же строку не выводим, ыхыхы

```1c
    Процедура РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаДетали)

    Пока ВыборкаДетали.Следующий() Цикл

    ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, ВыборкаДетали);
    ТабДок.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень());
    ВыборкаРезультат = ВыборкаДетали.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    Если ВыборкаДетали.Номенклатура.ЭтоГруппа Тогда
    РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаРезультат);
    Иначе
    Пока ВыборкаРезультат.Следующий() Цикл
    Если НЕ глПустоеЗначение(ВыборкаРезультат.ВИ) Тогда
    _Дополнительно = Новый Структура;
    _Дополнительно.Вставить("ВариантИсполнения",ВыборкаРезультат.ВИ);
    _Дополнительно.Вставить("ЕдИзм",ВыборкаРезультат.Номенклатура.БазоваяЕдИзм);
    _ШК = глСформироватьВнутреннийШтрихкод(ВыборкаРезультат.Номенклатура,_Дополнительно);
    _Дополнительно.Вставить("_ШК",_ШК);
    ОбластьСтрока.Параметры.Заполнить(_Дополнительно);
    ТабДок.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень() + 1);
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
```
---
Потому что получение штрихкода почему-то после цикла обхода выборки.

upd: а, не разобрался сперва. Отладчик что говорит?
---
без разницы в какой последовательности,НЕОПРЕДЕЛЕНО
---
Ну вот смотри. Ты вызываешь вывод рекурсивно, чтобы вывести иерархию номенклатуры и для самого нижнего уровня - штрих-коды, так? В процедуре ты в любом случае проходишь циклом ВСЮ входящую выборку и потом смотришь - есть ли в уже пройденной выборке ВИ. Ясен пень, там будет неопределено.Тебе нужно ветвить процедуру в зависимости от того группой является номенклатура или нет.
---
```1c
    Процедура ВыгрузитьШаблон(ВхСтрокаКонтрагент)

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ВариантыИсполнения.Владелец КАК Номенклатура,
    | ВариантыИсполнения.Ссылка КАК ВИ
    |ИЗ
    | Справочник.ВариантыИсполнения КАК ВариантыИсполнения
    |ГДЕ
    | ВариантыИсполнения.ПометкаУдаления = ЛОЖЬ
    | И ВариантыИсполнения.Владелец.ПометкаУдаления = ЛОЖЬ
    | И ВариантыИсполнения.Владелец В ИЕРАРХИИ(&Номенклатура)
    | И ВариантыИсполнения.Активность
    | И ВариантыИсполнения.Владелец.Активность
    | И ВариантыИсполнения.ТипВИ = ЗНАЧЕНИЕ(Перечисление.ТипыВариантовИсполнения.Стандартный)
    |
    |СГРУППИРОВАТЬ ПО
    | ВариантыИсполнения.Владелец,
    | ВариантыИсполнения.Ссылка
    |ИТОГИ ПО
    | Номенклатура ИЕРАРХИЯ
    |АВТОУПОРЯДОЧИВАНИЕ";
    Запрос.УстановитьПараметр("Номенклатура", НоменклатураИерархия.ВыгрузитьЗначения());

    ВыборкаДетали = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    ТабДок = Новый ТабличныйДокумент;

    Макет = ПолучитьМакет("Макет");
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьСтрока = Макет.ПолучитьОбласть("Тело");
    струк=Новый Структура;
    струк.Вставить("Код",ВхСтрокаКонтрагент.Контрагент.Код);
    струк.Вставить("Наименование",ВхСтрокаКонтрагент.Контрагент.Наименование);
    струк.Вставить("Адрес",ВхСтрокаКонтрагент.Контрагент.Адрес);
    ОбластьШапка.Параметры.Заполнить(струк);
    ТабДок.Вывести(ОбластьШапка);

    ТабДок.НачатьАвтогруппировкуСтрок();

    РекурсивныйВыводСтрок(ТабДок,ОбластьСтрока,ВыборкаДетали);
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.Показать();
    //ТабДок.Записать("C:\Users\User\Desktop\1.xls", ТипФайлаТабличногоДокумента.XLS);

    КонецПроцедуры
    Процедура РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаДетали)

    Если ВыборкаДетали.Номенклатура.ЭтоГруппа Тогда
    ВыборкаРезультат = ВыборкаДетали.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Если ВыборкаРезультат.Следущий() Тогда

    ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, ВыборкаДетали);
    ТабДок.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень());
    // ВыборкаРезультат = ВыборкаДетали.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаРезультат);
    КонецЕсли;
    Иначе
    Если глПустоеЗначение(ВыборкаДетали.ВИ) Тогда
    ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, ВыборкаДетали);
    ТабДок.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень());
    // ВыборкаРезультат = ВыборкаДетали.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаРезультат);
    Иначе
    _Дополнительно = Новый Структура;
    _Дополнительно.Вставить("ВариантИсполнения",ВыборкаДетали.ВИ);
    _Дополнительно.Вставить("ЕдИзм",ВыборкаДетали.Номенклатура.БазоваяЕдИзм);
    _ШК = глСформироватьВнутреннийШтрихкод(ВыборкаДетали.Номенклатура,_Дополнительно);
    _Дополнительно.Вставить("_ШК",_ШК);
    ОбластьСтрока.Параметры.Заполнить(_Дополнительно);

    Пока ВыборкаДетали.Следующий() Цикл
    _Дополнительно = Новый Структура;
    _Дополнительно.Вставить("ВариантИсполнения",ВыборкаДетали.ВИ);
    _Дополнительно.Вставить("ЕдИзм",ВыборкаДетали.Номенклатура.БазоваяЕдИзм);
    _ШК = глСформироватьВнутреннийШтрихкод(ВыборкаДетали.Номенклатура,_Дополнительно);
    _Дополнительно.Вставить("_ШК",_ШК);
    ОбластьСтрока.Параметры.Заполнить(_Дополнительно);

    КонецЦикла;
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
```
 так?
только тут ошибка Значение не является значением объектного типа (ЭтоГруппа)
  Если ВыборкаДетали.Номенклатура.ЭтоГруппа Тогда
---
блин, да убери ты группы отовсюду пока
суть поймешь, а потом будешь группировать
---
неправильно выразился) Ветвить не саму процедуру, а вызывать ее и подавать на вход ВыборкаДетали.Выбрать() если в текущей выборке номенклатура - группа. Если номенклатура - не группа - тогда уже в этой же процедуре продолжать тогда ВыборкаДетали.Выбрать() обрабатывать здесь же и выводить штрихкоды.

```1c
    Пока ВыборкаДетали.Следующий() Цикл

    ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, ВыборкаДетали);
    ТабДок.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень());
    ВыборкаРезультат = ВыборкаДетали.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Если ВыборкаДетали.Номенклатура.ЭтоГруппа Тогда
    РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаРезультат);
    Иначе
    Пока ВыборкаРезультат.Следующий() Цикл
    _Дополнительно = Новый Структура;
    _Дополнительно.Вставить("ВариантИсполнения",ВыборкаРезультат.ВИ);
    _Дополнительно.Вставить("ЕдИзм",ВыборкаРезультат.Номенклатура.БазоваяЕдИзм);
    _ШК = глСформироватьВнутреннийШтрихкод(ВыборкаРезультат.Номенклатура,_Дополнительно);
    _Дополнительно.Вставить("_ШК",_ШК);
    ОбластьСтрока.Параметры.Заполнить(_Дополнительно);
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
```

Вот так должно взлететь, думаю.
---
Значение не является значением объектного типа (Код)
  _НовыйШтрихкод = _НовыйШтрихкод + ?(ВхВариантИсполнения = Неопределено, "000000", Формат(ВхВариантИсполнения.Код, "ЧЦ=6; ЧВН=; ЧГ=0"));
---
на пустое значение забыл я проверку воткнуть.
---
так?
или туплю
Процедура РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаДетали)

 Пока ВыборкаДетали.Следующий() Цикл

        ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, ВыборкаДетали);
        ТабДок.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень());
        ВыборкаРезультат = ВыборкаДетали.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

  Если ВыборкаДетали.Номенклатура.ЭтоГруппа Тогда
            РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаРезультат);
  Иначе

             Пока ВыборкаРезультат.Следующий() Цикл
                     _Дополнительно = Новый Структура;
                _Дополнительно.Вставить("ВариантИсполнения",ВыборкаДетали.ВИ);
                _Дополнительно.Вставить("ЕдИзм",ВыборкаДетали.Номенклатура.БазоваяЕдИзм);
                _ШК = глСформироватьВнутреннийШтрихкод(ВыборкаДетали.Номенклатура,_Дополнительно);
                  _Дополнительно.Вставить("_ШК",_ШК);
                 ОбластьСтрока.Параметры.Заполнить(_Дополнительно);
    КонецЦикла;

   КонецЕсли;
   Если НЕ глПустоеЗначение(ВыборкаДетали.ВИ) Тогда
_Дополнительно = Новый Структура;
_Дополнительно.Вставить("ВариантИсполнения",ВыборкаДетали.ВИ);
_Дополнительно.Вставить("ЕдИзм",ВыборкаДетали.Номенклатура.БазоваяЕдИзм);
_ШК = глСформироватьВнутреннийШтрихкод(ВыборкаДетали.Номенклатура,_Дополнительно);
_Дополнительно.Вставить("_ШК",_ШК);
ОбластьСтрока.Параметры.Заполнить(_Дополнительно);
иначе
  Пока ВыборкаРезультат.Следующий() Цикл
                     _Дополнительно = Новый Структура;
                _Дополнительно.Вставить("ВариантИсполнения",ВыборкаДетали.ВИ);
                _Дополнительно.Вставить("ЕдИзм",ВыборкаДетали.Номенклатура.БазоваяЕдИзм);
                _ШК = глСформироватьВнутреннийШтрихкод(ВыборкаДетали.Номенклатура,_Дополнительно);
                  _Дополнительно.Вставить("_ШК",_ШК);
                 ОбластьСтрока.Параметры.Заполнить(_Дополнительно);
    КонецЦикла;

КонецЕсли;
КонецЦикла;
КонецПроцедуры
---
```1c
    Пока ВыборкаДетали.Следующий() Цикл

    ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, ВыборкаДетали);
    ТабДок.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень());
    ВыборкаРезультат = ВыборкаДетали.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Если ВыборкаДетали.Номенклатура.ЭтоГруппа Тогда
    РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаРезультат);
    Иначе
    Пока ВыборкаРезультат.Следующий() Цикл
    Если НЕ глПустоеЗначение(ВыборкаРезультат.ВИ) Тогда
    _Дополнительно = Новый Структура;
    _Дополнительно.Вставить("ВариантИсполнения",ВыборкаРезультат.ВИ);
    _Дополнительно.Вставить("ЕдИзм",ВыборкаРезультат.Номенклатура.БазоваяЕдИзм);
    _ШК = глСформироватьВнутреннийШтрихкод(ВыборкаРезультат.Номенклатура,_Дополнительно);
    _Дополнительно.Вставить("_ШК",_ШК);
    ОбластьСтрока.Параметры.Заполнить(_Дополнительно);
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
```
---
так даже вариант исполнения не выводит
---
ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, ВыборкаДетали);
        ТабДок.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень());
        ВыборкаРезультат = ВыборкаДетали.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаРезультат);
 Если ВыборкаДетали.Номенклатура.ЭтоГруппа Тогда

Сделала так ВИ вышел,но шк нет
---
Так, что-то я сам уже туплю. Щас.
_ШК-то возвращается?
---
сделала ВИ везде,но все равно ВИ не выводится,зато шк появился
---
вот так сейчас

```1c
    Процедура РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаДетали)

    Пока ВыборкаДетали.Следующий() Цикл

    ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, ВыборкаДетали);
    ТабДок.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень());
    ВыборкаРезультат = ВыборкаДетали.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    Если ВыборкаДетали.Номенклатура.ЭтоГруппа Тогда
    РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаРезультат);
    Иначе
    Пока ВыборкаРезультат.Следующий() Цикл
    Если НЕ глПустоеЗначение(ВыборкаРезультат.ВИ) Тогда
    _Дополнительно = Новый Структура;
    _Дополнительно.Вставить("ВИ",ВыборкаРезультат.ВИ);
    _Дополнительно.Вставить("ЕдИзм",ВыборкаРезультат.Номенклатура.БазоваяЕдИзм);
    _ШК = глСформироватьВнутреннийШтрихкод(ВыборкаРезультат.Номенклатура,_Дополнительно);
    _Дополнительно.Вставить("_ШК",_ШК);
    ОбластьСтрока.Параметры.Заполнить(_Дополнительно);
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
```
---
процедуру глСформироватьВнутреннийШтрихкод покажи.
---
```1c
    Процедура ВывестиСтроку(ВхВыборка,Итератор,ВхЛист,колво)

    // Если ВхВыборка.Номенклатура.ЭтоГруппа Тогда

    // ВхЛист.Cells(Итератор,2).Value = Строка(Итератор);
    // ВхЛист.Cells(Итератор,3).Value = Строка(СокрЛП(ВхВыборка.Номенклатура.Код));
    // ВхЛист.Cells(Итератор,4).Value = Строка(СокрЛП(ВхВыборка.Номенклатура.Наименование));
    // ВхЛист.Cells(Итератор,5).Value = ";
    // ВхЛист.Cells(Итератор,6).Value = ";
    // ВхЛист.Cells(Итератор,2).Font.Bold = 1;
    // ВхЛист.Cells(Итератор,3).Font.Bold = 1;
    // ВхЛист.Cells(Итератор,4).Font.Bold = 1;
    // ВхЛист.Cells(Итератор,5).Font.Bold = 1;
    // ВхЛист.Cells(Итератор,6).Font.Bold = 1;
    // Итератор = Итератор + 1;
    // ВыборкаНоменклатура = ВхВыборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    // Если ВыборкаНоменклатура.Следующий() Тогда
    // ВывестиСтроку(ВыборкаНоменклатура,Итератор,ВхЛист,колво);
    // КонецЕсли;
    //

    // Иначе
    //
    // Если глПустоеЗначение(ВхВыборка.ВИ) Тогда
    //
    // ВыборкаНоменклатура = ВхВыборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    // Если ВыборкаНоменклатура.Следующий() Тогда
    // ВывестиСтроку(ВыборкаНоменклатура,Итератор,ВхЛист,колво);
    // КонецЕсли;
    //
    // Иначе
    //
    // _Дополнительно = Новый Структура;
    // _Дополнительно.Вставить("ВариантИсполнения",ВхВыборка.ВИ);
    // _Дополнительно.Вставить("ЕдИзм",ВхВыборка.Номенклатура.БазоваяЕдИзм);
    // _ШК = глСформироватьВнутреннийШтрихкод(ВхВыборка.Номенклатура,_Дополнительно);
    //
    // ВхЛист.Cells(Итератор,2).Value = Итератор;
    // ВхЛист.Cells(Итератор,3).Value = _ШК;
    // ВхЛист.Cells(Итератор,4).Value = Строка(СокрЛП(ВхВыборка.Номенклатура.Наименование));
    // ВхЛист.Cells(Итератор,5).Value = Строка(СокрЛП(ВхВыборка.ВИ.Наименование));
    // ВхЛист.Cells(Итератор,6).Value = ";
    // Итератор = Итератор + 1;
    //
    // Пока ВхВыборка.Следующий() Цикл
    //
    // _Дополнительно = Новый Структура;
    // _Дополнительно.Вставить("ВариантИсполнения",ВхВыборка.ВИ);
    // _Дополнительно.Вставить("ЕдИзм",ВхВыборка.Номенклатура.БазоваяЕдИзм);
    // _ШК = глСформироватьВнутреннийШтрихкод(ВхВыборка.Номенклатура,_Дополнительно);
    //
    // ВхЛист.Cells(Итератор,2).Value = Итератор;
    // ВхЛист.Cells(Итератор,3).Value = _ШК;
    // ВхЛист.Cells(Итератор,4).Value = Строка(СокрЛП(ВхВыборка.Номенклатура.Наименование));
    // ВхЛист.Cells(Итератор,5).Value = Строка(СокрЛП(ВхВыборка.ВИ.Наименование));
    // ВхЛист.Cells(Итератор,6).Value = ";
    // Итератор = Итератор + 1;
    //
    // КонецЦикла;
    //
    // КонецЕсли;
    // КонецЕсли;
    //
    // КонецПроцедуры
```

у меня было вот таки все работало
---
Ну я же не просил показать как было) Покажи глСформироватьВнутреннийШтрихкод.
---
```1c
    Функция глСформироватьВнутреннийШтрихкод(ВхВладелец, ВхДополнительно = Неопределено) Экспорт

    Если ВхДополнительно = Неопределено Тогда

    ВхВариантИсполнения = Неопределено;
    ВхЕдИзм = Неопределено;
    Если ЕстьДоступ.РСУ_СерийныйУчет() Тогда // РСУ.СерийныйУчет
    ВхСерия = Неопределено;
    КонецЕсли;

    ИначеЕсли ТипЗнч(ВхДополнительно) = Тип("Структура") Тогда

    ВхДополнительно.Свойство("ВариантИсполнения", ВхВариантИсполнения);
    ВхДополнительно.Свойство("ЕдИзм", ВхЕдИзм);
    Если ЕстьДоступ.РСУ_СерийныйУчет() Тогда // РСУ.СерийныйУчет
    ВхДополнительно.Свойство("Серия", ВхСерия);
    КонецЕсли;

    Иначе

    ВызватьИсключение("глСформироватьВнутреннийШтрихкод(): Неподдерживаемый тип параметра ВхДополнительно - <" + ТипЗнч(ВхДополнительно) + ">");

    КонецЕсли;

    Если ТипЗнч(ВхВладелец) = Тип("СправочникСсылка.Номенклатура") Тогда // префикс 20

    _НовыйШтрихкод = "20" + Формат(ВхВладелец.Код, "ЧЦ=9; ЧВН=; ЧГ=0");
    _НовыйШтрихкод = _НовыйШтрихкод + ?(ВхВариантИсполнения = Неопределено, "000000", Формат(ВхВариантИсполнения.Код, "ЧЦ=6; ЧВН=; ЧГ=0"));
    _НовыйШтрихкод = _НовыйШтрихкод + ?(ВхЕдИзм = Неопределено, Формат(ВхВладелец.БазоваяЕдИзм.Код, "ЧЦ=1"), Формат(ВхЕдИзм.Код, "ЧЦ=1"));

    ИначеЕсли ТипЗнч(ВхВладелец) = Тип("СправочникСсылка.Пользователи") Тогда // префикс 21

    _НовыйШтрихкод = "21" + Формат(ВхВладелец.КодШК, "ЧЦ=3; ЧВН=; ЧГ=0");

    ИначеЕсли ТипЗнч(ВхВладелец) = Тип("СправочникСсылка.ТехнологическиеОперации") Тогда // префикс 22

    _НовыйШтрихкод = "22" + Формат(ВхВладелец.Код, "ЧЦ=5; ЧВН=; ЧГ=0");

    ИначеЕсли ТипЗнч(ВхВладелец) = Тип("СправочникСсылка.СдельныеОперации") Тогда // префикс 23

    _НовыйШтрихкод = "23" + Формат(ВхВладелец.Код, "ЧЦ=5; ЧВН=; ЧГ=0");

    ИначеЕсли ТипЗнч(ВхВладелец) = Тип("ДокументСсылка.ЗаказНаПроизводство") Тогда // префикс 24

    _НовыйШтрихкод = "24" + Формат(КодСимвола(ВхВладелец.Номер, 1), "ЧЦ=4; ЧВН=; ЧГ=0"); // префикс номера документа (префикс фирмы)
    _НовыйШтрихкод = _НовыйШтрихкод + Прав(ВхВладелец.Номер, 8);
    _НовыйШтрихкод = _НовыйШтрихкод + Формат(ВхВладелец.Дата, "ДФ=yyyy");
```
---
Ясно-понятно, так я и думал)

короче, пиши

_Дополнительно.Вставить("ВариантИсполнения", ВыборкаРезультат.ВИ)

параметр в макете обзывай ВариантИсполнения.
---
все хорошо,но там у каждой номенклатуры по 5 ВИ исполнения,а выводит теперь только 1
---
Конечно, мы же строку не выводим, ыхыхы

```1c
    Процедура РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаДетали)

    Пока ВыборкаДетали.Следующий() Цикл

    ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, ВыборкаДетали);
    ТабДок.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень());
    ВыборкаРезультат = ВыборкаДетали.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    Если ВыборкаДетали.Номенклатура.ЭтоГруппа Тогда
    РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаРезультат);
    Иначе
    Пока ВыборкаРезультат.Следующий() Цикл
    Если НЕ глПустоеЗначение(ВыборкаРезультат.ВИ) Тогда
    _Дополнительно = Новый Структура;
    _Дополнительно.Вставить("ВариантИсполнения",ВыборкаРезультат.ВИ);
    _Дополнительно.Вставить("ЕдИзм",ВыборкаРезультат.Номенклатура.БазоваяЕдИзм);
    _ШК = глСформироватьВнутреннийШтрихкод(ВыборкаРезультат.Номенклатура,_Дополнительно);
    _Дополнительно.Вставить("_ШК",_ШК);
    ОбластьСтрока.Параметры.Заполнить(_Дополнительно);
    ТабДок.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень() + 1);
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
```
---
Спасибо большое за помощь)))
---
что то сейчас только заметила одну фигню
Короче он вариант исполнения заполняет там где не надо
по моему должно быть как у первой полки
---
Параметры надо очищать.
---
ТабДок.Очистить();
?
---
Ну зачем очищать ТабДок, который мы с таким трудом заполнили? После ТабДок.Вывести()

```1c
    ОбластьСтрока.Параметры.ВариантИсполнения = ";
```

ну и для остальных так, если потребуется.
---
все сработало,спасибо))
---
можно еще вопрос?
короче я должна сохранить этот документ в папку которую выберет пользователь.Вот я пишу
 ТабДок.Записать(КаталогШаблонов+"_ШаблонЗаказа.xls");
каталог шаблонов-это реквизит формы.
что я делаю не так?
Ошибку выдает при открытии документа и сохраняет его просто на рабочий стол
Действительный формат открываемого файла отличается от указываемого его расширением имени файла. Перед открытием данного файла убедитесь что он не поврежден и получен из надежного источника. Открыть этот файл сейчас?
---
```1c
    ПолноеИмяФайла = КаталогШаблонов +"_ШаблонЗаказа.xls";
    ТабДок.Записать(ПолноеИмяФайла,ТипФайлаТабличногоДокумента.XLS);
```

вот так работает,но сохраняет на рабочий стол
---
все разобралась
---
а если без группировок?
---
надо с группировками
---
Попробуйте так:

Пока ВыборкаДетали.Следующий() Цикл

        ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, ВыборкаДетали);
        ТабДок.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень());
        ВыборкаРезультат = ВыборкаДетали.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаРезультат);

     Если НЕ глПустоеЗначение(ВыборкаДетали.ВИ) Тогда
        _Дополнительно = Новый Структура;
                _Дополнительно.Вставить("ВариантИсполнения",ВыборкаДетали.ВИ);
                _Дополнительно.Вставить("ЕдИзм",ВыборкаДетали.Номенклатура.БазоваяЕдИзм);
                _ШК = глСформироватьВнутреннийШтрихкод(ВыборкаДетали.Номенклатура,_Дополнительно);
                  _Дополнительно.Вставить("_ШК",_ШК);
                 ОбластьСтрока.Параметры.Заполнить(_Дополнительно);

    КонецЕсли;
КонецЦикла;
---
все шикарно,только для первых не написался шк.