Добрый день!
Подскажите, как сделать, чтобы при присваивании номера был номер + "/2020"?
Сделала подписку на событие ПриУстановкеНовогоНомера.
В коде прописываю номер, но он все равно не присваивается.
Что не так я делаю?
Спасибо!
---
1. Конечно лучше префикс. Тогда сортировка по номеру будет правильной для выборки, включающей несколько лет.

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

Если по вашей задумке что-то должно добавляться к номеру в конце (так называемый суфикс), то типовой механизм вам уже не поможет ... нужно делать свой. Выше уже проговорили всё это, самому хранить старший номер, самому формировать новый номер по своей формуле.
---
Зачем весь этот геморой? На печать выводите такой номер а в базе оставьте как есть, год в документе и так присутствует.
---
Пользователи хотят видеть год в номере. Так им удобнее.
---
пользователи много чего еще захотят... и они не понимают, что этим собьется нумератор, вы-то должны понимать. не всегда надо идти у них на поводу...
---
Не всегда конечно. Но здесь, я думаю, это оправданно. Мне и самой так больше нравится.
---
Год есть в дате. Зачем его еще в номер тащить?
Надо в списке выводить - ну сделайте новую колонку в списке, соединив год из даты и номер.
---
А как программа потом номера будет тебе присваивать: 2021....2022... ?
---
это вы про год?
Я написала так Источник.Номер = Источник.Номер + "/" + Год(ТекущаяДата());
---
скорее всего подписка у вас отрабатывает и даже прибавляет год, но в поле номер из-за ограничения количества символов этот год в итоге не попадает. Т.е прежде чем добавить 4 символа к номеру, вам нужно эти 4 символа высвободить (удалить первые 4 символа например).
---
Не похоже, что дело в этом.
Когда в этой процедуре смотрю при входе Источник.Номер вообще пустая строка...
---
лучше год поставить вначале

```1c
    Формат(Год(ТекущаяДата()),"ЧГ=")+"/"+Сред(Источник.Номер,5,СтрДлина(Источник.Номер));
```
---
Пока не поучается вообще никак добавить год.
На выходе из этого Источник.Номер = Прав(Источник.Номер, 5) + "/" + Год(ТекущаяДата());
Номер равен "/2020"
---
в отладчике Источник.Номер?
---
Попробуйте в подписке ПередЗаписью

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

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

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

    Источник.УстановитьНовыйНомер(МойНовыйНомер);
```
---
Перед записью номер присваивается, но потом опять сменяется на тот, что без года. Можно надо где то проставить стандартная обработка в ложь?
---
Я на пустой конфигурации проверил. Всё работает. Может вы что то не так делаете, либо если вы дописываете год в конце, то он тупо обрубается, так как выходит за рамки длины номера. Я, например, добавил год в начале Номера. И ещё источником в подписке должен быть ДокументОбъект
---
А можете сюда код выставить?
Может и не так делаю. Вы в подписке какое событие выбираете?
Нет, номер уменьшаю на 5 символов.
---
событие ПередЗаписью, но лучше всё-таки сделать Нумератор, как вам тут советуют
---
Перед записью не работает.
---
Потому что по дефолту номер документу присваивается при записи. В ОФ можно было изменить это поведение, а можно ли в УФ - не помню.
---
Отладчиком не можете проверить?
---
Жесть.
Еще и в номере год в конце.
Ну, скучно вам не будет, проблем на пустом месте вы умеете находить.
---
На секунду воспользуйтесь головой, в вашем случае, не по назначению - ПОДУМАЙТЕ.
Это вот правда не сложно представить, что будет после того, как вы присвоили номер, например, 000123/2020.
Какой же номер будет у следующего документа?
Это просто - он будет увеличен на 1.
000123/2021.
От этого вы берете 5 правых символов "/2021" и дописываете /2020.
И вот, после ваших действий, у вас будет у документа номер "/2021/2020"
Браво. Вы подумали.

Особенно, конечно, в номере важны первые 2 символа года 2020, если делать, то на века. Да.
---
На секунду воспользуйтесь головой, в вашем случае, не по назначению - ПОДУМАЙТЕ.
Выбирайте выражения, в след. раз я напишу админам.
Может это поможет вам включить голову.
---
Извиняюсь) Больше не буду советовать вам подумать)))
---
Принято. И вы меня извините. Все таки это ваше дело включать или нет голову :-)
---
Переходите на свой нумератор
---
Через подписку можно это реализовать? Мне коллеги посоветовали через подписки. И я уже начала через подписки реализовывать.
---
Ну подписка это отлавливание события ... Если для одного вида документа, я бы просто При записи делал конкретного документа. Если список документов большой, то подписка - удобнее.
---
я планирую потом переводить несколько, но сейчас у меня не работает даже на одно. В процедуре все нормально вычисляется. Но в итоге номер опять без года...
---
ну вам на стандартном нумераторе все равно никуда не уехать, он не сможет с суффиксом прибавлять следующий номер +1. вам нужно делать или свой нумератор или сделать как посоветовали ниже - добавлять суффикс только на печать, и в списках
---
ну вам на стандартном нумераторе все равно никуда не уехать, он не сможет с суффиксом прибавлять следующий номер +1. вам нужно делать или свой нумератор или сделать как посоветовали ниже - добавлять суффикс только на печать, и в списках
Я делаю не в нумереаторе. Я делаю в подписке в процедуре ПередЗаписью. Пробовала ПриЗаписи, тоже самое.
---
свой нумератор - это не пользоваться "Установить новый номер" :)
---
тогда я вас не поняла. Напишите поподробнее.
---
присваивать новый номер просто при записи. Где-то организовать хранение старшего номера, новый номер формируется: префикс + Старший номер + 1 + суфикс.

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

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

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

Однажды была необходимость реализовать нумерацию РТУ с периодичностью в день. С суфиксом - текущая дата. Как-то так делали.
Ок, спасибо. Попробую еще какое то время через подписку.
---
да и подписка или при записи - не важно, вам нумератор стандартный номер следующий не сможет присвоить ...
---
Ок.. Получается префикс? Странно, мне посоветовали так сделать мои коллеги,которые имеют многолетний опыт.
---
Да вас не обманул никто :) подписка - отлично. Вам просто сейчас дальше разъясняют что в префикс можно что угодно запихать, а вот если вы хотите суфикс, то вам нужно самому организовать хранение старшего номера, чтобы +1 делать ...
---
А в чем отличие префикса от суффикса в таком случае, если в случае префикса меньше настраивать и можно "что угодно напихать"?
---
Хвостовая числовая составляющая номера используется 1С при выдаче нового номера. Для текущего префикса определяется последний выданный номер по правилам сортировки строк (отсюда требование одинаковой длины номера и наличие ведущих нулей, так как сравнение номеров по правилам сортировки строк производится посимвольно слева-направо, в противном случае последний выданный номер может быть определен некорректно). После этого последний выданный номер увеличивается на единичку. Поэтому если хвостовая числовая составляющая номера будет "сломана", то 1С не сможет корректно определить предыдущий номер и выдать следующий. Для 1С номер - это обычная строка. 1С не знает ни про какие суффиксы. 1С предполагает, что в конце номера - число, которое нужно увеличить на единичку. При этом в рамках каждого префикса ведется своя нумерация с нуля. Не получится заставить 1С выдавать "сквозные номера" в рамках разных префиксов. А на тот случай, если хочется сделать "сквозную" нумерацию по нескольким видам документов, в 1С есть объект метаданных "нумератор".
ЗЫ. На самом деле 1С использует чуть более хитрый механизм при выдаче номера, не использующий поиск в базе данных и не накладывающий блокировок, но логический его смысл именно такой.
---
+ Другими словами, если описанные правила автоматической нумерации не подходят, то придется писать в поле "Номер" значение при записи документа, которое придется рассчитывать полностью самостоятельно. Т.е. последний выданный номер придется вычислять самому. А это не очень хорошая идея, так как у программиста 1С нет штатных инструментов сделать это также красиво, как это делается в системной автонумерации (без запросов к БД и блокировок). Т.е. сделать можно, но ценой некоторой потери масштабируемости системы или с риском получить дубли номеров при параллельной работе пользователей. Гораздо привлекательнее не трогать системную нумерацию и просто завести дополнительное поле, которое будет вычисляться на основании выданного системой номера.
---
Ну такой механизм ... Так 1с придумала :) у номера есть префикс, в типовых конфигурациях он состоит из нескольких частей - префикс ИБ, префикс организации. процедура УстановитьНовыйНомер - убирает все префиксы, получает номер Числом, к которому прибавляет 1, затем прибавляет обратно все префиксы и получается новый номер.

Если по вашей задумке что-то должно добавляться к номеру в конце (так называемый суфикс), то типовой механизм вам уже не поможет ... нужно делать свой. Выше уже проговорили всё это, самому хранить старший номер, самому формировать новый номер по своей формуле.
---
организовать хранение старшего номера + хранить старший номер в разрезе года. - поддерживаю 100%
---
Год в конце номера, что ли? ПриУстановкеНовогоНомера тут не поможет. Там только префикс можно. Не суффикс.
Проще всего добавить доп-реквизит для печати такого номера. Туда можно вообще альтернативную нумерацию писать, если надо.
В журналах подшаманить, чтобы в первую очередь выводился этот близкий душе пользователей номер, вместо стандартного.
Даже представление можно поменять, чтобы везде в ссылках и т.п. именно он подтягивался.
ЗЫ. Как уже сказали, пихать суффикс в системный номер - это сломать нумерацию.
---
Ок, спасибо!
---
Может вам не понравится мой совет, но я все же посоветую ))
1. Создать новую нумерацию с типом число.
2. Заменить нумератор в документе на новый.
3. Задать формат номера. (Ч "/2020")

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

Либо не создавая нумератор
1. Изменить тип нумерации (На Число) в свойствах документа.
2. Задать формат номера. (Ч "/2020")
---
Нумерация останется прежней, но в документах и везде будет выглядеть так как вы хотите - 000123/2020
---
Мы решаем все просто, ставим, как советовали, для документа год вначале, например 2020/00000001, программа сама присваивает следующему документу номер 2020/00000002. Пользователи согласились и дописывать ничего не надо.
---
А мы делаем проще: ставим год вначале у первого документа, например 2020/00001, программа сама присваивает следующему документу номер 2020/00002. Пользователи согласились и дописывать ничего не надо.
---
1. Конечно лучше префикс. Тогда сортировка по номеру будет правильной для выборки, включающей несколько лет.

2. Лучше установить нужный номер в документе, а не пытаться что-то делать при печати, отображении. Например, в БП для печати счетов-фактур номер формируется в нескольких модулях и не один раз в модуле (просто сч/ф, исправленный, корректировочный). Везде нужно вносить изменения и потом их поддерживать. Также плюс, что номер с годом в качестве префикса становится уникальным за весь период, а не в пределах года.
---
Всем спасибо, решила сделать через префикс.
---
Пару лет уже работает алгоритм, только формат номера чуть другой, чем у Вас. Не трогал подписки, все равно базу править, это прямо в модуле документа (в реализации в процедуре ПриУстановкеНовогоНомера). Мне не важно, красиво-не красиво, работает, клиент доволен. При обновленении через раз приходится восстанавливать.

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

```1c
    Номер = Формат(Год(ТекущаяДата()),"ЧГ=")+"/"+Прав("00000" + Формат(Источник.Номер,"ЧГ=0"), 5);
```

строка - "2025/00010"