Имя: Пароль:
1C
1С v8
Замена префикса у всех номеров документов.
0 lirt82
 
01.08.17
08:08
Наваял обработку, она должна перебирать все доки если находит в номере дока первый символ как букву тогда должна взять из реквизита формы НовыйПрефикс и заменить первые три символа на новый префикс из поля реквизита НовыйПрефикс, в результате выполнения у меня ошибка был номер 000000001 а после выполнения обработки становиться БУХБУХБУХ1, подскажите как исправить, должен быть номер БУХ000001.
1 lirt82
 
01.08.17
08:08
Наваял обработку, она должна перебирать все доки если находит в номере дока первый символ как букву тогда должна Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    Если НЕ ЗначениеЗаполнено(НовыйПрефикс) Тогда
        Предупреждение("Укажите новый префикс!");
        Возврат
    КонецЕсли;    
    
    //переберем все документы содержащие префикс (буквы)
    Запрос=Новый Запрос;
    Текст="";
    Для Каждого Документ Из Метаданные.Документы Цикл
        Текст=Текст+"ВЫБРАТЬ Ссылка ИЗ Документ."+Документ.Имя+" ОБЪЕДИНИТЬ ";
    КонецЦикла;
    Запрос.Текст=Лев(Текст,СтрДлина(Текст)-СтрДлина(" ОБЪЕДИНИТЬ "));
    Выборка=Запрос.Выполнить().Выгрузить(); //выгрузили в ТЗ
    
    Для каждого Стр Из Выборка Цикл //ищем префикс содержащий буквы, если первый символ в номере это буква тогда убираем префикс и добавляем свой
        Док = Стр.Ссылка.ПолучитьОбъект();
        ИщемБуквы =    Найти("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ", Лев(Док.Номер, 1));
        Если ИщемБуквы = 0 Тогда
            Продолжить;
            Иначе
            НовыйНомерДока = СтрЗаменить(Док.Номер, Лев(Док.Номер, 3), НовыйПрефикс);
            Док.Номер = НовыйНомерДока;
            Док.Записать();
            Сообщить(Док);
            Выборка.Удалить(Стр);
        КонецЕсли;
    КонецЦикла;    
    
КонецПроцедуры
2 Lexey_
 
01.08.17
08:19
(1) вопрос-то какой?
3 lirt82
 
01.08.17
08:21
в результате выполнения этого кода был номер 000000001 а после выполнения обработки становиться БУХБУХБУХ1, а должен быть номер БУХ000001
4 1dvd
 
01.08.17
08:22
//НовыйНомерДока = СтрЗаменить(Док.Номер, Лев(Док.Номер, 3), НовыйПрефикс);

НовыйНомерДока = НовыйПрефикс + Сред(Док.Номер, СтрДлина(Док.Номер)+1);
5 1dvd
 
01.08.17
08:23
(4)* пардон, не так

НовыйНомерДока = НовыйПрефикс + Сред(Док.Номер, СтрДлина(НовыйПрефикс )+1);
6 mehfk
 
01.08.17
08:24
(0) >> ...подскажите как исправить...
Наваять правильную обработку.
7 DrZombi
 
гуру
01.08.17
08:35
Используй

ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>)
УстановитьНовыйНомер (SetNewNumber)
Синтаксис:

УстановитьНовыйНомер(<ПрефиксНомера>)
Параметры:

<ПрефиксНомера> (необязательный)

Тип: Строка.
Префикс устанавливаемого номера.
Значение по умолчанию: Пустая строка.
Описание:

Устанавливает новый номер документа для заданного префикса номера.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Примечание:

Для документов с нумерацией в пределах периода, номер устанавливается в пределах периода, соответствующего установленной дате документа. Если дата - пустая, процедура установит номер в пределах периода соответствующего пустой дате.
Пример:

РасходнаяНакладная.УстановитьНовыйНомер(ПрефиксИБ);
8 catena
 
01.08.17
08:36
За 8 лет ни разу СтрЗаменить не применял??
9 DrZombi
 
гуру
01.08.17
08:37
+(0)Познай для себя

Глобальный контекст (Global context)
ОбновитьНумерациюОбъектов (RefreshObjectsNumbering)
Синтаксис:

ОбновитьНумерациюОбъектов(<Метаданные>)
Параметры:

<Метаданные> (необязательный)

Тип: Массив; ОбъектМетаданных:
10 lirt82
 
01.08.17
08:47
(7) то что нужно:-)
11 lirt82
 
01.08.17
11:09
Сделал так
Для каждого Стр Из Выборка Цикл
        Док = Стр.Ссылка.ПолучитьОбъект();
        Док.УстановитьНовыйНомер(НовыйПрефикс);
            Док.Записать();
            Сообщить(Док);
        КонецЦикла;    
теперь если у документа был номер БУХ000001, то в поле реквизита я поставил ККК, после обработки номер стал БУХККК001, не совсем правильно
12 lirt82
 
01.08.17
11:10
было БУХ000001 а должно стать ККК000001
13 Дмитрий
 
01.08.17
11:18
(12) УстановитьНовыйНомер() тебе и числовую часть перенумерует.

смотри (5), если у тебя старый и новый префиксы одинаковой длины
14 Ц_У
 
01.08.17
11:21
смотри подписку на событие установки номера
префиксбазы + префиксорганизации + префикс + номер