1с получить свободный код справочника

Обновлено: 04.07.2024

Есть справочник, с числовыми кодами. При создании нового элемента код отрабатывает поиск первого свободного кода в справочнике (т.к. периодически удаляются элементы). Зачем так сделано, не буду описывать, но так надо :-) Когда код достигнет 100 000, совсем будет тормозить. Константа создана, для ускорения поиска, и заполняется при любом монопольном входе в базу. Возможно ли ускорить данную задачу. Может прямой запрос какой то хитрый впендюрьть? Есть идеи?

Так смысла нет, "дырки" в нумерации, постепенно, все равно будут появляться

Сделай перенумерацию. Потом пропиши, при удалении элемента - сохранить где-нить его код. Затем присваивать его вновь создавшемуся, если есть дырка.

Если элементы справочника переодически удаляются, тогда наверное можно использовать уже помеченные на удаление элементы и просто восстанавливать их.

может лучше обработкой вытаскивать (например каждый час) не занятые номера номенкалтуры, и заполнять их в строку - константу типа так: [НезанятыйНомер1][НезанятыйНомер2][НезанятыйНомер3][НезанятыйНомер4][НезанятыйНомер5] А при создании элемента справочника брать номера из этой строки.

ы. можно еще завести второй справочник освободившихся номеров. и когда в первом элемент удаляется, элемент с таким номером заводится во втором.

Зачем? И безо всякой внешней функции все прекрасно отработает :)

зачем список? и одной пойдет, и заполнять автоматом при удалении :))

совершенно согласен ))) ты лучче глянь во вчерашнюю ветку про скуль есть вопрос

хоть бы синтаксис знать какой у запроса, она падла ведь в синглюзер буду копать, или адинес или прослойку какую между клиентом и адинес впендюрю

достаточно одного значения. При записи будет указываться последний занятый номер. по-видимому уже закончилась

Хотя с другой стороны удалил ты три элемента сподряд а записался послледний и 2 "дыры".

Если файловая. Элементы сразу не удаляются - помечаются как Deleted. Смотришь коды у элементов Deleted (по ним есть индекс), берешь код с мин значением RecNo(он будет затерт). Если нет таких - то максимальный.

+ . и тада для 4значного номера предел будет в 1679615 элементов :)

обычно при незакрытых кодах справочника какой-нибудь мудень добивает лишнию цифирь и был у нас номер 5тизначный, а стал 6тизначный дыры между кодами большие и такой алгоритм (последовательной проверки с определенного кода) не сильно затормозит работу а вот если справочник физически заканчивается, то проще добавить пару разрядов в конфигураторе

Наверно, я выскажу общее мнение, что никто ничего нифига не понял. Но все стесняются признаться.

Я б пошел по пути как в . Вот только заполнять его обработкой (раз в сутки думаю достаточно будет). Ну а если скуль - таблица с заполнением через триггер.

структура кода какая? Строка? Длина всегда одинаковая? Префикс всегда одинаковой длины?

Ну так запрос при соединении даст 10 строк. Или в Т1 надо 100 000 элементов вставлять?

Наверно надо декартово произведение из нескольких Т1. Но не уверен что это быстро. Еще и всю таблицу подсоединять.

: внешняя обработка, на кнопку - код (справлчник можно не ТМЦ а любой с числовым кодом). А на вопрос "как тут прервать выполнение запроса" если ответишь (см.код) - так вообще спасибище будед )))))

ЗЫ: кстати, в в принципе способ решения проблемы "безмолвного" выполнения запроса.. ))))

вот однопроходный перенумератор, умеет оптимизировать и заполнять дырки

Олег, что ты пытался сделать? Мот тупенько апдейтом с приращением?

+ А, сорри, вроде не о том подумал Пойду домой, замудохамшись

Ты прикалываешься просто? На запрос внимательно посмотри. И T1 - это таблица для экспериментов. В реальном запросе это будет справочник. И нифига туда инсертить не надо будет.

Запрос в кверюге выполни. А потом замени T1 на таблицу справочника, а K - на Code :) И строки с созданием, удалением таблицы и инсертами убери.

А , понял, это справочник к справочнику. Хорошая идея ) Единственно, что индексы никак тут задействованы не будут(т.е. будет просмотр всей таблицы) - но намного лучше чем перебор.

+ Пояснения нужны - а то мозг ломается ) + если нет кодов 1,2,3 - запрос их не отловит. Нужно на наличие кода 1 отдельно проверять.

Почему же не будет задействованы индексы? Единственно, конечно, что не Seek, а Scan. Глянь план такого запроса: From SC14 T1 (NoLock) Left Join SC14 T2 (NoLock) On (T1.CODE + 1) = T2.CODE Where T2.CODE Is NULL

"Еесли нет кодов 1,2,3 - запрос их не отловит" - еща как отловит

СправочникМенеджер.<Имя справочника>.ПолучитьИмяПредопределенного (CatalogManager.<Имя справочника>.GetPredefinedItemName)
СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
ПолучитьИмяПредопределенного (GetPredefinedItemName)
Синтаксис: Код 1C v 8.х
Параметры: <Ссылка> (обязательный)
Тип: СправочникСсылка. Ссылка на элемент, имя которого требуется получить.Возвращаемое значение:
Тип: Строка.
Описание: Получает имя предопределенного элемента. Если данный элемент не является предопределенным, то возвращается пустая строка.
Доступность: Сервер, толстый клиент, внешнее соединение.
Код 1C v 8.х
Код 1C v 8.х

Получить Код предопределенного элемента невозможно
Смотри тему: Получение кода предопределенного элемента

Разместил: E_Migachev  Версии: | 8.x | 8.2 УП |  Дата: 29.06.2012   Прочитано: 29454

Распечатать

Похожие FAQ

Еще в этой же категории

Создание и запись нового элемента справочника  12
НаКлиенте Процедура ПоКнопкеНовыйКонтрагент(Команда) // Вставить содержимое обработчика. Перем НовыйКонтрагент; НовыйКонтрагент = Новый Структура(" Наименование, ПолноеНаименование, ИНН" ); НовыйКонтрагент.Наименование = " РиК ООО" ; НовыйКон Как для Выбора Элемента Справочника Открыть Форму Выбора с нужной Открытой Группой?  8
Порядок действий такой: 1. В поле ввода " Номенклатура" добавь событие ПриНачалеВыбора. 2. Установи в них СтандартнаяОбработка = Ложь; 3. Получи форму выбора нужного справочника 4. Установи отбор по родителю 5. Открой форму для выбора Теп Перебрать, выбрать элементы справочника  7
Выборка = Справочники.Сотрудники.Выбрать(); //или Выборка = Справочники.Сотрудники.ВыбратьИерархически(); Пока выборка.Следующий() = 1 Цикл . //действия с очередным элементом . Сообщить(" Сотрудник " + выборка.Наименование); КонецЦикла; / Перебрать, выбрать элементы подчиненного справочника  7
Перебор элементов справочника принадлежащих элементу другого справочника, т.е когда один справочник подчинен другому справочнику. // Получить выборку по указанному контрагенту. Выборка = Справочники.КонтактныеЛица.Выбрать( , Контрагент); Пока Вы Как программно открыть и выбрать элемент справочника, выбор элемента справочника?  7
Просто открыть: // Получить форму выбора справочника как подчиненную форме документа ФормаСписка = Справочники.Номенклатура.ПолучитьФормуСписка( , ЭтаФорма); // Открыть полученную форму ФормаСписка.Открыть(); Открыть для выбора элемента: Ф Посмотреть все в категории Справочники

СправочникМенеджер.<Имя справочника>.ПолучитьИмяПредопределенного (CatalogManager.<Имя справочника>.GetPredefinedItemName)
СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
ПолучитьИмяПредопределенного (GetPredefinedItemName)
Синтаксис: Код 1C v 8.х
Параметры: <Ссылка> (обязательный)
Тип: СправочникСсылка. Ссылка на элемент, имя которого требуется получить.Возвращаемое значение:
Тип: Строка.
Описание: Получает имя предопределенного элемента. Если данный элемент не является предопределенным, то возвращается пустая строка.
Доступность: Сервер, толстый клиент, внешнее соединение.
Код 1C v 8.х
Код 1C v 8.х

Получить Код предопределенного элемента невозможно
Смотри тему: Получение кода предопределенного элемента

Разместил: E_Migachev  Версии: | 8.x | 8.2 УП |  Дата: 29.06.2012   Прочитано: 29455

Распечатать

Похожие FAQ

Еще в этой же категории

