|
Проблема с нумерацией | ☑ | ||
---|---|---|---|---|
0
an_str
17.07.13
✎
10:39
|
Здравствуйте! может кто подскажет, возникла проблема...Имеем справочник, автонумерация и контроль уникальности включены. При создании элемента справочника тыкаемся в кнопку, на которую навешена следующая процедура:
&НаСервере Процедура ПолучитьИнвентарныйНомерОборудования(Префикс) НОбъект=ДанныеФормыВЗначение(Объект,Тип("СправочникОбъект.КарточкаНоменклатуры")); Префикс1=СокрЛП(Префикс.Код)+"-"; НОбъект.УстановитьНовыйКод(Префикс1); НОбъект.Записать(); ЗначениеВДанныеФормы(НОбъект,Объект); КонецПроцедуры Таким образом формируются у нас элементы со след нумерацией: 2602-00001 2602-00002 2602-00003 2602-00004 2602-00005 Теперь задача...Пользователь может поменять код вручную, к примеру на 2602-6...следовательно след-1 код выдаст 2602-7, а нам надо дальше чтобы продолжало нормальную нумерацию т.е., чтобы след код был 2602-00006...Можно ли как-то отследить менялся ли код вручную? и возможно ли вообще реализовать эту задачу? буду благодарна за помощь... |
|||
1
Maxus43
17.07.13
✎
10:41
|
>>и возможно ли вообще реализовать эту задачу?
запретить менять номера кривыми руками пользователей. |
|||
2
Академик_
Келдыш 17.07.13
✎
10:41
|
Это почему пользователю вручную код менять нужно? хочет вручную- пусть сам дальше вручную и нумерует
|
|||
3
Maxus43
17.07.13
✎
10:42
|
Если свои специфические требования к номерам - заведи реквизит "НомерСвой" - пусть там меняют что хотят, а автонумерацию не трогают
|
|||
4
an_str
17.07.13
✎
10:44
|
(1)Ой, так вот именно..что все мои попытки что-то объяснить руководству бесполезны...Должен и все тут. редко, но должен...
|
|||
5
Maxus43
17.07.13
✎
10:45
|
(4) смотри (2). Или Или. Или ручная Или автомат
|
|||
6
Maxus43
17.07.13
✎
10:46
|
т.е. после ручного исправления надо руками и менять нумерацию на правильную
|
|||
7
an_str
17.07.13
✎
10:46
|
(3) суть с новым реквизитом все равно не меняется...Задача таково: чтобы была автонумерация, и иногда пользователь менял номер руками, при этом автонумерация потом продолжалась. Речи не идет о том, чтобы каждый раз вводить код вручную...Так понимаю в такой постановке - это не реализовать?
|
|||
8
an_str
17.07.13
✎
10:47
|
(6) ясно...спасибо
|
|||
9
Академик_
Келдыш 17.07.13
✎
11:00
|
(7) а если подумать? не вариант сделать доп реквизит который при записи нового будет автоматом как и код, но ручками чтоб менять можно было?
|
|||
10
Академик_
Келдыш 17.07.13
✎
11:02
|
а вообще зло это. машина не виновата что юзер когда-то что-то пропустил
|
|||
11
an_str
17.07.13
✎
11:10
|
(9) т.е. к примеру код=2602-00006 ДопРеквизит=2602-00006, меняем его ручками на 2602-6. При следующем создании будет элемент с код=2602-00007 и ДопРеквизит=2602-00007, т.е. номер "2602-00006" уйдет в никуда...
|
|||
12
Maxus43
17.07.13
✎
11:11
|
(11) всё уже сказано, так работает автонумерация, и это нормально. Вмешиваясь в данный механизм - будь добр сам следить дальше
|
|||
13
an_str
17.07.13
✎
13:44
|
А если изобретать велосипед. И добавить реквизит "НомерИзмененВручную", в процедуре при изменении кода ставим его в истину. И по кнопке получить номер, если пропишем следующее:
&НаСервере Процедура ПолучитьИнвентарныйНомерОборудования(Префикс) Запрос = Новый Запрос; Запрос.Текст= "ВЫБРАТЬ ПЕРВЫЕ 1 | МАКСИМУМ(КарточкаОборудования.Код) КАК Код |ИЗ | Справочник.КарточкаОборудования КАК КарточкаОборудования |ГДЕ | КарточкаОборудования.НомерИзменен = ЛОЖЬ | И КарточкаОборудования.Код ПОДОБНО &СтрокаПоиска | |УПОРЯДОЧИТЬ ПО | Код УБЫВ"; Запрос.УстановитьПараметр("СтрокаПоиска", СокрЛП(Префикс.Код)+"-" + "%"); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Код = Результат.Код; КонецЦикла; Рез=Найти(Код, "-"); ДлинаКода=СтрДлина(Код); НОбъект=ДанныеФормыВЗначение(Объект,Тип("СправочникОбъект.КарточкаОборудования")); Префикс1=СокрЛП(Префикс.Код)+"-"; НоваяДлина=СтрДлина(Префикс1)+СтрДлина(Строка(Число(Сред(Код,Рез+1))+1)); КолНулей=ДлинаКода-НоваяДлина; стр=""; Пока КолНулей<>0 цикл КолНулей=КолНулей-1; стр=стр+"0"; КонецЦикла; НовКод= Строка(Префикс1+стр+(Число(Сред(Код,Рез+1))+1)); ЭлементНайден=Истина; ЧислоКНомеру=1; Пока ЭлементНайден<>Ложь Цикл НовКод= Строка(Префикс1+стр+(Число(Сред(Код,Рез+1))+ЧислоКНомеру)); ЭлементНайден = ЗначениеЗаполнено(Справочники.КарточкаОборудования.НайтиПоКоду(НовКод)); ЧислоКНомеру=ЧислоКНомеру+1; КонецЦикла; НОбъект.Код = НовКод; НОбъект.Записать(); ЗначениеВДанныеФормы(НОбъект,Объект); КонецПроцедуры На сколько это коряво? можно оптимизировать? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |