Имя: Пароль:
1C
1С v8
Автонумерация с префиксом
0 Arutynov
 
02.04.13
08:47
Надо чтобы при создании обработкой документа автонумерация шла с префиксом.
Пробовал вот так
МАГ=Документы.ОтчетОРозничныхПродажах.СоздатьДокумент();
Маг.УстановитьНовыйНомер("М");
Пишет номер не уникальный. В базе все номера нормальные
1 mikecool
 
02.04.13
08:49
"В базе все номера нормальные" - может конечно и нормальные
посмотреть какой номер генерится после Маг.УстановитьНовыйНомер("М");  и поискать такой же в базе
2 Arutynov
 
02.04.13
08:50
Может кто-то знает что не так или еще способ?
3 Serg_1960
 
02.04.13
08:50
Забыл про дату. Где дата для пространства автонумерации? Или у тебя нумерация "сквозная" по всей базе?
4 Siberia
 
02.04.13
08:50
Из синтакс-помощника про УстановитьНовыйНомер():

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

может дату сначала в документ занести?
5 Arutynov
 
02.04.13
08:53
Поменял местами. Сначала дата потом установить. Пишет обычный номер
6 Serg_1960
 
02.04.13
08:53
И вот ещё: в актуальных конфигурациях номер (как и код) присваиваются при записи объекта. Мелочь, но...
7 Arutynov
 
02.04.13
08:54
попробовал только что перед записью.. делает тоже самое. Обычный номер
8 Siberia
 
02.04.13
08:57
может вот таким событием воспользоваться:

ПриУстановкеНовогоНомера(<СтандартнаяОбработка>, <Префикс>)

и отменить стандартную обработку?
9 Arutynov
 
02.04.13
09:00
10 Arutynov
 
02.04.13
09:00
пробовал
11 Serg_1960
 
02.04.13
09:02
12 Serg_1960
 
02.04.13
09:07
Маг = Документы.ОтчетОРозничныхПродажах.СоздатьДокумент();
Маг.Дата = ТекущаяДата();
Маг.УстановитьНовыйНомер("М");
Маг.Записать(РежимЗаписиДокумента.Запись);
Сообщить(Маг.Номер);
13 Arutynov
 
02.04.13
09:12
У меня именно так и сделано. Сообщает 00000000212
14 Siberia
 
02.04.13
09:14
(13) А тип номера у документа строковый?
15 Arutynov
 
02.04.13
09:17
Да стандартный
16 Serg_1960
 
02.04.13
09:30
Подписка на событие ПриУстановкеНовогоНомераДокумента "сносит" твой префикс. Первой же строкой при вызове процедуры ДобавитьПрефиксОрганизации(ДокументОбъект, Префикс):

Процедура ДобавитьПрефиксОрганизации(ДокументОбъект, Префикс) Экспорт
   
   // Если в документе нет реквизита "Организация" или для организации не задан префикс,
   // то используем пустой префикс, иначе используем префикс организации.
   Префикс = "0";
...
17 Arutynov
 
02.04.13
09:39
То же самое.
18 Arutynov
 
02.04.13
09:41
Процедура ПриУстановкеНовогоНомераДокументаПриУстановкеНовогоНомера(Источник, СтандартнаяОбработка, Префикс) Экспорт
   ОбщегоНазначения.ДобавитьПрефиксОрганизации(Источник, Префикс);
   ОбщегоНазначения.ДобавитьПрефиксУзла(Префикс);
КонецПроцедуры
Процедура ДобавитьПрефиксОрганизации(ДокументОбъект, Префикс) Экспорт

   МетаданныеДокумента = ДокументОбъект.Метаданные();
   Префикс = "М";
Конецпроцедуры
19 Arutynov
 
02.04.13
09:42
Я что-то не правильно делаю
20 Arutynov
 
02.04.13
09:42
!
21 Arutynov
 
02.04.13
09:49
Процедура ПриУстановкеНовогоНомераДокумента(ДокументОбъект, СтандартнаяОбработка, Префикс) Экспорт
   ДобавитьПрефиксОрганизации(ДокументОбъект, Префикс);
Конецпроцедуры
Процедура ДобавитьПрефиксОрганизации(ДокументОбъект, Префикс) Экспорт
   МетаданныеДокумента = ДокументОбъект.Метаданные();
   Префикс = "М";
Конецпроцедуры
22 Arutynov
 
02.04.13
09:50
Что надо дописать.
23 Arutynov
 
02.04.13
09:50
Что не так
24 Arutynov
 
02.04.13
09:51
Вот сюда ничего дописать не надо ?

Маг = Документы.ОтчетОРозничныхПродажах.СоздатьДокумент();
Маг.Дата = ТекущаяДата();
Маг.УстановитьНовыйНомер("М");
Маг.Записать(РежимЗаписиДокумента.Запись);
Сообщить(Маг.Номер);
25 Trotter
 
02.04.13
09:51
(24) Ты случайно эо всё не на клиенте пытаешься провернуть ?
26 Arutynov
 
02.04.13
09:52
У меня бухгалтерия корп 2.0  толстый клиент
27 Trotter
 
02.04.13
09:53
&НаСервере или на &НаКлиенте ?
Хотя это наверное роли не играет ?)
28 Arutynov
 
02.04.13
09:53
у меня нет такого. У меня не тонкий
29 Arutynov
 
02.04.13
10:04
и так попробовал http://www.1c-pro.ru/topic44934.html
30 Serg_1960
 
02.04.13
10:17
Надо внедриться в типовой механиз автонумерации. Способов - много. Вот, например, только что не долго думая написал "дополнение" для типовой процедуры типовой конфигурации :))

Процедура ПриУстановкеНовогоНомераДляДокументов(Источник, СтандартнаяОбработка, Префикс) Экспорт
   ЗнаюЧтоПишуБыдлоКодНоМнеДоФени = Префикс;
   ДобавитьПрефиксОрганизации(Источник, Префикс);
   ДобавитьПрефиксУзла(Префикс);
   Если ЗначениеЗаполнено(ЗнаюЧтоПишуБыдлоКодНоМнеДоФени) Тогда Префикс = ЗнаюЧтоПишуБыдлоКодНоМнеДоФени + Префикс КонецЕсли;
КонецПроцедуры
31 Serg_1960
 
02.04.13
10:18
:)
32 Arutynov
 
02.04.13
10:24
мне нельзя внедрятся в конфу
33 Serg_1960
 
02.04.13
10:50
Ну тогда сам генерируй номер. Определи по метаданным период автонумерации; запросом получи максимальный номер; выдели и увеличь на единицу цифровую часть номера... Долго и муторно. Но если низя, но очень хочетца...

Внимание: быдлокод детектед!

   Маг = Документы.ОтчетОРозничныхПродажах.СоздатьДокумент();
   Маг.Дата = ТекущаяДата();
   РИБ = ПараметрыСеанса.ИспользованиеРИБ;
   ПрефиксУзла = ПараметрыСеанса.ПрефиксУзлаРаспределеннойИнформационнойБазы;
   ПараметрыСеанса.ИспользованиеРИБ = Истина;
   ПараметрыСеанса.ПрефиксУзлаРаспределеннойИнформационнойБазы = "М" + ПрефиксУзла;
   Маг.Записать(РежимЗаписиДокумента.Запись);
   ПараметрыСеанса.ИспользованиеРИБ = РИБ;
   ПараметрыСеанса.ПрефиксУзлаРаспределеннойИнформационнойБазы = ПрефиксУзла;
   Сообщить(Маг.Номер);
34 Reset
 
02.04.13
10:54
Вот тут имхо собака порылась (14)
Числовой поди номер-то
35 Serg_1960
 
02.04.13
10:55
(34) Ведущие нули есть - не числовой, строчный
36 Reset
 
02.04.13
10:56
(35) Точно)
37 Reset
 
02.04.13
10:58
Маг = Документы.ОтчетОРозничныхПродажах.СоздатьДокумент();
Маг.Дата = ТекущаяДата();
Маг.УстановитьНовыйНомер("М");
Сообщить(Маг.Номер); // если здесь с префиксом
Маг.Записать(РежимЗаписиДокумента.Запись);
Сообщить(Маг.Номер); // а здесь нет
// то (16) :)
38 Reset
 
02.04.13
10:59
опять фигню сказал.
Ладно, самоустраняюсь :)
39 Arutynov
 
02.04.13
12:30
Спасибо всем помогла (33)
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой