Имя: Пароль:
1C
1C 7.7
v7: Выгрузка и загрузка элементов справочника
0 alex_reglament
 
16.01.12
11:30
привет всем
имеется две конфиги нужно из одной спр.Материалы перенести в другую
перенести просто элементы спр у меня получилось а вот как перенести все с группами не получается помогите
Процедура ВыгрузитьМатериалы()
   Если СокрЛП(ВыбФайлВыгрузки) = "" Тогда
       Предупреждение("Внимание! Не выбран файл для выгрузки!");
       Возврат;
   КонецЕсли;
   гРежимВСтрокуВнутр = 1;
   ТекФайл = СокрЛП(ВыбФайлВыгрузки);
   Если СтрЧислоВхождений(ТекФайл, ".") = 0 Тогда
       ТекФайл = ТекФайл+".txt";
   КонецЕсли;        
   Если ФС.СуществуетФайл(СокрЛП(ТекФайл)) = 1 Тогда
       Если Вопрос("Файл с заданным именем уже существует! Перезаписать файл?", 4) = 7 Тогда
           Возврат;
       КонецЕсли;
   КонецЕсли;    
   Выгрузка = СоздатьОбъект("Текст");
   СпрМат = СоздатьОбъект("Справочник.Материалы");
   СпрМат.ВыбратьЭлементы();
   Пока СпрМат.ПолучитьЭлемент() = 1 Цикл
       Если ПустоеЗначение(СпрМат.Наименование) = 0  Тогда
       
   
               
           Арт ="";
           ЕдИзм ="";
           СубСч10 ="";
           Цена ="";
           Масса ="";
           Страна ="";
           Срок ="";
           ПерваяЦена ="";
           Код ="";
           Наименование ="";
           Арт = СпрМат.Артикул;
           Выгрузка.ДобавитьСтроку("AR"+Арт);
           ЕдИзм = СпрМат.ЕдиницаИзмерения;
           Выгрузка.ДобавитьСтроку("EI"+ЕдИзм);
           СубСч10 = СпрМат.СубСчет10;
           Выгрузка.ДобавитьСтроку("CB"+СубСч10);
           Цена = СпрМат.Цена;
           Выгрузка.ДобавитьСтроку("CE"+Цена);
           Масса = СпрМат.Масса;
           Выгрузка.ДобавитьСтроку("MS"+Масса);
           Страна = СпрМат.СтранаПроисхождения;
           Выгрузка.ДобавитьСтроку("ST"+Страна);
           Срок = СпрМат.СрокИспользования;
           Выгрузка.ДобавитьСтроку("SR"+Срок);
           ПерваяЦена = СпрМат.ПервыйИмпортер;
           Выгрузка.ДобавитьСтроку("PC"+ПерваяЦена);
           Код = СпрМат.Код;
           Выгрузка.ДобавитьСтроку("KO"+Код);
           Наименование = СпрМат.Наименование;
           Выгрузка.ДобавитьСтроку("IM"+Наименование);
       КонецЕсли;
       КонецЦикла;
   Выгрузка.Записать(ТекФайл);
   Сообщить("Выгрузка элементов справочника завершена");
КонецПроцедуры
//это по выгрузке
Функция  ЗгрузкаМатериалов()
   Перем Имя;
   спрМатериалы = СоздатьОбъект("Справочник.Материалы");
   ПолучТекст = СоздатьОбъект("Текст");
   Если СокрЛП(ВыбФайлЗагрузки) = "" Тогда
       Возврат 1;
   КонецЕсли;            
   Если ПолучитьИмяФайла(ВыбФайлЗагрузки, Имя) = 0 Тогда
       Возврат 1;
   Иначе
       Проход = "";
       Попытка
           ПолучТекст.Открыть(СокрЛП(Имя));
           Для Сч=1  По ПолучТекст.КоличествоСтрок() Цикл
               Стр=СокрЛП(ПолучТекст.ПолучитьСтроку(Сч));
                   Если (Проход = "") или (Проход = 5)  Тогда
                   спрМатериалы.Новый();
                   Проход ="";
               КонецЕсли;
               Если Лев(Стр,2)="AR" Тогда
                   спрМатериалы.Артикул = Прав(Стр,СтрДлина(Стр)-2);
                   Проход = 1 ;
               ИначеЕсли Лев(Стр,2)="CE" Тогда
                   спрМатериалы.ЦенаУчетная = Прав(Стр,СтрДлина(Стр)-2);
                   Проход = 2 ;
               ИначеЕсли Лев(Стр,2)="MS" Тогда
                   спрМатериалы.МассаБрутто = Прав(Стр,СтрДлина(Стр)-2);
                   Проход = 3 ;
               ИначеЕсли Лев(Стр,2)="SR" Тогда
                   спрМатериалы.СрокЭксплуатации = Прав(Стр,СтрДлина(Стр)-2);
                   Проход = 4 ;
               ИначеЕсли Лев(Стр,2)="IM" Тогда
                   спрМатериалы.Наименование = Прав(Стр,СтрДлина(Стр)-2);
                   Проход = 5 ;
                   
                   Если Проход = 5 Тогда
                       спрМатериалы.Записать();
                       Проход ="";
                   КонецЕсли;
       КонецЕсли;
           КонецЦикла;
       Исключение  
           Сообщить("Ошибка открытия файла или материал уже записан "+Имя+"!");
           Возврат 0;
       КонецПопытки;
   КонецЕсли;
   Возврат 1;
КонецФункции
//это по загрузке
но этот код просто загружает элементы без учета групп
а мне нужно чтобы были и группы
1 el-gamberro
 
16.01.12
11:31
Перегружай еще реквизит Родитель
2 el-gamberro
 
16.01.12
11:31
А лучше освой "Конвертация данных"
3 alex_reglament
 
16.01.12
11:32
забыл написать  можно по подробнее показать как это делать просто я с группами не имел дела ни когда
4 Cube
 
16.01.12
11:33
(0) "Выгрузкак" - этопять!!!))) Слово с глубоким смыслом!)
5 alex_reglament
 
16.01.12
11:33
Процедура ВыгрузитьМатериалы()
   Если СокрЛП(ВыбФайлВыгрузки) = "" Тогда
       Предупреждение("Внимание! Не выбран файл для выгрузки!");
       Возврат;
   КонецЕсли;
   гРежимВСтрокуВнутр = 1;
   ТекФайл = СокрЛП(ВыбФайлВыгрузки);
   Если СтрЧислоВхождений(ТекФайл, ".") = 0 Тогда
       ТекФайл = ТекФайл+".txt";
   КонецЕсли;        
   Если ФС.СуществуетФайл(СокрЛП(ТекФайл)) = 1 Тогда
       Если Вопрос("Файл с заданным именем уже существует! Перезаписать файл?", 4) = 7 Тогда
           Возврат;
       КонецЕсли;
   КонецЕсли;    
   Выгрузка = СоздатьОбъект("Текст");
   СпрМат = СоздатьОбъект("Справочник.Материалы");
   СпрМат.ВыбратьЭлементы();
   Пока СпрМат.ПолучитьЭлемент() = 1 Цикл
       Если ПустоеЗначение(СпрМат.Наименование) = 0  Тогда
           Если СпрМат.ЭтоГруппа() = 1 Тогда
               Наименование ="";
               Код ="";
               элемент = "";
               Наименование = СпрМат.Наименование;
               элемент = СпрМат;
           Выгрузка.ДобавитьСтроку("GR"+Наименование);
           Код = СпрМат.Код;
           Выгрузка.ДобавитьСтроку("KG"+Код);
            СпрМат.ИспользоватьРодителя(элемент);
            Пока СпрМат.ПолучитьЭлемент() = 1 Цикл
               Если ПустоеЗначение(СпрМат.Наименование) = 0  Тогда
                   Если СпрМат.ЭтоГруппа() = 1 Тогда
               Наименование ="";
               Код ="";
               элемент1 = "";
               Наименование = СпрМат.Наименование;
               элемент1 = СпрМат;
           Выгрузка.ДобавитьСтроку("1GR"+Наименование);
           Код = СпрМат.Код;
           Выгрузка.ДобавитьСтроку("1KG"+Код);
   //        СпрМат.ИспользоватьРодителя(элемент1);
   //         Пока СпрМат.ПолучитьЭлемент() = 1 Цикл
   //            Если ПустоеЗначение(СпрМат.Наименование) = 0  Тогда
   //         Арт ="";
   //        ЕдИзм ="";
   //        СубСч10 ="";
   //        Цена ="";
   //        Масса ="";
   //        Страна ="";
   //        Срок ="";
   //        ПерваяЦена ="";
   //        Код ="";
   //        Наименование ="";
   //        Арт = СпрМат.Артикул;
   //        Выгрузка.ДобавитьСтроку("1GAR"+Арт);
   //        ЕдИзм = СпрМат.ЕдиницаИзмерения;
   //        Выгрузка.ДобавитьСтроку("1GEI"+ЕдИзм);
   //        СубСч10 = СпрМат.СубСчет10;
   //        Выгрузка.ДобавитьСтроку("1GCB"+СубСч10);
   //        Цена = СпрМат.Цена;
   //        Выгрузка.ДобавитьСтроку("1GCE"+Цена);
   //        Масса = СпрМат.Масса;
   //        Выгрузка.ДобавитьСтроку("1GMS"+Масса);
   //        Страна = СпрМат.СтранаПроисхождения;
   //        Выгрузка.ДобавитьСтроку("1GST"+Страна);
   //        Срок = СпрМат.СрокИспользования;
   //        Выгрузка.ДобавитьСтроку("1GSR"+Срок);
   //        ПерваяЦена = СпрМат.ПервыйИмпортер;
   //        Выгрузка.ДобавитьСтроку("1GPC"+ПерваяЦена);
   //        Код = СпрМат.Код;
   //        Выгрузка.ДобавитьСтроку("1GKO"+Код);
   //        Наименование = СпрМат.Наименование;
   //        Выгрузка.ДобавитьСтроку("1GIM"+Наименование);
   //    Иначе
   //         Арт ="";
   //        ЕдИзм ="";
   //        СубСч10 ="";
   //        Цена ="";
   //        Масса ="";
   //        Страна ="";
   //        Срок ="";
   //        ПерваяЦена ="";
   //        Код ="";
   //        Наименование ="";
   //        Арт = СпрМат.Артикул;
   //        Выгрузка.ДобавитьСтроку("GAR"+Арт);
   //        ЕдИзм = СпрМат.ЕдиницаИзмерения;
   //        Выгрузка.ДобавитьСтроку("GEI"+ЕдИзм);
   //        СубСч10 = СпрМат.СубСчет10;
   //        Выгрузка.ДобавитьСтроку("GCB"+СубСч10);
   //        Цена = СпрМат.Цена;
   //        Выгрузка.ДобавитьСтроку("GCE"+Цена);
   //        Масса = СпрМат.Масса;
   //        Выгрузка.ДобавитьСтроку("GMS"+Масса);
   //        Страна = СпрМат.СтранаПроисхождения;
   //        Выгрузка.ДобавитьСтроку("GST"+Страна);
   //        Срок = СпрМат.СрокИспользования;
   //        Выгрузка.ДобавитьСтроку("GSR"+Срок);
   //        ПерваяЦена = СпрМат.ПервыйИмпортер;
   //        Выгрузка.ДобавитьСтроку("GPC"+ПерваяЦена);
   //        Код = СпрМат.Код;
   //        Выгрузка.ДобавитьСтроку("GKO"+Код);
   //        Наименование = СпрМат.Наименование;
   //        Выгрузка.ДобавитьСтроку("GIM"+Наименование);
   //    КонецЕсли;
   //КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
       КонецЕсли;
       КонецЦикла;
   //    Если СпрМат.ЭтоГруппа() = 0 Тогда
   //        Пока СпрМат.ПолучитьЭлемент() = 1 Цикл
   //            
   //        Арт ="";
   //        ЕдИзм ="";
   //        СубСч10 ="";
   //        Цена ="";
   //        Масса ="";
   //        Страна ="";
   //        Срок ="";
   //        ПерваяЦена ="";
   //        Код ="";
   //        Наименование ="";
   //        Арт = СпрМат.Артикул;
   //        Выгрузка.ДобавитьСтроку("AR"+Арт);
   //        ЕдИзм = СпрМат.ЕдиницаИзмерения;
   //        Выгрузка.ДобавитьСтроку("EI"+ЕдИзм);
   //        СубСч10 = СпрМат.СубСчет10;
   //        Выгрузка.ДобавитьСтроку("CB"+СубСч10);
   //        Цена = СпрМат.Цена;
   //        Выгрузка.ДобавитьСтроку("CE"+Цена);
   //        Масса = СпрМат.Масса;
   //        Выгрузка.ДобавитьСтроку("MS"+Масса);
   //        Страна = СпрМат.СтранаПроисхождения;
   //        Выгрузка.ДобавитьСтроку("ST"+Страна);
   //        Срок = СпрМат.СрокИспользования;
   //        Выгрузка.ДобавитьСтроку("SR"+Срок);
   //        ПерваяЦена = СпрМат.ПервыйИмпортер;
   //        Выгрузка.ДобавитьСтроку("PC"+ПерваяЦена);
   //        Код = СпрМат.Код;
   //        Выгрузка.ДобавитьСтроку("KO"+Код);
   //        Наименование = СпрМат.Наименование;
   //        Выгрузка.ДобавитьСтроку("IM"+Наименование);
   //    КонецЦикла;
   //КонецЕсли;
   Выгрузка.Записать(ТекФайл);
   Сообщить("Выгрузка элементов справочника завершена");
КонецПроцедуры
это я пытался сделать выгрузку с рупами
6 alex_reglament
 
16.01.12
11:35
Функция  ЗгрузкаМатериалов()
   Перем Имя;
   спрМатериалы = СоздатьОбъект("Справочник.Материалы");
   ПолучТекст = СоздатьОбъект("Текст");
   Если СокрЛП(ВыбФайлЗагрузки) = "" Тогда
       Возврат 1;
   КонецЕсли;            
   Если ПолучитьИмяФайла(ВыбФайлЗагрузки, Имя) = 0 Тогда
       Возврат 1;
   Иначе
       Проход = "";
       Попытка
           ПолучТекст.Открыть(СокрЛП(Имя));
           Для Сч=1  По ПолучТекст.КоличествоСтрок() Цикл
               Стр=СокрЛП(ПолучТекст.ПолучитьСтроку(Сч));
                   Если Лев(Стр,2)="GR" Тогда
                       спрМатериалы.НоваяГруппа();
                       энлнмн = "";
                       энлнмн = Прав(Стр,СтрДлина(Стр)-2);
                   спрМатериалы.Наименование = Прав(Стр,СтрДлина(Стр)-2);
               ИначеЕсли Лев(Стр,2)="KG" Тогда
                       спрМатериалы.УстановитьНовыйКод(Прав(Стр,СтрДлина(Стр)-2)); //= Прав(Стр,СтрДлина(Стр)-2);
                   //ИначеЕсли Лев(Стр,3)="1GR" Тогда
                   //    спрМатериалы.ИспользоватьРодителя(энлнмн);
                   //    спрМатериалы.НоваяГруппа();
                   //    спрМатериалы.Наименование = Прав(Стр,СтрДлина(Стр)-3);
                   //ИначеЕсли Лев(Стр,3)="1KG" Тогда
                   //    спрМатериалы.УстановитьНовыйКод(Прав(Стр,СтрДлина(Стр)-3));
               //Если (Проход = "") или (Проход = 5)  Тогда
               //    спрМатериалы.Новый();
               //    Проход ="";
               //КонецЕсли;
               //Если Лев(Стр,2)="AR" Тогда
               //    спрМатериалы.Артикул = Прав(Стр,СтрДлина(Стр)-2);
               //    Проход = 1 ;
               //ИначеЕсли Лев(Стр,2)="CE" Тогда
               //    спрМатериалы.ЦенаУчетная = Прав(Стр,СтрДлина(Стр)-2);
               //    Проход = 2 ;
               //ИначеЕсли Лев(Стр,2)="MS" Тогда
               //    спрМатериалы.МассаБрутто = Прав(Стр,СтрДлина(Стр)-2);
               //    Проход = 3 ;
               //ИначеЕсли Лев(Стр,2)="SR" Тогда
               //    спрМатериалы.СрокЭксплуатации = Прав(Стр,СтрДлина(Стр)-2);
               //    Проход = 4 ;
               //ИначеЕсли Лев(Стр,2)="IM" Тогда
               //    спрМатериалы.Наименование = Прав(Стр,СтрДлина(Стр)-2);
               //    Проход = 5 ;
               //    
               //    Если Проход = 5 Тогда
                       спрМатериалы.Записать();
               //        Проход ="";
               //    КонецЕсли;
       КонецЕсли;
           КонецЦикла;
       Исключение  
           Сообщить("Ошибка открытия файла или материал уже записан "+Имя+"!");
           Возврат 0;
       КонецПопытки;
   КонецЕсли;
   Возврат 1;
КонецФункции
а это загрузку
7 alex_reglament
 
16.01.12
11:36
но не чего не получается
8 filh
 
16.01.12
11:36
Перекинь по OLE
9 Эльниньо
 
16.01.12
11:40
Т.УдалитьСтроки();
   Спр = СоздатьОбъект("Справочник.Товары");
   Спр.ВыбратьЭлементы();
   Пока Спр.ПолучитьЭлемент() = 1 Цикл
       Т.НоваяСтрока();
       Т.Код = Спр.Код;
       Т.Товар= Спр.Наименование;
       Т.Левел = Спр.Уровень();
       Т.Гр = Спр.ЭтоГруппа();
       Если Спр.Родитель.Выбран() = 0 Тогда
           Т.Папа = 0;
       Иначе
           Т.Папа = Спр.Родитель.Код;
       КонецЕсли;
   КонецЦикла;
   ЗначениеВФайл("d:\Zap.tz", Т);
10 alex_reglament
 
16.01.12
11:47
(9) с этим может я и разберусь а как за тем подгрузить?
11 Эльниньо
 
16.01.12
11:51
Перем СкокаУровней;
//*******************************************
Процедура Сформировать()
   ЗначениеИзФайла("d:\Zap.tz", Т);
   Т.Сортировать("Левел");
КонецПроцедуры  

//*******************************************
Процедура Закачать()
СкокаУровней = Т.ПолучитьЗначение(Т.КолтчествоСтрок(), "Левел");
   Спр = СоздатьОбъект("Справочник.Товары");
   Спр1 = СоздатьОбъект("Справочник.Товары");
   Для х = 1 По СкокаУровней Цикл
       Т.ВыбратьСтроки();
       Пока Т.ПолучитьСтроку() = 1 Цикл
           Если Т.Левел <> х Тогда
               Продолжить;
           КонецЕсли;
           Если Т.Гр = 1 Тогда
               Спр.НоваяГруппа();
           Иначе
               Спр.Новый();
           КонецЕсли;
           Если Т.Папа <> 0 Тогда
               Спр1.НайтиПоКоду(Т.Папа);
               Спр.Родитель = Спр1.ТекущийЭлемент();
           КонецЕсли;
           Спр.Код = Т.Код;
           Спр.Наименование = Т.Товар;
           Спр.Записать();
           Состояние(Т.Товар);
       КонецЦикла;
   КонецЦикла;
КонецПроцедуры
12 alex_reglament
 
16.01.12
12:09
(9) извини а т чему равна?
13 alex_reglament
 
16.01.12
12:10
Процедура нов()
   Т = СоздатьОбъект("Текст");
   Т.УдалитьСтроки();
   Спр = СоздатьОбъект("Справочник.Материалы");
   Спр.ВыбратьЭлементы();
   Пока Спр.ПолучитьЭлемент() = 1 Цикл
       Т.НоваяСтрока();
       Т.Код = Спр.Код;
       Т.Товар= Спр.Наименование;
       Т.Левел = Спр.Уровень();
       Т.Гр = Спр.ЭтоГруппа();
       Если Спр.Родитель.Выбран() = 0 Тогда
           Т.Папа = 0;
       Иначе
           Т.Папа = Спр.Родитель.Код;
       КонецЕсли;
   КонецЦикла;
   ЗначениеВФайл("d:\Zap.tz", Т);
КонецПроцедуры
чето он не работает
14 Godofsin
 
16.01.12
12:11
(12) ТаблицаЗначений, зуб даю =)
15 alex_reglament
 
16.01.12
12:11
спасибо я просто думал что это текст
16 Эльниньо
 
16.01.12
12:12
(12) ТЗ на форме. Вообще я привёл урезанный код. На самом деле писалось из-за всяких нюансов.
Например группу в источнике кидаем в корень приемника.
17 alex_reglament
 
16.01.12
12:13
ок спасибо буду пробовать
18 alex_reglament
 
16.01.12
12:13
идея понятна
19 alex_reglament
 
16.01.12
12:29
я еще раз извиняюсь у меня при загрузке ошибка
Спр.Записать();
{D:\1С\КОНФИГУРАЦИИ  1СV7\ВЫГРУЗКИ ДЛЯ ТБЗ\ВЫГРУЗКА КОНТРОВ.ERT(113)}: Код не уникальный!
20 alex_reglament
 
16.01.12
12:30
//*******************************************

Процедура Сформировать()
   ЗначениеИзФайла("d:\Zap.tz", Т);
   Т.Сортировать("Левел");
КонецПроцедуры  

//*******************************************

Процедура Закачать()
   Сформировать();
СкокаУровней = Т.ПолучитьЗначение(Т.КоличествоСтрок(), "Левел");
   Спр = СоздатьОбъект("Справочник.Материалы");
   Спр1 = СоздатьОбъект("Справочник.Материалы");
   Для х = 1 По СкокаУровней Цикл
       Т.ВыбратьСтроки();
       Пока Т.ПолучитьСтроку() = 1 Цикл
           Если Т.Левел <> х Тогда
               Продолжить;
           КонецЕсли;
           Если Т.Гр = 1 Тогда
               Спр.НоваяГруппа();
           Иначе
               Спр.Новый();
           КонецЕсли;
           Если Т.Папа <> 0 Тогда
               Спр1.НайтиПоКоду(Т.Папа);
               Спр.Родитель = Спр1.ТекущийЭлемент();
           КонецЕсли;
           Спр.Код = Т.Код;
           Спр.Наименование = Т.Товар;
           Спр.Записать();
           Состояние(Т.Товар);
       КонецЦикла;
   КонецЦикла;
КонецПроцедуры
21 alex_reglament
 
16.01.12
12:33
так будет правильно???
Процедура Сформировать()
   ЗначениеИзФайла("d:\Zap.tz", Т);
   Т.Сортировать("Левел");
КонецПроцедуры  

//*******************************************

Процедура Закачать()
   Сформировать();
СкокаУровней = Т.ПолучитьЗначение(Т.КоличествоСтрок(), "Левел");
   Спр = СоздатьОбъект("Справочник.Материалы");
   Спр1 = СоздатьОбъект("Справочник.Материалы");
   Для х = 1 По СкокаУровней Цикл
       Т.ВыбратьСтроки();
       Пока Т.ПолучитьСтроку() = 1 Цикл
           Если Т.Левел <> х Тогда
               Продолжить;
           КонецЕсли;
           Если Т.Гр = 1 Тогда
               Спр.НоваяГруппа();
           Иначе
               Спр.Новый();
           КонецЕсли;
           Если Т.Папа <> 0 Тогда
               Спр1.НайтиПоКоду(Т.Папа);
               Спр.Родитель = Спр1.ТекущийЭлемент();
           КонецЕсли;
           Спр.УстановитьНовыйКод(Т.Код);
           //Спр.Код = Т.Код;
           Спр.Наименование = Т.Товар;
           Спр.Записать();
           Состояние(Т.Товар);
       КонецЦикла;
   КонецЦикла;
КонецПроцедуры
22 alex_reglament
 
16.01.12
12:34
Спр.УстановитьНовыйКод(Т.Код);
23 Эльниньо
 
16.01.12
12:34
(19) По второму разу гонишь?
Тогда проверяй на наличие.
24 alex_reglament
 
16.01.12
12:35
Спр.УстановитьНовыйКод(Т.Код);
так будет не правильным?
25 alex_reglament
 
16.01.12
12:35
ок
26 Эльниньо
 
16.01.12
12:36
(24) На второй и следующих итерациях не найдёшь папу.
27 alex_reglament
 
16.01.12
12:37
Процедура Сформировать()
   ЗначениеИзФайла("d:\Zap.tz", Т);
   Т.Сортировать("Левел");
КонецПроцедуры  

//*******************************************

Процедура Закачать()
   Сформировать();
СкокаУровней = Т.ПолучитьЗначение(Т.КоличествоСтрок(), "Левел");
   Спр = СоздатьОбъект("Справочник.Материалы");
   Спр1 = СоздатьОбъект("Справочник.Материалы");
   Для х = 1 По СкокаУровней Цикл
       Т.ВыбратьСтроки();
       Пока Т.ПолучитьСтроку() = 1 Цикл
           Если Т.Левел <> х Тогда
               Продолжить;
           КонецЕсли;
           Если Т.Гр = 1 Тогда
               Спр.НоваяГруппа();
           Иначе
               Спр.Новый();
           КонецЕсли;
           Если Т.Папа <> 0 Тогда
               Спр1.НайтиПоКоду(Т.Папа);
               Спр.Родитель = Спр1.ТекущийЭлемент();
           КонецЕсли;
           Если Спр.НайтиПоКоду(Т.Код) = 1 Тогда
               Продолжить;
           Иначе
           Спр.Код = Т.Код;
           Спр.Наименование = Т.Товар;
           Спр.Записать();
           Состояние(Т.Товар);
       КонецЦикла;
   КонецЦикла;
КонецПроцедуры
28 alex_reglament
 
16.01.12
12:37
так будет правильно?
29 alex_reglament
 
16.01.12
12:38
Если Спр.НайтиПоКоду(Т.Код) = 1 Тогда
               Продолжить;
           Иначе
           Спр.Код = Т.Код;
           Спр.Наименование = Т.Товар;
           Спр.Записать();
30 alex_reglament
 
16.01.12
12:39
(27) извиняюсь КонецЕсли Забыл
31 Эльниньо
 
16.01.12
12:40
Процедура Закачать()
   Сформировать();
СкокаУровней = Т.ПолучитьЗначение(Т.КоличествоСтрок(), "Левел");
   Спр = СоздатьОбъект("Справочник.Материалы");
   Спр1 = СоздатьОбъект("Справочник.Материалы");
   Для х = 1 По СкокаУровней Цикл
       Т.ВыбратьСтроки();
       Пока Т.ПолучитьСтроку() = 1 Цикл
           Если Т.Левел <> х Тогда
               Продолжить;
           КонецЕсли;
           Если Спр.НайтиПоКоду(Т.Код) = 1 Тогда
               Продолжить;
           КонецЕсли;
           Если Т.Гр = 1 Тогда
               Спр.НоваяГруппа();
           Иначе
               Спр.Новый();
           КонецЕсли;
           Если Т.Папа <> 0 Тогда
               Спр1.НайтиПоКоду(Т.Папа);
               Спр.Родитель = Спр1.ТекущийЭлемент();
           Иначе
           Спр.Код = Т.Код;
           Спр.Наименование = Т.Товар;
           Спр.Записать();
           Состояние(Т.Товар);
       КонецЦикла;
   КонецЦикла;
КонецПроцедуры
32 alex_reglament
 
16.01.12
12:42
Процедура Закачать()
   Сформировать();
СкокаУровней = Т.ПолучитьЗначение(Т.КоличествоСтрок(), "Левел");
   Спр = СоздатьОбъект("Справочник.Материалы");
   Спр1 = СоздатьОбъект("Справочник.Материалы");
   Для х = 1 По СкокаУровней Цикл
       Т.ВыбратьСтроки();
       Пока Т.ПолучитьСтроку() = 1 Цикл
           Если Т.Левел <> х Тогда
               Продолжить;
           КонецЕсли;
           Если Спр.НайтиПоКоду(Т.Код) = 1 Тогда
               Продолжить;
           КонецЕсли;
           Если Т.Гр = 1 Тогда
               Спр.НоваяГруппа();
           Иначе
               Спр.Новый();
           КонецЕсли;
           Если Т.Папа <> 0 Тогда
               Спр1.НайтиПоКоду(Т.Папа);
               Спр.Родитель = Спр1.ТекущийЭлемент();
           Иначе
           Спр.Код = Т.Код;
           Спр.Наименование = Т.Товар;
           Спр.Записать();
           Состояние(Т.Товар);
       КонецЦикла;
   КонецЦикла;
КонецПроцедуры

он группы создал но элементы положил тупо в корень
33 alex_reglament
 
16.01.12
12:42
группы пустые
34 alex_reglament
 
16.01.12
12:43
что делать что не так?
35 alex_reglament
 
16.01.12
12:47
Спр.Записать();
{D:\1С\КОНФИГУРАЦИИ  1СV7\ВЫГРУЗКИ ДЛЯ ТБЗ\ВЫГРУЗКА КОНТРОВ.ERT(116)}: Код не уникальный!
36 alex_reglament
 
16.01.12
12:48
(35) + (31)
37 alex_reglament
 
16.01.12
12:50
с ошибкой  (35) разобрался
Процедура Закачать()
   Сформировать();
СкокаУровней = Т.ПолучитьЗначение(Т.КоличествоСтрок(), "Левел");
   Спр = СоздатьОбъект("Справочник.Материалы");
   Спр1 = СоздатьОбъект("Справочник.Материалы");
   Для х = 1 По СкокаУровней Цикл
       Т.ВыбратьСтроки();
       Пока Т.ПолучитьСтроку() = 1 Цикл
           Если Т.Левел <> х Тогда
               Продолжить;
           КонецЕсли;
           Если Спр.НайтиПоКоду(Т.Код) = 1 Тогда
               Продолжить;
           КонецЕсли;
           Если Т.Гр = 1 Тогда
               Спр.НоваяГруппа();
           Иначе
               Спр.Новый();
           КонецЕсли;
           Если Т.Папа <> 0 Тогда
               Спр1.НайтиПоКоду(Т.Папа);
               Спр.Родитель = Спр1.ТекущийЭлемент();
           Иначе
               Если Спр1.НайтиПоКоду(Т.Код) = 1 Тогда
                   Продолжить;
           Спр.Код = Т.Код;
           Спр.Наименование = Т.Товар;
           Спр.Записать();
           Состояние(Т.Товар);
       КонецЕсли;
       КонецЕсли;
       КонецЦикла;
   КонецЦикла;
КонецПроцедуры
38 alex_reglament
 
16.01.12
12:50
а вот с группа проблемма осталась
39 alex_reglament
 
16.01.12
12:51
(32) + (33) + (34)
40 alex_reglament
 
16.01.12
12:51
помогите
41 Эльниньо
 
16.01.12
12:57
Внимательно (37) и (31) сравни.
1. Исправь.
2. Удали все элементы в приемнике (хрен знает как они там сели).
3. Запусти.
42 alex_reglament
 
16.01.12
13:00
ты про (37)  Если Спр1.НайтиПоКоду(Т.Код) = 1 Тогда
                   Продолжить;
           Спр.Код = Т.Код;
           Спр.Наименование = Т.Товар;
           Спр.Записать();
           Состояние(Т.Товар);
       КонецЕсли;
это имел в виду
43 alex_reglament
 
16.01.12
13:00
если я твой код  (31) ставлю то у меня ошибка (35)
44 alex_reglament
 
16.01.12
13:00
Удали все элементы в приемнике (хрен знает как они там сели).
КАК?
45 alex_reglament
 
16.01.12
13:08
блин не чего не получается
46 Ёпрст
 
16.01.12
13:18
потом выкини всё в топку, скачай import\export77.ert и наслаждайся
или tranref.ert с диска ИТС
47 Zhuravlik
 
16.01.12
13:33
(44) Если в справочнике уже были элементы до твоей выгрузки, то создай в нем идентификатор, напр. КодВБазеИсточнике - и засовывай туда соотв. код. После этого сможешь сделать так:

спр = СоздатьОбъект("Справочник.Материалы");

спр.ВыбратьЭлементы();
Пока спр.ПолучитьЭлемент() = 1 Цикл

Если ПустоеЗначение(спр.КодВБазеИсточнике) = 1 Тогда
 Продолжить;
КонецЕсли;

спр.Удалить();

КонецЦикла

тут правда надо еще группы убить. Но это уж думай сам, я бы создал список значений по родителю, и проверял бы потом есть ли в этой группе элементы, если нет - удалить.
48 alex_reglament
 
16.01.12
13:35
спр пустой!!!!
49 Zhuravlik
 
16.01.12
13:37
А вообще, в (8) дело говрят. http://www.mista.ru/articles1c/ole.htm
(19) - код не уникальный, проверь в базе приемнике как нумерация справочника задана. И не задавай код сам) Просто опускай этот параметр, 1с сама перенумерует, если стоит галка в конфигураторе.
50 alex_reglament
 
16.01.12
13:44
сделал так всеравно ругается с уникальностью кода
Процедура Закачать()
   Сформировать();
СкокаУровней = Т.ПолучитьЗначение(Т.КоличествоСтрок(), "Левел");
   Спр = СоздатьОбъект("Справочник.Материалы");
   Спр1 = СоздатьОбъект("Справочник.Материалы");
   Для х = 1 По СкокаУровней Цикл
       Т.ВыбратьСтроки();
       Пока Т.ПолучитьСтроку() = 1 Цикл
           Если Т.Левел <> х Тогда
               Продолжить;
           КонецЕсли;
           Если Спр.НайтиПоКоду(Т.Код) = 1 Тогда
               Продолжить;
           КонецЕсли;
           Если Т.Гр = 1 Тогда
               Спр.НоваяГруппа();
           Иначе
               Спр.Новый();
           КонецЕсли;
           Если Т.Папа <> 0 Тогда
               Спр1.НайтиПоКоду(Т.Папа);
               Спр.Родитель = Спр1.ТекущийЭлемент();
           Иначе
               Если Спр1.НайтиПоКоду(Т.Код) = 0 Тогда
           Спр.Код = Т.Код;
           Спр.Наименование = Т.Товар;
           Спр.Записать();
           Состояние(Т.Товар);
       Иначе
           Продолжить;
       КонецЕсли;
       КонецЕсли;
       КонецЦикла;
   КонецЦикла;
КонецПроцедуры \
//но один элементо с кодом "0" записывает потом ошибка
51 Zhuravlik
 
16.01.12
13:48
Спр.Код = Т.Код; - убери эту строчку, в конфе посмотри галки автоматическая нумерация, и контроль уникальности. Тоже недавно совсем перегружал справочник, даже в голову не пришло самому следить за кодом) Он нужен, но отдельным реквизитом, чтобы знать какой элемент был выгружен.
52 alex_reglament
 
16.01.12
13:49
да точно в приемнике тип Числовой
53 alex_reglament
 
16.01.12
13:49
а передаче текст
54 alex_reglament
 
16.01.12
13:50
так на код ругаться перестала


Процедура Закачать()
   Сформировать();
СкокаУровней = Т.ПолучитьЗначение(Т.КоличествоСтрок(), "Левел");
   Спр = СоздатьОбъект("Справочник.Материалы");
   Спр1 = СоздатьОбъект("Справочник.Материалы");
   Для х = 1 По СкокаУровней Цикл
       Т.ВыбратьСтроки();
       Пока Т.ПолучитьСтроку() = 1 Цикл
           Если Т.Левел <> х Тогда
               Продолжить;
           КонецЕсли;
           Если Спр.НайтиПоКоду(Т.Код) = 1 Тогда
               Продолжить;
           КонецЕсли;
           Если Т.Гр = 1 Тогда
               Спр.НоваяГруппа();
           Иначе
               Спр.Новый();
           КонецЕсли;
           Если Т.Папа <> 0 Тогда
               Спр1.НайтиПоКоду(Т.Папа);
               Спр.Родитель = Спр1.ТекущийЭлемент();
           Иначе
          // Спр.Код = Т.Код;
           Спр.Наименование = Т.Товар;
           Спр.Записать();
           Состояние(Т.Товар);
       КонецЕсли;
       КонецЦикла;
   КонецЦикла;
КонецПроцедуры
55 alex_reglament
 
16.01.12
13:51
меня интересует следующее а почему элементы всеравно в корень спр падаю а погруппа не раскидываются?
56 Zhuravlik
 
16.01.12
13:53
А как ты потом поймешь какой элемент справочника был выгружен? "создай в нем идентификатор, напр. КодВБазеИсточнике - и засовывай туда соотв. код".
(55) Потому что ты их по коду ищешь, а он уже другой.
Спр1.НайтиПоКоду(Т.Папа); - не прокатит.
Спр1.НайтиПоНаименованию(Т.Папа.Наименование, 0) - должно пойти...
57 filh
 
16.01.12
13:53
вот это Спр1.НайтиПоКоду(Т.Папа) не мешало бы проверить.
58 Zhuravlik
 
16.01.12
13:54
(58) Посмотри в сторону ОЛЕ, мучений поменьше)
59 alex_reglament
 
16.01.12
13:55
ок буду пробовать
60 filh
 
16.01.12
13:58
61 alex_reglament
 
16.01.12
15:00
(60) все ок перенес спасибо все но и (54) заработала только тогда когда я убрал уникальность кода
62 filh
 
16.01.12
15:01
(61) Дубли теперь проверь.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.