for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  

Список Форумов  :: Игры Разума
   :: Помощь сайту :: 

Формирование нового инвентарного номера
Foxtrot
Автор

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


------------------
P.S. будете проходить мимо, не стесняйтесь, проходите




Исправлено: Foxtrot, 14.05.11 14:58
Ratings: 0 negative/0 positive

Re: Формирование нового инвентарного номера
sphinx

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

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


------------------
"Вы поступили правильно, мой друг, но, боюсь, совершили ошибку"..."(с)
Ratings: 0 negative/0 positive

Re: Формирование нового инвентарного номера
Goodwin

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


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

Re: Формирование нового инвентарного номера
Foxtrot
Автор

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


------------------
P.S. будете проходить мимо, не стесняйтесь, проходите
Ratings: 0 negative/0 positive

Re: Формирование нового инвентарного номера
Goodwin

Сообщений: 3539
Откуда: Омск
Дата: 16.05.11 11:03:12ОтветитьЦитировать
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
Автор

Сообщений: 3370
Откуда: Куда:
Дата: 16.05.11 21:48:54ОтветитьЦитировать
нифига не понял финт со сканом, видать без стакана не разобраться
может кто из молодежи отметится?


------------------
P.S. будете проходить мимо, не стесняйтесь, проходите
Ratings: 0 negative/0 positive

Re: Формирование нового инвентарного номера
sphinx

Сообщений: 22831
Откуда: Каменск-Уральски
Дата: 17.05.11 04:31:49ОтветитьЦитировать
Да пиши, чего хотел показать.


------------------
"Вы поступили правильно, мой друг, но, боюсь, совершили ошибку"..."(с)
Ratings: 0 negative/0 positive

Re: Формирование нового инвентарного номера
Goodwin

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


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

Re: Формирование нового инвентарного номера
Foxtrot
Автор

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


------------------
P.S. будете проходить мимо, не стесняйтесь, проходите
Ratings: 0 negative/0 positive

Re: Формирование нового инвентарного номера
Foxtrot
Автор

Сообщений: 3370
Откуда: Куда:
Дата: 17.05.11 07:31:44ОтветитьЦитировать
жаль, что мы не услышали начальника трнаспортного отдела наблюдали активность только старожилов


------------------
P.S. будете проходить мимо, не стесняйтесь, проходите
Ratings: 0 negative/0 positive

Re: Формирование нового инвентарного номера
Goodwin

Сообщений: 3539
Откуда: Омск
Дата: 17.05.11 08:01:05ОтветитьЦитировать
То есть тут тебе всё понятно, а с простым сканом "без стакана не разобраться"?


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

Re: Формирование нового инвентарного номера
matod

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

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

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

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

Re: Формирование нового инвентарного номера
Foxtrot
Автор

Сообщений: 3370
Откуда: Куда:
Дата: 17.05.11 10:07:19ОтветитьЦитировать
ну вы блин даете(с) поворчать мы все умеем, но если правилами не запрещено явно, то и придумывать ограничения не вижу смысла. сдались вам эти дыры и блокировки иже с ними
ps похоже тема не сраслась с текущим разделом, впредь такие топеги буду открывать в Курилке


------------------
P.S. будете проходить мимо, не стесняйтесь, проходите
Ratings: 0 negative/0 positive



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

On-line: 45 _vit Mitchman Taran sphinx  and Guests: 41


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