Создание и запись нового элемента справочника  12
НаКлиенте Процедура ПоКнопкеНовыйКонтрагент(Команда) // Вставить содержимое обработчика. Перем НовыйКонтрагент; НовыйКонтрагент = Новый Структура(" Наименование, ПолноеНаименование, ИНН" ); НовыйКонтрагент.Наименование = " РиК ООО" ; НовыйКон Как для Выбора Элемента Справочника Открыть Форму Выбора с нужной Открытой Группой?  8
Порядок действий такой: 1. В поле ввода " Номенклатура" добавь событие ПриНачалеВыбора. 2. Установи в них СтандартнаяОбработка = Ложь; 3. Получи форму выбора нужного справочника 4. Установи отбор по родителю 5. Открой форму для выбора Теп Перебрать, выбрать элементы справочника  7
Выборка = Справочники.Сотрудники.Выбрать(); //или Выборка = Справочники.Сотрудники.ВыбратьИерархически(); Пока выборка.Следующий() = 1 Цикл . //действия с очередным элементом . Сообщить(" Сотрудник " + выборка.Наименование); КонецЦикла; / Перебрать, выбрать элементы подчиненного справочника  7
Перебор элементов справочника принадлежащих элементу другого справочника, т.е когда один справочник подчинен другому справочнику. // Получить выборку по указанному контрагенту. Выборка = Справочники.КонтактныеЛица.Выбрать( , Контрагент); Пока Вы Как программно открыть и выбрать элемент справочника, выбор элемента справочника?  7
Просто открыть: // Получить форму выбора справочника как подчиненную форме документа ФормаСписка = Справочники.Номенклатура.ПолучитьФормуСписка( , ЭтаФорма); // Открыть полученную форму ФормаСписка.Открыть(); Открыть для выбора элемента: Ф Посмотреть все в категории Справочники

СправочникМенеджер.<Имя справочника>.ПолучитьИмяПредопределенного (CatalogManager.<Имя справочника>.GetPredefinedItemName)
СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
ПолучитьИмяПредопределенного (GetPredefinedItemName)
Синтаксис: Код 1C v 8.х
Параметры: <Ссылка> (обязательный)
Тип: СправочникСсылка. Ссылка на элемент, имя которого требуется получить.Возвращаемое значение:
Тип: Строка.
Описание: Получает имя предопределенного элемента. Если данный элемент не является предопределенным, то возвращается пустая строка.
Доступность: Сервер, толстый клиент, внешнее соединение.
Код 1C v 8.х
Код 1C v 8.х

Получить Код предопределенного элемента невозможно
Смотри тему: Получение кода предопределенного элемента

Разместил: E_Migachev  Версии: | 8.x | 8.2 УП |  Дата: 29.06.2012   Прочитано: 29456

Распечатать

Похожие FAQ

Еще в этой же категории

Создание и запись нового элемента справочника  12
НаКлиенте Процедура ПоКнопкеНовыйКонтрагент(Команда) // Вставить содержимое обработчика. Перем НовыйКонтрагент; НовыйКонтрагент = Новый Структура(" Наименование, ПолноеНаименование, ИНН" ); НовыйКонтрагент.Наименование = " РиК ООО" ; НовыйКон Как для Выбора Элемента Справочника Открыть Форму Выбора с нужной Открытой Группой?  8
Порядок действий такой: 1. В поле ввода " Номенклатура" добавь событие ПриНачалеВыбора. 2. Установи в них СтандартнаяОбработка = Ложь; 3. Получи форму выбора нужного справочника 4. Установи отбор по родителю 5. Открой форму для выбора Теп Поиск элемента, найти элемент справочника  5
НаКлиенте Процедура ПоКнопкеНайти(Команда) // Вставить содержимое обработчика. Сообщить(НайтиКонтрагента(" 000000001" )); КонецПроцедуры НаСервере Функция НайтиКонтрагента(КодКонтрагента) Перем КонрагентДляПоиска, СсылкаНайденногоКонрагента Подбор из справочника на основе управляемых форм  2
В данной статье рассматривается технология реализации подбора на платформе 1С 8.2. Статья не претендует на академизм, просто столкнувшись с рядом проблем и не нашедшим «правильной» методологии решения (возможно плохо искал), решил пройти этот путь с Как установить префикс нумерации справочника?  2
УстановитьНовыйКод( ПрефиксКода ) Параметры: ПрефиксКода (необязательный) Тип: Строка. Строковое значение префикса. Если префикс указан, то новый код будет формироваться с учетом префикса. Описание: Устанавливает новый код. Если в коде Посмотреть все в категории Справочники

Читайте также: