К сожалению с ней всегда тормоза. советую при замене более двух полей использовать одну формулу с рядом операций типа @Q:=SL(номер_словаря1,поле_базы1) поле_базы1:=@Q @Q:=SL(номер_словаря2,поле_базы2) поле_базы2:=@Q @Q:=SL(номер_словаря3,поле_базы3) поле_базы3:=@Q быстрее скорректировать несколько операций в одном блоке, чем выполнять отдельную формулу для каждого поля. (проверено на практике)
пример установки связи между базами с помощью формул
Это пример кода реальной формулы по перекидыванию данных.
************************************ /* Описание переменных @f() - Фамилия имя отчество @d - Дата рождения @God_r - Год рождения @fot - Фотография1; @foto - Фотографии */
@f:=»»;@f1:=»»;@f2:=»»;@d:=»»; @fot:=»»;@foto:=»»; /* обнуление переменных на каждом шаге - на каждой записе. */
if (LC24) Then(@i:=1;@ii:=1) /*проверка наличия фото */
@f:=LC1; @f1:=LC2; @f2:=LC3; @d:=LC4; /* ********************************* */ /* Операция над информацией */ @info:=NEW(LC43_ИН); USERECORD(ИН{@info}, ИН2:=12; /* Код */ ИН3:=@temp1; ИН4:=1000; /* Код */ ИН5:=1; /* Код */ /* ****************************** */ /* Операции над Лицом */ @lico:=new(ИН100_ЛЦ); USERECORD(ЛЦ{@lico}, ЛЦ1:=@f; ЛЦ2:=@f1; ЛЦ3:=@f2; ЛЦ4:=@d;
LOOP(ЛЦ200_ИН, LOOP(ИН203_LC, LINKROOT(LC44_ИН);
WHILE(GETTEXT(LC24(@i))) DO ( @fot:=GETFILE(LC24(@i)); @i:=@i+1; Loop(LC43_ИН, Loop(ИН100_ЛЦ, SETFILE(ЛЦ6(-1),@fot) ) )
);
) )
LINKROOT(ЛЦ201_ИН)
/* ******************* */ /* Операции над связями лица */ @sv:=NEW(ЛЦ100_СВ); USERECORD(СВ{@sv}, СВ2:=«АДР4»; СВ3:=«Адрес жительства »‹‹@f‹‹» »‹‹@f1‹‹» »‹‹@f2; LINKROOT(СВ103_ИН)
/* *************************** */ /* Операции над адресом */ @adres:=NEW(СВ100_АД) ; USERECORD(АД{@adres}, АД13:=@adr АД200_ИН:=INSERTVAL(АД200_ИН,-1,@info) LINKROOT(АД201_ИН)
) ) )
/* установка «корневой записи для информации */ ИН201_ЛЦ:=INSERTVAL(ИН201_ЛЦ,-1,@lico) ИН201_АД:=INSERTVAL(ИН201_АД,-1,@adres); ИН201_СВ:=INSERTVAL(ИН201_СВ,-1,@sv) ; ИН201_LC:=INSERTVAL(ИН201_LC,-1,@Lico_old)
работающая формула записи уведомлений о необходимости информирования при появлении дополнительных данных. В принципе можно поставить проверку и на ошибочно введенные значения и выдавать их потом в файл.
В принципе, она работает только для текстовых полей, но если необходимая инфа содержится в полях типа «файл», то первую строчку необходимо заменить на следующую: @a:=GETTEXT(‹поле типа Файл›).
----- Суть: действующие и уволенные. По значению уволен нужно переместить значение в уволенные, установить имеющиеся связи и удалить запись из действующей.
@n1:=@SYSNOMER; @fio:=ДР26;
if ДР16=«4» then ( if (message(«Переносим в уволенные и удаляем из действующих?»,@yesno)=1) then (ADDRECORD(УР{0},УР26:=@fio); LOOP(ДР30_ВТ, @n2:=@SYSNOMER;
Если переменной присвоить значение функции Message, то в зависимости от флага при нажатии кнопок имеем значения: 0 - no 1 - yes 2 - cancel
Пример ---------
@A := Message («Удалиьб...», @yesno); if @A=1 then ...то-то и то-то
----------
Из мануала:
MESSAGE(‹текст›,‹флаг_отображения›) - выдача окна с сообщением, при этом ‹флаг_отображения› может принимать следующие значения: @OKCANCEL - сообщение с кнопками OK и CANCEL @YESNOCANCEL - сообщение с кнопками YES, NO и CANCEL @YESNO- сообщение с кнопками YES и NO также к ‹флаг_отображения› можно прибавлять одно из следующих значений, влияющих на вид информационного значка: @ICONERROR @ICONQUESTION @ICONWARNING
если ‹флаг_отображения› = 0, то выдается сообщение с кнопкой OK.
Вычислить ХЭШ из текстового или файлового поля можно с помощью функции GETSIGNATURE(‹переменная›) - построить сигнатуру для значенния переменной - уникальный 32-символьный код
DELETERECORD(‹мнемокод_базы{системный_номер}›, ‹связь с текущей записью›) - удалить запись с указанным системным номером. Если ‹связь с текущей записью› = 0, то для текущей записи не проверяется связь с удаляемой записью, что может ускорить процесс удаления. Но все зависит от того под какой версией работаешь. Эта функция появилась в версии 3.01 (03/09/2003) Кроме того, нельзя удалить саму текущую запись, удаление возможно только связанных с ней.
Как с помощью формулы присоединить файл к полю типа «Файл»?
@NAME=«sample»; @EXT:=«doc»; @PATH:=«C:\TEMP\»
@FILENAME:=@PATH‹‹@NAME‹‹».»‹‹@EXT; @CONTAINER:=READFILE(@filename); SETTEXT(SP32,@CONTAINER);/*загрузка поля содержимым файла*/ SETEXT(SP32,@EXT);/*установка расширения файла*/ SETFILENAME(SP32,@NAM1);/*установка имени файла*/
Все даты в формате GMT
3 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет