helpf.pro
Регистрация

v8: Перенумерация документа

Ermak
04.04.2013 16:12Прочитано: 3010
Скачал обработку для перенумерации документа, исправил номера документам и увидел что когда номер переходит за тысячу то ставит пробел, например 000001 235, подскажите как исправить чтобы не было пробела, вот код

Код 1C v 8.х
 Если (СпособОбработкиПрефиксов = 1) И (НеИзменятьЧисловуюНумерацию) Тогда
Возврат 0;
КонецЕсли;

Если (НачальныйНомер = 0) И (Не НеИзменятьЧисловуюНумерацию) Тогда
Предупреждение("Измените начальный номер!");
Возврат 0;
КонецЕсли;

Если Не НеИзменятьЧисловуюНумерацию Тогда
ЧисловаяЧастьНомера = НачальныйНомер;
КонецЕсли;

НеУникальныеНомера = Новый Соответствие;
МаксимальныйНомер = Число(ДополнитьСтрокуСимволами("", мДлинаНомера, "9"));

//--------------------------------------------------------------------------------------------------

Для Сч = 0 По НайденныеОбъекты.Количество()-1 Цикл

ОбработкаПрерыванияПользователя();

Строка = НайденныеОбъекты.Получить(Сч);
Если Не Строка.Пометка Тогда
Продолжить;
КонецЕсли;

Объект = Строка.Объект.ПолучитьОбъект();


//Здесь может быть написан произвольный алгоритм обработки объектов.
Сообщить(ЧисловаяЧастьНомера);

Если мТипНомера = "Число" Тогда
Если Не НеИзменятьЧисловуюНумерацию Тогда
Если мИмяТипаОбъектов = "Документ" Тогда
Сообщить(ЧисловаяЧастьНомера);
Объект.Номер = ЧисловаяЧастьНомера;
Иначе
Объект.Код = ЧисловаяЧастьНомера;
КонецЕсли;
Попытка
Объект.Записать();
Исключение
Если мИмяТипаОбъектов = "Документ" Тогда
Объект.Номер = МаксимальныйНомер - Сч;
Иначе
Объект.Код = МаксимальныйНомер - Сч;
КонецЕсли;
Объект.Записать();
НеУникальныеНомера.Вставить(ЧисловаяЧастьНомера, Объект.Ссылка);
КонецПопытки;
ЧисловаяЧастьНомера = ЧисловаяЧастьНомера + 1;
КонецЕсли;
Продолжить;
КонецЕсли;


Если мИмяТипаОбъектов = "Документ" Тогда
ТекНомер = СокрЛП(Объект.Номер);
Иначе
ТекНомер = СокрЛП(Объект.Код);
КонецЕсли;

Если НеИзменятьЧисловуюНумерацию Тогда
СтроковаяЧастьНомера = ПолучитьПрефиксЧислоНомера(ТекНомер, ЧисловаяЧастьНомера);
Иначе
СтроковаяЧастьНомера = ПолучитьПрефиксЧислоНомера(ТекНомер);
КонецЕсли;


Если СпособОбработкиПрефиксов = 1 Тогда
НовыйНомер = СтроковаяЧастьНомера;
ИначеЕсли СпособОбработкиПрефиксов = 2 Тогда
НовыйНомер = СокрЛП(СтрокаПрефикса);
ИначеЕсли СпособОбработкиПрефиксов = 3 Тогда
НовыйНомер = СокрЛП(СтрокаПрефикса) + СтроковаяЧастьНомера;
ИначеЕсли СпособОбработкиПрефиксов = 4 Тогда
НовыйНомер = СтроковаяЧастьНомера + СокрЛП(СтрокаПрефикса);
ИначеЕсли СпособОбработкиПрефиксов = 5 Тогда
НовыйНомер = СтрЗаменить(СтроковаяЧастьНомера, СокрЛП(ЗаменяемаяПодстрока), СокрЛП(СтрокаПрефикса));
КонецЕсли;

Пока мДлинаНомера - СтрДлина(НовыйНомер) - СтрДлина(ЧисловаяЧастьНомера) > 0 Цикл
НовыйНомер = НовыйНомер + "0";
КонецЦикла;

НовыйНомер = НовыйНомер + Строка(ЧисловаяЧастьНомера);
Сообщить("НовыйНомер"+ НовыйНомер);
Если мИмяТипаОбъектов = "Документ" Тогда
Объект.Номер = НовыйНомер;
Иначе
Объект.Код = НовыйНомер;
КонецЕсли;

Попытка
Объект.Записать();
Исключение
Если мИмяТипаОбъектов = "Документ" Тогда
Объект.Номер = Формат(МаксимальныйНомер - Сч, "ЧГ=0");
Иначе
Объект.Код = Формат(МаксимальныйНомер - Сч, "ЧГ=0");
КонецЕсли;
Объект.Записать();
НеУникальныеНомера.Вставить(НовыйНомер, Объект.Ссылка);
КонецПопытки;

Если Не НеИзменятьЧисловуюНумерацию Тогда
ЧисловаяЧастьНомера = ЧисловаяЧастьНомера + 1;
КонецЕсли;

КонецЦикла;

Для каждого Зн Из НеУникальныеНомера Цикл
НовыйНомер = Зн.Ключ;
Объект = Зн.Значение.ПолучитьОбъект();
Если мИмяТипаОбъектов = "Документ" Тогда
Объект.Номер = НовыйНомер;
Иначе
Объект.Код = НовыйНомер;
КонецЕсли;
Попытка
Объект.Записать();
Исключение
Сообщить("Повтор номера: " + НовыйНомер + " за пределами данной выборки!");
КонецПопытки;
КонецЦикла;

Возврат Сч;
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
04.04.2013 16:50Ответ № 1
Везде где идет установка НовыйНомер замени на
Код 1C v 8.х
  Формат(НовыйНомер, "ЧГ=0");   
Ermak
04.04.2013 17:35Ответ № 2
сделал так не помогло

Код 1C v 8.х
 	Если (СпособОбработкиПрефиксов = 1) И (НеИзменятьЧисловуюНумерацию) Тогда
Возврат 0;
КонецЕсли;

Если (НачальныйНомер = 0) И (Не НеИзменятьЧисловуюНумерацию) Тогда
Предупреждение("Измените начальный номер!");
Возврат 0;
КонецЕсли;

Если Не НеИзменятьЧисловуюНумерацию Тогда
ЧисловаяЧастьНомера = НачальныйНомер;
КонецЕсли;

НеУникальныеНомера = Новый Соответствие;
МаксимальныйНомер = Число(ДополнитьСтрокуСимволами("", мДлинаНомера, "8"));

//--------------------------------------------------------------------------------------------------

Для Сч = 0 По НайденныеОбъекты.Количество()-1 Цикл

ОбработкаПрерыванияПользователя();

Строка = НайденныеОбъекты.Получить(Сч);
Если Не Строка.Пометка Тогда
Продолжить;
КонецЕсли;

Объект = Строка.Объект.ПолучитьОбъект();


//Здесь может быть написан произвольный алгоритм обработки объектов.
Сообщить(ЧисловаяЧастьНомера);

Если мТипНомера = "Число" Тогда
Если Не НеИзменятьЧисловуюНумерацию Тогда
Если мИмяТипаОбъектов = "Документ" Тогда
Сообщить(ЧисловаяЧастьНомера);
Объект.Номер = ЧисловаяЧастьНомера;
Иначе
Объект.Код = ЧисловаяЧастьНомера;
КонецЕсли;
Попытка
Объект.Записать();
Исключение
Если мИмяТипаОбъектов = "Документ" Тогда
Объект.Номер = МаксимальныйНомер - Сч;
Иначе
Объект.Код = МаксимальныйНомер - Сч;
КонецЕсли;
Объект.Записать();
НеУникальныеНомера.Вставить(ЧисловаяЧастьНомера, Объект.Ссылка);
КонецПопытки;
ЧисловаяЧастьНомера = ЧисловаяЧастьНомера + 1;
КонецЕсли;
Продолжить;
КонецЕсли;


Если мИмяТипаОбъектов = "Документ" Тогда
ТекНомер = СокрЛП(Объект.Номер);
Иначе
ТекНомер = СокрЛП(Объект.Код);
КонецЕсли;

Если НеИзменятьЧисловуюНумерацию Тогда
СтроковаяЧастьНомера = ПолучитьПрефиксЧислоНомера(ТекНомер, ЧисловаяЧастьНомера);
Иначе
СтроковаяЧастьНомера = ПолучитьПрефиксЧислоНомера(ТекНомер);
КонецЕсли;


Если СпособОбработкиПрефиксов = 1 Тогда
НовыйНомер = СтроковаяЧастьНомера;
ИначеЕсли СпособОбработкиПрефиксов = 2 Тогда
НовыйНомер = СокрЛП(СтрокаПрефикса);
ИначеЕсли СпособОбработкиПрефиксов = 3 Тогда
НовыйНомер = СокрЛП(СтрокаПрефикса) + СтроковаяЧастьНомера;
ИначеЕсли СпособОбработкиПрефиксов = 4 Тогда
НовыйНомер = СтроковаяЧастьНомера + СокрЛП(СтрокаПрефикса);
ИначеЕсли СпособОбработкиПрефиксов = 5 Тогда
НовыйНомер = СтрЗаменить(СтроковаяЧастьНомера, СокрЛП(ЗаменяемаяПодстрока), СокрЛП(СтрокаПрефикса));
КонецЕсли;

Пока мДлинаНомера - СтрДлина(Формат(НовыйНомер, "ЧГ=0")) - СтрДлина(ЧисловаяЧастьНомера) > 0 Цикл
НовыйНомер = Формат(НовыйНомер, "ЧГ=0") + "0";
КонецЦикла;

НовыйНомер = Формат(НовыйНомер, "ЧГ=0") + Строка(ЧисловаяЧастьНомера);
Сообщить("НовыйНомер"+ Формат(НовыйНомер, "ЧГ=0"));
Если мИмяТипаОбъектов = "Документ" Тогда
Объект.Номер = Формат(НовыйНомер, "ЧГ=0");
Иначе
Объект.Код = Формат(НовыйНомер, "ЧГ=0");
КонецЕсли;

Попытка
Объект.Записать();
Исключение
Если мИмяТипаОбъектов = "Документ" Тогда
Объект.Номер = Формат(МаксимальныйНомер - Сч,"ЧГ=0");

Иначе
Объект.Код = Формат(МаксимальныйНомер - Сч, "ЧГ=0");

КонецЕсли;
Объект.Записать();
НеУникальныеНомера.Вставить(Формат(НовыйНомер, "ЧГ=0"), Объект.Ссылка);
КонецПопытки;

Если Не НеИзменятьЧисловуюНумерацию Тогда
ЧисловаяЧастьНомера = ЧисловаяЧастьНомера + 1;
КонецЕсли;

КонецЦикла;

Для каждого Зн Из НеУникальныеНомера Цикл
НовыйНомер = Зн.Ключ;
Объект = Зн.Значение.ПолучитьОбъект();
Если мИмяТипаОбъектов = "Документ" Тогда
Объект.Номер = Формат(НовыйНомер, "ЧГ=0");
Иначе
Объект.Код = Формат(НовыйНомер, "ЧГ=0");
КонецЕсли;
Попытка
Объект.Записать();
Исключение
Сообщить("Повтор номера: " + Формат(НовыйНомер, "ЧГ=0") + " за пределами данной выборки!");
КонецПопытки;
КонецЦикла;

Возврат Сч;
ivan232
04.04.2013 19:00Ответ № 3
Код 1C v 8.х
 
Объект.Номер = ЧисловаяЧастьНомера;

замените на:
Код 1C v 8.х
 
Объект.Номер = Формат(ЧисловаяЧастьНомера, "ЧГ=0");
DJ_Serega
04.04.2013 22:41Ответ № 4
А я бы сделал так:
Код 1C v 8.х
 
НомерДокумента = "Какой-то номер";
НомерДокумента = СокрЛП(НомерДокумента);
НомерДокумента = СтрЗаменить(НомерДокумента, " ", ""); // Убирает символ " " (строковый пробел).
НомерДокумента = СтрЗаменить(НомерДокумента, Символ(160), ""); // Как ни странно, но есть и числовой пробел. А символ его "160". Обычно ставил "костыль" в код, когда нужно коды УКТ ВЭД без пробелов выводить на печать.

НомерВДокумент = НомерДокумента;

Изменено 04.04.13 22:41:44 по причине: Забыл в код превратить текст =)
typeharley
04.04.2013 23:45Ответ № 5
Что вы гоните, на сколько я понял то речь идет про Символы.НПП - непечатаемый пробел. Либо измени параметры базы навсегда, либо майся с СтрЗаменить(НомерДокумента, Символы.НПП, ""). Дело ваше!
Ermak
05.04.2013 08:29Ответ № 6
(5) typeharley, Я не понял это кому вы адресовали )
Ermak
05.04.2013 09:50Ответ № 7
(3) ivan232, исправил все равно тоже самое
Ermak
05.04.2013 09:52Ответ № 8
(4) DJ_Serega, а что вы предлагаете заменить?
Ermak
05.04.2013 09:53Ответ № 9
А может есть у кого нибудь обработка перенумерация документов, только чтобы организация была не обязательна.
Ermak
09.04.2013 08:33Ответ № 10
???
DJ_Serega
09.04.2013 12:14Ответ № 11
(10) Ermak, у тебя есть обработка такая? Там сложно убрать отбор по организации?
Ermak
09.04.2013 13:08Ответ № 12
я пытался не получилось, может у Вас получится, посмотрите. Версия 8.1

Скачивать файлы может только зарегистрированный пользователь!
Ermak
18.04.2013 12:27Ответ № 13
Вопрос закрыт!
Подсказка: Вы получили ответ на свой вопрос - закройте вопрос!
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.