Автор ]]>rennok]]>]]>Источник]]>Цитата
Продублирую тут... кнопка выкладывается на панель инструментов, позволяет быстро и удобно редактировать, создавать, удалять, менять значения полей документа. Сильно облегчает жизнь. (поделился Шмурыгин Сергей)
_act := "Редактировать элементы поля|1" : "Добавить в поле элемент|2" : "Очистить поле|5" : "Удалить поле|3" : "Новое поле|4";
_dsp := @Left( _act; "|");
_al := @RightBack( _act; "|");
_fld := "";
_str := "";
_tmp := "";
_val := "";
_selType := "";
_sel := @Prompt( [OkCancelList]:[NoSort]; @DbTitle; "Выбери действие: "; @Subset(_dsp; 1); _dsp);
_pos := @Member( _sel; _dsp );
_sel := @Subset(@Subset(_al; _pos); -1);
_item := @DocFields;
_empty := "";
_DataTypes := "Text" : "Date" : "Integer";
@If( _sel = "1";
@Do(
_fld := @Prompt( [OkCancelList]; "Редактирование поля"; "Выбери имя поля: "; @Subset( _item; 1); _item );
_val := @GetField(_fld);
_selType := @If(
@IsTime( _val ); "Date";
@IsNumber(_val); "Integer";
@Elements(_val) = 1;
@If(_val != ""; "Text";
@Prompt( [OkCancelList] : [NoSort]; "Тип поля"; "Выбери тип данных: "; @Subset( _DataTypes; 1 );_DataTypes )
);
@Elements(_val) = 0;
@Prompt( [OkCancelList] : [NoSort]; "Тип поля"; "Выбери тип данных: "; @Subset( _DataTypes; 1 );_DataTypes );
"");
@If( @Elements(_val) = 0;
@Set( "_tmp";@Prompt( [OkCancelEdit]; "New Value" + " " + _selType; "Новое значение для " + _fld + " : "; ""));
@Do(
@For(n := 1; n <= @Elements( _val ); n := n + 1;
_str := @Prompt( [OkCancelEdit]; "New Value" + @Text( n ) + " " + _selType; "Измени " + @Text( n )+ "-й эл-т поля " + _fld + " (всего " + @Text( @Elements(_val) ) + ") : "; @Text(_val[n]) );
@If( @Trim( _str ) = ""; @Set("_empty"; "1"); "" );
@If( n = 1;
_tmp := _str;
_tmp := _tmp : _str)
)
)
);
@If(_empty = "1" & @Elements(_tmp) > 1; @Do(
@If(_selType = "Date";
@Set("_tmp"; @Trim( _tmp ));
_selType = "Integer";
@Set("_tmp"; @Trim( _tmp ));
@Prompt([YesNo];"Поле " + _fld + " содержит пустые значения"; "Удалить из поля незаполненные элементы? ");
@Set("_tmp"; @Trim( _tmp )); "")
);"");
@If( @Elements( _tmp ) <= 1 & _tmp = ""; @Return( @SetField( _fld; "") ); "" );
@If(_selType = "Date";
@SetField( _fld; @If(@IsError(@TextToTime(_tmp));@Return( @Prompt([Ok];"Error"; "Поле содержит некорректное значение") ); @TextToTime(_tmp)) );
_selType = "Integer";@SetField( _fld; @If( @IsError(@TextToNumber(_tmp)); @Return( @Prompt([Ok];"Error"; "Поле содержит некорректное значение") ); @TextToNumber(_tmp)) );
@SetField( _fld; _tmp ))
);
_sel = "2";
@Do(
_fld := @Prompt( [OkCancelList]; "Добавление значения в поле"; "Выбери имя поля: "; @Subset( _item; 1); _item );
_val := @GetField(_fld);
_selType := @If(
@IsTime( _val ); "Date";
@IsNumber(_val); "Integer";
@Elements(_val) = 1 | @Elements(_val) = 0;
@If(_val != ""; "Text";
@Prompt( [OkCancelList] : [NoSort]; "Тип поля"; "Выбери тип данных: "; @Subset( _DataTypes; 1 );_DataTypes )
);
"");
@Set( "_tmp";@Prompt( [OkCancelEdit]; "New Value" + " " + _selType; "Новый элемент для " + _fld + " : "; ""));
@If( @Elements(_val) > 0;
@Set( "_tmp";@Text(_val) : _tmp);
""
);
@If(_selType = "Date";
@SetField( _fld; @If(@IsError(@TextToTime(_tmp));@Return( @Prompt([Ok];"Error"; "Поле содержит некорректное значение") ); @TextToTime(_tmp)) );
_selType = "Integer";@SetField( _fld; @If( @IsError(@TextToNumber(_tmp)); @Return( @Prompt([Ok];"Error"; "Поле содержит некорректное значение") ); @TextToNumber(_tmp)));
@SetField( _fld; _tmp ));
@Return("")
);
_sel = "3";
@Do(
_fld := @Prompt( [OkCancelList]; "Удаление поля"; "Выбери имя поля: "; @Subset( _item; 1); _item );
@If( !@Prompt([YesNo]; "Внимание"; "Вы действительно хотите удалить поле - " + _fld + "? "); @Return( "" ); "");
@SetField(_fld; @DeleteField);
@Return("")
);
_sel = "4";
@Do(
_fld := @Prompt( [OkCancelEdit]; "Новое поле"; "Укажи наименование нового поля: "; "");
@If(_fld = "";@Return("");"" );
@If( @IsMember( @UpperCase( _fld ); @UpperCase( _item ) ); @Return(@Prompt([Ok]; "Ошибка"; "Поле " + _fld + " уже есть в документе")); "" );
_val := "";
@SetField(_fld; _val);
@Return("")
);
_sel = "5";
@Do(
_fld := @Prompt( [OkCancelList]; "Очистка поля"; "Выбери имя поля: "; @Subset( _item; 1); _item );
@If( !@Prompt([YesNo]; "Внимание"; "Вы действительно хотите очистить поле - " + _fld + "? "); @Return( "" ); "");
@SetField(_fld; "");
@Return("")
);
"")