Имя: Пароль:
1C
1С v8
Неоптимальная работа УстановитьНомерОрдера() в ПКО конфы УТП?
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
Такое впечатление, что этот код для строкового типа НомерОрдера ...
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший