Имя: Пароль:
1C
1С v8
Как убрать задваивающиеся элементы
0 den17
 
07.06.12
09:39
При повторной загрузке из dbf файла обработкой, элементы задваиваются. Скажите пожалуйста, как убрать задваивающиеся элементы?
Что в коде надо добавить?
1 andrewks
 
07.06.12
09:39
проверку, вижимо
2 den17
 
07.06.12
09:39
Процедура КнопкаВыполнитьНажатие(Кнопка)
   Файл = Новый XBase;
   Файл.ОткрытьФайл("C:\tov.dbf");
   //Файл.Кодировка = "OEM";
   Если НЕ Файл.Открыта() Тогда
       Сообщить("Не удалось открыть файл!");    
   КонецЕсли;
   Файл.Первая();
   
   Спр    = Справочники.Номенклатура;
   СпрВид    = Справочники.ВидыНоменклатуры;
   СпрЕд    = Справочники.КлассификаторЕдиницИзмерения;
   СпрЕдИзм= Справочники.ЕдиницыИзмерения;
   Пока Файл.ВКонце() = 0 Цикл
       Состояние("Обрабатывается запись - " + Файл.Name);
       Если СокрЛП(Файл.GRUPPA1) = СокрЛП(Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA1))) Тогда
           Группа1 = Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA1));
       Иначе
           Если НЕ ПустаяСтрока(Файл.GRUPPA1) Тогда
               СпрНом = Спр.СоздатьГруппу();
               СпрНом.Наименование = СокрЛП(Файл.GRUPPA1);
               СпрНом.Записать();
               Группа1 = Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA1));
           Иначе
               Группа1 = "";    
           КонецЕсли;
       КонецЕсли;
       
       Если СокрЛП(Файл.GRUPPA2) = СокрЛП(Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA2))) Тогда
           Группа2 = Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA2));
       Иначе
           Если НЕ ПустаяСтрока(Файл.GRUPPA2) Тогда
               СпрНом = Спр.СоздатьГруппу();
               СпрНом.Наименование = СокрЛП(Файл.GRUPPA2);
               СпрНом.Родитель        = Группа1;
               СпрНом.Записать();
               Группа2 = Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA2));
           Иначе
               Группа2 = "";    
           КонецЕсли;
       КонецЕсли;
       
       Если СокрЛП(Файл.GRUPPA3) = СокрЛП(Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA3))) Тогда
           Группа3 = Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA3));
       Иначе
           Если НЕ ПустаяСтрока(Файл.GRUPPA3) Тогда
               СпрНом = Спр.СоздатьГруппу();
               СпрНом.Наименование = СокрЛП(Файл.GRUPPA3);
               СпрНом.Родитель        = Группа2;
               СпрНом.Записать();
               Группа3 = Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA3));
           Иначе
               Группа3 = "";    
           КонецЕсли;
       КонецЕсли;

       
       СпрНом = Спр.СоздатьЭлемент();
       СпрНом.Наименование                = СокрЛП(Файл.Name);
       СпрНом.НаименованиеПолное        = СокрЛП(Файл.FullName);
       СпрНом.Артикул                    = Файл.Articul;
       СпрНом.ВидНоменклатуры            = СпрВид.НайтиПоНаименованию("Товар");
       СпрНом.СтавкаНДС                = "Без НДС";
       СпрНом.СтранаПроисхождения        = СокрЛП(Файл.Countre);
       СпрНом.БазоваяЕдиницаИзмерения    = СпрЕд.НайтиПоНаименованию(СокрЛП(Файл.Ed));
       Если Группа3 <> "" Тогда
           СпрНом.Родитель    = Группа3;        
       Иначе
           Если Группа2 <> "" Тогда
               СпрНом.Родитель    = Группа2;        
           Иначе
               СпрНом.Родитель = Группа1;    
           КонецЕсли;
       КонецЕсли;
       СпрНом.Записать();
       
       СпрИзм = СпрЕдИзм.СоздатьЭлемент();
       СпрИзм.Владелец = Спр.НайтиПоКоду(СпрНом.Код);
       СпрИзм.Коэффициент = 1;
       СпрИзм.Наименование= СпрЕд.НайтиПоНаименованию(СокрЛП(Файл.Ed)).Наименование;
       СпрИзм.ЕдиницаПоКлассификатору = СпрЕд.НайтиПоНаименованию(СокрЛП(Файл.Ed));
       СпрИзм.Записать();
       
       //СпрНом.ЕдиницаДляОтчетов.Владелец        = СпрЕдИзм.НайтиПоНаименованию(СпрИзм.Наименование);
       СпрНом.ЕдиницаХраненияОстатков    = СпрЕдИзм.НайтиПоКоду(СпрИзм.Код);
       СпрНом.Записать();
       Файл.Следующая();
   КонецЦикла;
   Файл.ЗакрытьФайл();
КонецПроцедуры
3 salvator
 
07.06.12
09:39
(0) Создаешь элементы без проверки на существование?
4 EasyRider
 
07.06.12
09:40
(2)ды так и пиши,мол,напишите мне обработку,которая бы делала то-то и то-то
5 salvator
 
07.06.12
09:41
Если СокрЛП(Файл.GRUPPA1) = СокрЛП(Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA1)))

Это что за муйня?
6 salvator
 
07.06.12
09:43
+(5) Ты строку с ссылкой сравниваешь, условие не срабатывает и всегда создается новый элемент
7 den17
 
07.06.12
09:46
А что тогда сравнивать?
8 salvator
 
07.06.12
09:47
Если НЕ ПустаяСтрока(Файл.GRUPPA1) Тогда
   НайденЭлемент = Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA1),Истина);
   Если НайденЭлемент.Пустая() Тогда
       СпрНом = Спр.СоздатьГруппу();
       СпрНом.Наименование = СокрЛП(Файл.GRUPPA1);
       СпрНом.Записать();
       Группа1 = СпрНом.Ссылка;    
   Иначе
       Группа1 = НайденЭлемент;    
   КонецЕсли;    
КонецЕсли;
9 den17
 
07.06.12
10:30
Изменил, но все равно задваиваются(
10 hhhh
 
07.06.12
10:34
(9) так надо было в 4-х местах поменять.
11 den17
 
07.06.12
11:14
поменял, но всё-равно так-же
12 den17
 
07.06.12
11:14
Процедура КнопкаВыполнитьНажатие(Кнопка)
   Файл = Новый XBase;
   Файл.ОткрытьФайл("C:\tov.dbf");
   //Файл.Кодировка = "OEM";
   Если НЕ Файл.Открыта() Тогда
       Сообщить("Не удалось открыть файл!");    
   КонецЕсли;
   Файл.Первая();
   
   Спр    = Справочники.Номенклатура;
   СпрВид    = Справочники.ВидыНоменклатуры;
   СпрЕд    = Справочники.КлассификаторЕдиницИзмерения;
   СпрЕдИзм= Справочники.ЕдиницыИзмерения;
   Пока Файл.ВКонце() = 0 Цикл
       Состояние("Обрабатывается запись - " + Файл.Name);
/////////////////////////////////////////////////////////////////////////////////////////////////////        
Если НЕ ПустаяСтрока(Файл.GRUPPA1) Тогда
   НайденЭлемент = Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA1),Истина);
   Если НайденЭлемент.Пустая() Тогда
       СпрНом = Спр.СоздатьГруппу();
       СпрНом.Наименование = СокрЛП(Файл.GRUPPA1);
       СпрНом.Записать();
       Группа1 = СпрНом.Ссылка;    
   Иначе
       Группа1 = НайденЭлемент;    
   КонецЕсли;    
КонецЕсли;
       
/////////////////////////////////////////////////////////////////////////////////////////////////////        

//Если СокрЛП(Файл.GRUPPA1) = СокрЛП(Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA1))) Тогда
//            Группа1 = Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA1));
//        Иначе
//            Если НЕ ПустаяСтрока(Файл.GRUPPA1) Тогда
//                СпрНом = Спр.СоздатьГруппу();
//                СпрНом.Наименование = СокрЛП(Файл.GRUPPA1);
//                СпрНом.Записать();
//                Группа1 = Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA1));
//            Иначе
//                Группа1 = "";    
//            КонецЕсли;
//        КонецЕсли;

//////////////////////////////////////////////////////////////////////////

 Если НЕ ПустаяСтрока(Файл.GRUPPA2) Тогда
   НайденЭлемент = Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA2),Истина);
   Если НайденЭлемент.Пустая() Тогда
       СпрНом = Спр.СоздатьГруппу();
       СпрНом.Наименование = СокрЛП(Файл.GRUPPA2);
       СпрНом.Записать();
       Группа2 = СпрНом.Ссылка;    
   Иначе
       Группа2 = НайденЭлемент;    
   КонецЕсли;    
КонецЕсли;

///////////////////////////////////////////////////////////////////////////////
       //
       //Если СокрЛП(Файл.GRUPPA2) = СокрЛП(Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA2))) Тогда
       //    Группа2 = Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA2));
       //Иначе
       //    Если НЕ ПустаяСтрока(Файл.GRUPPA2) Тогда
       //        СпрНом = Спр.СоздатьГруппу();
       //        СпрНом.Наименование = СокрЛП(Файл.GRUPPA2);
       //        СпрНом.Родитель        = Группа1;
       //        СпрНом.Записать();
       //        Группа2 = Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA2));
       //    Иначе
       //        Группа2 = "";    
       //    КонецЕсли;
       //КонецЕсли;
   ///////////////////////////////////////////////////////////////////////////////////////////////    
       //Если СокрЛП(Файл.GRUPPA3) = СокрЛП(Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA3))) Тогда
       //    Группа3 = Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA3));
       //Иначе
       //    Если НЕ ПустаяСтрока(Файл.GRUPPA3) Тогда
       //        СпрНом = Спр.СоздатьГруппу();
       //        СпрНом.Наименование = СокрЛП(Файл.GRUPPA3);
       //        СпрНом.Родитель        = Группа2;
       //        СпрНом.Записать();
       //        Группа3 = Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA3));
       //    Иначе
       //        Группа3 = "";    
       //    КонецЕсли;
       //КонецЕсли;
/////////////////////////////////////////////////////////////////////////////////////
    Если НЕ ПустаяСтрока(Файл.GRUPPA3) Тогда
   НайденЭлемент = Спр.НайтиПоНаименованию(СокрЛП(Файл.GRUPPA3),Истина);
   Если НайденЭлемент.Пустая() Тогда
       СпрНом = Спр.СоздатьГруппу();
       СпрНом.Наименование = СокрЛП(Файл.GRUPPA3);
       СпрНом.Записать();
       Группа3 = СпрНом.Ссылка;    
   Иначе
       Группа3 = НайденЭлемент;    
   КонецЕсли;    
КонецЕсли;


//////////////////////////////////////////////////////////////////////////////////////
       СпрНом = Спр.СоздатьЭлемент();
       СпрНом.Наименование                = СокрЛП(Файл.Name);
       СпрНом.НаименованиеПолное        = СокрЛП(Файл.Name);
       СпрНом.Артикул                    = Файл.Articul;
       СпрНом.ВидНоменклатуры            = СпрВид.НайтиПоНаименованию("Товар");
       СпрНом.СтавкаНДС                = "Без НДС";
       //СпрНом.СтранаПроисхождения        = СокрЛП(Файл.Countre);
       СпрНом.БазоваяЕдиницаИзмерения    = СпрЕд.НайтиПоНаименованию(СокрЛП(Файл.BazEdIzm));
       Если Группа3 <> "" Тогда
           СпрНом.Родитель    = Группа3;        
       Иначе
           Если Группа2 <> "" Тогда
               СпрНом.Родитель    = Группа2;        
           Иначе
               СпрНом.Родитель = Группа1;    
           КонецЕсли;
       КонецЕсли;
       СпрНом.Записать();
       
       СпрИзм = СпрЕдИзм.СоздатьЭлемент();
       СпрИзм.Владелец = Спр.НайтиПоКоду(СпрНом.Код);
       СпрИзм.Коэффициент = 1;
       СпрИзм.Наименование= СпрЕд.НайтиПоНаименованию(СокрЛП(Файл.BazEdIzm)).Наименование;
       СпрИзм.ЕдиницаПоКлассификатору = СпрЕд.НайтиПоНаименованию(СокрЛП(Файл.BazEdIzm));
       СпрИзм.Записать();
       
       //СпрНом.ЕдиницаДляОтчетов.Владелец        = СпрЕдИзм.НайтиПоНаименованию(СпрИзм.Наименование);
       СпрНом.ЕдиницаХраненияОстатков    = СпрЕдИзм.НайтиПоКоду(СпрИзм.Код);
       СпрНом.Записать();
       Файл.Следующая();
   КонецЦикла;
   Файл.ЗакрытьФайл();
КонецПроцедуры
13 sanja26
 
07.06.12
11:17
отладчик не предлагать?
14 den17
 
07.06.12
11:18
А это условие не правильное что-ли..
15 salvator
 
07.06.12
11:37
(12) Если Группа3 <> "" Тогда
       ...

Зачем опять сравниваешь несовместимые типы? Я тебе в (6) уже об этом написал.
16 den17
 
07.06.12
11:42
То есть вместо (15) надо (8) поставить?
17 salvator
 
07.06.12
11:44
(16) Мля. Группа3 имеет тип СправочникСсылка. Ты ее сравниваешь со строкой. В любом случае будет ложь.
Кури отладчик.
18 den17
 
07.06.12
12:02
А с чем её сравнить? с НовыйЭлемент?
19 hhhh
 
07.06.12
12:14
(18) и вот здесь

      СпрНом = Спр.СоздатьЭлемент();
       СпрНом.Наименование                = СокрЛП(Файл.Name);
       СпрНом.НаименованиеПолное        = СокрЛП(Файл.Name);
       СпрНом.Артикул                    = Файл.Articul;
       СпрНом.ВидНоменклатуры             = СпрВид.НайтиПоНаименованию("Товар");
       СпрНом.СтавкаНДС                = "Без НДС";

ты тупо ничего не проверяешь, создаешь элемент всегда.
20 den17
 
07.06.12
12:23
А может напишите, как надо, а-то что-то не получается, пожалуйста..
21 salvator
 
07.06.12
12:44
(20) Телепаты в отпуске.
22 den17
 
07.06.12
12:48
)))
23 EasyRider
 
07.06.12
12:58
(20)Во!я ж тебе еще в (4) посоветовал так сделать
24 hhhh
 
07.06.12
13:00
(22)    НайденЭлемент = Спр.НайтиПоНаименованию(СокрЛП(Файл.Name),Истина);
   Если НайденЭлемент.Пустая() Тогда
25 den17
 
07.06.12
15:08
Спасибо вам всем!