Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 13:25

Уникальность комбинации значений в реквизитах при добавлении?..

Автор kolllak, 02 дек 2016, 02:27

0 Пользователей и 1 гость просматривают эту тему.

kolllak

Пытаюсь разобраться с проверкой значений на уникальность. Данному вопросу посвящено множество постов, но в основном они касаются части когда и как проводить проверку (дабы избежать дублей при многопользовательской работе) и вопросам излишней нагрузки.

у меня вопрос к гуру о следующем: Можно ли проверить уникальность комбинации нескольких реквизитов?
Т.Е. если у позиции есть реквизиты: Номер (цифры) и Клеймо (цифры+буквы), нумерация идет в рамках клейма. Как их объединить и проверять именно оба значения в комплексе?

пока вижу два решения:
- создать третий реквизит и его значение сделать равным сумме первых двух, после чего проводить его проверку на уникальность (ну и хранить его для каждой позиции номенклатуры в отдельном регистре/справочнике)
- пока описывал второй, понял что он не имеет права жить(..

SGIRG

Цитата: kolllak от 02 дек 2016, 02:27
создать третий реквизит и его значение сделать равным сумме первых двух, после чего проводить его проверку на уникальность (ну и хранить его для каждой позиции номенклатуры в отдельном регистре/справочнике)
Ну если отталкиваться от написанного выше, то у номенклатуры есть уникальный реквизит "Код" пишите в него сумму двух реквизитов.

kolllak

пришел к такому же выводу) спасибо, а можно посмотреть пример реализации в коде? или может есть какая литература с примерами?
задача срочная, а я в процессе обучения до этого еще не дошел(

SGIRG

Ну во-первых скорее всего необходимо будет увеличить длину кода (если не ошибаюсь, то максимальное значение 50)
Далее необходимо в событие ПередЗаписью (как пример) добавить часть кода отвечающую за формирование уникального значения, что-то вроде Код = Номер+Клеймо
Ну это если очень загрубить.
Можно эту часть кода вывести в подписку на события.
+ Надо понимать, что реквизиты Номер и Клеймо должны всегда иметь одинаковое количество символов, либо их нужно будет дозаполнять пробелами. Это необходимо для исключения подобных ситуаций:
Номер = 123; Клеймо = 45Ф => Код = 12345Ф
Номер = 1234; Клеймо = 5Ф => Код = 12345Ф
в данном примере уникальный код перестает быть уникальным.
+ Проверка на непустые значения в этих реквизитах.

alex0402

Я бы использовал .НайтиСтроки(Новый Структура("Реквизит1,Реквизит2",Значение1,Значение2). для каждой строки.

или запросом

Выбрать Реквизит1,Реквизит2 ПОМЕСТИТЬ ВТ ИЗ &ТЗ;
ВЫБРАТЬ Реквизит1,Реквизит2,Сумма(1) ИЗ ВТ СГРУППИРОВАТЬ ПО Реквизит1,Реквизит2
ИМЕЮЩИЕ Сумма(1) > 1

Спасибо за Сказать спасибо

kolllak

Цитата: SGIRG от 02 дек 2016, 12:00
Ну во-первых скорее всего необходимо будет увеличить длину кода (если не ошибаюсь, то максимальное значение 50)
Далее необходимо в событие ПередЗаписью (как пример) добавить часть кода отвечающую за формирование уникального значения, что-то вроде Код = Номер+Клеймо
Ну это если очень загрубить.
Можно эту часть кода вывести в подписку на события.
+ Надо понимать, что реквизиты Номер и Клеймо должны всегда иметь одинаковое количество символов, либо их нужно будет дозаполнять пробелами. Это необходимо для исключения подобных ситуаций:
Номер = 123; Клеймо = 45Ф => Код = 12345Ф
Номер = 1234; Клеймо = 5Ф => Код = 12345Ф
в данном примере уникальный код перестает быть уникальным.
+ Проверка на непустые значения в этих реквизитах.

а если пойти по этому пути но в код писать так:
Номер = 123; Клеймо = 45Ф => Код = НОМЕР123КОД45Ф
Номер = 1234; Клеймо = 5Ф => Код = НОМЕР1234КОД5Ф
??

второй вариант я точно пока не смогу реализовать(

SGIRG

Ну, если Вам хватит длины кода справочника, то можете сделать и так, ну либо просто "Н" и "К"

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск