|   |   | 
| 
 | Как убрать задваивающиеся элементы | ☑ | ||
|---|---|---|---|---|
| 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 | 
        Спасибо вам всем!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |