8.х Изменение артикула элемента Справочника Номенклатура из файла

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем slavab, 24 авг 2017.

  1. TopicStarter Overlay
    slavab
    Offline

    slavab

    Регистрация:
    24 авг 2017
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте.
    Есть csv файл. Читаю содержимое таким кодом
    Код:
    Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)
       
        ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
        ДиалогВыбора.Заголовок = "Выберите файл";
        //
    
        Фильтр = "csv|*.csv";
        ДиалогВыбора.Фильтр = Фильтр;
        //
    
        Если ДиалогВыбора.Выбрать() Тогда
            ИмяФайла = ДиалогВыбора.ПолноеИмяФайла;
        КонецЕсли;
       
    КонецПроцедуры
    
    Процедура ПрочитатьНажатие(Элемент)
       
        //очищаем таблицу и удаляем колонки
    
        Таблица.Очистить();
        Таблица.Колонки.Очистить();
        ЭлементыФормы.Таблица.Колонки.Очистить();
       
        // чтение файла
    
        ЗагружаемыйФайл = Новый ТекстовыйДокумент;
        ЗагружаемыйФайл.Прочитать(ИмяФайла);
       
        //шапка по умолчанию 1 строка, из первой строки делаем колонки таблицы
    
        Шапка = ЗагружаемыйФайл.ПолучитьСтроку(1);
       
        //раскладываем строку в массив
    
        МассивКолонок = РазложитьСтрокуВМассивПодстрок(Шапка,Разделитель);
       
        //генерируем колонки   
    
        Для Каждого ИмяКолонки Из МассивКолонок Цикл
           
            ИмяБезПробелов = СтрЗаменить(ИмяКолонки," ","");// убираем из имени колонок пробелы
    
            Таблица.Колонки.Добавить(ИмяБезПробелов,,ИмяКолонки);        
            НоваяКолонка = ЭлементыФормы.Таблица.Колонки.Добавить(ИмяБезПробелов, ИмяКолонки);
            НоваяКолонка.Данные = ИмяБезПробелов;
           
        КонецЦикла;
       
       
        Для НомерСтроки=2 по ЗагружаемыйФайл.КоличествоСтрок() Цикл
           
            Состояние("Обрабатывается "+Строка(Формат(?(ЗагружаемыйФайл.КоличествоСтрок()=0,0,((100*НомерСтроки)/ЗагружаемыйФайл.КоличествоСтрок())),"ЧЦ=3; ЧДЦ=0"))+" %");
            ОбработкаПрерыванияПользователя();//указав данный оператор, цикл можно прервать в любой момент нажатие ctrl+break
    
           
            // получить строку файла с указанным номером и преобразуем её в массив
    
            Строка = ЗагружаемыйФайл.ПолучитьСтроку(НомерСтроки);
            МассивКолонок = РазложитьСтрокуВМассивПодстрок(Строка,Разделитель);
            НоваяСтрока = Таблица.Добавить();
           
            Если МассивКолонок.Количество() <> Таблица.Колонки.Количество() Тогда
                Сообщить("Ошибка со строкой " + Строка);
                Продолжить;// скорее всего в тексте содержит разделитель
    
            КонецЕсли;
           
            Для НомерКолонки = 1 по МассивКолонок.Количество() Цикл
                //заполняем строку значениями
    
                ТекущееЗначение = МассивКолонок[НомерКолонки-1];
                ИмяКолонки = Таблица.Колонки[НомерКолонки-1].Имя;            
                НоваяСтрока[ИмяКолонки] = ТекущееЗначение;           
            КонецЦикла;          
           
        КонецЦикла;  
       
       
    
       
    КонецПроцедуры
    
    Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",")
        
    + Code
        МассивСтрок = Новый Массив();
        Если Разделитель = " " Тогда
            Стр = СокрЛП(Стр);
            Пока Истина Цикл
                Поз = Найти(Стр,Разделитель);
                Если Поз=0 Тогда
                    МассивСтрок.Добавить(Стр);
                    Возврат МассивСтрок;
                КонецЕсли;
                МассивСтрок.Добавить(Лев(Стр,Поз-1));
                Стр = СокрЛ(Сред(Стр,Поз));
            КонецЦикла;
        Иначе
            ДлинаРазделителя = СтрДлина(Разделитель);
            Пока Истина Цикл
                Поз = Найти(Стр,Разделитель);
                Если Поз=0 Тогда
                    МассивСтрок.Добавить(Стр);
                    Возврат МассивСтрок;
                КонецЕсли;
                МассивСтрок.Добавить(Лев(Стр,Поз-1));
                Стр = Сред(Стр,Поз+ДлинаРазделителя);
            КонецЦикла;
        КонецЕсли;
       
    КонецФункции
    
    Процедура КнопкаВыполнитьНажатие(Кнопка)
          //Здесь должно быть что-то умное 
       
    КонецПроцедуры
    
    
    Разделитель = ";";
    Как мне практически реализовать - Отобрать Номенклатуру по значению (это значение Артикул) в одной колонке полученной Таблицы и заменить этот самый Артикул на значения из другой колонки, ну и записать?
    Кусок файла
    Дата;Новый код САЕ;Старый код САЕ;Марка
    01.08.2017 12:32:50;F8397;F8397P;Yokohama
    01.08.2017 12:33:18;F9710;F9710P;Yokohama
    01.08.2017 12:33:48;R1657;F9643;Yokohama
    01.08.2017 17:37:48;WHS145101old;WHS145101;Replay
    01.08.2017 17:42:34;WHS063963old;WHS063963;MAK
    01.08.2017 17:43:01;WHS129145old;WHS129145;Скад
    01.08.2017 17:43:25;WHS155030old;WHS155030;LegeArtis Concept
    01.08.2017 17:43:53;WHS056888old;WHS056888;OZ
    01.08.2017 17:44:22;WHS142367old;WHS142367;LS
    01.08.2017 17:44:56;WHS113069old;WHS113069;MAK
    02.08.2017 12:39:47;TS00836;TS00836.;Toyo
    03.08.2017 17:17:07;WHS158377old;WHS158377;Alutec
    03.08.2017 17:18:10;WHS064258old;WHS064258;FR replica
    07.08.2017 17:32:31;E4723;E4102;Yokohama
    17.08.2017 13:55:04;WHS131412old;WHS131412;N2O
  2. TopicStarter Overlay
    slavab
    Offline

    slavab

    Регистрация:
    24 авг 2017
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте.
    Запрос во временную таблицу и попытка отобрать из этой таблицы по значению в колонке
    Код:
    СтарыйКодCAE = ???????
       
                Запрос = Новый Запрос;
                Запрос.Текст =
                "ВЫБРАТЬ
                |    Артикул
                |ПОМЕСТИТЬ
                |    ВременнаяТаблица
                |ИЗ
                |    Справочник.Номенклатура КАК Номенклатура
                |;
                |ВЫБРАТЬ
                |    Артикул
                |ИЗ
                |    ВременнаяТаблица"
                |ГДЕ   
                |Артикул =  &МассивCAE"
                ;
        Запрос.УстановитьПараметр("МассивCAE", СтарыйКодCAE);
       
        Результат = Запрос.Выполнить();
    Не понимаю как отобрать нужную номенклатуру из нужной колонки полученной Таблицы.
  3. TopicStarter Overlay
    slavab
    Offline

    slavab

    Регистрация:
    24 авг 2017
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Разобрался.

Поделиться этой страницей