Имя: Пароль:
1C
1С v8
загрузка данных в справочник(Коды ОКВЭД)
0 Валидатор
 
29.08.13
14:00
Попросили сделать справочник ОКВЭД, сделал, добавил ему 4 колонки:
Раздел, подраздел, код, наименование
получил екселевский файлик  кодами оквэд, и можно начинать, сделал следующее:
роцедура КнопкаВыполнитьНажатие(Кнопка)
    Док = ПолучитьCOMОбъект(ПутьКФайлу);
    ТаблицаЗначений = Новый ТаблицаЗначений;
    ТаблицаЗначений.Колонки.Добавить("Раздел", , "Наименование раздела");
    ТаблицаЗначений.Колонки.Добавить("Подраздел", , "Наименование подраздела");
    ТаблицаЗначений.Колонки.Добавить("Код", , "Наименование кода");
    ТаблицаЗначений.Колонки.Добавить("Имя", , "Наименование");
        
    Для  сч=НачСтрока По КонСтрока Цикл
        НоваяТЗ = ТаблицаЗначений.Добавить();
        Раздел=Док.Sheets(1).Cells(сч, 1).Value;
        НоваяТЗ.Раздел = Раздел;
        
        Подраздел = СокрЛП(Док.Sheets(1).Cells(сч, 2).Value);
        НоваяТЗ.Подраздел = Подраздел;
        
        Код = СокрЛП(Док.Sheets(1).Cells(сч, 3).Value);
        НоваяТЗ.Код = Код;
        
        Имя = СокрЛП(Док.Sheets(1).Cells(сч, 4).Value);
        НоваяТЗ.Имя = Имя;
        
    КонецЦикла;    
    
    
    
    Для каждого Строка из ТаблицаЗначений Цикл
        
        НайтиРаздел = Справочники.КодыОКВЭД.НайтиПоНаименованию(Строка.Раздел);
        
        Если  НЕ НайтиРаздел = Справочники.КодыОКВЭД.ПустаяСсылка() Тогда
            ОбъектКодыОКВЭД = НайтиРаздел.ПолучитьОбъект();
            //НоваяСтрока = ОбъектКодыОКВЭД.Раздел.Добавить();
            ОбъектКодыОКВЭД.Раздел = Строка.Раздел;
        КонецЕсли;
        
        
        
        Если  НЕ Подраздел = Справочники.КодыОКВЭД.ПустаяСсылка() Тогда
            //НоваяСтрока = ОбъектКодыОКВЭД.Подраздел.Добавить();
            ОбъектКодыОКВЭД.Подраздел = Строка.Подраздел;
        КонецЕсли;
         Попытка
            ОбъектКодыОКВЭД.Записать();
        Исключение
            Сообщить(ОписаниеОшибки());
            КонецПопытки;
КонецЦикла;
пока тестирую только на 1 двух колонках, в ТЗ данные из экселя отлично читаются, но потом, при создании новых позиций у меня вылетает ошибка с значение не является значение объектного типа и указание на ОбъектКодыОКВЭД = НайтиРаздел.ПолучитьОбъект(, это происходит потому что у НайтиРаздел тип неопределено, как получить мне строку с разделом, и если такого раздела еще нет, то создать его?
1 Rie
 
29.08.13
14:02
Написать свою функцию, которая проверит, есть ли такой раздел, и если нет - создаст.
2 Валидатор
 
29.08.13
14:10
(1) сделал, создаются позиции, а как теперь сделать сразу чтобы по группам распихивались данные? то есть, если у меня Раздел А - то все в него входит, потом дальше смотрится, в разделе А если подраздел АА, то все соответствущие данные из екселевского файла что мы грузим идут в АА, и т.д., чтобы иерархия как в ОКВЭд была, которые на просторах интернета лежат?
3 Rie
 
29.08.13
14:32
(2) Режешь строку кода по точкам. И создаёшь группы. (Или тут лучше иерархия элементов?).
4 Валидатор
 
29.08.13
14:36
(3) ну вот я тоже думаю, как удобнее, в ОКПД например справочнике просто иерархия элементов идет, да и в справочнике у меня стоит иерархия элементов только, писать функцию, которая будет резать строку кода?
5 Валидатор
 
29.08.13
14:40
ПОДСТРОКА(ПланЗакупокСоставПлана.Номенклатура.Артикул, 1, 2) + "." + ПОДСТРОКА(ПланЗакупокСоставПлана.Номенклатура.Артикул, 3, 2) + "." + ПОДСТРОКА(ПланЗакупокСоставПлана.Номенклатура.Артикул, 5, 100)
вот делал обрезание строки по точкам, но это в запросе, а как тоже самое без запроса сделать?
6 Rie
 
29.08.13
16:03
(6) Использовать функцию Найти. Получив позицию точки, при помощи Лев и Сред выделить подстроки слева и справа. И всё это обернуть в цикл.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший