Нумерация с годом через "/"
По теме из базы знаний
- Перенумерация документов и справочников с учетом префиксов (учет уникальности кодов) для обычных и управляемых форм
- Групповая перенумерация документов
- Нумерация документов с префиксом по дате (настройка префикса документов)
- Работа с Ворд через СОМ-Объект
- Перенумерация документов для Бухгалтерии предприятия 3.0
Найденные решения
1. Конечно лучше префикс. Тогда сортировка по номеру будет правильной для выборки, включающей несколько лет.
2. Лучше установить нужный номер в документе, а не пытаться что-то делать при печати, отображении. Например, в БП для печати счетов-фактур номер формируется в нескольких модулях и не один раз в модуле (просто сч/ф, исправленный, корректировочный). Везде нужно вносить изменения и потом их поддерживать. Также плюс, что номер с годом в качестве префикса становится уникальным за весь период, а не в пределах года.
2. Лучше установить нужный номер в документе, а не пытаться что-то делать при печати, отображении. Например, в БП для печати счетов-фактур номер формируется в нескольких модулях и не один раз в модуле (просто сч/ф, исправленный, корректировочный). Везде нужно вносить изменения и потом их поддерживать. Также плюс, что номер с годом в качестве префикса становится уникальным за весь период, а не в пределах года.
(44) Ну такой механизм ... Так 1с придумала :) у номера есть префикс, в типовых конфигурациях он состоит из нескольких частей - префикс ИБ, префикс организации. процедура УстановитьНовыйНомер - убирает все префиксы, получает номер Числом, к которому прибавляет 1, затем прибавляет обратно все префиксы и получается новый номер.
Если по вашей задумке что-то должно добавляться к номеру в конце (так называемый суфикс), то типовой механизм вам уже не поможет ... нужно делать свой. Выше уже проговорили всё это, самому хранить старший номер, самому формировать новый номер по своей формуле.
Если по вашей задумке что-то должно добавляться к номеру в конце (так называемый суфикс), то типовой механизм вам уже не поможет ... нужно делать свой. Выше уже проговорили всё это, самому хранить старший номер, самому формировать новый номер по своей формуле.
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(4) скорее всего подписка у вас отрабатывает и даже прибавляет год, но в поле номер из-за ограничения количества символов этот год в итоге не попадает. Т.е прежде чем добавить 4 символа к номеру, вам нужно эти 4 символа высвободить (удалить первые 4 символа например).
(13)Попробуйте в подписке ПередЗаписью
Если НЕ Источник.ЭтоНовый() Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(Источник.Номер) Тогда
Источник.УстановитьНовыйНомер();
КонецЕсли;
МойНовыйНомер = //всё таки год лучше писать вначале........................
Источник.УстановитьНовыйНомер(МойНовыйНомер);
Показать
(21)Я на пустой конфигурации проверил. Всё работает. Может вы что то не так делаете, либо если вы дописываете год в конце, то он тупо обрубается, так как выходит за рамки длины номера. Я, например, добавил год в начале Номера. И ещё источником в подписке должен быть ДокументОбъект
(13)На секунду воспользуйтесь головой, в вашем случае, не по назначению - ПОДУМАЙТЕ.
Это вот правда не сложно представить, что будет после того, как вы присвоили номер, например, 000123/2020.
Какой же номер будет у следующего документа?
Это просто - он будет увеличен на 1.
000123/2021.
От этого вы берете 5 правых символов "/2021" и дописываете /2020.
И вот, после ваших действий, у вас будет у документа номер "/2021/2020"
Браво. Вы подумали.
Особенно, конечно, в номере важны первые 2 символа года 2020, если делать, то на века. Да.
Это вот правда не сложно представить, что будет после того, как вы присвоили номер, например, 000123/2020.
Какой же номер будет у следующего документа?
Это просто - он будет увеличен на 1.
000123/2021.
От этого вы берете 5 правых символов "/2021" и дописываете /2020.
И вот, после ваших действий, у вас будет у документа номер "/2021/2020"
Браво. Вы подумали.
Особенно, конечно, в номере важны первые 2 символа года 2020, если делать, то на века. Да.
(23)
Я делаю не в нумереаторе. Я делаю в подписке в процедуре ПередЗаписью. Пробовала ПриЗаписи, тоже самое.
ну вам на стандартном нумераторе все равно никуда не уехать, он не сможет с суффиксом прибавлять следующий номер +1. вам нужно делать или свой нумератор или сделать как посоветовали ниже - добавлять суффикс только на печать, и в списках
Я делаю не в нумереаторе. Я делаю в подписке в процедуре ПередЗаписью. Пробовала ПриЗаписи, тоже самое.
(26) присваивать новый номер просто при записи. Где-то организовать хранение старшего номера, новый номер формируется: префикс + Старший номер + 1 + суфикс.
Сами решаете давать возможность ручного редактирования или нет. Не забыть обработать смену года, либо начав нумерацию с 0, либо изменив суффикс. и т.д. Либо хранить старший номер в разрезе года. В зависимости от того как вам надо.
Однажды была необходимость реализовать нумерацию РТУ с периодичностью в день. С суфиксом - текущая дата. Как-то так делали.
Сами решаете давать возможность ручного редактирования или нет. Не забыть обработать смену года, либо начав нумерацию с 0, либо изменив суффикс. и т.д. Либо хранить старший номер в разрезе года. В зависимости от того как вам надо.
Однажды была необходимость реализовать нумерацию РТУ с периодичностью в день. С суфиксом - текущая дата. Как-то так делали.
(28)
Ок, спасибо. Попробую еще какое то время через подписку.
присваивать новый номер просто при записи. Где-то организовать хранение старшего номера, новый номер формируется: префикс + Старший номер + 1 + суфикс.
Сами решаете давать возможность ручного редактирования или нет. Не забыть обработать смену года, либо начав нумерацию с 0, либо изменив суффикс. и т.д. Либо хранить старший номер в разрезе года. В зависимости от того как вам надо.
Однажды была необходимость реализовать нумерацию РТУ с периодичностью в день. С суфиксом - текущая дата. Как-то так делали.
Сами решаете давать возможность ручного редактирования или нет. Не забыть обработать смену года, либо начав нумерацию с 0, либо изменив суффикс. и т.д. Либо хранить старший номер в разрезе года. В зависимости от того как вам надо.
Однажды была необходимость реализовать нумерацию РТУ с периодичностью в день. С суфиксом - текущая дата. Как-то так делали.
Ок, спасибо. Попробую еще какое то время через подписку.
(44) Хвостовая числовая составляющая номера используется 1С при выдаче нового номера. Для текущего префикса определяется последний выданный номер по правилам сортировки строк (отсюда требование одинаковой длины номера и наличие ведущих нулей, так как сравнение номеров по правилам сортировки строк производится посимвольно слева-направо, в противном случае последний выданный номер может быть определен некорректно). После этого последний выданный номер увеличивается на единичку. Поэтому если хвостовая числовая составляющая номера будет "сломана", то 1С не сможет корректно определить предыдущий номер и выдать следующий. Для 1С номер - это обычная строка. 1С не знает ни про какие суффиксы. 1С предполагает, что в конце номера - число, которое нужно увеличить на единичку. При этом в рамках каждого префикса ведется своя нумерация с нуля. Не получится заставить 1С выдавать "сквозные номера" в рамках разных префиксов. А на тот случай, если хочется сделать "сквозную" нумерацию по нескольким видам документов, в 1С есть объект метаданных "нумератор".
ЗЫ. На самом деле 1С использует чуть более хитрый механизм при выдаче номера, не использующий поиск в базе данных и не накладывающий блокировок, но логический его смысл именно такой.
ЗЫ. На самом деле 1С использует чуть более хитрый механизм при выдаче номера, не использующий поиск в базе данных и не накладывающий блокировок, но логический его смысл именно такой.
(45) + Другими словами, если описанные правила автоматической нумерации не подходят, то придется писать в поле "Номер" значение при записи документа, которое придется рассчитывать полностью самостоятельно. Т.е. последний выданный номер придется вычислять самому. А это не очень хорошая идея, так как у программиста 1С нет штатных инструментов сделать это также красиво, как это делается в системной автонумерации (без запросов к БД и блокировок). Т.е. сделать можно, но ценой некоторой потери масштабируемости системы или с риском получить дубли номеров при параллельной работе пользователей. Гораздо привлекательнее не трогать системную нумерацию и просто завести дополнительное поле, которое будет вычисляться на основании выданного системой номера.
(44) Ну такой механизм ... Так 1с придумала :) у номера есть префикс, в типовых конфигурациях он состоит из нескольких частей - префикс ИБ, префикс организации. процедура УстановитьНовыйНомер - убирает все префиксы, получает номер Числом, к которому прибавляет 1, затем прибавляет обратно все префиксы и получается новый номер.
Если по вашей задумке что-то должно добавляться к номеру в конце (так называемый суфикс), то типовой механизм вам уже не поможет ... нужно делать свой. Выше уже проговорили всё это, самому хранить старший номер, самому формировать новый номер по своей формуле.
Если по вашей задумке что-то должно добавляться к номеру в конце (так называемый суфикс), то типовой механизм вам уже не поможет ... нужно делать свой. Выше уже проговорили всё это, самому хранить старший номер, самому формировать новый номер по своей формуле.
Год в конце номера, что ли? ПриУстановкеНовогоНомера тут не поможет. Там только префикс можно. Не суффикс.
Проще всего добавить доп-реквизит для печати такого номера. Туда можно вообще альтернативную нумерацию писать, если надо.
В журналах подшаманить, чтобы в первую очередь выводился этот близкий душе пользователей номер, вместо стандартного.
Даже представление можно поменять, чтобы везде в ссылках и т.п. именно он подтягивался.
ЗЫ. Как уже сказали, пихать суффикс в системный номер - это сломать нумерацию.
Проще всего добавить доп-реквизит для печати такого номера. Туда можно вообще альтернативную нумерацию писать, если надо.
В журналах подшаманить, чтобы в первую очередь выводился этот близкий душе пользователей номер, вместо стандартного.
Даже представление можно поменять, чтобы везде в ссылках и т.п. именно он подтягивался.
ЗЫ. Как уже сказали, пихать суффикс в системный номер - это сломать нумерацию.
(19) Может вам не понравится мой совет, но я все же посоветую ))
1. Создать новую нумерацию с типом число.
2. Заменить нумератор в документе на новый.
3. Задать формат номера. (Ч "/2020")
Как на скринах.
Либо не создавая нумератор
1. Изменить тип нумерации (На Число) в свойствах документа.
2. Задать формат номера. (Ч "/2020")
1. Создать новую нумерацию с типом число.
2. Заменить нумератор в документе на новый.
3. Задать формат номера. (Ч "/2020")
Как на скринах.
Либо не создавая нумератор
1. Изменить тип нумерации (На Число) в свойствах документа.
2. Задать формат номера. (Ч "/2020")
Прикрепленные файлы:
Мы решаем все просто, ставим, как советовали, для документа год вначале, например 2020/00000001, программа сама присваивает следующему документу номер 2020/00000002. Пользователи согласились и дописывать ничего не надо.
1. Конечно лучше префикс. Тогда сортировка по номеру будет правильной для выборки, включающей несколько лет.
2. Лучше установить нужный номер в документе, а не пытаться что-то делать при печати, отображении. Например, в БП для печати счетов-фактур номер формируется в нескольких модулях и не один раз в модуле (просто сч/ф, исправленный, корректировочный). Везде нужно вносить изменения и потом их поддерживать. Также плюс, что номер с годом в качестве префикса становится уникальным за весь период, а не в пределах года.
2. Лучше установить нужный номер в документе, а не пытаться что-то делать при печати, отображении. Например, в БП для печати счетов-фактур номер формируется в нескольких модулях и не один раз в модуле (просто сч/ф, исправленный, корректировочный). Везде нужно вносить изменения и потом их поддерживать. Также плюс, что номер с годом в качестве префикса становится уникальным за весь период, а не в пределах года.
Пару лет уже работает алгоритм, только формат номера чуть другой, чем у Вас. Не трогал подписки, все равно базу править, это прямо в модуле документа (в реализации в процедуре ПриУстановкеНовогоНомера). Мне не важно, красиво-не красиво, работает, клиент доволен. При обновленении через раз приходится восстанавливать.
Если Дата<Дата("20180101") Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка=Ложь;
запрос=Новый Запрос;
запрос.Текст="ВЫБРАТЬ
| РеализацияТоваровУслуг.Номер КАК Номер
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Дата >= &ндат
| И РеализацияТоваровУслуг.Дата <= &кдат
|
|УПОРЯДОЧИТЬ ПО
| Номер УБЫВ";
Запрос.Параметры.Вставить("ндат",НачалоМесяца(дата));
Запрос.Параметры.Вставить("кдат",КонецМесяца(дата));
рз=Запрос.Выполнить().Выгрузить();
Если рз.Количество()>0 Тогда
ном=СокрЛП(""+рз.Получить(0).Номер);
тномн=СтрЗаменить(""+Год(дата)," ","")+?(СтрДлина(""+Месяц(Дата))=1,"0"+Месяц(Дата),""+Месяц(Дата));
тном=Число(Прав(ном,3));
тном=тном+1;
Если стрДлина(""+тном)=3 Тогда
номер=тномн+тном;
ИначеЕсли стрДлина(""+тном)=2 Тогда
номер=тномн+"0"+тном;
ИначеЕсли стрДлина(""+тном)=1 Тогда
номер=тномн+"00"+тном;
КонецЕсли;
Иначе
тномн=СтрЗаменить(""+Год(дата)," ","")+?(СтрДлина(""+Месяц(Дата))=1,"0"+Месяц(Дата),""+Месяц(Дата));
тном="001";
номер=тномн+тном;
КонецЕсли;
Если Дата<Дата("20180101") Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка=Ложь;
запрос=Новый Запрос;
запрос.Текст="ВЫБРАТЬ
| РеализацияТоваровУслуг.Номер КАК Номер
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Дата >= &ндат
| И РеализацияТоваровУслуг.Дата <= &кдат
|
|УПОРЯДОЧИТЬ ПО
| Номер УБЫВ";
Запрос.Параметры.Вставить("ндат",НачалоМесяца(дата));
Запрос.Параметры.Вставить("кдат",КонецМесяца(дата));
рз=Запрос.Выполнить().Выгрузить();
Если рз.Количество()>0 Тогда
ном=СокрЛП(""+рз.Получить(0).Номер);
тномн=СтрЗаменить(""+Год(дата)," ","")+?(СтрДлина(""+Месяц(Дата))=1,"0"+Месяц(Дата),""+Месяц(Дата));
тном=Число(Прав(ном,3));
тном=тном+1;
Если стрДлина(""+тном)=3 Тогда
номер=тномн+тном;
ИначеЕсли стрДлина(""+тном)=2 Тогда
номер=тномн+"0"+тном;
ИначеЕсли стрДлина(""+тном)=1 Тогда
номер=тномн+"00"+тном;
КонецЕсли;
Иначе
тномн=СтрЗаменить(""+Год(дата)," ","")+?(СтрДлина(""+Месяц(Дата))=1,"0"+Месяц(Дата),""+Месяц(Дата));
тном="001";
номер=тномн+тном;
КонецЕсли;
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)