Вход | Регистрация

Форумы на Кубань.Ру


1С:Предприятие ::

Метки: 

Сортировка кодов

Ø
Я
   kayrus
15.11.04 - 20:33
Для того, чтобы навести порядок в кодах (смысл заключается в том, что если родитель имеет отличное от предыдущего просканированного элемента значение, то все элементы в этом родители начинаются нумероваться с нуля)
Код следующий:
Спр = СоздатьОбъект("Справочник.Номенклатура");
Спр.ВыбратьЭлементы();
tmp=10000;
tmp1=0;
Пока Спр.ПолучитьЭлемент() = 1
  Цикл
    Если Спр.ЭтоГруппа() = 1
      Тогда Продолжить;
    КонецЕсли;
    Спр.СтранаПроисхождения = глЗначениеПоУмолчанию("ОсновнаяОКСМ");
    Если (ПустоеЗначение(Родитель) = 0)
      Тогда
        Если (tmp1=Лев(Спр.Родитель.Код, 1))
          Тогда tmp=tmp;
          Иначе tmp=10000;
        КонецЕсли;
        tmp=tmp+1;
        Спр.Код = Лев(Спр.Родитель.Код, 4) + Прав(tmp,4);
        tmp1=Лев(Спр.Родитель.Код, 1);
        КонецЕсли;
      Спр.Записать();
  КонецЦикла;
Он почему-то не работает. Где собака порыта?
 
 
   kayrus
1 - 15.11.04 - 21:05
Так и не понял в чём проблема была, но этот код работает:
    Спр = СоздатьОбъект("Справочник.Номенклатура");
    Спр.ВыбратьЭлементы();
    tmp=0;
    tmp1=0;
    Пока Спр.ПолучитьЭлемент() = 1
      Цикл
        
        Если Спр.ЭтоГруппа() = 1
          Тогда Продолжить;
        КонецЕсли;
        
        Спр.СтранаПроисхождения = глЗначениеПоУмолчанию("ОсновнаяОКСМ");
        Если ПустоеЗначение(Родитель) = 0 Тогда
          
          Если tmp1=Лев(Спр.Родитель.Код, 2)
            Тогда tmp=tmp;
              Иначе tmp=0;
          КонецЕсли;
          
          tmp=tmp+1;
          Спр.Код = Лев(Спр.Родитель.Код, 4)+ Прав(tmp+10000,4);
          tmp1=Лев(Спр.Родитель.Код, 2);
          
        КонецЕсли;
        Спр.Записать();
      КонецЦикла;
+
Если хотите следующий элемент поместить под следующим номером, то вот код при добавлении нового элемента:
  		Спр = СоздатьОбъект("Справочник.Номенклатура");
    Спр.ВыбратьЭлементы();
    tmp=1;
    tmp1=Лев(Родитель.Код, 2);		
        
    Пока Спр.ПолучитьЭлемент()=1
      Цикл	
        Если tmp1 = Лев(Спр.Родитель.Код, 2)
        Тогда
        Если ПустоеЗначение(Родитель) = 0 Тогда
          tmp=tmp+1;		
        КонецЕсли;
        Иначе Продолжить;
        КонецЕсли;
      КонецЦикла;
      
    Код = Лев(Родитель.Код, 4)+Прав(tmp+10000,4);
Если можно лучше сделать, то напишите.
   bsg
2 - 15.11.04 - 21:20
Не работает потому, что ВыбратьЭлементы() делает выборку в порядке кодов. И менять в цикле код справочника - нарушить порядок сортировки в выборке.
   kayrus
3 - 15.11.04 - 22:24
Дык, а почему же второй вариант рабоатет?
   bsg
4 - 15.11.04 - 22:35
Скорее всего он не работает (не меняет коды).
Надо пользоваться в таких случаях методом
ПорядокНаименований();
Синтаксис:
ПорядокНаименований()
Назначение:
Установить порядок выборки элементов справочника по возрастанию наименования.
Замечание:
Метод вызывается до вызова метода ВыбратьЭлементы.
Метод можно использовать только для объектов, созданных функцией СоздатьОбъект.



Список тем форума

Форум Территория 1С

Рекламное место пустует  
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует