Страница 1 из 1

Редактирование системных данных Лоции через формы

Добавлено: 01 фев 2010, 14:32
Александр
Юрий, Андрей - не подскажите
нужно работать с системными таблицами Лоции через атрибутивные формы
2 вопроса
1й - есть объект сотрудник - у которого в атрибутах есть информация - отдел тел мыло и т.д. - есть таблица ABUser.empl_id где есть точно такая же информация. Выборки по этой таблице идут быстрее чем по атрибутам - но по атрибутам удобнее редактировать, для юзеров я запретил доступ к адресным книгам
Как через атрибутивную форму, используюя или дублирующие атрибуты или просто запросы в действии - менять данную таблицу ABUser.empl_id?
2й вопрос - часто возникает ситуация когда нужно изменить значение атрибута объекта - например там написано было первый раз КомПания и юзер видя такую ошибку - хочет исправить на Компания - но не тут то было - уникальность значений.... и приходиться админу лезть в значения атрибута и править вручную, а нехота
да и вообще за юзеров неохота работать, да и пускать их к интерфейсу Лоции тоже неохота
как это сделать красиво? в смысле никто не делал? если да - то как?
никто не решал подобные задачи через интуитивно понятное редактирование атрибутивных форм???

ps
с чтением вроде разобрался достаточно - настало время записи :wink: :wink: :wink:

Re: Редактирование системных данных Лоции через формы

Добавлено: 01 фев 2010, 16:13
Александр
имеется в виду - может есть какие-то родные процедуры Лоции для Udate существующего значения или создания нового
по вопросу 1

Код: Выделить всё

update lsdbo.ABUser set phones='232' where empl_id=72 
select * from lsdbo.ABUser
типа записать номер телефона сотруднику с id=72. Эт правильный синтаксис или что-то не учтено?
по вопросу 2 тоже не совсем ясно как изменить значение строкового атрибута вытаскиваемого запросом

Код: Выделить всё

SELECT Coalesce(vv1.value,'')+Coalesce(vv1.value1,'') 
    FROM lsdbo.object_reference rw left join lsdbo.object_type tw on rw.type_id=tw.id left join 
         lsdbo.attrib_value av1 on rw.id = av1.object_id and av1.attrib_id = 3000000000121 left join 
         lsdbo.value_string vv1 on av1.value_id = vv1.id and av1.attrib_id = 3000000000121 
  where  rw.type_id = tw.id and rw.id=100004487800000
ведь строковый атрибут состоит из 2х частей???

Re: Редактирование системных данных Лоции через формы

Добавлено: 01 фев 2010, 22:16
Старик Крупский
Маньяк :)

Re: Редактирование системных данных Лоции через формы

Добавлено: 03 фев 2010, 12:06
Александр
кстати неплохо получилось с объектом сотрудник
вроде половины атрибутов у него нет - а они есть :wink: :wink: :wink: только в его адресной книге - доступной для форм отчетов действий и т.д. с привязкой через ID юзера :wink: фактически имеем 2 блока данных - физический адрес сотрудника на атрибутах и рабочий адрес юзера на адресной книге, ну там должности и отделы и еще кое что пересекаются, но это не важно - главное при редактировании инфа пишется и туда и сюда... типа вот так
сама процедура заполнения части адресной книги

Код: Выделить всё

ALTER procedure [LSDBO].[Ric_Set_UserAddrBook]
/*записать контактную информацию пользователя в адресную книгу*/
        (@id int,						--ID пользователя БД
         @department varchar(100)='', 	--Отдел  
         @state varchar(50)='',      	--Должность  
         @note varchar(200)='',        	--Направление  
         @phones varchar(200)='',      	--Телефон  
         @email varchar(200)='',	    --e-Mail
         @organization varchar(100)=''	--Филиал
         ) as
 Begin
  Begin tran p_upValue
   Update lsdbo.ABUser Set
     email=@email, 
     phones=@phones,  
     state=@state,  
     department=@department,  
     note=@note,
     organization=@organization          
   Where empl_id=@id 
   if @@Error <> 0 goto ErrorTrap					
   commit tran p_upValue
 return 
ErrorTrap:
 rollback tran p_upValue
 return -1
End
отобразить на форме например мыло

Код: Выделить всё

f_execSQLSelect_3 ('select email from lsdbo.ABUser_view where empl_id='+string(abs(a100004060200000)),'','','',10)
прочитать из действия

Код: Выделить всё

email = Set ( f_ExecSQLSelect_2('select email from lsdbo.ABUser_view where empl_id='+string(ID),'','') )
сохранить из действия

Код: Выделить всё

tmp = Set ( 'exec lsdbo.RIC_Set_UserAddrBook '+string(abs(ID))+', '+ StDep+', '+ StDol+', '+ note+', '+ phone+', '+email +', '+filial )
tmp = Set ( f_ExecSQLSelect_3(tmp,'','','cols=decimal(18)',0) )
ps
но вопрос по строковому атрибуту еще актуален :wink: :wink: