Имя: Пароль:
1C
1С v8
Обработка загрузки из файла эксель (объединенная ячейка).
0 lirt82
 
10.02.16
04:49
Дано файл прайс с номенклатурой клиентов в экселе, пример колонка №2 значение в ячейке Карандаш, далее объединенная ячейка состоит из колонок № 4, 5, 6 и в ней значения через запятую черный, белый, зеленый, красный. Для клиента каждый цвет это отдельный товар т.е. карандаш черный, карандаш белый и т.д. Вариант когда менеджер вручную предварительно редактирует файл прайса (т.е. разделяет объединенные ячейки) и потом запускает обработку не подходит. Подскажите каким методом допилить самописную обработку по загрузке номенклатуры в справочник ТМЗ т.е. разобрать/отделить друг от друга значения в объединенной ячейке?
1 Klesk666
 
10.02.16
05:36
значение объединенной ячейки доступно по адресу первой ячейки
а дальше:
Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено) Экспорт
2 hhhh
 
10.02.16
07:10
просто надо взять ячейку 4. Там значение.
3 lirt82
 
10.02.16
12:44
подскажите что-то не отрабатывает т.е. создает одну номенклатуру с наименованием
"карандаш/черный,белый,зеленый,красный"
//открываем файл
    Excel.Workbooks.Open(ИмяФайла);
    НомерЛиста = НомерЛистаЭксель;
    Лист = Excel.WorkSheets(НомерЛиста);    
    ВсегоКолонок = Excel.Cells(1,1).SpecialCells(11).Column;
    ВсегоСтрок = Excel.Cells(1,1).SpecialCells(11).Row;
    Для Стр = ПерваяСтрока По ПоследняяСтрока Цикл  
        ПолеАртикул = ?(Артикул=0,0,СокрЛП(Лист.Cells(Стр, Артикул).Value));
        ПолеНаим = ?(Наименование=0,0,СокрЛП(Лист.Cells(Стр, Наименование).Value));
        ПолеЦвет =  РазложитьСтрокуВМассивПодстрок(СокрЛП(Лист.Cells(Стр, Цвет).Value));
        ПолеСоставное = ПолеАртикул+"/"+ПолеНаим+"/"+(СокрЛП(Лист.Cells(Стр, Цвет).Value));

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

Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено) Экспорт

    МассивСтрок = Новый Массив();
    Если Разделитель = " " Тогда
        Стр = СокрЛП(Стр);
        Пока 1=1 Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = СокрЛ(Сред(Стр,Поз));
        КонецЦикла;
    Иначе
        ДлинаРазделителя = СтрДлина(Разделитель);
        Пока 1=1 Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = Сред(Стр,Поз+ДлинаРазделителя);
        КонецЦикла;
    КонецЕсли;    
    
КонецФункции
4 lirt82
 
10.02.16
19:58
все разобрался.
Осталось только одно, как в Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено)
указать несколько параметров разделителей? по умолчанию это запятая, еще нужен знак "/"
Разделитель = ",""/""-"  так не получается
5 marty0701
 
10.02.16
20:33
(4)Так и не получится,замени / на , , а потом в массив
6 lirt82
 
11.02.16
19:10
(5) не понял, на примере покажи