:: Игры Разума
Формирование нового инвентарного номера
Foxtrot
Автор

Сообщений: 3408
Откуда: Куда:
Дата регистрации: 25.04.2003
Преамбула:
Сегодня наткнулся на код в 1це. Ржал до тошноты, окружающие смотрели на мну как на сошедшего с катушек, жалели наверное про себя
Амбула:
Есть таблица Основные_Стредства с полем Инвентарный_Номер С(8). Нуна при создании новой записи автоматом формировать новый Инвентарный_Номер с лидирующими нулями. Задача канечна же для пятого класса, но тем не менее. Гипертурбомегапрогерам просьба отказаться от участия-кодирования, ну мобыть тока при подведении итогов оставить мона буит свои коменты.
Постамбула:
Творение, над которым я глумился и который подвиг мну затеять сей топег, озвучу позже


------------------
Мойте ноги, моя ноги вы моете и руки




Исправлено 3 раз(а). Последнее : Foxtrot, 14.05.11 15:58
Ratings: 0 negative/0 positive
Re: Формирование нового инвентарного номера
sphinx

Сообщений: 31180
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Так как
Цитата:
Гипертурбомегапрогерам
себя не отношу... на вскидку что-то типа
INSERT INTO Основные_Стредства (Инвентарный_Номер) VALUES (SELECT PADL(TRANSFORM(1+MAX(VAL(Инвентарный_Номер)), 8, '0' ) FROM Основные_Стредства )

P.S. Нифига не тестировал. Первое, что пришло в голову.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Формирование нового инвентарного номера
Goodwin

Сообщений: 3539
Откуда: Омск
Дата регистрации: 03.05.2006
sphinx
1+MAX(VAL(Инвентарный_Номер))
C(8) же.
Может он алфавитно-цифровой.
Нужен список допустимых символов.


------------------
Что мы знаем о лисе?
Ничего. И то не все.
(С)Б. Заходер
Ratings: 0 negative/0 positive
Re: Формирование нового инвентарного номера
Foxtrot
Автор

Сообщений: 3408
Откуда: Куда:
Дата регистрации: 25.04.2003
Goodwin
sphinx
1+MAX(VAL(Инвентарный_Номер))
C(8) же.
Может он алфавитно-цифровой.
Нужен список допустимых символов.
верно подмечено
интересуют токма цифры


------------------
Мойте ноги, моя ноги вы моете и руки
Ratings: 0 negative/0 positive
Re: Формирование нового инвентарного номера
Goodwin

Сообщений: 3539
Откуда: Омск
Дата регистрации: 03.05.2006
dime aNums(10^8)
scan
aNums(min(1,val(Инвентарный_Номер)))=.t.
endscan
return right('0000000'+alltrim(str(ascan(aNums, .f.), 10, 0)), 8)


------------------
Что мы знаем о лисе?
Ничего. И то не все.
(С)Б. Заходер
Ratings: 0 negative/0 positive
Re: Формирование нового инвентарного номера
Foxtrot
Автор

Сообщений: 3408
Откуда: Куда:
Дата регистрации: 25.04.2003
нифига не понял финт со сканом, видать без стакана не разобраться
может кто из молодежи отметится?


------------------
Мойте ноги, моя ноги вы моете и руки
Ratings: 0 negative/0 positive
Re: Формирование нового инвентарного номера
sphinx

Сообщений: 31180
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Да пиши, чего хотел показать. ;)


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Формирование нового инвентарного номера
Goodwin

Сообщений: 3539
Откуда: Омск
Дата регистрации: 03.05.2006
Foxtrot
нифига не понял финт со сканом
Ну, не копипастить же Александра.
Могу ещё предложить варианты с recno(),
количеством секунд с начала эпохи,
crc32 от названия ценности,
rand() в конце концов


------------------
Что мы знаем о лисе?
Ничего. И то не все.
(С)Б. Заходер
Ratings: 0 negative/0 positive
Re: Формирование нового инвентарного номера
Foxtrot
Автор

Сообщений: 3408
Откуда: Куда:
Дата регистрации: 25.04.2003
Функция СформироватьИнвентарныйНомер() Экспорт
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЕстьNull(ОсновныеСредства.ИнвентарныйНомер,"""") КАК ИнвентарныйНомер
|ИЗ
| Справочник.ОсновныеСредства КАК ОсновныеСредства";
Если не ЭтоНовый() Тогда
Запрос.Текст = Запрос.Текст + "
|ГДЕ
| ОсновныеСредства.Ссылка <> &Ссылка";
КонецЕсли;
Запрос.Текст = Запрос.Текст + "
|
|УПОРЯДОЧИТЬ ПО
| ИнвентарныйНомер УБЫВ";
Запрос.УстановитьПараметр("Ссылка",Ссылка);
НомерИнв = 0;
ИнвНомер = "";
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
НомерИнв = Выборка.ИнвентарныйНомер;
Если ЗначениеЗаполнено(НомерИнв) Тогда
ПоследнийИнвНомер=СокрЛП(НомерИнв);
Если СтрДлина(ПоследнийИнвНомер)=8 Тогда
ПослБуква=Прав(ПоследнийИнвНомер,1);
Если (ПослБуква<>"1")и(ПослБуква<>"2")и(ПослБуква<>"3")и(ПослБуква<>"4")и(ПослБуква<>"5")и(ПослБуква<>"6")
и(ПослБуква<>"7")и(ПослБуква<>"8")и(ПослБуква<>"9")и(ПослБуква<>"0") Тогда
ПоследнийИнвНомер=Сред(ПоследнийИнвНомер,1,СтрДлина(ПоследнийИнвНомер)-1);
КонецЕсли;
КонецЕсли;
КонецЕсли;
ИнвНомер=Число(ПоследнийИнвНомер)+1;
ИнвНомер=Формат(ИнвНомер,"ЧГ=");
Для к=1 По 7 Цикл
Если СтрДлина(СокрЛП(ИнвНомер))<7 Тогда
ИнвНомер="0"+ИнвНомер;
КонецЕсли;
КонецЦикла;
Возврат Формат(ИнвНомер,"ЧГ=");
Иначе
Возврат "";
КонецЕсли;
КонецФункции


------------------
Мойте ноги, моя ноги вы моете и руки
Ratings: 0 negative/0 positive
Re: Формирование нового инвентарного номера
Foxtrot
Автор

Сообщений: 3408
Откуда: Куда:
Дата регистрации: 25.04.2003
жаль, что мы не услышали начальника трнаспортного отдела наблюдали активность только старожилов


------------------
Мойте ноги, моя ноги вы моете и руки
Ratings: 0 negative/0 positive
Re: Формирование нового инвентарного номера
Goodwin

Сообщений: 3539
Откуда: Омск
Дата регистрации: 03.05.2006
То есть тут тебе всё понятно, а с простым сканом "без стакана не разобраться"?


------------------
Что мы знаем о лисе?
Ничего. И то не все.
(С)Б. Заходер
Ratings: 0 negative/0 positive
Re: Формирование нового инвентарного номера
matod

Сообщений: 3062
Откуда: Иркутск
Дата регистрации: 31.10.2001
Цитата:
Функция СформироватьИнвентарныйНомер() Экспорт

Зато автору будет что показать, если спросят, чем занимался в конце месяца. В этом плане элегантное решение в 2 строчки выглядит явно хуже

Насчет задачи для пятого класса - ой, не знаю... В задаче же не уточнено, нумерация выполняется с дырами или без них, многопользовательская или нет, может еще что... Задачу либо уточнять надо, либо параметры в алгоритм вводить.

Ну, и кроме собственно расчета N+1 надо бы проверить, вписывается ли число в 8 символов и обеспечить обработку переполнения ну и т.д. Собственно этими ньюансами "школьные" задачки и отличаются от промышленного изделия
Ratings: 0 negative/0 positive
Re: Формирование нового инвентарного номера
Foxtrot
Автор

Сообщений: 3408
Откуда: Куда:
Дата регистрации: 25.04.2003
ну вы блин даете(с) поворчать мы все умеем, но если правилами не запрещено явно, то и придумывать ограничения не вижу смысла. сдались вам эти дыры и блокировки иже с ними;)
ps похоже тема не сраслась с текущим разделом, впредь такие топеги буду открывать в Курилке


------------------
Мойте ноги, моя ноги вы моете и руки
Ratings: 0 negative/0 positive


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

On-line: 3 (Гостей: 3)

© 2000-2024 Fox Club 
Яндекс.Метрика