Небольшая заметочка на заданную тему. В моем конкретном случае документы вводились много и часто «задним числом». Для решения проблеммы выработали следующие правила нумерации:
(Префикс)(Месяц)(День)/(Порядковый номер внутри дня)
Все это хозяйство прописывается в учетной политике, чтобы потом не было ни у кого претензий.
Далее находим подписку на событие «ПриУстановкеНовогоНомера» и в нее добавляем немного кода. При минимальных изменениях мы получаем возможность автоматической нумерации документов в пределах дня и красоту при вводе документов задним числом. Плюс гибкие возможности распространить данный механизм только на определенные виды документов и только по определенным организациям.
Буду рад если это кому то поможет.
На примере БП 2.0 подписку на событие «ПриУстановкеНовогоНомера» отрабатывет следующая процедура
Процедура ПриУстановкеНовогоНомераДокумента(Источник, СтандартнаяОбработка, Префикс) Экспорт
ОбщегоНазначения.ДобавитьПрефиксОрганизации(Источник, Префикс);
ОбщегоНазначения.ДобавитьПрефиксУзла(Префикс);
Конецпроцедуры
Нам нужно добавить немного кода в процедуру ДобавитьПрефиксОрганизации. Для ленивых код в файле на примере Бухгалтерия Предприятия 2.0.
P.S. Внимание! Решение не полностью универсальное и верно только при создании новых документов. При изменении даты ранее сохраненного документа с номером ничего не произойдет — он останется старым. Решения пути два — либо пользователь сам следит за теми документами в которых меняется дата, либо нужно создавать подписку на событие «ПередЗаписью» и в ней контролировать соответствие префикса номера и даты документа.
P.P.S. Механизм нумерации в БП 3 изменился и приведенный код работать там не будет.
Пишу это, чтобы потом ни у кого не было претензий и недоразумений, как правильно мне указали товарищи в комментариях.
Это уже такое бородатое ноу-хау. Еще помнится году в 1999 такое на 7.5 клиенту делал.
Только слэш я бы не ставил. Не красиво 🙂 Лучше дефис после префикса.
(1) Некто A. Petti, да уж… старье
(1) (2) Полностью с Вами согласен. И всем это известно, кто давно в автоматизации. Тут показано как просто это делается в 1С 8.2 типовых (ну не было в 7-ке механизма событий без использования внешних компонент). При этом 1С сама занимается автонумерацией внутри дня. Да и я знаю что решение не полностью универсальное. Ну опять же очевидное, при изменении даты документа с номером ничего не произойдет — он останется старым. Наверное можно что-то еще накопать из менее очевидного.
Статья была призвана показать где и как такой тип нумерации делается.
А как решается изменение дня в уже записанном документе?
Ничего в этой нумерации хитрого нет…. Накладные — да, Счет-фактуры и Кассовые ордеры — НЕТ!
У нас так договоры нумеруются(они документами оформляются). Но может кому-нибудь такая информация пригодится поэтому +
а с фига ли извините за вопрос счета фактуры так не могут нумероваться?))
и второе, почему то у меня в 3.0 не заходит в эту подписку на событие, хоть прибей ее(
в ноябре пропустила 1 сч-ф, корячилась в рукопашную. Вашу бы информацию мне тогда….
возьмем на заметку
Без ответа на (4) это только часть механизма, который может привести к плачевным последствиям. Особенно если дату поменять на другой год …
Да и в новых типовых на БСП номер по другому формируется.
(10) Я не говорил, что задача решена целиком. В (3) я сам написал, что есть такая проблема. Но красивого и короткого решения тут не получится. Навскидку, чтобы не корячить много кода и форм документов нужно делать подписку на событие «ПриЗаписи» и в нем проверять соответствие префикса номера и даты документа. И тут возникнет дилема, а отправлен ли данный документ покупателю и можно ли менять его номер вообще….
Тут скорее вопрос не в программировании был, а в том чтобы подсказать как можно организовать нумерацию документов, чтобы не было проблемм с вводом документов задним числом не более того.
(10) Да, видимо, пора уже глянуть на БП 3. Уже и формирование номеров по другому сделали. Посмотрю что да как там и отпишусь как это реализовать там. Спасиб за информацию.
(11) Поэтому и нужно предупредить читателей в статье (а некоторые пока не очень опытны в программировании), что может возникнуть такая проблема, пусть и не описывая конкретное решении (через подписку или через изменение формы).
Может пригодиться
Показать
давно очень — делали такой вариант
(7) friday1, счет-фактуры так не могут нумероваться по причине постановления 1137, где указано, что располагается за символом «/»
(16) BabySG, ну про / это понятно, а я говорю про тирэ))
/ должны нумероватсья счета фактуры обособленнок, это то мы в курсе:)
автор, посмотри пожалуста на 3.0)
очень надо для себя:)
заранее благоадарен)
(17) В БП 3 нумерация происходит по следующей подписке на событие
ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазыИОрганизации
Далее рассмотрим ее код
Показать
Идем в процедуру УстановитьПрефикс….
И там дописываем для нужных организаций и типов документов расширенную префиксацию вида ммгг
Как-то так. Лепить еще один файл для скачки лениво.
(1) А я вот формат делал такой, еще на семерках:
ПФ-ГГММДД.nnn
ПФ- префикс фирмы,
ГГММДД — год+месяц+число
.nnn — нумер с ведущими нулями.
Вполне так классно было, сразу ясно, когда выписано: КГ-091204.027
Даже налоговые документы так оформляли, пока ГНИ не указала, что номера должны идти по ихним правилам 🙁
(16) BabySG, а как можно подпилить тогда это для счет фактур выданных?
(3) а в нумерации нужных документов не нужно установить периодичность День? Как она сама будет нумеровать в пределах дня? извините, если глупый вопрос.
(21) Поняла, внутри префикса идет уникальная нумерация)
Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
СтандартнаяОбработка =Ложь;
ОбщегоНазначения.ДобавитьПрефиксОрганизации(ЭтотОбъект, Префикс);
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ ПЕРВЫЕ 1
| СчетФактураВыданный.Ссылка,
| СчетФактураВыданный.Номер КАК Номер,
| СчетФактураВыданный.Дата
|ИЗ
| Документ.СчетФактураВыданный КАК СчетФактураВыданный
|ГДЕ
| СчетФактураВыданный.Дата МЕЖДУ &Дата1 И &Дата2
| И СчетФактураВыданный.Организация = &Организация
|
|УПОРЯДОЧИТЬ ПО
| Номер УБЫВ»;
Запрос.УстановитьПараметр(«Дата1», НачалоДня(ЭтотОбъект.Дата)); //Дата
Запрос.УстановитьПараметр(«Дата2», КонецДня(ЭтотОбъект.Дата)); //Дата
Запрос.УстановитьПараметр(«Организация», ЭтотОбъект.Организация); //Организации
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Порядковый=0;
Если РезультатЗапроса.Следующий() Тогда
Порядковый=Формат(Число(Прав(РезультатЗапроса.Номер,3))+1,»ЧЦ=3; ЧВН=»);
Номер=Префикс+Формат(РезультатЗапроса.Дата,»ДФ=гг»)+Формат(РезультатЗапроса.Дата,»ДФ=ММ»)+Формат(РезультатЗапроса.Дата,»ДФ=дд»)+»/»+Строка(Порядковый);
иначе
Номер=Префикс+Формат(ЭтотОбъект.Дата,»ДФ=гг»)+Формат(ЭтотОбъект.Дата,»ДФ=ММ»)+Формат(ЭтотОбъект.Дата,»ДФ=дд»)+»/001″;
КонецЕсли;
Если Исправление Тогда
Префикс = «И» + Префикс;
ИначеЕсли ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАванс
ИЛИ ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАвансКомитента Тогда
Если Константы.ОтдельнаяНумерацияСчетовФактурНаАванс.Получить() Тогда
Префикс = «А» + Префикс;
КонецЕсли;
КонецЕсли;
ОбщегоНазначения.ДобавитьПрефиксУзла(Префикс);
КонецПроцедуры
Обожаю Инфостат, потому что здесь сидят очень умные и находчивые люди! Они доказывают, что любой бред руководителя можно исполнить! Воспользовалась вашей идеей для УТ 10.3! Все счастливы и довольны! Но новая проблема возникла…. нужно сделать такую же «хитрую» нумерацию, но НЕ СНИМАЯ С ПОДДЕРЖКИ конфу УТ 11.1 !!!!! Может есть у кого какие мысли? Думала привязать как-нибудь дополнительные реквизиты, но как…. может кнопку внешней обработки какой… но как вызывать непосредственно из документа перед записью…. короче ужас…. помогите полезной идейкой….
Добрый день! Нужна ваша помощь по нумерации в 1С 8.3. Как с вами можно связаться?