Ограничение диапазона при создании номеров контрагентов.

Ответить
nsa
Сообщения: 41
Зарегистрирован: Пт авг 01, 2008 4:55 am

Ограничение диапазона при создании номеров контрагентов.

Сообщение nsa »

У меня есть задача - при создании номеров контрагентов ограничивать их диапазон числами 100000 - 200000!

В связи с этим я поставил на базе триггер, срабатывающий при инсерте в таблицу users_pi (там номер контракта хранится), он срабатывает (то есть заменяет значение сгенерированное абиллсом), но при этом абиллс как-то не забывает и свое число, рисует его в карточке клиента ввиде новый номер->свой номер и вроде как не дает пополняться по нему через терминалы, а вот когда нажимаешь кнопку "изменить" внизу этой части карточки, то он заменяет новый номер на свой. и тогда вроде все ок

Фактически нужно узнать, может можно как-то правильнее решить вопрос с ограничением номеров?

А так вообще интересно что это все-таки такое рисует абиллс, например так
"Номер контракта: №172353=>991752"

А если нажать "Изменить" он напишет так "Номер контракта: 991752"

~AsmodeuS~
Site Admin
Сообщения: 5746
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: Ограничение диапазона при создании номеров контрагентов.

Сообщение ~AsmodeuS~ »

какое именно из полей Вам нужно задавать ?

абилс самостоятельно ничего не заполняет скорее всего у Вас что то там еще стоит кроме тригеров нужно что бы вы еще показали свои тригера

nsa
Сообщения: 41
Зарегистрирован: Пт авг 01, 2008 4:55 am

Re: Ограничение диапазона при создании номеров контрагентов.

Сообщение nsa »

По триггеру вот сопутствующая функция !
DR OP FUNCTION IF EXISTS abills.fnGetNewLS;
CRE ATE FUNCTION abills.fnGetNewLS() RETURNS varchar(6)
begin
declare LS int;
repeat
SET LS:= 100000 + ROUND(RAND() * 99999);
until LS <> ifnull((sel ect cast(contract_id as DECIMAL) fr om abills.users_pi where cast(contract_id as DECIMAL) = LS), 0)
END REPEAT;
return cast(LS as CHAR(6));
end;

DROP TRIGGER IF EXISTS abills.trUsersInsB;
CREATE TRIGGER abills.trUsersInsB BEFORE INS ERT ON abills.users_pi FOR EACH ROW
BEGIN
SE T NEW.contract_id = fnGetNewLS();
END;
поле соответственно contract_id

~AsmodeuS~
Site Admin
Сообщения: 5746
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: Ограничение диапазона при создании номеров контрагентов.

Сообщение ~AsmodeuS~ »

вот наш пример




Не заполненные поля «Номер контракта» и «Дата контракта» заполняются автоматически системой. Полю «Номер контракта» присваивается следующий порядковый номер, а полу «Дата контракта» текущая дата.

Для включения данной возможности нужно создать триггер для MySQL (Данная возможность работает начиная с версии MySQL 5.0).

DELIMITER //
CREATE TRIGGER next_contract_id BEFORE INSERT ON users_pi
FOR EACH ROW BEGIN
DECLARE new_id INTEGER;

SET new_id=1;

IF NEW.contract_id = '' THEN
SELECT CAST(contract_id AS UNSIGNED)+1 INTO new_id
FROM users_pi WHERE contract_sufix=NEW.contract_sufix
ORDER BY 1 DESC LIMIT 1;
SET NEW.contract_id=new_id;

END IF;

IF NEW.contract_date = '' or NEW.contract_date = '0000-00-00' THEN
SET NEW.contract_date=curdate();
END IF;

END;
//
DELIMITER ;

DELIMITER //
CREATE TRIGGER next_contract_id_change BEFORE UPDATE ON users_pi
FOR EACH ROW BEGIN

DECLARE new_id INTEGER;
DECLARE old_contract_sufix CHAR;

IF NEW.contract_id = '' THEN
SET new_id=1;

SELECT contract_sufix INTO old_contract_sufix
FROM users_pi WHERE uid=NEW.uid;

SELECT CAST(contract_id AS UNSIGNED)+1 INTO new_id
FROM users_pi WHERE contract_sufix=NEW.contract_sufix
ORDER BY 1 DESC LIMIT 1;
SET NEW.contract_id=new_id;

IF NEW.contract_date = '' or NEW.contract_date = '0000-00-00' THEN
SET NEW.contract_date=curdate();
END IF;
END IF;
END
//
DELIMITER ;

Ответить