gifts2017

Хитрая нумерация документов в 1С 8.2

Опубликовал Sergey A (serg_info) в раздел Управление - Практика учета

У многих встает вопрос а как бы ввести документ "задним числом", но чтобы с номерами все было красиво. Решение достаточно очевидное + есть его реализация.

Небольшая заметочка на заданную тему. В моем конкретном случае документы вводились много и часто "задним числом". Для решения проблеммы выработали следующие правила нумерации:

(Префикс)(Месяц)(День)/(Порядковый номер внутри дня)

Все это хозяйство прописывается в учетной политике, чтобы потом не было ни у кого претензий.

Далее находим подписку на событие "ПриУстановкеНовогоНомера" и в нее добавляем немного кода. При минимальных изменениях мы получаем возможность автоматической нумерации документов в пределах дня и красоту при вводе документов задним числом. Плюс гибкие возможности распространить данный механизм только на определенные виды документов и только по определенным организациям.

Буду рад если это кому то поможет. 

На примере БП 2.0  подписку на событие "ПриУстановкеНовогоНомера" отрабатывет следующая процедура  

Процедура ПриУстановкеНовогоНомераДокумента(Источник, СтандартнаяОбработка, Префикс) Экспорт

ОбщегоНазначения.ДобавитьПрефиксОрганизации(Источник, Префикс);

ОбщегоНазначения.ДобавитьПрефиксУзла(Префикс); 

Конецпроцедуры 

Нам нужно добавить немного кода в процедуру ДобавитьПрефиксОрганизации.  Для ленивых код в файле на примере Бухгалтерия Предприятия 2.0. 

 P.S. Внимание! Решение не полностью универсальное и верно только при создании новых документов. При изменении даты ранее сохраненного  документа с номером ничего не произойдет - он останется старым. Решения пути два - либо пользователь сам следит за теми документами в которых меняется дата, либо нужно создавать подписку на событие "ПередЗаписью" и в ней контролировать соответствие префикса номера и даты документа. 

P.P.S. Механизм нумерации в БП 3 изменился и приведенный код работать там не будет.

Пишу это, чтобы потом ни у кого не было претензий и недоразумений, как правильно мне указали товарищи в комментариях.

Скачать файлы

Наименование Файл Версия Размер
ДобавитьПрефиксОрганизации.txt 172
.txt 2,14Kb
05.02.13
172
.txt 2,14Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Antonio Petti (Некто A. Petti) 06.02.13 03:44
Это уже такое бородатое ноу-хау. Еще помнится году в 1999 такое на 7.5 клиенту делал.
Только слэш я бы не ставил. Не красиво :) Лучше дефис после префикса.
bforce; KonstB; hulio; +3 Ответить 3
2. Konstantin Konstantin (KonstB) 06.02.13 09:13
(1) Некто A. Petti, да уж... старье
3. Sergey A (serg_info) 06.02.13 09:45
(1) (2) Полностью с Вами согласен. И всем это известно, кто давно в автоматизации. Тут показано как просто это делается в 1С 8.2 типовых (ну не было в 7-ке механизма событий без использования внешних компонент). При этом 1С сама занимается автонумерацией внутри дня. Да и я знаю что решение не полностью универсальное. Ну опять же очевидное, при изменении даты документа с номером ничего не произойдет - он останется старым. Наверное можно что-то еще накопать из менее очевидного.

Статья была призвана показать где и как такой тип нумерации делается.
4. вадим В (ditiatko) 06.02.13 14:17
А как решается изменение дня в уже записанном документе?
5. Тимофей Чернов (software1c) 06.02.13 14:37
Ничего в этой нумерации хитрого нет.... Накладные - да, Счет-фактуры и Кассовые ордеры - НЕТ!
6. grigory пкш (dryms) 06.02.13 14:49
У нас так договоры нумеруются(они документами оформляются). Но может кому-нибудь такая информация пригодится поэтому +
7. ддд ддд (friday1) 06.02.13 19:44
а с фига ли извините за вопрос счета фактуры так не могут нумероваться?))
и второе, почему то у меня в 3.0 не заходит в эту подписку на событие, хоть прибей ее(
8. Светлана т (Чертова Кошка) 06.02.13 22:19
в ноябре пропустила 1 сч-ф, корячилась в рукопашную. Вашу бы информацию мне тогда....
9. Дмитрий (gosizo) 07.02.13 13:05
10. Геннадий Пиганов (Totoro) 07.02.13 15:21
Без ответа на (4) это только часть механизма, который может привести к плачевным последствиям. Особенно если дату поменять на другой год ...
Да и в новых типовых на БСП номер по другому формируется.
11. Sergey A (serg_info) 07.02.13 18:23
(10) Я не говорил, что задача решена целиком. В (3) я сам написал, что есть такая проблема. Но красивого и короткого решения тут не получится. Навскидку, чтобы не корячить много кода и форм документов нужно делать подписку на событие "ПриЗаписи" и в нем проверять соответствие префикса номера и даты документа. И тут возникнет дилема, а отправлен ли данный документ покупателю и можно ли менять его номер вообще....
Тут скорее вопрос не в программировании был, а в том чтобы подсказать как можно организовать нумерацию документов, чтобы не было проблемм с вводом документов задним числом не более того.
12. Sergey A (serg_info) 07.02.13 18:26
(10) Да, видимо, пора уже глянуть на БП 3. Уже и формирование номеров по другому сделали. Посмотрю что да как там и отпишусь как это реализовать там. Спасиб за информацию.
13. Геннадий Пиганов (Totoro) 07.02.13 20:54
(11) Поэтому и нужно предупредить читателей в статье (а некоторые пока не очень опытны в программировании), что может возникнуть такая проблема, пусть и не описывая конкретное решении (через подписку или через изменение формы).
14. Евгений Фамилия (internetname) 08.02.13 12:48
15. Андрей Григорьев (Borisych) 09.02.13 03:36
// Проверим номер документа на сответствие принятой нумерации (вида АТРmmdd/xxx)
// Если номер не соответствует - определим следующий в пределах дня и используем его
   Если Лев(Номер,СтрДлина(Организация.Префикс)+5) <> НомерДокументаПоДате(Дата) Тогда
   		Запрос = Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
		               |	ПОДСТРОКА(СчетФактураВыданный.Номер, 9, 3) КАК Индекс,
		               |	СчетФактураВыданный.Дата КАК ДатаПоследнегоДокумента
		               |ИЗ
		               |	Документ.СчетФактураВыданный КАК СчетФактураВыданный
		               |ГДЕ
		               |	СчетФактураВыданный.Дата >= &ДатаНачала
		               |	И СчетФактураВыданный.Дата <= &ДатаОкончания
		               |	И СчетФактураВыданный.Организация = &Организация
		               |	И СчетФактураВыданный.Ссылка <> &Ссылка
		               |	И ПОДСТРОКА(СчетФактураВыданный.Номер, &ИндексНачалаНомера, 5) = &MMdd
		               |
		               |УПОРЯДОЧИТЬ ПО
		               |	Индекс УБЫВ";
		
		Запрос.УстановитьПараметр("ДатаНачала", 		НачалоДня(Дата));
		Запрос.УстановитьПараметр("ДатаОкончания", 		КонецДня(Дата));
		Запрос.УстановитьПараметр("Организация", 		Организация);
		Запрос.УстановитьПараметр("Ссылка", 			Ссылка);
		Запрос.УстановитьПараметр("ИндексНачалаНомера", СтрДлина(Организация.Префикс)+1);
		Запрос.УстановитьПараметр("MMdd", 				Прав(НомерДокументаПоДате(Дата),5));

		Результат = Запрос.Выполнить();
		Если Результат.Пустой() Тогда
			Номер = НомерДокументаПоДате(Дата, 1);
		Иначе 
			Выборка = Результат.Выбрать();
			Выборка.Следующий();
			Номер = НомерДокументаПоДате(Дата, Число(Выборка.Индекс)+1);
			//Если Выборка.ДатаПоследнегоДокумента+1 <= КонецДня(Дата)  Тогда
			//	Дата = Выборка.ДатаПоследнегоДокумента+1;
			//КонецЕсли;
		КонецЕсли;
	КонецЕсли;
// rarus gand 2009.03.13 8:50:37 }

// rarus gand 2009.03.03 14:12:23 {
// Возвращаемое значение:
// 1. Если указан ИнкрементДня, то номер документа вида: "ММДД/ххх"
// 2. Если не указан, то 	   префикс номера документа: "ММДД/"
//
Функция НомерДокументаПоДате(ДатаДокумента, знач ИнкрементДня = 0)
	Если ИнкрементДня = 0 тогда
		Возврат Организация.Префикс + Формат(Месяц(ДатаДокумента), "ЧЦ=2; ЧВН=") + Формат(День(ДатаДокумента), "ЧЦ=2; ЧВН=") + "/";
	Иначе 
		Возврат Организация.Префикс + Формат(Месяц(ДатаДокумента), "ЧЦ=2; ЧВН=") + Формат(День(ДатаДокумента), "ЧЦ=2; ЧВН=") + "/" + Формат(ИнкрементДня, "ЧЦ=3; ЧВН=");
	КонецЕсли;
КонецФункции // НомерДокПоДате()
// rarus gand 2009.03.03 14:12:33 }

...Показать Скрыть


давно очень - делали такой вариант
16. BabySG (BabySG) 10.02.13 14:41
(7) friday1, счет-фактуры так не могут нумероваться по причине постановления 1137, где указано, что располагается за символом "/"
17. ддд ддд (friday1) 10.02.13 15:48
(16) BabySG, ну про / это понятно, а я говорю про тирэ))
/ должны нумероватсья счета фактуры обособленнок, это то мы в курсе:)
автор, посмотри пожалуста на 3.0)
очень надо для себя:)
заранее благоадарен)
18. Sergey A (serg_info) 12.02.13 12:13
(17) В БП 3 нумерация происходит по следующей подписке на событие
ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазыИОрганизации
Далее рассмотрим ее код
// Устанавливает префикс источника подписки в соответствии с префиксом информационной базы и префиксом организации.
// Источник подписки должен содержать
// обязательный реквизит шапки "Организация", тип: "СправочникСсылка.Организации"
//
// Параметры:
//  Источник - Источник события подписки.
//             Любой объект из множества [Справочник, Документ, План видов характеристик, Бизнес процесс, Задача]
// СтандартнаяОбработка - Булево - флаг стандартной обработки подписки
// Префикс - Строка - префикс объекта, который нужно изменить
//
Процедура УстановитьПрефиксИнформационнойБазыИОрганизации(Источник, СтандартнаяОбработка, Префикс) Экспорт
	
	УстановитьПрефикс(Источник, Префикс, Истина, Истина);
	
КонецПроцедуры
...Показать Скрыть


Идем в процедуру УстановитьПрефикс....
И там дописываем для нужных организаций и типов документов расширенную префиксацию вида ммгг

Как-то так. Лепить еще один файл для скачки лениво.
19. Валерий Завалко (ValeryZ) 13.02.13 12:15
(1) А я вот формат делал такой, еще на семерках:
ПФ-ГГММДД.nnn

ПФ- префикс фирмы,
ГГММДД - год+месяц+число
.nnn - нумер с ведущими нулями.

Вполне так классно было, сразу ясно, когда выписано: КГ-091204.027

Даже налоговые документы так оформляли, пока ГНИ не указала, что номера должны идти по ихним правилам :(
20. bluntschi (bluntschi) 27.03.13 06:08
(16) BabySG, а как можно подпилить тогда это для счет фактур выданных?
21. Ольга Фигуркина (@Sonya) 13.11.13 08:18
(3) serg_info, а в нумерации нужных документов не нужно установить периодичность День? Как она сама будет нумеровать в пределах дня? извините, если глупый вопрос.
22. Ольга Фигуркина (@Sonya) 13.11.13 08:46
(21) Поняла, внутри префикса идет уникальная нумерация)
23. Александр (AAZ) 17.07.14 13:41
Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
СтандартнаяОбработка =Ложь;
ОбщегоНазначения.ДобавитьПрефиксОрганизации(ЭтотОбъект, Префикс);
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
| СчетФактураВыданный.Ссылка,
| СчетФактураВыданный.Номер КАК Номер,
| СчетФактураВыданный.Дата
|ИЗ
| Документ.СчетФактураВыданный КАК СчетФактураВыданный
|ГДЕ
| СчетФактураВыданный.Дата МЕЖДУ &Дата1 И &Дата2
| И СчетФактураВыданный.Организация = &Организация
|
|УПОРЯДОЧИТЬ ПО
| Номер УБЫВ";
Запрос.УстановитьПараметр("Дата1", НачалоДня(ЭтотОбъект.Дата)); //Дата
Запрос.УстановитьПараметр("Дата2", КонецДня(ЭтотОбъект.Дата)); //Дата
Запрос.УстановитьПараметр("Организация", ЭтотОбъект.Организация); //Организации
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Порядковый=0;
Если РезультатЗапроса.Следующий() Тогда
Порядковый=Формат(Число(Прав(РезультатЗапроса.Номер,3))+1,"ЧЦ=3; ЧВН=");
Номер=Префикс+Формат(РезультатЗапроса.Дата,"ДФ=гг")+Формат(РезультатЗапроса.Дата,"ДФ=ММ")+Формат(РезультатЗапроса.Дата,"ДФ=дд")+"/"+Строка(Порядковый);
иначе
Номер=Префикс+Формат(ЭтотОбъект.Дата,"ДФ=гг")+Формат(ЭтотОбъект.Дата,"ДФ=ММ")+Формат(ЭтотОбъект.Дата,"ДФ=дд")+"/001";
КонецЕсли;
Если Исправление Тогда
Префикс = "И" + Префикс;
ИначеЕсли ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАванс
ИЛИ ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАвансКомитента Тогда

Если Константы.ОтдельнаяНумерацияСчетовФактурНаАванс.Получить() Тогда
Префикс = "А" + Префикс;
КонецЕсли;

КонецЕсли;

ОбщегоНазначения.ДобавитьПрефиксУзла(Префикс);

КонецПроцедуры
24. Анна Ни (Anyu-n) 11.11.14 15:19
Обожаю Инфостат, потому что здесь сидят очень умные и находчивые люди! Они доказывают, что любой бред руководителя можно исполнить! Воспользовалась вашей идеей для УТ 10.3! Все счастливы и довольны! Но новая проблема возникла.... нужно сделать такую же "хитрую" нумерацию, но НЕ СНИМАЯ С ПОДДЕРЖКИ конфу УТ 11.1 !!!!! Может есть у кого какие мысли? Думала привязать как-нибудь дополнительные реквизиты, но как.... может кнопку внешней обработки какой... но как вызывать непосредственно из документа перед записью.... короче ужас.... помогите полезной идейкой....
25. Сергей Абдулаев (abdulaev_s) 06.05.15 19:21
Добрый день! Нужна ваша помощь по нумерации в 1С 8.3. Как с вами можно связаться?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа