Страница 2 из 3
Re: Как добавить колонку с вычисляемым полем в браузер
Добавлено: 10 апр 2012, 13:31
edward_K
дело в том что туда записываются изменения сделанные в cmInit или во время работы фейса.
Поэтому их лучше убрать (с сохранением структуры для тех объектов что не убираете).
Опять же потом разработчик может убрать какие то объекты - зачем вам потом заострять на них внимание.
Что касается пропадания поля, то скорей всего рес с вашей докомпиляцией подключен с приоритетом больше чем у конфигурационного файла.
Re: Как добавить колонку с вычисляемым полем в браузер
Добавлено: 10 апр 2012, 13:47
savov
Вот так все заработало ( без конфигуратора)
Код: Выделить всё
#component 'L_DOGOVOR'
#include cfg_all.inc
const
cmShowText = 9899;
End;
Alter interface DOGOVOR;
overload end;
create view
(tt)
as select if(DocInfo.cdoc>0, 'Есть','Нет')
From Dogovor1, DocInfo
Where((root==Dogovor1.nrec and
dogovor1.nrec==docinfo.cdoc
));
var MyFieldNum : longint ;
var ifHaveText : String ;
HandleEvent
cmInit:
{
inherited::handleEvent(cmInit);
cfsSetCurrentContainer('L_DOGOVOR::DOGOVOR');
cfsCreateObject('TreeColumn', 'BRDOGOVORSELECTMAIN', 'tt', FALSE, MyFieldNum);
cfsSetProp ( MyFieldNum, cfpVisible,TRUE);
cfsSetProp ( MyFieldNum, cfpTitle, 'Текст');
cfsSetProp ( MyFieldNum, cfpFieldName,'tt_Текст(Текст)');
cfsSetProp ( MyFieldNum, cfpMaxLen, 18 );
cfsSetProp ( MyFieldNum, cfpProtect,true);
}
end;
end.
Re: Как добавить колонку с вычисляемым полем в браузер
Добавлено: 28 апр 2012, 17:21
savov
edward_K писал(а):Что касается самого конфигуратора то уже пишу раз 10. Я всегда выгружаю в скрипт cnf, убираю мусор и компилю vip-ом после vip в один и тот же рес.
Какая запись должна быть в проекте?
#make ".cnf"?
У меня орет на cnf. что выход за границу коллекции и падает с рантаймом
Re: Как добавить колонку с вычисляемым полем в браузер
Добавлено: 28 апр 2012, 19:32
edward_K
обычно такое бывает когда в одном файле несколько фейсов. Кроме того нужно убрать весь мусор, добавленный не вами.
На какой то версии атлантиса не собирался фейс договора - но вроде как уже починили.
Re: Как добавить колонку с вычисляемым полем в браузер
Добавлено: 25 сен 2012, 16:18
zna
Подкину-ка я дровишек в эту познавательную тему..
"Улучшаю" интерфейс L_BASEDOC::VSCHETB добавлением поля (ZakNar) в броузер BRVSCHET:
Код: Выделить всё
#Component "L_BASEDOC"
#include Galnet.inc
end;
alter interface VSCHETb;
create view
var BaseDocNrec : comp;
MyFieldNum : longint;
(ZakNar) as select *, ZakNar
from mnplan, basedoc
;
HandleEvent
cmInit:
{ inherited::handleEvent(cmInit);
if (cfsSetCurrentContainer(cfsGetCurrentContainerSelf) <> cfOk)
{ Message(''#3'Ошибка установки контейнера L_BASEDOC::vschetb', Error); Exit;}
if isValidAll(tnBasedoc) then BaseDocNrec := BaseDoc.Nrec;//<-Похоже, здесь что-то не то,
else {message('Нет позиции BaseDoc!',error); exit;} //<-хотя ошибки не выдаётся
cfsCreateObject('Column', 'BRVSCHET', 'ZakNar', FALSE, MyFieldNum);
cfsSetProp ( MyFieldNum, cfpVisible,TRUE);
cfsSetProp ( MyFieldNum, cfpTitle, 'Заказ-наряд');
cfsSetProp ( MyFieldNum, cfpFieldName,'ZakNarТекст');
cfsSetProp ( MyFieldNum, cfpMaxLen, 30 );
cfsSetProp ( MyFieldNum, cfpProtect,true);
ZakNar := string(basedoc.nrec); //<-Здесь не присваивается текущий nrec
}
end;
Поле добавилось нормально, но заполнилось оно nrec-ом последней записи корневой таблицы basedoc:
,
что естественно, поскольку в момент инициализации интерфейса "не определена текущая область ввода и корневая таблица" (цитата из доки). Вопрос: что делать, чтобы вновь добавленное поле заполнилось правильно?
Re: Как добавить колонку с вычисляемым полем в браузер
Добавлено: 25 сен 2012, 16:25
savov
Рабочий код фейса, который к договору приписывает есть или нет прикрепленный файл с текстом
Код: Выделить всё
#component 'L_DOGOVOR'
#include cfg_all.inc
const
cmShowText = 9899;
End;
// Пример докомпиляции фейса с добавлением вычисляемого поля в броузер
Alter interface DOGOVOR;
overload end;
//Создаем вьюху, при этом вычисляемое поле пишем в скобках, после Select
//пишем собственно значение этого поля
create view
(tt)
// as select if(DocInfo.cdoc>0, 'Есть','Нет')
as select if((DocInfo.cdoc>0) and (not IsMemoText(tnDocinfo)), 'Есть','')
From Dogovor1, DocInfo
Where((root==Dogovor1.nrec and
dogovor1.nrec==docinfo.cdoc
));
var MyFieldNum : longint ;
var ifHaveText : String ;
HandleEvent
cmInit:
{
inherited::handleEvent(cmInit);
cfsSetCurrentContainer('L_DOGOVOR::DOGOVOR');
// Обращаем внимание, что в броузере могут быть не Column, а TreeColumn
cfsCreateObject('TreeColumn', 'BRDOGOVORSELECTMAIN', 'tt', FALSE, MyFieldNum);
// Прописываем необходимые для отображения поля свойства, лучше поглядеть их при конфигурации
cfsSetProp ( MyFieldNum, cfpVisible,TRUE);
cfsSetProp ( MyFieldNum, cfpTitle, 'Текст');
cfsSetProp ( MyFieldNum, cfpFieldName,'tt_Текст(Текст)');
cfsSetProp ( MyFieldNum, cfpMaxLen, 18 );
cfsSetProp ( MyFieldNum, cfpProtect,true);
}
end;
end.
Может поможет
Re: Как добавить колонку с вычисляемым полем в браузер
Добавлено: 25 сен 2012, 16:33
BlazeBio
zna, а для чего вы присваиваете basedoc.nrec переменной ZakNar?
Re: Как добавить колонку с вычисляемым полем в браузер
Добавлено: 25 сен 2012, 16:37
zna
BlazeBio писал(а): zna, а для чего вы присваиваете basedoc.nrec переменной ZakNar?
Для простоты изложения проблемы. В рабочем коде это поле будет заполняться наименованием присоединённого производственного заказа.
Re: Как добавить колонку с вычисляемым полем в браузер
Добавлено: 25 сен 2012, 16:46
BlazeBio
zna писал(а):BlazeBio писал(а): zna, а для чего вы присваиваете basedoc.nrec переменной ZakNar?
Для простоты изложения проблемы. В рабочем коде это поле будет заполняться наименованием присоединённого производственного заказа.
Так мб вам просто обработать присваение значения полю через функцию, которая возвращает значение в select? Потому что сейчас в вашем коде берётся первый попавшийся nrec из таблицы basedoc и просто переприсваивается значение поля ZakNar.
Re: Как добавить колонку с вычисляемым полем в браузер
Добавлено: 25 сен 2012, 16:48
zna
Да, всё, дошло до жирафа..
Код: Выделить всё
create view
var BaseDocNrec : comp;
MyFieldNum : longint;
(ZakNar) as basedoc.nrec
from mnplan, basedoc
;
Cпасибо, savov, +1
Re: Как добавить колонку с вычисляемым полем в браузер
Добавлено: 25 сен 2012, 16:56
zna
BlazeBio писал(а):
...
Так мб вам просто обработать присваение значения полю через функцию, которая возвращает значение в select? ...
Поподробней чуток можно идею описать?
Re: Как добавить колонку с вычисляемым полем в браузер
Добавлено: 25 сен 2012, 17:20
BlazeBio
Что-то вроде этого
Код: Выделить всё
alter interface VSCHETb;// алтер для примера, подставите свой
var MyFieldNum:string;
//описание функции
function funcTest(basenrec : comp) : string; forward;
create view
(ZakNar)
as
funcTest(basedoc.nrec), //вызов функции
mnplan.*,basedoc.*
from mnplan, basedoc
;
//тело функции
function funcTest( basenrec : comp ) : string;
{
//ваш код
funcTest:=string('Наряд заказа');//здесь присваиваете то, что вам нужно
}
HandleEvent
cmInit:
{ inherited::handleEvent(cmInit);
if (cfsSetCurrentContainer(cfsGetCurrentContainerSelf) <> cfOk)
{ Message(''#3'Ошибка установки контейнера L_BASEDOC::vschetb', Error); Exit;}
cfsCreateObject('Column', 'BRVSCHET', 'ZakNar', FALSE, MyFieldNum);
cfsSetProp ( MyFieldNum, cfpVisible,TRUE);
cfsSetProp ( MyFieldNum, cfpTitle, 'Заказ-наряд');
cfsSetProp ( MyFieldNum, cfpFieldName,'ZakNarТекст');
cfsSetProp ( MyFieldNum, cfpMaxLen, 30 );
cfsSetProp ( MyFieldNum, cfpProtect,true);
}
end;
Re: Как добавить колонку с вычисляемым полем в браузер
Добавлено: 26 сен 2012, 08:30
zna
Cпасибо BlazeBio, всё понятно, +1
Re: Как добавить колонку с вычисляемым полем в браузер
Добавлено: 09 ноя 2012, 07:30
Алексей
А есть ли какая то возможность добавить поле в браузер не в конец, а в середину?
К примеру есть 10 полей в браузере, я хочу на 4-ю позицию.
Указываю index=4 но она всё равно пишет в конец. Не хочется из-за этой мелочи ЦНФ городить... и так же не хочется прописывать индексы остальным вручную
хочется типа указал 4-я, а остальные поля что от 4-го индекса и дальше сами автоматом перестроились
ну и ширину колонки не получается задать, вроде указал DefaultWidth - а тоже не сработало...
Re: Как добавить колонку с вычисляемым полем в браузер
Добавлено: 09 ноя 2012, 08:14
zna
Ширина колонки устанавливается параметром
Код: Выделить всё
cfsSetProp ( Field_Nom, cfpDefWidth, word(12));