Исправление нумерации документов в 1С:ERP
Задачи пользователя - Перенумераторы
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Всего 3 шага и проблемы нет:
1. Исправляем нумерацию на правильную у документов в базе. Это можно сделать вручную, если их мало. Если их много, то можно написать простенькую обработку, которая с заданного номера изменит все последующие документы. В крайнем случае, если пользователи готовы создать документы заново, то их можно удалить совсем из базы.
2. Пишем свою обработку по очистке неправильной нумерации. В 1С существует отдельная таблица для хранения номеров документов, но когда мы меняем номер на правильный у документа, то в этой таблице старый неправильный так и остается. Вот нам надо ее и почистить. Благо для этого не нужно лезть в профайлер, а потом создавать sql-скрипты, просто используем стандартную процедуру ОбновитьНумерациюОбъектов(). Но есть нюанс её использования, на который было убито немало времени. Так вот, в обработке создаем кнопку и на нее вешаем всего две процедуры :
&НаКлиенте
Процедура КомандаОбновитьНумерацию(Команда)
КомандаОбновитьНумерациюНаСервере();
КонецПроцедуры
&НаСервере
Процедура КомандаОбновитьНумерациюНаСервере()
МетаданныеДокумент = Метаданные.Документы.РеализацияТоваровУслуг; //укажите свой документ
ОбновитьНумерациюОбъектов(МетаданныеДокумент);
Сообщить("Для документов <"+МетаданныеДокумент+"> обновлена нумерация.");
МетаданныеНумератор = Метаданные.НумераторыДокументов.ДокументыРеализацииТоваров;
ОбновитьНумерациюОбъектов(МетаданныеНумератор); //укажите свой нумератор, который привязан к вашему документу
Сообщить("Для нумератора <"+МетаданныеНумератор+"> обновлена нумерация.");
КонецПроцедуры
3. Запускаем обработку (кому лень писать, она во вложении)
Видел много вопросов про то, что один нумератор может быть ко многим объектам метаданных (документов). Поэтому сделал новую обработку (версия 3), в которой сразу при выборе метаданных (сделал через справочник "Идентификаторы объектов метаданных") показывает в каких объектах ("Идентификаторах объектов метаданных") полученный нумератор указан. А также показывает в каких связанных метаданных есть проблемы. По кнопке "Следующий номер" можно сразу увидеть какой следующий номер будет присвоен объекту метаданных, т.е. сразу можно оценить к чему приведет исправление ситуации. Также по этой кнопке происходит анализ проблем со связанными объектами через нумератор.
4. Закрываем сессию с базой. Заходим в базу, и автонумерация отрабатывает теперь правильно.
P.S.: Важно! Если у документа есть нумератор, то его тоже необходимо очищать через процедуру ОбновитьНумерациюОбъектов(), без этого не очищается. Релиз 1С:ERP 2.4.9.98. Удачи.
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.5.8.171
Вступайте в нашу телеграмм-группу Инфостарт