Имя: Пароль:
1C
1С v8
У товара 2 штрих кода. Как это склеить в одну строку?
,
0 Beast42
 
21.03.16
11:12
Имеется такая вот процедурка:

Процедура КнопкаВыполнитьНажатие(Кнопка)
    Табдок = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("Макет");
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Номен.Код КАК Код,
    |    Номен.Артикул КАК Артикул,
    |    Номен.Ссылка КАК Номенклатура,
    |    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    |    Номен.БазоваяЕдиницаИзмерения КАК ЕденицаИзмерения,
    |    Штрихкоды.Штрихкод КАК Штрихкод,
    |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток
    |ИЗ
    |    Справочник.Номенклатура КАК Номен
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
    |        ПО (Штрихкоды.Владелец = Номен.Ссылка)
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
    |        ПО Номен.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
    |ГДЕ
    |    НЕ Номен.ЭтоГруппа
    |    И ТоварыНаСкладахОстатки.КоличествоОстаток > 0";
    Результат = Запрос.Выполнить();
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьСтрока= Макет.ПолучитьОбласть("Строка");
    
    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьШапка);
    ТабДок.НачатьАвтогруппировкуСтрок();
    
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ОбластьСтрока.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
        ТабДок.Вывести(ОбластьСтрока, ВыборкаДетальныеЗаписи.Уровень());
    КонецЦикла;
    
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.Вывести(ОбластьСтрока);
    //ТабДок.Показать();
    ТабДок.Записать(Путь ,ТипФайлаТабличногоДокумента.XLS);
КонецПроцедуры





Вопрос в следующем. У некоторых позиций по 2 штрих кода. И вот как мне сделать чтобы строчки не задваивались, а в поле штрих код, через запятую были эти 2 штрих кода.
1 vip03
 
21.03.16
11:16
В цикле проверяй номенклатуру, если она не изменилась - добавляй штрихкод через запятую.
2 Beast42
 
21.03.16
11:19
(1) чего не могу понять как? Прям ступор у меня
3 Beast42
 
21.03.16
11:42
апп
4 Записьдампа
 
21.03.16
11:47
(3) Упорядочи и заведи текущую переменную. В цикле проверяй номенклатуру, если она не изменилась - добавляй штрихкод через запятую.
5 Beast42
 
21.03.16
12:05
(4) Так строки же задвоенные всё равно будет. только в одной будет 1 штрих код, а в другой уже 2 через запятую
6 Sapiens_bru
 
21.03.16
12:46
(1) Подсказал
(4) Разжевал

(0) Пойми, что вывод результата запроса сразу в печать на экран это частный случай. Ты вполне можешь получить результаты, обработать их как угодно и затем вывести хоть полностью хоть по частям.
7 mehfk
 
21.03.16
12:51
(0) У тебя левое соединение за счет условия в ГДЕ превратилось во внутреннее, ты либо исправь условие, либо убери вообще выборку из справочника.
8 ejikbeznojek
 
21.03.16
12:53
Что-нибудь в этом роде напиши
ТеНоменклатура = неопределено;  
ТекШК="";
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ТекНоменклатура<>ВыборкаДетальныеЗаписи.номенклатура тогда
ТекНоменклатура=ВыборкаДетальныеЗаписи;
ТекШК=ВыборкаДетальныеЗаписи.ШтрихКод;        ОбластьСтрока.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
ОбластьСтрока.Параметры.ШК=ТекШК;
        ТабДок.Вывести(ОбластьСтрока, ВыборкаДетальныеЗаписи.Уровень());
иначе
ТекШк=ТекШК+ВыборкаДетальныеЗаписи.ШтрихКод+", ";
конецесои
КонецЦикла;
9 ejikbeznojek
 
21.03.16
13:01
Только наоборот)
10 Beast42
 
22.03.16
06:54
Сделал так:

Процедура КнопкаВыполнитьНажатие(Кнопка)
    Табдок = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("Макет");
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Номен.Код КАК Код,
    |    Номен.Артикул КАК Артикул,
    |    Номен.Ссылка КАК Номенклатура,
    |    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    |    Номен.БазоваяЕдиницаИзмерения КАК ЕденицаИзмерения,
    |    Штрихкоды.Штрихкод КАК Штрихкод,
    |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток
    |ИЗ
    |    Справочник.Номенклатура КАК Номен
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
    |        ПО (Штрихкоды.Владелец = Номен.Ссылка)
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
    |        ПО Номен.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
    |ГДЕ
    |    НЕ Номен.ЭтоГруппа
    |    И НЕ Номен.ПометкаУдаления
    |ИТОГИ
    |    МАКСИМУМ(ХарактеристикаНоменклатуры),
    |    МАКСИМУМ(Остаток)
    |ПО
    |    Номенклатура";
    Результат = Запрос.Выполнить();
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьСтрока= Макет.ПолучитьОбласть("Строка");
    
    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьШапка);
    ТабДок.НачатьАвтогруппировкуСтрок();
    
    ВыборкаДетальныеЗаписиНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    Пока ВыборкаДетальныеЗаписиНоменклатура.Следующий() Цикл
        ШК = "";
        ВыборкаДетальныеЗаписиШК = ВыборкаДетальныеЗаписиНоменклатура.Выбрать();
        Пока ВыборкаДетальныеЗаписиШК.Следующий() Цикл
            Если ШК = "" Тогда
                ШК = ВыборкаДетальныеЗаписиШК.Штрихкод
            Иначе
                ШК = ШК + ", " + ВыборкаДетальныеЗаписиШК.Штрихкод;
            КонецЕсли;
        КонецЦикла;
        ОбластьСтрока.Параметры.Заполнить(ВыборкаДетальныеЗаписиНоменклатура);
        ОбластьСтрока.Параметры.Штрихкод = ШК;
        ТабДок.Вывести(ОбластьСтрока, ВыборкаДетальныеЗаписиНоменклатура.Уровень());
    КонецЦикла;
            
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.Вывести(ОбластьСтрока);
    ТабДок.Записать(Путь ,ТипФайлаТабличногоДокумента.XLSX);
КонецПроцедуры