Имя: Пароль:
1C
 
Как можно улучшить Обработку?
0 pro3ri
 
15.06.15
10:41
День добрый!
Написал обработку для восстановления нумерации. Как можно улучшить?


&НаСервере
Процедура ОКНаСервере()


    Строка = "%"+ Строка+ "%";    
    //ищем максимальный номер
    ЗапросМаксНомер = Новый Запрос;
    ЗапросМаксНомер.Текст =
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |    Номенклатура.Код КАК Код,
        |    Номенклатура.Ссылка КАК Ссылка
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    НЕ Номенклатура.Код ПОДОБНО &Строка
        |
        |УПОРЯДОЧИТЬ ПО
        |    Код УБЫВ";
    ЗапросМаксНомер.УстановитьПараметр("Строка", Строка);
    
    РезультатЗапроса = ЗапросМаксНомер.Выполнить();
    Если РезультатЗапроса.Пустой() Тогда
    
        Сообщить("нет максимального номера!");        
        
    Иначе
        Сообщить("есть макс номер!");
    
    КонецЕсли;
    ВыборкаМаксНомер = РезультатЗапроса.Выбрать();
    ВыборкаМаксНомер.Следующий();
    ТекущийКод = ВыборкаМаксНомер.Код;
    ДлинаНомера = СтрДлина(ТекущийКод);
    
    //ищем неправильные номера
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка КАК Ссылка
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.Код ПОДОБНО &Строка";
    Запрос.УстановитьПараметр("Строка", Строка);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    НовыйНомер = "";    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Объект1 = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
        
        Если Не ЗначениеЗаполнено(НовыйНомер) Тогда
        
            НовыйНомер = (Число(ТекущийКод))+1;
            
        Иначе
            
            НовыйНомер = (Число(НовыйНомер))+1;
            
        КонецЕсли;
        НовыйНомерБезПробелов = Строка(СтрЗаменить(НовыйНомер,Символ(160),""));
        ДлинаНовогоНомера = СтрДлина(НовыйНомерБезПробелов);
        РазницаВДлине = ДлинаНомера - ДлинаНовогоНомера;
        Пока РазницаВДлине>0 Цикл
        
            НовыйНомерБезПробелов = "0"+НовыйНомерБезПробелов;
            РазницаВДлине = РазницаВДлине - 1;
        
        КонецЦикла;
        
        Объект1.Код = НовыйНомерБезПробелов;
        Объект1.Записать();
    КонецЦикла;

    
КонецПроцедуры

&НаКлиенте
Процедура ОК(Команда)
    ОКНаСервере();
    Сообщить("Обработка успешно завершена");
КонецПроцедуры
1 pro3ri
 
15.06.15
10:42
на форме поле ввода строка