|
Периодически стала сбоить функция УстановитьНовыйНомер(<ПрефиксНомера>) | ☑ | ||
---|---|---|---|---|
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
|
ОбновитьНумерациюОбъектов() это не понацея. Ковыряйте сервер если у Вас такое есть. Какие-нибудь кэши у Вас плохие
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |