Имя: Пароль:
1C
 
Вывод в ТД
0 myr4ik07
 
13.12.14
18:33
добрій вечер. помогите будьте добры с логикой.
есть код
МассивШК = Новый Массив;
    
    Пока ВыборкаНоменклатура.Следующий() Цикл
        Если Результат.Пустой() Тогда
            Прервать;
        КонецЕсли;
        
        ОбластьНоменклатура.Параметры.Заполнить(ВыборкаНоменклатура);
        ТабДок.Вывести(ОбластьНоменклатура, ВыборкаНоменклатура.Уровень());
        
        ВыборкаШтрихкод = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        
        Пока ВыборкаШтрихкод.Следующий() Цикл
            ОбластьШтрихкод.Параметры.Заполнить(ВыборкаШтрихкод);
            МассивШК.Добавить(ВыборкаШтрихкод.Штрихкод);
            
            Если НЕ МассивШК.Количество() > 1 Тогда
                ТабДок.Вывести(ОбластьШтрихкод, ВыборкаШтрихкод.Уровень());
                ВыборкаДетальныеЗаписи = ВыборкаШтрихкод.Выбрать();                
            КонецЕсли;
            
            Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
                ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
            КонецЦикла;
        КонецЦикла;
                
        МассивШК.Очистить();
    КонецЦикла;

после обхода получаю
http://gigaline.no-ip.biz/owncloud/public.php?service=files&t=ae266c0ea61945293a713d0ff6bebde9
а я бы хотел, что бы, если в номенклатуры есть два и более штрихкода были выведены все эти штрихкоды один за одным, типа Шк1, Шк2 через запятую например, а потом уже детальные записи.
Я применил здесь Массив потому как получал раньше таблицу типа
Товар№1
                 Шк1 =
                           Склад количество 10
                          Склад количество 5
                 Шк2 =
                           Склад количество 10
                           Склад количество 5
что тоже не устраивало, а хотелось бы
Товар№1
            Шк1, Шк2, Шк3
                        Склад количество 10
                        Склад2 количество 5
1 ShoGUN
 
13.12.14
18:53
(0) Я бы заморочился и использовал СКД и агрегатную функцию "Массив" оттуда. А в данном случае придётся два обхода делать - сначала по уровню штрих-кодов, лепя свой массив, а потом уже выводить строку и делать обход по детальным строкам(не выводя строки штрих-кодов).
2 myr4ik07
 
13.12.14
18:57
(1) будьте добры приведите пример...
3 myr4ik07
 
13.12.14
19:02
(1) и что это за агр . функци "массив"?)))
4 myr4ik07
 
13.12.14
19:15
(1) я вот думаю, а что бы я применил в данном случаи в тексте запроса и т.д. в скд коль мне нужно полюбому получить все штрихкоды, а потом уже я должен решать есть ли 2 штрихкода для одной номенклатуры или нет...

...мысли в слух...
5 ShoGUN
 
13.12.14
19:18
(2) (2)     ВыборкаШтрихкод = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        
        Пока ВыборкаШтрихкод.Следующий() Цикл
            МассивШК.Добавить(ВыборкаШтрихкод.Штрихкод);
        КонецЦикла;  
  
        ВыборкаШтрихКод.Сбросить()
            
       Пока ВыборкаШтрихкод.Следующий() Цикл

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

        КонецЦикла;
6 ShoGUN
 
13.12.14
19:19
(3) Узнаю 1С-ника, знать полезные вещи - не знаем, но поржать надо...
v8: Практическое применение новых возможностей СКД
7 myr4ik07
 
13.12.14
19:20
(5)  ру, очень благодарен, ознакомливаюсь  ...
8 ShoGUN
 
13.12.14
19:20
Пардон за форматирование, вставилось так. Ну и синтаксические ошибки не проверял, звыняйте. Надеюсь, идея понятна.
9 myr4ik07
 
13.12.14
19:21
(6) да ниче ) все очень нормально, спасибо за идею и за ссылку,  читаю ...
10 ShoGUN
 
13.12.14
19:21
А, только массив не =Неопределено, а очищать, наверное, лучше...
11 ShoGUN
 
13.12.14
19:26
Да, и агрегатные функции я перепутал, там "Строка()"
Строка() - Если в качестве параметра передан массив, то функция возвращает строку, содержащую строковые представления всех элементов массива, разделенных символами "; ". Если в качестве параметра передана таблица значений, то функция возвращает строку, содержащую строковые представления всех строк таблицы значений, причем представления ячеек каждой строки разделяются символами "; ", а строки — смиволом перевода строки. Если у какого либо элемента строковое представление пустое, то вместо его представления выводится строка.
12 myr4ik07
 
13.12.14
19:38
(11) а где это "там"?)) что то не могу разобрать где нужно заменить ((
13 ShoGUN
 
13.12.14
19:40
(12) Я про вариант с СКД. Код из (5) и так должен работать.
14 myr4ik07
 
13.12.14
19:46
(13) ай красота, то что хотел, вы асс )) спасибо от души, мне конечно еще до такой логики учиться и учиться