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

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


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 человек.
Рекламное место пустует