Имя: Пароль:
1C
1С v8
Сбилась нумерация после обновления на 3.0
0 Trimax
 
06.11.13
14:36
Исходные данные:
Старая версия - БП типовая 2.0.51.
Догнал до БП 3.0.24.9
В итоге сбилась нумерация.
Последний документ до обновления имеет номер БПК00002450, следующий уже 0КБП-000001.

Куда смотреть и что сделать? Гл.буху принципиальна сквозная нумерация.
1 qeos
 
06.11.13
14:37
в справку смотреть
2 Trimax
 
06.11.13
15:11
(1) Молодец. Уж если такой знаток - подскажи как это исправить.
3 zak555
 
06.11.13
15:12
(2) в БП 3 новый принцип нумерации
4 ptiz
 
06.11.13
15:18
В БП 3.0 жестко зашито в процедуре УстановитьПрефикс:

    ШаблонПрефикса = "[ОР][ИБ]-[Префикс]";
    ШаблонПрефикса = СтрЗаменить(ШаблонПрефикса, "[ОР]", ПрефиксОрганизации);
    ШаблонПрефикса = СтрЗаменить(ШаблонПрефикса, "[ИБ]", ПрефиксИнформационнойБазы);
    ШаблонПрефикса = СтрЗаменить(ШаблонПрефикса, "[Префикс]", Префикс);
    
    Префикс = ШаблонПрефикса;
5 Trimax
 
06.11.13
15:20
(4) Спасибо. Ща по-пробую "ковырнуть" её. Ибо дотянуть надо до НГ. А там уж на стандарте будем.
6 Скай
 
06.11.13
15:23
Суровые 1С-ки мануалов не читают, проще ж потом на форуме поспрашивать.

Из http://downloads.v8.1c.ru/content/Accounting/3_0_26_11/ReadMe.txt

Способ нумерации документов в редакции 3.0 изменен по сравнению с редакцией 2.0.
Для правильной нумерации документов необходимо изменить номер первого
создаваемого документа каждого вида так, чтобы он продолжал нумерацию из старой версии.
При этом номера документов, перенесенных из редакции 2.0,
в печатных формах будут отображаться правильно.
Например, последний номер документа «Реализация товаров и услуг» был 00000000131.
После обновления на редакцию 3.0 первый введенный документ будет иметь номер 0000-000001.
Чтобы сохранить правильную нумерацию, необходимо в этом документе изменить номер на 0000-000132.
В дальнейшем всем введенным документам «Реализация товаров, услуг» будет присваиваться правильный номер.
7 vladko
 
06.11.13
15:23
где-то здесь в темах проскакивала ссылка про рекомендации 1С по переходу на 3.0 Там есть абзац, что делать, чтобы не слишком коверкалась нумерация
8 mortal
 
06.11.13
15:44
не претендую на красоту решения, сделал так:
добавил общий модуль, в котором 1 функция

Функция ПолучитьНомер(Ссылка) Экспорт

    ДокИмя = Ссылка.Метаданные().Имя;
    Запрос = Новый Запрос;
    Запрос.Текст =  
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |    " + ДокИмя + ".Ссылка,
    |    " + ДокИмя + ".Дата,
    |    " + ДокИмя + ".Номер КАК Номер
    |ИЗ
    |    Документ." + ДокИмя + " КАК " + ДокИмя + "
    |ГДЕ
    |    " + ДокИмя + ".Дата МЕЖДУ &ДатаНачала И &ДатаКонца
    //|    И " + ДокИмя + ".ПометкаУдаления = ЛОЖЬ
    |    И " + ДокИмя + ".Ссылка <> &ЭтотОбъект
    |    И ПОДСТРОКА(" + ДокИмя + ".Номер, 1, 5) <> ""-""
    |    И ПОДСТРОКА(" + ДокИмя + ".Номер, 1, 1) = ""0""
    |
    |УПОРЯДОЧИТЬ ПО
    |    Номер УБЫВ";
    
    Запрос.УстановитьПараметр("ДатаНачала", '20130101000000');  
    Запрос.УстановитьПараметр("ДатаКонца",  '20131231235959');      
    Запрос.УстановитьПараметр("ЭтотОбъект", Ссылка);
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    Выборка.Следующий();                                  
    НомерЧислом = Число(Прав(Выборка.Номер,6));
    НовыйНомерСтрокой = Формат((НомерЧислом + 1),"ЧГ=0");
    Если СтрДлина(НовыйНомерСтрокой) = 1 Тогда
        НовыйНомерСтрокой = ("0000000000" + НовыйНомерСтрокой);
    ИначеЕсли СтрДлина(НовыйНомерСтрокой) = 2 Тогда
        НовыйНомерСтрокой = ("000000000" + НовыйНомерСтрокой);
    ИначеЕсли СтрДлина(НовыйНомерСтрокой) = 3 Тогда
        НовыйНомерСтрокой = ("00000000" + НовыйНомерСтрокой);
    ИначеЕсли СтрДлина(НовыйНомерСтрокой) = 4 Тогда
        НовыйНомерСтрокой = ("0000000" + НовыйНомерСтрокой);
    ИначеЕсли СтрДлина(НовыйНомерСтрокой) = 5 Тогда
        НовыйНомерСтрокой = ("000000" + НовыйНомерСтрокой);
    КонецЕсли;
    
    Возврат(НовыйНомерСтрокой);
        
КонецФункции


в модуле объекта нужных документов (для которых обязательна сквозная нумерация до конца года) добавил

//mortal temp+
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    
    Если ЭтотОбъект.ЭтоНовый() Тогда
        Если ЭтотОбъект.Дата <= '20140101000000' И ТекущаяДата() <= '20140101000000' Тогда
            ЭтотОбъект.Номер = mortalАвтонумерация.ПолучитьНомер(ЭтотОбъект.Ссылка);    
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры
//mortal temp-

Все.
в начале след года можно сие без труда почистить :)
П.С. говн0кодность в общем модуле из-за наличия в базе вручную пронумерованных документов :(
Программист всегда исправляет последнюю ошибку.