1с получить свободный код справочника
Как можно осуществить подбор свободного кода справочника "Номенклатура" без захвата одного и того же кода несколькими операторами, подскажите, пожалуйста? Код для 7.7 есть, может кто адаптировать поможет? Процедура ВводНового(ПризнКопирования) Процедура ПриЗаписи и Процедура ПриЗакрытии или
это нужно, для того, чтобы занять ранее удаленные кода, а нам еще и для того, чтобы занять 10000 штук пропущенных ранее элементов
Мы делали такое со счетами-фактурами, чтобы нумерация была корректной. Маска была ГГГГММДДХХХ, т.е. в один день можно было выписать 10 тыс. счетов фактур и номер был уникальный. Выполняется поиск номера по коду только в том случае, если номер не уникальный. Если пока собирались проводить, номер кто-то занял, процедура повторялась. Проблем не было.
Выбрать все коды запросом, удаляем префиксы, преобразуем в число, сортируем по возрастанию, запускаем цикл от 1 по ТЗ.Количество, в цикле если не а = ТЗ.НомерСтроки Тогда это и есть пропущенный номер, может так.
Да, вариант хороший. Только не знаю: 1.) как это сделать? 2.) как потом получить код, который он хочет присвоить 3.) как указать старый код элементу номенклатуры
Выбрать ВСЕ коды, а потом их перебирать, вдруг попадется неиспользуемый? Это сильно. Да и выбирать-то придется каждый раз, когда нужно новый присвоить.
Раз уж пошла такая пьянка, может действительно завести регистр (на время, пока все пропущенные номера не заполнятся). Туда один раз выбрать все пропущенные номера, а потом при создании нового справочника искать номер сначала там, а уж если там нет, то добавлять новый.
Да :) 1.) как это сделать? 2.) как потом получить код, который он хочет присвоить 3.) как указать старый код элементу номенклатуры
а в объекте элемента в этой процедуре наверное Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) КонецПроцедуры это при создании нового, по поводу производительности должен за 0,2 сек выполнить
Смотри, по порядку: 1) Создаешь РС 2) Заполняешь его неиспользуемыми кодами в промежутке (от 00000 до максимального используемого значения для данного справочника) 3) При создании нового элемента берешь минимальный код из РС и присваиваешь его записываемому элементу. (можно руками: Элемент.Код = НашКодИзРегистра) 4) Если элемент успешно записан, удаляешь из РС использованный номер(чтоб второй раз потом его не использовать) 5) Если РС - пустой(т.е все пробелы в нумерации закончились), то новый код устанавливаешь методом УстановитьНовыйКод
Если код не равен отличается от числа строки то это то что нам нужно в идеале они все по порядку идут и равны
может просто у тех номенклатур, которые после вбили поменять префикс. Тогда само будет браться из пропущенного диапазона..
При использовании в справочнике Номенклатура конструкции подбора не занятых кодов менее максимального, при работе нескольких операторов возникла проблема захвата одного и того же кода, если не использовать Записать() при создании нового элемента.
В конец процедур ПриЗаписи() и ПриЗакрытии() вставляем:
Специальные предложения
(4) А ничего не делать. Он просто не запишется, ибо ПрисвоитьНовыйКод(Число(Код)) не сработает. Я никогда не кладу код, который не проверяю;)
(6) Что-то я тебя не понял тогда. Проблема была в том, что при вводе нового получался один код у операторов сразу? Так? Ну и пусть себе появляется, а при записи они расположатся по порядку кодов: кто быстрее нажать успел
P.S. Ну и штрих при записи присвоить можно. Правда, тут я не спец: никогда розницей не занимался ;)
Просмотры 10016
Загрузки 0
Рейтинг 1
Создание 05.11.10 15:17
Обновление 05.11.10 15:17
№ Публикации 77699
Тип файла Нет файла
Операционная система Windows
Страна Россия
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)
Код открыт Не указано
См. также
1С 7.7 и новый 1С:Контрагент
Получение реквизитов контрагентов из 1С:Контрагент для старых конфигураций под 1с 7.7.
25.04.2022 353 zhenyat 1
Печать таблицы значений в 1С 7.7 при отладке
Функция выводит таблицу значений в табличный документ. (v7.7) Особенно полезно при отладке. Не нужно вносить изменения в код, вызываем функцию как вычисляемое выражение при останове. Если таблица обрабатывается в несколько этапов, можно вывести её после каждого и визуально проследить эволюцию.
30.06.2021 2039 Zoltan_Black 11
Заполнение реквизитов документов из предыдущего документа
Функция для автоматического заполнения реквизитов документов.
04.02.2019 5851 drevilo 2
Проверка часового пояса
При использовании терминалок для удаленных баз, иногда при входе в базу данных необходимо исключить возможность входа пользователей с компьютеров с другим часовым поясом. Например, работают в Новосибирской базе с временем UTC +6 и пытаются зайти в базу с UTC +3.
16.05.2016 11822 kudenzov 3
Процедура расшифровки ячейки таблицы в отчетах 1С 7.7
Хочу поделиться с вами универсальной процедурой для расшифровки ячеек печатной формы отчетов в 1С 7.7.
24.09.2015 19339 Anzhey 14
Универсальный способ сравнения таблиц
На эту тему уже есть статьи, но этот способ нигде не описан. Хотя я его использую с тех пор, как занимаюсь программированием. Его преимущество в простоте и универсальности: можно применять на 1С, SQL, а также в любом другом языке программирования.
05.07.2015 20165 json 3
Числа прописью в родительном падеже в 7.7? Легко!
Вывод числительных прописью в родительном падеже штатными средствами в три строчки кода.
20.06.2015 13489 gimalaj 3
Исправление в типовой комплексной конфигурации глобальной функции глВсеРеквизитыДокументаЗаполнены()
В типовых конфигурациях глобальная функция глВсеРеквизитыДокументаЗаполнены() не работает с реквизитами табличной части. Данная статья содержит текст исправленной функции, корректно проверяющей табличную часть.
20.08.2014 8380 hvv2002 0
Проверка ИНН v.7.7
Проверка ИНН, есть наверняка куча аналогов, для v.8.x точно есть и не один.
08.03.2014 9943 kras_71 0
Полезные функции. Склонение (должность и фамилия подписантов). Любой язык
Уехал директор в командировку, отпуск. , оставил доверенность на хозяйственные операции на другого сотрудника. Все договора и другие документы в обмороке - "подписант" теперь другой, по тексту тоже много правок. Пересмотрел много публикаций, вариантов много, не приглянулось. Сделал свой "Баян" . У меня всего-то крутится пять фигурантов . Нет простого, наглядного и всепогодного варианта без языкового барьера. Всем процессом управляет пользователь.
03.03.2014 18571 kompas-dm 5
Устранение проблемы при работе с полем, которое ограничено маской ввода
Для поля, у которого установлена маска ввода, перед программной инициализацией необходимо начальное значение преобразовать к значению в соответствии с маской, иначе буду потеряны символы в местах разделителях. В данной публикации приведена функция, которая универсально выполняет данное действие.
08.08.2012 17318 www2000 4
Скрытие помеченных на удаление в справочнике
Корректно скрываем помеченных на удаление в справочнике, с иерархией и без. Вроде простая и нужная вещь, но почему-то нигде не встречалась
08.08.2012 15005 mikukrnet 7
Исправление и проведение документов
Исправление и проведение документов, например, счетов-фактур, введенных на основании документов реализации, можно организовать многими способами. Описан сравнительно простой подход, реализованный и работающий несколько лет в реальной бухгалтерии 1Cv7.7. Без внешних компонентов.
23.07.2012 13774 BorisBelov 11
Получение характеристик и управление текущим процессом 1С на основе WMI
Функционал для работы из 1С с текущим процессом класса Win32_Process. Пример получает текущее значение ОЗУ занятое процессом 1С. По описанной методике можно получать значения пиковых нагрузок на ОЗУ, время запуска текущей сессии 1С с точностью до миллисекунд. Определять загрузку активного ядра процессом и даже поменять приоритет самого процесса.
09.07.2012 21926 dusha0020 8
Доработка ТиС 9.2 на предмет запрета одинаковых (дублей) артикулов
Проверка уникальности артикула
03.07.2012 11362 atb123 11
Функция проверки валидности e-mail с использованием регулярных выражений RegExp (7.7)
Функция проверки валидности e-mail с использованием регулярных выражений RegExp (7.7). Данную функцию можно вставить в Глобальный модуль и пользоваться, например, при вводе или сохранении e-mail.
30.10.2011 11501 zaursoft 11
Неправильное изменение категории плательщика ПФР при проведении справки МСЭК
В ЗиК (релиз 314) при проведении документа "Справка МСЭК" вкралась ошибка: проведение некорректно изменяет категорию плательщика ПФР на "Работник сельскохозяйственной организации - инвалид", затем на "Работник колхоза, совхоза и другого сельскохозяйственного предприятия". Связано это с разными типами ожидаемого и возвращаемого перечисления в функции "глКатегорияПФР": "КатегорияПлательщикаПФ" и "КатегорииЗастрахованныхЛицПФР". Решение: изменить функцию "глКатегорияПФР" (около 2932-й строки).
17.10.2011 6598 Krokokot 3
Хитрость. Использование БУЛЕВО при OLE обмене/подключении из 7.7 к 8
Как известно, при OLE обмене доступны только типы СТРОКА, ЧИСЛО, ДАТА. А вот БУЛЕВО (ИСТИНА, ЛОЖЬ) использовать при подключении из 7.7 к 8 не получается. Как же быть? Есть хитрость, как использовать тип булево в семерке при обмене с 1С8! :)
28.09.2011 17346 dnikolaev 8
Дата запрета редактирования
Очень часто необходимо постоянно закрывать период для редактирования документов. Вот как я вышла из этой ситуации.
Есть справочник, с числовыми кодами. При создании нового элемента код отрабатывает поиск первого свободного кода в справочнике (т.к. периодически удаляются элементы). Зачем так сделано, не буду описывать, но так надо :-) Когда код достигнет 100 000, совсем будет тормозить. Константа создана, для ускорения поиска, и заполняется при любом монопольном входе в базу. Возможно ли ускорить данную задачу. Может прямой запрос какой то хитрый впендюрьть? Есть идеи?
Сделай перенумерацию. Потом пропиши, при удалении элемента - сохранить где-нить его код. Затем присваивать его вновь создавшемуся, если есть дырка.
Если элементы справочника переодически удаляются, тогда наверное можно использовать уже помеченные на удаление элементы и просто восстанавливать их.
может лучше обработкой вытаскивать (например каждый час) не занятые номера номенкалтуры, и заполнять их в строку - константу типа так: [НезанятыйНомер1][НезанятыйНомер2][НезанятыйНомер3][НезанятыйНомер4][НезанятыйНомер5] А при создании элемента справочника брать номера из этой строки.
ы. можно еще завести второй справочник освободившихся номеров. и когда в первом элемент удаляется, элемент с таким номером заводится во втором.
хоть бы синтаксис знать какой у запроса, она падла ведь в синглюзер буду копать, или адинес или прослойку какую между клиентом и адинес впендюрю
достаточно одного значения. При записи будет указываться последний занятый номер. по-видимому уже закончилась
Если файловая. Элементы сразу не удаляются - помечаются как Deleted. Смотришь коды у элементов Deleted (по ним есть индекс), берешь код с мин значением RecNo(он будет затерт). Если нет таких - то максимальный.
обычно при незакрытых кодах справочника какой-нибудь мудень добивает лишнию цифирь и был у нас номер 5тизначный, а стал 6тизначный дыры между кодами большие и такой алгоритм (последовательной проверки с определенного кода) не сильно затормозит работу а вот если справочник физически заканчивается, то проще добавить пару разрядов в конфигураторе
Я б пошел по пути как в . Вот только заполнять его обработкой (раз в сутки думаю достаточно будет). Ну а если скуль - таблица с заполнением через триггер.
Наверно надо декартово произведение из нескольких Т1. Но не уверен что это быстро. Еще и всю таблицу подсоединять.
: внешняя обработка, на кнопку - код (справлчник можно не ТМЦ а любой с числовым кодом). А на вопрос "как тут прервать выполнение запроса" если ответишь (см.код) - так вообще спасибище будед )))))
Ты прикалываешься просто? На запрос внимательно посмотри. И T1 - это таблица для экспериментов. В реальном запросе это будет справочник. И нифига туда инсертить не надо будет.
Запрос в кверюге выполни. А потом замени T1 на таблицу справочника, а K - на Code :) И строки с созданием, удалением таблицы и инсертами убери.
СправочникМенеджер.<Имя справочника>.ПолучитьИмяПредопределенного (CatalogManager.<Имя справочника>.GetPredefinedItemName)
СправочникМенеджер. <Имя справочника>(CatalogManager.<Имя справочника>)
ПолучитьИмяПредопределенного (GetPredefinedItemName)
Синтаксис: Код 1C v 8.х
Параметры: (обязательный)
Тип: СправочникСсылка. Ссылка на элемент, имя которого требуется получить.Возвращаемое значение:
Тип: Строка.
Описание: Получает имя предопределенного элемента. Если данный элемент не является предопределенным, то возвращается пустая строка.
Доступность: Сервер, толстый клиент, внешнее соединение.
Код 1C v 8.х
Код 1C v 8.х
Получить Код предопределенного элемента невозможно
Смотри тему: Получение кода предопределенного элемента
Похожие FAQ
Еще в этой же категории
Создание и запись нового элемента справочника 14
НаКлиенте Процедура ПоКнопкеНовыйКонтрагент(Команда) // Вставить содержимое обработчика. Перем НовыйКонтрагент; НовыйКонтрагент = Новый Структура(" Наименование, ПолноеНаименование, ИНН" ); НовыйКонтрагент.Наименование = " РиК ООО" ; НовыйКон Как для Выбора Элемента Справочника Открыть Форму Выбора с нужной Открытой Группой? 8
Порядок действий такой: 1. В поле ввода " Номенклатура" добавь событие ПриНачалеВыбора. 2. Установи в них СтандартнаяОбработка = Ложь; 3. Получи форму выбора нужного справочника 4. Установи отбор по родителю 5. Открой форму для выбора Теп Перебрать, выбрать элементы справочника 7
Выборка = Справочники.Сотрудники.Выбрать(); //или Выборка = Справочники.Сотрудники.ВыбратьИерархически(); Пока выборка.Следующий() = 1 Цикл . //действия с очередным элементом . Сообщить(" Сотрудник " + выборка.Наименование); КонецЦикла; / Перебрать, выбрать элементы подчиненного справочника 7
Перебор элементов справочника принадлежащих элементу другого справочника, т.е когда один справочник подчинен другому справочнику. // Получить выборку по указанному контрагенту. Выборка = Справочники.КонтактныеЛица.Выбрать( , Контрагент); Пока Вы Как программно открыть и выбрать элемент справочника, выбор элемента справочника? 7
Просто открыть: // Получить форму выбора справочника как подчиненную форме документа ФормаСписка = Справочники.Номенклатура.ПолучитьФормуСписка( , ЭтаФорма); // Открыть полученную форму ФормаСписка.Открыть(); Открыть для выбора элемента: Ф Посмотреть все в категории Справочники
СправочникМенеджер.<Имя справочника>.ПолучитьИмяПредопределенного (CatalogManager.<Имя справочника>.GetPredefinedItemName)
СправочникМенеджер. <Имя справочника>(CatalogManager.<Имя справочника>)
ПолучитьИмяПредопределенного (GetPredefinedItemName)
Синтаксис: Код 1C v 8.х
Параметры: (обязательный)
Тип: СправочникСсылка. Ссылка на элемент, имя которого требуется получить.Возвращаемое значение:
Тип: Строка.
Описание: Получает имя предопределенного элемента. Если данный элемент не является предопределенным, то возвращается пустая строка.
Доступность: Сервер, толстый клиент, внешнее соединение.
Код 1C v 8.х
Код 1C v 8.х
Получить Код предопределенного элемента невозможно
Смотри тему: Получение кода предопределенного элемента
Похожие FAQ
Еще в этой же категории
Создание и запись нового элемента справочника 14
НаКлиенте Процедура ПоКнопкеНовыйКонтрагент(Команда) // Вставить содержимое обработчика. Перем НовыйКонтрагент; НовыйКонтрагент = Новый Структура(" Наименование, ПолноеНаименование, ИНН" ); НовыйКонтрагент.Наименование = " РиК ООО" ; НовыйКон Как для Выбора Элемента Справочника Открыть Форму Выбора с нужной Открытой Группой? 8
Порядок действий такой: 1. В поле ввода " Номенклатура" добавь событие ПриНачалеВыбора. 2. Установи в них СтандартнаяОбработка = Ложь; 3. Получи форму выбора нужного справочника 4. Установи отбор по родителю 5. Открой форму для выбора Теп Перебрать, выбрать элементы справочника 7
Выборка = Справочники.Сотрудники.Выбрать(); //или Выборка = Справочники.Сотрудники.ВыбратьИерархически(); Пока выборка.Следующий() = 1 Цикл . //действия с очередным элементом . Сообщить(" Сотрудник " + выборка.Наименование); КонецЦикла; / Перебрать, выбрать элементы подчиненного справочника 7
Перебор элементов справочника принадлежащих элементу другого справочника, т.е когда один справочник подчинен другому справочнику. // Получить выборку по указанному контрагенту. Выборка = Справочники.КонтактныеЛица.Выбрать( , Контрагент); Пока Вы Как программно открыть и выбрать элемент справочника, выбор элемента справочника? 7
Просто открыть: // Получить форму выбора справочника как подчиненную форме документа ФормаСписка = Справочники.Номенклатура.ПолучитьФормуСписка( , ЭтаФорма); // Открыть полученную форму ФормаСписка.Открыть(); Открыть для выбора элемента: Ф Посмотреть все в категории Справочники
Читайте также: