![]() |
|
Обработка загрузки из файла эксель (объединенная ячейка). | ☑ | ||
---|---|---|---|---|
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) не понял, на примере покажи
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |