Уменьшение длины номера документов.

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. ron1 20.11.12 15:35 Сейчас в теме
Ну вот, перенумераторов полно, а найти что надо не могу. Уже скачала пару обработок, но ничего не подходит. Может кто тут лучше ориентируется и подскажет.
Нужно в ЗУП изменить номера документов сократив их на 5 нулей не меняя номер документа.
Например,
старый номер - КЛ0000000009
нужно получить - КЛ0009.

Есть на сайте такая обработка?
(типовая обр-ка с диска Универсальные подбор и обработка документов" не помогла (или я не сумела правильно настроить))
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. demarine 20.11.12 15:40 Сейчас в теме
в конфигураторе надо длину номера поменять, нули у Вас автоматом добавляются, до нужного количества символов.
3. djd.sf 20.11.12 15:46 Сейчас в теме
(2) насколько мне известно, после данной процедуры старые номера будут сокращены до указанной длины(например так КЛ00000, вместо КЛ0000000009 ) (1)проще самому написать обработку. это несложно. спрашивайте.
4. demarine 20.11.12 15:52 Сейчас в теме
(3) djd.sf, а вот потом перенумератором и пройтись. хотя может лучше подождать, до нового года месяц с хвостиком, а в документе, наверняка, периодичность в пределах года установлена.
5. Lissenok 20.11.12 16:14 Сейчас в теме
есть перенумератор, которым можно обрезать первичные нули, а затем в конфигураторе сократить длину кода. если нужен - пиши в ЛС, я скину
7. ron1 20.11.12 17:17 Сейчас в теме
(5) Lissenok,
а как же префикс? или он обрежет нули, а префикс не тронет?
6. Dmitr033 132 20.11.12 16:23 Сейчас в теме
выборка = Документы.ИмяВидаДокумента.Выбрать();
Пока выборка.Следующий() Цикл
	поз = Найти(выборка.Номер,"00000");
	Если поз > 0 Тогда
		док = выборка.ПолучитьОбъект();
		док.Номер = Лев(выборка.Номер,поз-1)+Сред(выборка.Номер,поз+5);
		док.Записать();
	КонецЕсли;
КонецЦикла;
Показать

Как нибудь так можно, но не проверял. Единственно - лучше период выборки указывать явно, и сразу продумать действия, если 5 нулей не найдется.
8. ron1 20.11.12 17:19 Сейчас в теме
(6) Dmitr033,
в типовой обработке "Универсальные подбор и обработка документов" есть вариант обработки "Произвольный алгоритм". Если этот кусок туда поставить сработает?
9. djd.sf 20.11.12 17:31 Сейчас в теме
а я бы по другому сделал. вот, не проверял:
Процедура НекаяПроцедура()
	Документы = ПолучитьВыборку();
	Отказ = Ложь;
	НачатьТранзакцию();
	
	Пока Документы.Следующий() Цикл
		ОбработкаПрерыванияПользователя();
		ДокументОбъект = Документы.Ссылка.ПолучитьОбъект();
	    ДокументОбъект.ОбменДанными.Загрузка = Истина;
		ДокументОбъект.Номер = ПривестиНомерКДлине(ДокументОбъект.Номер, 12, СтрДлина(Документы.Префикс), 6); 
		Попытка
			ДокументОбъект.Записать();
		Исключение
			Сообщить(ОписаниеОшибки());
			Отказ = Истина;
			Прервать;
		КонецПопытки;
	КонецЦикла; 
	
	Если Отказ Тогда
		ОтменитьТранзакцию();
	Иначе
		ЗафиксироватьТранзакцию();
	КонецЕсли;	
	
КонецПроцедуры
		
		
		
		
Функция	ПривестиНомерКДлине(ИсходныйНомер, ДлинаИсходногоНомера, ДлинаПрефикса, ДлинаНомераРезультата)
		НомерБезПрефикса = Прав(ИсходныйНомер, ДлинаИсходногоНомера-ДлинаПрефикса);
		Пока Лев(НомерБезПрефикса, 1)="0" Цикл
			НомерБезПрефикса = Сред(НомерБезПрефикса, 2, ДлинаИсходногоНомера);
			Если ПустаяСтрока(НомерБезПрефикса) Тогда Прервать; КонецЕсли; //Конец строки
		КонецЦикла;
		НомерБезПрефикса = СокрЛП(НомерБезПрефикса);
		КоличествоНулей = ДлинаНомераРезультата-СтрДлина(НомерБезПрефикса)-ДлинаПрефикса;
		Если КоличествоНулей<0 Тогда ВызватьИсключение "Ошибка"; КонецЕсли;
	    Возврат Префикс+?(КоличествоНулей=0,"",Формат(0, "ЧЦ="+(КоличествоНулей)+"; ЧН=; ЧВН=; ЧГ="))+НомерБезПрефикса;
КонецФункции
Показать
10. djd.sf 20.11.12 18:33 Сейчас в теме
(9) да, кстати - забыл сказать, ПолучитьВыборку() - это некая функция получающая выборку документов и префиксов, а Переменная Документы - моя оплошность. Лучше назвать Выборка. (Документы уже зарезервированное слово.)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот