Имя: Пароль:
1C
1С v8
Периодически стала сбоить функция УстановитьНовыйНомер(<ПрефиксНомера>)
0 Ivanich
 
25.07.23
13:05
Конфигурация самописная обычные формы.
Режим совместимости:Версия 8.2.13
Разработана и эксплуатируется с 2007года

БЫЛО:
MS SQL 2008
1С:Предприятие 8.2 (8.2.19.130)

Перевели на:
PostgreSQL 11.19-1.1C(Х64)
1С:Предприятие 8.3 (8.3.20.2184)

номер документа: 00230724014
некоторое время работает правильно, т.е. выдает  00230724015,  00230724016, и т.д.
потом сбой - запоминается номер, например, 00230724017 и все.
Следующий документ, должен быть 00230724018, а все время выдает 00230724017 и, соответственно не дает записать.
Лечим так: документу с "глючным" номером (00230724017) руками присваиваем след.номер (018) и некоторое время работаем нормально.
Потом опять сообщение: неуникальный номер и все повторяется.

В отладке номер формируется в строке: ОбъектДокумента.УстановитьНовыйНомер("00");
т.е. префикс "00" (строка два ноля).

Вопрос: может ли префикс быть не буквенным?
1 PLUT
 
25.07.23
13:07
(0) попробуй магическое заклинание ОбновитьНумерациюОбъектов()

Если значение параметра не указано, то обновление будет выполнено для всех типов объектов.
Описание:
Выполняет обновление номеров в соответствии с номерами, записанными в базе данных. После вызова данного метода все выданные, но незаписанные номера, становятся невалидными т.к. не гарантируется их уникальность. Данный метод разрешено вызывать только администратору системы.
2 Ivanich
 
25.07.23
13:13
Делали ТИИ с установленными флажками:
Реиндексация таблиц ИБ
Реструктуризация таблиц ИБ
Не помогло...

(1) Спасибо, попробую.
3 PLUT
 
25.07.23
13:16
(0) ну как вариант я бы еще регистр сведений с номерами добавил и блокировку при присвоении нового номера? номера иногда сложными бывают префиксы/суффиксы/цыхры/буквы/чёрточки

ПрефиксНомера     = какойтотамПрефиксНомера;
    ДлинаНомера        = какаятотамДлинаНомера;

    НачатьТранзакцию();
    
    БлокировкаДанных = Новый БлокировкаДанных;
    ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрСведений.НумерацияКакогототамДокумента");
    ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
    ЭлементБлокировки.УстановитьЗначение("Prefix", ВыбранныйПрефикс);
    БлокировкаДанных.Заблокировать();
    
    Запрос = Новый Запрос;
    Запрос.Текст = ПолучитьТекстЗапросаПоследнегоНомера();
    Запрос.УстановитьПараметр("Префикс", ВыбранныйПрефикс);

    Выборка = Запрос.Выполнить().Выбрать();
    Выборка.Следующий();
    
    НовыйНомер = Выборка.Номер + 1;
    
    МЗ                 = РегистрыСведений.НумерацияКакогототамДокумента.СоздатьМенеджерЗаписи();
    МЗ.Prefix         = ВыбранныйПрефикс;
    МЗ.LastNumber     = НовыйНомер;
    МЗ.Записать();
    
    ЗафиксироватьТранзакцию();
    
    //тут надо добавить магию по присвоению номера Объекту
    
    ЭтаФорма.Модифицированность = Истина;
4 Ivanich
 
25.07.23
13:21
(3) понятно
но ведь 16 лет работало. Прошли через все платформы 8.0;8.1;8.2 на 8.3 споткнулись...
5 PLUT
 
25.07.23
13:22
(4) магия из (1)

Доступен, начиная с версии 8.1.

ну приколы с автонумерацией я и на 8.2 встречал и сейчас периодически бывает

помогает магия из (1)
6 Fragster
 
25.07.23
13:23
пробегись по всем номерам, проверь, может где есть не число в позиции >=3
7 Ivanich
 
25.07.23
13:25
Может в Постгри что-то поднастроить?
Работать стало медленнее. Отметили все пользователи.
Хотя нагрузка на процессор <=8%
Ветку сисадминам покажу
8 Ivanich
 
25.07.23
13:32
(6) Поменял код:
ОбъектДокумента.УстановитьНовыйНомер("UU");
Обновились, часа 2 работаем. Пока ошибки не возникло.
Но как-то неуверен я.
Пот со лба вытер, ну и написал пока сюда может нельзя префиксы типа "12" или "25" использовать
Сейчас (1) буду проверять
9 PLUT
 
25.07.23
13:33
(8) пользователям запретить редактировать номер вручную

и вот еще

https://infostart.ru/1c/tools/415406/
10 Serg_1960
 
25.07.23
14:17
"Вопрос: может ли префикс быть не буквенным?"(0) С версии платформы 8.1.6 реализована корректная работа автонумерации с "цифровыми" префиксами.
11 Serg_1960
 
25.07.23
14:25
Не обладая в полной мере всей достоверной информацией, могу только предполагать.

"Механизм автонумерации позволяет работать в двух режимах: в режиме с возвратом неиспользованных номеров и в режиме без возврата неиспользованных номеров. Режим устанавливается свойством объекта метаданных "Конфигурация" РежимАвтонумерацииОбъектов."
Источник: https://its.1c.ru/db/metod8dev/content/1550/hdoc
12 Ivanich
 
25.07.23
15:09
(6) были не числа в документах за 2008 год, типа СЧ-58
(1),(5) выполнил строку:
        ОбновитьНумерациюОбъектов(Метаданные.Документы.РеализацияТоваров);
никаких сообщений не получил и выполнялась менее секунды. похоже не сработало. может что-то не так?
(9) обработку скачал, но она для управляемых форм
(11) Спасибо! Очень познавательно.
Таким образом, для реализации возможных стратегий нумерации рекомендуется использовать следующие значения описанных свойств:

для объектов, требующих непрерывной нумерации, - РежимАвтонумерацииОбъектов = НеОсвобождатьАвтоматически, Автонумерация = НеИспользовать;
для объектов, не требующих непрерывной нумерации, - РежимАвтонумерацииОбъектов = НеОсвобождатьАвтоматически, Автонумерация = Авто;
для работы механизма автонумерации аналогично версии 8.0 - РежимАвтонумерацииОбъектов = ОсвобождатьАвтоматически, Автонумерация = Авто.

Сейчас установлено как для 8.0: РежимАвтонумерацииОбъектов = ОсвобождатьАвтоматически, Автонумерация = Авто.
что логично, так как конфа из тех времен.
Ок! попробую на копии как 8.1
13 PLUT
 
25.07.23
15:23
(12) >никаких сообщений не получил и выполнялась менее секунды. похоже не сработало. может что-то не так?

никаких сообщений не выводится. как ты определил, что нумерация не починилась? пробовал создать новый документ и записать?
14 Ivanich
 
25.07.23
16:55
Позвал сисадмина. Перечитали ветку. Обратили внимание на пост (10).
Так как у нас используется механизм автонумерации 8.0, то возможная ошибка как раз была связана с "цифровым" индексом. (которую устранили в 8.1)
Заменил "00" на "UU". Уже примерно 5 часов ошибка не проявляется.
Судя по (5), ОбновитьНумерациюОбъектов() так же начинает работать с 8.1, поэтому (13) - не проверял, т.к. надо снова возвращаться на "00"
15 Ivanich
 
26.07.23
09:15
(13) Поэкспериментировал:
1. Вернул "00" - получил ошибку.
2. Выполнил обработку: ОбновитьНумерациюОбъектов(Метаданные.Документы.РеализацияТоваров); Через документ ошибка проявилась.
3. Изменил конфигурацию стало: РежимАвтонумерацииОбъектов = НеОсвобождатьАвтоматически, Автонумерация = Авто; Ошибка есть.
4. Выполнил обработку: ОбновитьНумерациюОбъектов(Метаданные.Документы.РеализацияТоваров); Ошибки - НЕТ! Ввел штук 15 документов.

Таким образом совет из (1) работает!

Остались не проверены варианты:
1. PostgreSQL + 8.2.19.130
2. MS SQL 2008 + 8.3.20.2184

Рабочие базы трогать не стал, т.к. работают с "UU"
16 Ivanich
 
26.07.23
09:19
Спасибо! SERG_1960 - попал "в яблочко". Направил мысль в правильное русло.
Спасибо! PLUT за активное обсуждение и рабочий совет из (1)
17 breezee
 
26.07.23
12:50
ОбновитьНумерациюОбъектов() это не понацея. Ковыряйте сервер если у Вас такое есть. Какие-нибудь кэши у Вас плохие
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн