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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

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

Сообщение s2176 »

Добрый день!
Задача такая: в реестр приказов на увольнение добавить информацию, которая записана в примечании к этим приказам.
Честно говоря, даже не знаю с какой стороны к этому подступиться :eek:, а сделать это надо быстро...
Помогите, пожалуйста, люди добрые)
Кто сказал, что бесполезно биться головой об стену?!
k_vit
Постоянный обитатель
Сообщения: 143
Зарегистрирован: 09 авг 2006, 16:40
Откуда: Россия, Тюмень, ОАО "Сибирский Научно-Аналитический Центр"

Сообщение k_vit »

По крайнер мере для Гал-ки 7.12 это было так:

cKadryDisNotes = 3002;

//Примечание для увольнения
cKadryDisNotes == DisNOTES.CHOICE and
Persons.NREC == DisNOTES.OWNER and
k_vit
Постоянный обитатель
Сообщения: 143
Зарегистрирован: 09 авг 2006, 16:40
Откуда: Россия, Тюмень, ОАО "Сибирский Научно-Аналитический Центр"

Сообщение k_vit »

Да, забыл

Synonym NOTES DisNOTES

:-)
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Сообщение s2176 »

Хм, но мемо-поле обычным select'ом не достается....
Вопрос, как достать, если не обычным select'ом?
Кто сказал, что бесполезно биться головой об стену?!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

вопрос тока в том что мемополе не достать из формы - тока из vip получалось. Надо делать объектный фейс. На форуме уже вроде обсуждалось - попробуйте поискать. А эт вам для затравки :)
File FMemo;
if FMemo.OpenMemo(DocInfo.TEXTDATA)
{ FMemo.Seek(0);
while not FMemo.EOF
{
FMemo.Readln(s1);
S:=S+s1
}
}
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Сообщение s2176 »

а мне ведь именно из формы надо.... причем из Link, не Ard
или в цикл в форме зашить вызов фейса, но как в этом случае вернуть мемо в форму?
Кто сказал, что бесполезно биться головой об стену?!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

писать объектный фейс а потом из него вызывать функцию из формы для получения мемополя в виде строки
coolibin
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 29 мар 2005, 17:49

Сообщение coolibin »

разве нельзя из формы?


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

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

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

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

.}

.endform

s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Сообщение s2176 »

Круто))
Если я правильно поняла: форма в цикле вызывает фейс, который читает мемо-поле, пишет его, например, в текстовый файл, а затем в исходной форме читать из этого текстового файла? А по времени это ж как будет???
Кто сказал, что бесполезно биться головой об стену?!
coolibin
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 29 мар 2005, 17:49

Сообщение coolibin »

function MemoReadLn (var line : string;
aNum : integer
) : integer;

Функция читает строку из мемо-поля в переменную
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Сообщение s2176 »

так этой функцией можно в FRM пользоваться?
Кто сказал, что бесполезно биться головой об стену?!
coolibin
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 29 мар 2005, 17:49

Сообщение coolibin »

s2176 писал(а):так этой функцией можно в FRM пользоваться?
канешна. я разрешаю...
san
Местный житель
Сообщения: 412
Зарегистрирован: 28 апр 2005, 11:34
Откуда: Галактика Млечный Путь

Сообщение 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
}
}
san
Местный житель
Сообщения: 412
Зарегистрирован: 28 апр 2005, 11:34
Откуда: Галактика Млечный Путь

Сообщение 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.
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Сообщение s2176 »

Все прекрасно и просто вытаскивается в отчете!!! хоть одна, хоть несколько строк мемо!

Спасибо всем за помощь!
Кто сказал, что бесполезно биться головой об стену?!
Ответить