Здравствуйте! Подскажите, пожалуйста, как при записи и проведении документа изменить его номер. Сделал процедуру перенумерации, если эту процедуру вызывать в модуле формы документа в процедуре "Перед записью" то документ перенумеровывается по умолчанию. Если вызывать в процедуре "При записи" документ не переименовывается. Отключить автонумерацию не вариант. нужно к стандартной нумерации добавить префикс. Нашел обработку с перенумерацией, но мне нужно не внешней обработкой, а чтобы документу автоматически присваивался необходимый номер. Как это сделать? При каком событии или в какой процедуре?
Была задача сделать для одного вида документа (например "Кадровый перевод") динамическую нумерацию, при этом редактирование номера доступно только Администратору, например, то есть чтобы при установке флажка нумерация менялась с НС00-00001 на НС00-00001тс. А если флаг не стоит, то продолжалась дальше, так же продолжалась и для новой нумерации, то есть уже НС00-00002 или НС00-00002тс. и т.д.
Важно, что задача решена через подписку на события. Обычно это не плохой метод, здесь на инфостарте многие поддерживают подписку на события для работы с перенумерацией.
(1) Такие вещи прописываются не в модуле формы, а в модуле объекта.
Так как если прописать в модуле формы и потом создать программно документ, то установка номера будет стандартной, так как процедуры в модуле формы просто не отработают.
Я думаю более верным будет вот этот документ, эта статья, которая сейчас находится на инфостарте. Автору большой респект. Именно по этой статье я всегда делал перенумерацию.
https://infostart.ru/public/415406/ Первым пунктом
ОбновитьНумерациюОбъектов, согласно СП, "выполняет обновление номеров в соответствии с номерами, записанными в базе данных. После вызова данного метода все выданные, но не записанные номера, становятся невалидными, т.к. не гарантируется их уникальность." Соотнеся это описание со статьями по этой тематике и тестовыми данными, становится понятно, что в базе хранится таблица выданных номеров, которые независимо от того, существуют объекты, для которых они были записаны в таблицу или нет, повторно быть выданы уже не могут, если не осуществить "сброс". Как раз процедура ОбновитьНумерациюОбъектов и применяется для "выправления" нумерации объектов. Главное, перед запуском не забудьте удалить из базы объекты с "неправильными" номерами. Это может быть как реальное удаление, так и перезапись их с предварительным присвоением "правильных" номеров.
Вторым пунктом
В 1С нет возможности напрямую получить текущий максимальный номер объекта метаданных. Решить эту проблему можно двумя способами:
использовать запрос;
получить следующий номер, используя методы УстановитьНовыйКод или УстановитьНовыйНомер.
При формировании запроса система считывает данные базы данных. Можно отсортировать объекты по коду/номеру по убыванию, т.о. верхним в списке окажется обладатель максимального номера. Тут существуют следующие "загвоздки":
результат не будет содержать данные о занятых номерах, а только о записанных;
сортировка не всегда выводит наверх "максимальные" с точки зрения системы номера (например, объект с номером "0_01" в результате запроса будет расположен ниже номера "0001", но при вводе нового объекта ему будет присвоен номер с префиксом "0_").
УНИВЕРСАЛЬНАЯ ОБРАБОТКА ДЛЯ ПЕРЕНУМЕРАЦИИ ДОКУМЕНТОВ В 1С 8 8.1 8.2 8.3
Данная универсальная обработка предназначена для перенумерации документов в 1С Предприятии. (8, 8.1, 8.2 и 8.3) (Управляемые и обычные формы).
Перенумерация справочников и документов (кассы, авансовых отчетов, платежных поручений и других) в 1С:Бухгалтерия (8.3 редакция 3.0, 8.2 редакция 2.0, 7.7)
Обе обработки абсолютно бесплатные от разных авторов. Вам достаточно как следует посмотреть в код и вы убедитесь в том, что код обработки не такой уж серьезный, что бы об этом много говорить. Главное при использовании обработки любой, своей или чужой, обязательно указывать "обменданными.Загрузка = истина". Большинство разработчиков подобных технологий забывают напрочь, что весь документ необязательно перепроводить, а иногда даже опасно.
Была задача сделать для одного вида документа (например "Кадровый перевод") динамическую нумерацию, при этом редактирование номера доступно только Администратору, например, то есть чтобы при установке флажка нумерация менялась с НС00-00001 на НС00-00001тс. А если флаг не стоит, то продолжалась дальше, так же продолжалась и для новой нумерации, то есть уже НС00-00002 или НС00-00002тс. и т.д.
Важно, что задача решена через подписку на события. Обычно это не плохой метод, здесь на инфостарте многие поддерживают подписку на события для работы с перенумерацией.
(10) Спасибо! все получилось! Тут прям как раз примерно так, как нужно было для моей задачи! Столько всего облазил в поисках нумерации, а вот это решение к сожалению сам не нашел, но все получилось, спасибо еще раз!