Неоптимальная работа УстановитьНомерОрдера() в ПКО конфы УТП?          
☑  
    
        
    0 
    
        DeZol     
     
    
    23.09.11
            ✎ 
    16:39
 
        
        Столкнулся со следующим интересным алгоритмом работы этой процедуры в ПКО.
  
  Зачем такие "развраты" при вычислении НомерОрдера, если реквизит числовой. Кто-то может объяснить?
  
      ТекстЗапроса =
      "ВЫБРАТЬ РАЗРЕШЕННЫЕ
      |    НомерОрдера КАК НомерОрдера
      |ИЗ
      |    Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
      |
      |ГДЕ
      |    ПриходныйКассовыйОрдер.Организация = &Организация
      |    //самого себя не учитываем
      |    И ПриходныйКассовыйОрдер.Ссылка <> &Ссылка
      |    И ПриходныйКассовыйОрдер.СчетКасса = &СчетКасса    
      |    И ПриходныйКассовыйОрдер.ВалютаДокумента = &ВалютаДокумента
      |";
      Если ЕстьАналитикаПоОбособленнымПодразделениям  Тогда
          ТекстЗапроса = ТекстЗапроса + "
      |    И ПриходныйКассовыйОрдер.Касса.ОбособленноеПодразделение = &ОбособленноеПодразделение";
      КонецЕсли;
      ТекстЗапроса = ТекстЗапроса + "
      |    И ПриходныйКассовыйОрдер.Дата >= &ДатаНачалаГода
      |    И ПриходныйКассовыйОрдер.Дата <= &ДатаКонцаГода";
      
      Запрос.Текст = ТекстЗапроса;
      
      СписокОрдеров = Запрос.Выполнить().Выбрать();
      
      ТаблицаЗначений = Новый ТаблицаЗначений;
       
      ТаблицаЗначений.Колонки.Добавить("Номер"); 
      ТаблицаЗначений.Колонки.Добавить("Длина"); 
  
      Пока СписокОрдеров.Следующий() Цикл
          НоваяСтрока = ТаблицаЗначений.Добавить(); 
          НоваяСтрока.Номер = СписокОрдеров.НомерОрдера; 
          НоваяСтрока.Длина = СтрДлина(СписокОрдеров.НомерОрдера); 
      КонецЦикла;
      
      ТаблицаЗначений.Сортировать("Длина Убыв, Номер Убыв");
      
      Если ТаблицаЗначений.Количество() > 0 Тогда
          Попытка
              НомерОрдера = Формат(Число(ТаблицаЗначений[0].Номер) + 1, "ЧГ=0");
          Исключение
              НомерОрдера = 1;    
          КонецПопытки;
      Иначе
          НомерОрдера = 1;
      КонецЕсли;    
         
 
     
    
        
    1 
    
        rutony     
     
    
    23.09.11
            ✎ 
    16:45
 
        
        (0) Слишком много условий, разрезы Подразделения, Организации, да еще и в пределах года... Впринципе, ничего не оптимального, разве что сортировка...    
         
 
     
    
        
    2 
    
        DeZol     
     
    
    23.09.11
            ✎ 
    16:49
 
        
        Я про то, что можно было просто получить МАКСИМУМ(НомерОрдера) и все дела. Зачем сортировать по длине номера? В чем смысл?    
         
 
     
    
        
    3 
    
        shuhard     
     
    
    23.09.11
            ✎ 
    16:52
 
        
        (2) префиксы    
         
 
     
    
        
    4 
    
        DeZol     
     
    
    23.09.11
            ✎ 
    17:00
 
        
        (3) В НомерОрдера префиксы не включаются!    
         
 
     
    
        
    5 
    
        pumbaEO     
     
    
    23.09.11
            ✎ 
    17:50
 
        
        Такое впечатление, что этот код для строкового типа НомерОрдера ...    
         
 
     
        Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший