Нумерация с годом через "/"

1. Metabos 29 16.01.20 11:35 Сейчас в теме
Добрый день!
Подскажите, как сделать, чтобы при присваивании номера был номер + "/2020"?
Сделала подписку на событие ПриУстановкеНовогоНомера.
В коде прописываю номер, но он все равно не присваивается.
Что не так я делаю?
Спасибо!
По теме из базы знаний
Найденные решения
38. VZyryanov 17.01.20 08:41 Сейчас в теме
1. Конечно лучше префикс. Тогда сортировка по номеру будет правильной для выборки, включающей несколько лет.

2. Лучше установить нужный номер в документе, а не пытаться что-то делать при печати, отображении. Например, в БП для печати счетов-фактур номер формируется в нескольких модулях и не один раз в модуле (просто сч/ф, исправленный, корректировочный). Везде нужно вносить изменения и потом их поддерживать. Также плюс, что номер с годом в качестве префикса становится уникальным за весь период, а не в пределах года.
46. FetisovAN 17.01.20 11:02 Сейчас в теме
(44) Ну такой механизм ... Так 1с придумала :) у номера есть префикс, в типовых конфигурациях он состоит из нескольких частей - префикс ИБ, префикс организации. процедура УстановитьНовыйНомер - убирает все префиксы, получает номер Числом, к которому прибавляет 1, затем прибавляет обратно все префиксы и получается новый номер.

Если по вашей задумке что-то должно добавляться к номеру в конце (так называемый суфикс), то типовой механизм вам уже не поможет ... нужно делать свой. Выше уже проговорили всё это, самому хранить старший номер, самому формировать новый номер по своей формуле.
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
7. wertep 23 16.01.20 13:40 Сейчас в теме
(1) Зачем весь этот геморой? На печать выводите такой номер а в базе оставьте как есть, год в документе и так присутствует.
9. Metabos 29 16.01.20 13:48 Сейчас в теме
(7) Пользователи хотят видеть год в номере. Так им удобнее.
11. EVKash 14 16.01.20 13:53 Сейчас в теме
(9) пользователи много чего еще захотят... и они не понимают, что этим собьется нумератор, вы-то должны понимать. не всегда надо идти у них на поводу...
12. Metabos 29 16.01.20 13:57 Сейчас в теме
(11)Не всегда конечно. Но здесь, я думаю, это оправданно. Мне и самой так больше нравится.
17. Sashares 34 16.01.20 14:03 Сейчас в теме
(12)Год есть в дате. Зачем его еще в номер тащить?
Надо в списке выводить - ну сделайте новую колонку в списке, соединив год из даты и номер.
RocKeR_13; alex-l19041; +2 Ответить
2. user633533_encantado 11 16.01.20 12:06 Сейчас в теме
А как программа потом номера будет тебе присваивать: 2021....2022... ?
4. Metabos 29 16.01.20 12:41 Сейчас в теме
(2)это вы про год?
Я написала так Источник.Номер = Источник.Номер + "/" + Год(ТекущаяДата());
6. maks_20 164 16.01.20 13:24 Сейчас в теме
(4) скорее всего подписка у вас отрабатывает и даже прибавляет год, но в поле номер из-за ограничения количества символов этот год в итоге не попадает. Т.е прежде чем добавить 4 символа к номеру, вам нужно эти 4 символа высвободить (удалить первые 4 символа например).
8. Metabos 29 16.01.20 13:48 Сейчас в теме
(6)Не похоже, что дело в этом.
Когда в этой процедуре смотрю при входе Источник.Номер вообще пустая строка...
10. independ 1518 16.01.20 13:51 Сейчас в теме
(4) лучше год поставить вначале
Формат(Год(ТекущаяДата()),"ЧГ=")+"/"+Сред(Источник.Номер,5,СтрДлина(Источник.Номер));
13. Metabos 29 16.01.20 13:59 Сейчас в теме
(10)
Пока не поучается вообще никак добавить год.
На выходе из этого Источник.Номер = Прав(Источник.Номер, 5) + "/" + Год(ТекущаяДата());
Номер равен "/2020"
15. independ 1518 16.01.20 14:02 Сейчас в теме
(13) в отладчике Источник.Номер?
16. dakork 32 16.01.20 14:02 Сейчас в теме
(13)Попробуйте в подписке ПередЗаписью

Если НЕ Источник.ЭтоНовый() Тогда
	Возврат;
КонецЕсли;

Если Не ЗначениеЗаполнено(Источник.Номер) Тогда
	Источник.УстановитьНовыйНомер();
КонецЕсли;

МойНовыйНомер = //всё таки год лучше писать вначале........................

Источник.УстановитьНовыйНомер(МойНовыйНомер);
Показать
21. Metabos 29 16.01.20 15:49 Сейчас в теме
(16) Перед записью номер присваивается, но потом опять сменяется на тот, что без года. Можно надо где то проставить стандартная обработка в ложь?
31. dakork 32 16.01.20 18:49 Сейчас в теме
(21)Я на пустой конфигурации проверил. Всё работает. Может вы что то не так делаете, либо если вы дописываете год в конце, то он тупо обрубается, так как выходит за рамки длины номера. Я, например, добавил год в начале Номера. И ещё источником в подписке должен быть ДокументОбъект
32. Metabos 29 16.01.20 21:20 Сейчас в теме
(31)А можете сюда код выставить?
Может и не так делаю. Вы в подписке какое событие выбираете?
Нет, номер уменьшаю на 5 символов.
48. dakork 32 17.01.20 11:40 Сейчас в теме
(32)событие ПередЗаписью, но лучше всё-таки сделать Нумератор, как вам тут советуют
49. Metabos 29 17.01.20 11:52 Сейчас в теме
(48)Перед записью не работает.
51. herfis 498 17.01.20 12:09 Сейчас в теме
(49) Потому что по дефолту номер документу присваивается при записи. В ОФ можно было изменить это поведение, а можно ли в УФ - не помню.
52. dakork 32 17.01.20 12:10 Сейчас в теме
(49)Отладчиком не можете проверить?
18. Sashares 34 16.01.20 14:06 Сейчас в теме
(13)Жесть.
Еще и в номере год в конце.
Ну, скучно вам не будет, проблем на пустом месте вы умеете находить.
EVKash; succub1_5; +2 Ответить
27. Sashares 34 16.01.20 17:07 Сейчас в теме
(13)На секунду воспользуйтесь головой, в вашем случае, не по назначению - ПОДУМАЙТЕ.
Это вот правда не сложно представить, что будет после того, как вы присвоили номер, например, 000123/2020.
Какой же номер будет у следующего документа?
Это просто - он будет увеличен на 1.
000123/2021.
От этого вы берете 5 правых символов "/2021" и дописываете /2020.
И вот, после ваших действий, у вас будет у документа номер "/2021/2020"
Браво. Вы подумали.

Особенно, конечно, в номере важны первые 2 символа года 2020, если делать, то на века. Да.
33. Metabos 29 16.01.20 21:22 Сейчас в теме
(27)
На секунду воспользуйтесь головой, в вашем случае, не по назначению - ПОДУМАЙТЕ.

Выбирайте выражения, в след. раз я напишу админам.
Может это поможет вам включить голову.
user774630; +1 1 Ответить
34. Sashares 34 16.01.20 21:58 Сейчас в теме
(33)Извиняюсь) Больше не буду советовать вам подумать)))
37. Metabos 29 17.01.20 08:12 Сейчас в теме
(34)Принято. И вы меня извините. Все таки это ваше дело включать или нет голову :-)
3. FetisovAN 16.01.20 12:13 Сейчас в теме
Переходите на свой нумератор
succub1_5; alex-l19041; +2 Ответить
5. Metabos 29 16.01.20 12:42 Сейчас в теме
(3) Через подписку можно это реализовать? Мне коллеги посоветовали через подписки. И я уже начала через подписки реализовывать.
20. FetisovAN 16.01.20 15:48 Сейчас в теме
(5) Ну подписка это отлавливание события ... Если для одного вида документа, я бы просто При записи делал конкретного документа. Если список документов большой, то подписка - удобнее.
22. Metabos 29 16.01.20 16:24 Сейчас в теме
(20)я планирую потом переводить несколько, но сейчас у меня не работает даже на одно. В процедуре все нормально вычисляется. Но в итоге номер опять без года...
23. FetisovAN 16.01.20 16:52 Сейчас в теме
(22) ну вам на стандартном нумераторе все равно никуда не уехать, он не сможет с суффиксом прибавлять следующий номер +1. вам нужно делать или свой нумератор или сделать как посоветовали ниже - добавлять суффикс только на печать, и в списках
24. Metabos 29 16.01.20 16:57 Сейчас в теме
(23)
ну вам на стандартном нумераторе все равно никуда не уехать, он не сможет с суффиксом прибавлять следующий номер +1. вам нужно делать или свой нумератор или сделать как посоветовали ниже - добавлять суффикс только на печать, и в списках

Я делаю не в нумереаторе. Я делаю в подписке в процедуре ПередЗаписью. Пробовала ПриЗаписи, тоже самое.
25. FetisovAN 16.01.20 17:01 Сейчас в теме
(24) свой нумератор - это не пользоваться "Установить новый номер" :)
26. Metabos 29 16.01.20 17:06 Сейчас в теме
(25) тогда я вас не поняла. Напишите поподробнее.
28. FetisovAN 16.01.20 17:17 Сейчас в теме
(26) присваивать новый номер просто при записи. Где-то организовать хранение старшего номера, новый номер формируется: префикс + Старший номер + 1 + суфикс.

Сами решаете давать возможность ручного редактирования или нет. Не забыть обработать смену года, либо начав нумерацию с 0, либо изменив суффикс. и т.д. Либо хранить старший номер в разрезе года. В зависимости от того как вам надо.

Однажды была необходимость реализовать нумерацию РТУ с периодичностью в день. С суфиксом - текущая дата. Как-то так делали.
alex-l19041; +1 Ответить
29. Metabos 29 16.01.20 17:29 Сейчас в теме
(28)
присваивать новый номер просто при записи. Где-то организовать хранение старшего номера, новый номер формируется: префикс + Старший номер + 1 + суфикс.

Сами решаете давать возможность ручного редактирования или нет. Не забыть обработать смену года, либо начав нумерацию с 0, либо изменив суффикс. и т.д. Либо хранить старший номер в разрезе года. В зависимости от того как вам надо.

Однажды была необходимость реализовать нумерацию РТУ с периодичностью в день. С суфиксом - текущая дата. Как-то так делали.

Ок, спасибо. Попробую еще какое то время через подписку.
39. FetisovAN 17.01.20 09:12 Сейчас в теме
(29) да и подписка или при записи - не важно, вам нумератор стандартный номер следующий не сможет присвоить ...
40. Metabos 29 17.01.20 09:19 Сейчас в теме
(39)Ок.. Получается префикс? Странно, мне посоветовали так сделать мои коллеги,которые имеют многолетний опыт.
42. FetisovAN 17.01.20 09:26 Сейчас в теме
(40) Да вас не обманул никто :) подписка - отлично. Вам просто сейчас дальше разъясняют что в префикс можно что угодно запихать, а вот если вы хотите суфикс, то вам нужно самому организовать хранение старшего номера, чтобы +1 делать ...
44. Metabos 29 17.01.20 10:44 Сейчас в теме
(42) А в чем отличие префикса от суффикса в таком случае, если в случае префикса меньше настраивать и можно "что угодно напихать"?
45. herfis 498 17.01.20 11:00 Сейчас в теме
(44) Хвостовая числовая составляющая номера используется 1С при выдаче нового номера. Для текущего префикса определяется последний выданный номер по правилам сортировки строк (отсюда требование одинаковой длины номера и наличие ведущих нулей, так как сравнение номеров по правилам сортировки строк производится посимвольно слева-направо, в противном случае последний выданный номер может быть определен некорректно). После этого последний выданный номер увеличивается на единичку. Поэтому если хвостовая числовая составляющая номера будет "сломана", то 1С не сможет корректно определить предыдущий номер и выдать следующий. Для 1С номер - это обычная строка. 1С не знает ни про какие суффиксы. 1С предполагает, что в конце номера - число, которое нужно увеличить на единичку. При этом в рамках каждого префикса ведется своя нумерация с нуля. Не получится заставить 1С выдавать "сквозные номера" в рамках разных префиксов. А на тот случай, если хочется сделать "сквозную" нумерацию по нескольким видам документов, в 1С есть объект метаданных "нумератор".
ЗЫ. На самом деле 1С использует чуть более хитрый механизм при выдаче номера, не использующий поиск в базе данных и не накладывающий блокировок, но логический его смысл именно такой.
47. herfis 498 17.01.20 11:23 Сейчас в теме
(45) + Другими словами, если описанные правила автоматической нумерации не подходят, то придется писать в поле "Номер" значение при записи документа, которое придется рассчитывать полностью самостоятельно. Т.е. последний выданный номер придется вычислять самому. А это не очень хорошая идея, так как у программиста 1С нет штатных инструментов сделать это также красиво, как это делается в системной автонумерации (без запросов к БД и блокировок). Т.е. сделать можно, но ценой некоторой потери масштабируемости системы или с риском получить дубли номеров при параллельной работе пользователей. Гораздо привлекательнее не трогать системную нумерацию и просто завести дополнительное поле, которое будет вычисляться на основании выданного системой номера.
46. FetisovAN 17.01.20 11:02 Сейчас в теме
(44) Ну такой механизм ... Так 1с придумала :) у номера есть префикс, в типовых конфигурациях он состоит из нескольких частей - префикс ИБ, префикс организации. процедура УстановитьНовыйНомер - убирает все префиксы, получает номер Числом, к которому прибавляет 1, затем прибавляет обратно все префиксы и получается новый номер.

Если по вашей задумке что-то должно добавляться к номеру в конце (так называемый суфикс), то типовой механизм вам уже не поможет ... нужно делать свой. Выше уже проговорили всё это, самому хранить старший номер, самому формировать новый номер по своей формуле.
30. alex-l19041 8 16.01.20 18:04 Сейчас в теме
(28)
организовать хранение старшего номера + хранить старший номер в разрезе года.
- поддерживаю 100%
14. herfis 498 16.01.20 14:00 Сейчас в теме
Год в конце номера, что ли? ПриУстановкеНовогоНомера тут не поможет. Там только префикс можно. Не суффикс.
Проще всего добавить доп-реквизит для печати такого номера. Туда можно вообще альтернативную нумерацию писать, если надо.
В журналах подшаманить, чтобы в первую очередь выводился этот близкий душе пользователей номер, вместо стандартного.
Даже представление можно поменять, чтобы везде в ссылках и т.п. именно он подтягивался.
ЗЫ. Как уже сказали, пихать суффикс в системный номер - это сломать нумерацию.
succub1_5; +1 Ответить
19. Metabos 29 16.01.20 14:19 Сейчас в теме
41. user5300 1000 17.01.20 09:23 Сейчас в теме
(19) Может вам не понравится мой совет, но я все же посоветую ))
1. Создать новую нумерацию с типом число.
2. Заменить нумератор в документе на новый.
3. Задать формат номера. (Ч "/2020")

Как на скринах.


Либо не создавая нумератор
1. Изменить тип нумерации (На Число) в свойствах документа.
2. Задать формат номера. (Ч "/2020")
Прикрепленные файлы:
43. user5300 1000 17.01.20 09:26 Сейчас в теме
(19) Нумерация останется прежней, но в документах и везде будет выглядеть так как вы хотите - 000123/2020
35. agata_v 16.01.20 23:55 Сейчас в теме
Мы решаем все просто, ставим, как советовали, для документа год вначале, например 2020/00000001, программа сама присваивает следующему документу номер 2020/00000002. Пользователи согласились и дописывать ничего не надо.
user774630; +1 Ответить
36. agata_v 16.01.20 23:58 Сейчас в теме
А мы делаем проще: ставим год вначале у первого документа, например 2020/00001, программа сама присваивает следующему документу номер 2020/00002. Пользователи согласились и дописывать ничего не надо.
user774630; +1 Ответить
38. VZyryanov 17.01.20 08:41 Сейчас в теме
1. Конечно лучше префикс. Тогда сортировка по номеру будет правильной для выборки, включающей несколько лет.

2. Лучше установить нужный номер в документе, а не пытаться что-то делать при печати, отображении. Например, в БП для печати счетов-фактур номер формируется в нескольких модулях и не один раз в модуле (просто сч/ф, исправленный, корректировочный). Везде нужно вносить изменения и потом их поддерживать. Также плюс, что номер с годом в качестве префикса становится уникальным за весь период, а не в пределах года.
50. Metabos 29 17.01.20 11:57 Сейчас в теме
Всем спасибо, решила сделать через префикс.
53. kermzyxer 9 18.01.20 22:27 Сейчас в теме
Пару лет уже работает алгоритм, только формат номера чуть другой, чем у Вас. Не трогал подписки, все равно базу править, это прямо в модуле документа (в реализации в процедуре ПриУстановкеНовогоНомера). Мне не важно, красиво-не красиво, работает, клиент доволен. При обновленении через раз приходится восстанавливать.

Если Дата<Дата("20180101") Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка=Ложь;
запрос=Новый Запрос;
запрос.Текст="ВЫБРАТЬ
| РеализацияТоваровУслуг.Номер КАК Номер
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Дата >= &ндат
| И РеализацияТоваровУслуг.Дата <= &кдат
|
|УПОРЯДОЧИТЬ ПО
| Номер УБЫВ";
Запрос.Параметры.Вставить("ндат",НачалоМесяца(дата));
Запрос.Параметры.Вставить("кдат",КонецМесяца(дата));
рз=Запрос.Выполнить().Выгрузить();
Если рз.Количество()>0 Тогда
ном=СокрЛП(""+рз.Получить(0).Номер);
тномн=СтрЗаменить(""+Год(дата)," ","")+?(СтрДлина(""+Месяц(Дата))=1,"0"+Месяц(Дата),""+Месяц(Дата));
тном=Число(Прав(ном,3));
тном=тном+1;
Если стрДлина(""+тном)=3 Тогда
номер=тномн+тном;
ИначеЕсли стрДлина(""+тном)=2 Тогда
номер=тномн+"0"+тном;
ИначеЕсли стрДлина(""+тном)=1 Тогда
номер=тномн+"00"+тном;
КонецЕсли;
Иначе
тномн=СтрЗаменить(""+Год(дата)," ","")+?(СтрДлина(""+Месяц(Дата))=1,"0"+Месяц(Дата),""+Месяц(Дата));
тном="001";
номер=тномн+тном;
КонецЕсли;
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)