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

Достать memo-поле

Добавлено: 14 ноя 2007, 13:46
s2176
Добрый день!
Задача такая: в реестр приказов на увольнение добавить информацию, которая записана в примечании к этим приказам.
Честно говоря, даже не знаю с какой стороны к этому подступиться :eek:, а сделать это надо быстро...
Помогите, пожалуйста, люди добрые)

Добавлено: 14 ноя 2007, 16:25
k_vit
По крайнер мере для Гал-ки 7.12 это было так:

cKadryDisNotes = 3002;

//Примечание для увольнения
cKadryDisNotes == DisNOTES.CHOICE and
Persons.NREC == DisNOTES.OWNER and

Добавлено: 14 ноя 2007, 16:26
k_vit
Да, забыл

Synonym NOTES DisNOTES

:-)

Добавлено: 14 ноя 2007, 16:38
s2176
Хм, но мемо-поле обычным select'ом не достается....
Вопрос, как достать, если не обычным select'ом?

Добавлено: 14 ноя 2007, 16:39
edward_K
вопрос тока в том что мемополе не достать из формы - тока из vip получалось. Надо делать объектный фейс. На форуме уже вроде обсуждалось - попробуйте поискать. А эт вам для затравки :)
File FMemo;
if FMemo.OpenMemo(DocInfo.TEXTDATA)
{ FMemo.Seek(0);
while not FMemo.EOF
{
FMemo.Readln(s1);
S:=S+s1
}
}

Добавлено: 14 ноя 2007, 16:42
s2176
а мне ведь именно из формы надо.... причем из Link, не Ard
или в цикл в форме зашить вызов фейса, но как в этом случае вернуть мемо в форму?

Добавлено: 14 ноя 2007, 16:48
edward_K
писать объектный фейс а потом из него вызывать функцию из формы для получения мемополя в виде строки

Добавлено: 14 ноя 2007, 16:59
coolibin
разве нельзя из формы?


примерно так попробуй:

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

.create view v1
var tempString : string
from DOCINFO
where
...
;

.{ table v1
.fields
  v1.docinfo.name
  tempString
.endfields
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.{ while memoreadln(tempString, tnDocInfo)=0
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.}

.}

.endform


Добавлено: 14 ноя 2007, 17:00
s2176
Круто))
Если я правильно поняла: форма в цикле вызывает фейс, который читает мемо-поле, пишет его, например, в текстовый файл, а затем в исходной форме читать из этого текстового файла? А по времени это ж как будет???

Добавлено: 14 ноя 2007, 17:12
coolibin
function MemoReadLn (var line : string;
aNum : integer
) : integer;

Функция читает строку из мемо-поля в переменную

Добавлено: 16 ноя 2007, 09:32
s2176
так этой функцией можно в FRM пользоваться?

Добавлено: 16 ноя 2007, 12:50
coolibin
s2176 писал(а):так этой функцией можно в FRM пользоваться?
канешна. я разрешаю...

Добавлено: 16 ноя 2007, 13:32
san
edward_K писал(а):вопрос тока в том что мемополе не достать из формы - тока из vip получалось. Надо делать объектный фейс. На форуме уже вроде обсуждалось - попробуйте поискать. А эт вам для затравки :)
File FMemo;
if FMemo.OpenMemo(DocInfo.TEXTDATA)
{ FMemo.Seek(0);
while not FMemo.EOF
{
FMemo.Readln(s1);
S:=S+s1
}
}
Неправда :-) Все это может быть использовано в форме, только синтаксис будет немного другой. В доке описаны как методы так и функции доступа как мемо полю.
в форме нужно использовать ф-ции.
Пример из доки:
Метод OpenMemo (Memo) : Boolean. Функция File_OpenMemo (LongInt, Memo) : Boolean
Что нужно писать в форме:
Вместо File FMemo; нужно получить ф-цией Handle ссылку на объект.
использовать полученный Handle в соотвествующих методам функциях.
А эт вам для затравки :)
var hfile : longint;
hfile := handle;
if FMemo_OpenMemo(hfile,DocInfo.TEXTDATA)
{ FMemo_Seek(hfile,0);
while not FMemo_EOF(hfile)
{
FMemo_Readln(hfile,s1);
S:=S+s1
}
}

Добавлено: 16 ноя 2007, 13:38
san
или вот еще вариант для печати в форме вызовом программы на випе:
/*
код таблицы для allmemo
нрек записи из таблицы для allmemo
логический параметр - преобразовывать перевод каретки в пробелы - да/нет
15-цать строковых переменных для приема текста
в отчете будет выглядеть выглядеть так
.begin
runinterface(Daimemopole,cokatmc,katmc.nrec,true,s[1],s[2],s[3],s[4],s[5],s[6],s[7],s[8],s[9],s[10],s[11],s[12],s[13],s[14],s[15]);
end.
.fields
s[1] s[2] s[3] s[4] s[5] s[6] s[7] s[8] s[9] s[10] s[11] s[12] s[13] s[14] s[15]
.ensfields
^^^^^^^^^^
*/
interface DaiMemoPole 'Запрос Мемо-поля', AlwaysReturn;
var s : array[1..15] of string;
TextStr : string;
c : char;
cnt : byte;
i : byte;
file TextOfDocument;
create view
var s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15 : string;
wtable : word;
crec : comp;
RSpace : boolean;
from
katos,
allmemo
where
((
wTable == allmemo.wtable
and cRec == allmemo.crec
));
Parameters wTable,cRec,RSpace,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15;
HandleEvent
cmInit:
{
for (i:=1;i<=15;i:=i+1) s := '';
if getfirst allmemo = tsOK
{
if ( TextOfDocument.OpenMemo(Allmemo.mem) )
{
if ( TextOfDocument.GetSize !=0 )
{
TextOfDocument.Seek(0);
i := 1;
while not TextOfDocument.EOF do
{
TextStr := '';
for(cnt:=1;cnt<250;cnt := cnt + 1)
{
TextOfDocument.read(c);
if RSpace
{
if c = chr(10) c := ' ';
if c = chr(13) c := ' ';
}
TextStr := TextStr + c;
if TextOfDocument.EOF break;
}
s := TextStr;
if i = 15 break;
i := i + 1;
}
}
TextOfDocument.Close;
}
}
s1 := s[1];
s2 := s[2];
s3 := s[3];
s4 := s[4];
s5 := s[5];
s6 := s[6];
s7 := s[7];
s8 := s[8];
s9 := s[9];
s10 := s[10];
s11 := s[11];
s12 := s[12];
s13 := s[13];
s14 := s[14];
s15 := s[15];
Abort;
Exit;
}
end;
end.

Добавлено: 16 ноя 2007, 13:40
s2176
Все прекрасно и просто вытаскивается в отчете!!! хоть одна, хоть несколько строк мемо!

Спасибо всем за помощь!