Имя: Пароль:
1C
 
Обход массива. Что со мной не так?
0 tabarigen
 
30.04.20
14:05
ШкСтрока = Новый Структура;

            
            //Получаем штрихкоды товара
            ШтрхкодыТовара = ПолучитьШтрихкодыТовара(ВыборкаДетальныеЗаписи.Ссылка);
            Если ШтрхкодыТовара.Количество()>0 Тогда
                Для Каждого шк Из ШтрхкодыТовара Цикл
                    ШкСтрока.Вставить("code",ВыборкаДетальныеЗаписи.НоменклатураКод);
                    ШкСтрока.Вставить("barcode",шк);
                    шк = Неопределено;
                    Штрихкоды.Добавить(ШкСтрока);
                КонецЦикла;
            КонецЕсли;

Банальный код..
В итоге в масиве Штрихкоды получаю сдвоенные штрихкоды.

Всему виной видимо ШкСтрока.Вставить("barcode",шк);.
Так как когда я получаю последний штрихкод по номенклатуре и добавляю его массив то он почему то перезаписывает все предыдущие штрихкоды тоже. Я  догадываюсь, что надо как то освободить переменную шк после ее добавления в массив.
Попробовал так шк= Неопределено; но  у меня не сработало
1 fisher
 
30.04.20
14:08
Перенеси создание структуры во вложенный цикл.
Ты пишешь в массив ссылку на одну и ту же структуру, в которой перезаписываешь ключи.
2 fisher
 
30.04.20
14:10
ШтрхкодыТовара = ПолучитьШтрихкодыТовара(ВыборкаДетальныеЗаписи.Ссылка);
Если ШтрхкодыТовара.Количество()>0 Тогда
   Для Каждого шк Из ШтрхкодыТовара Цикл
      ШтрихКоды.Добавить(Новый Структура("code,barcode", ВыборкаДетальныеЗаписи.НоменклатураКод, шк));
   КонецЦикла;
КонецЕсли;
3 fisher
 
30.04.20
14:12
Проверка на количество тоже лишняя.
4 tabarigen
 
30.04.20
14:12
(2) спасибо, большое. Теперь понял в чем проблема.
5 tabarigen
 
30.04.20
14:13
(2) работает
6 Cthulhu
 
30.04.20
14:17
// ну или прост заменит Штрихкоды.Добавить(ШкСтрока); на вотето:
Штрихкоды.Добавить(ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(ШкСтрока)));
7 fisher
 
30.04.20
14:20
Только не очень понятно, что с этой структурой данных ты делать собираешься.
Если тебе надо по штрихкоду быстро получать код номенклатуры, тогда тебе надо Соответствие()
Тогда будет так
СоответствиеШтрихкодов = Новый Соответствие;
ШтрхкодыТовара = ПолучитьШтрихкодыТовара(ВыборкаДетальныеЗаписи.Ссылка);
Для Каждого шк Из ШтрхкодыТовара Цикл
   СоответствиеШтрихкодов.Вставить(шк, ВыборкаДетальныеЗаписи.НоменклатураКод);
КонецЦикла;
А получать потом тупо:
КодНоменклатурыПоШтрихкоду = СоответствиеШтрихкодов[МойШтрихкод];
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.