kovalenko wrote:
DriveSoft wrote:

Скачайте пожалуйста последнюю версию
https://www.dropbox.com/s/c804dzufyak6v … 2.zip?dl=0


Теперь можно добавлять компоненты в отчет, даже если они не связаны с БД, таким образом их значение будет передано в отчет и не будут учавствовать в поиске.


Также добавил возможность добавлять переменные в отчет с помощью скрипта, для этого создайте событие OnClick для кнопки с действием "Отчет"


procedure Form1_ButtonReport_OnClick (Sender: TObject; var Cancel: boolean);
begin
    Form1.frxReport.Variables.Clear;
    Form1.frxReport.Variables[' ' + 'My Category 1'] := Null;
    Form1.frxReport.Variables['My Variable 1'] := 10;
    Form1.frxReport.Variables['My Variable 2'] := 20;
    Form1.frxReport.Variables['My Variable 3'] := '''Hello''';
end;

Всем категорически прувет ))) !!! А кто подскажет, можно-ли, и если да то как, вот здесь например

 Form1.frxReport.Variables['My Variable 2'] := 20;

   вместо "20" воткнуть данные из какого-нибудь текстового поля на самой форме? Не залезая в сам скрипт?

На просторах, нашёл такой вариант

frxReport1.Variables.Variables['MyVar'] := '''' + Edit1.Text + '''';
'''' - 4 (четыре) одинарные кавычки

будет ли он работать? Вот в таком варианте:

procedure frmOrder_Button33_OnClick (Sender: TObject; var Cancel: boolean);
begin
       
    Form1.frxReport.LoadFromFile(ExtractFilePath(Application.ExeName)+'Report\repair invoice order3.fr3');
    Form1.frxReport.Variables.Clear;
    Form1.frxReport.Variables[' ' + 'My Category 1'] := Null;
    Form1.frxReport.Variables['My Variable 1'] := 10;
    Form1.frxReport.Variables['My Variable 2'] :='''' + frmOrder.Label25.Text + '''';
    Form1.frxReport.Variables['My Variable 3'] := '''Hello''';

end;

не хочет...Может кто подскажет?

DriveSoft wrote:

Скачайте пожалуйста последнюю версию
https://www.dropbox.com/s/c804dzufyak6v … 2.zip?dl=0


Теперь можно добавлять компоненты в отчет, даже если они не связаны с БД, таким образом их значение будет передано в отчет и не будут учавствовать в поиске.


Также добавил возможность добавлять переменные в отчет с помощью скрипта, для этого создайте событие OnClick для кнопки с действием "Отчет"


procedure Form1_ButtonReport_OnClick (Sender: TObject; var Cancel: boolean);
begin
    Form1.frxReport.Variables.Clear;
    Form1.frxReport.Variables[' ' + 'My Category 1'] := Null;
    Form1.frxReport.Variables['My Variable 1'] := 10;
    Form1.frxReport.Variables['My Variable 2'] := 20;
    Form1.frxReport.Variables['My Variable 3'] := '''Hello''';
end;

Всем категорически прувет ))) !!! А кто подскажет, можно-ли, и если да то как, вот здесь например

Form1.frxReport.Variables['My Variable 1'] := 10;

   вместо "10" воткнуть данные из какого-нибудь текстового поля на самой форме? Не залезая в сам скрипт?

DriveSoft wrote:

Здравствуйте.


Скачайте пожалуйста последнюю бета версию 3.6
https://www.dropbox.com/s/4rfukqr2r1awq … b.zip?dl=0


Пример:

procedure frmNumber_Button3_OnClick (Sender: string; var Cancel: boolean);
begin
    CloseForms(frmAbonent);
end;

procedure CloseForms(exceptForm: TForm);
var
    i,c: integer;
begin
    c := Screen.FormCount-1;
    for i := c downto 0 do
    begin
        if (Screen.Forms[i] is TAForm) and
           (Screen.Forms[i] <> exceptForm) and
           (Screen.Forms[i].ClassName <>'TfrmMaindbCore') then Screen.Forms[i].Close;
    end;
end;

процедура CloseForms закроет все формы кроме той, которая указана в параметрах, также главная форма также не будет закрыта.

Дмитрий здравствуйте. Перестало работать закрытие окон, при попытке использовать данную функцию, выпадает окно с "stack overflow" и через некоторое время программа закрывается.

54

(2 replies, posted in Russian)

DriveSoft wrote:

Здравствуйте.


Скачайте пожалуйста последнюю версию
https://www.dropbox.com/s/c804dzufyak6v … 2.zip?dl=0


Добавил метод SelectAll для грида. Пример

Form1.TableGrid1.SelectAll;

Спасибо Дмитрий за оперативность!!!!

55

(2 replies, posted in Russian)

Здравствуйте. Кто подскажет, если в гриде включить функцию мультиселект, то через ctrl+A можно выбрать все текущие записи (строки) в гриде. А как скриптом дать команду на выбор всех текущих записей (строк) в гриде?

DriveSoft wrote:

Приветствую.


Расположите на форме TextBox и установите его свойство NumbersOnly = True


Укажите для данного компонента выч. поле с помощью его свойств TableName и FieldName


Установите свойство Filter = ">" для данного компонента


Добавьте данный компонент в настройки кнопки "Поиск"


Теперь при поиске вы можете указать значение 0 в данном компоненте, т.о. будут выведены записи в грид, в которых данное выч. поле больше нуля.

ОООО СПАСИБО!!! Огромнейшее!!!

Всем привет. Реально туплю...помогите!!! В таблице "parts" есть вычисляемое поле, где хранятся остатки по позициям. Есть грид, куда выводятся позиции и остатки по ним (вычисляемое поле из таблицы "parts"). Как в гриде отфильтровать остатки, что бы выводилось всё, кроме нулевых позиций? Где-то видел, а теперь не могу найти информацию!

Посмотрите здесь
http://myvisualdatabase.com/forum/viewtopic.php?id=1072
а так, если полазить по форуму есть и примеры реализаций.

DriveSoft wrote:

Пожалуйста прикладывайте проект с данными изменениями.

Спасибо за ответ. Задачу решил другим подходом. Спасибо.

kovalenko wrote:
DriveSoft wrote:

на форме Заказы, под панелькой у вас еще одна панель Panel11, уже на которой в свою очередь расположена Panel2.
Таким образом она невидима и соотвественно не будет работать, т.к. на нее невозможно кликнуть, но имено она используется в скрипте.


Просто сделайте так как я показал в примере для всех панелек.

Здравствуйте. Дмитрий, я взял панельку № 13 вырезал и вставил в свободное место формы. По логике она должна работать, но опять же, меняется только цвет. Может я много прошу, но вы не могли бы сделать пример в моём проекте хотя бы на кнопках "Принято".

Дмитрий здравствуйте. Убрал все скрытые панели с формы.
Но скрипт

procedure PanelOnClick (Sender: TObject);
var
    panel: TdbPanel;
begin
    panel := TdbPanel(Sender);

    if panel.Color <> colorActive then
    begin
        panel.Color := colorActive;
        SavePanelStatus(panel, True);
    end else
    begin
        panel.Color := panel.Tag;
        SavePanelStatus(panel, False);
    end;


   if Sender is frmOrder.Panel22 then
   begin
   frmOrder.GridOrder.dbFilter := '(repairstatus <> "Выдано/Оплачено")';
   frmOrder.GridOrder.dbUpdate;
   end;
end;

где в конце должна срабатывать обработка нажатия на панель и отработка фильтра, не срабатывает...
Что может быть не так?

k245 wrote:

Index - служебное слово и в данном контексте его надо писать в косых кавычках - `index`. Но лучше избегать использования ключевых слов в названиях таблиц или полей.

Это понимание ко мне пришло....но поздновато, спасибо за помощь!

SELECT indexNumber FROM `index` WHERE id =

Всем привет. Может кто подскажет. Есть справочник index в нём одно поле indexNumber в формате Цельное число. Есть скриптик

frmAddClient.edIndex.Text := SQLExecute ('SELECT indexNumber FROM index WHERE id = ' + IntToStr(frmAddClient.cdIndex.dbItemID) );

Вместо Text вставлял Value, что-то данные не вставляются, ошибка Error message:near 'index":syntax error   Script:SQLExecute. Что не так?

DriveSoft wrote:

на форме Заказы, под панелькой у вас еще одна панель Panel11, уже на которой в свою очередь расположена Panel2.
Таким образом она невидима и соотвественно не будет работать, т.к. на нее невозможно кликнуть, но имено она используется в скрипте.


Просто сделайте так как я показал в примере для всех панелек.

Здравствуйте. Дмитрий, я взял панельку № 13 вырезал и вставил в свободное место формы. По логике она должна работать, но опять же, меняется только цвет. Может я много прошу, но вы не могли бы сделать пример в моём проекте хотя бы на кнопках "Принято".

kovalenko wrote:
DriveSoft wrote:

Пожалуйста, прикладывайте проект с данными измененями, и с пошаговым описанием действий, приводящих к ошибке. К сожалению мне трудно ориентироваться в незнакомом проекте.

Отправил вам на почту.
Спасибо.

Дмитрий здравствуйте. По фильтрам. На главной форме кнопка РАБОТЫ. Переход на форму ЗАКАЗЫ. Внизу есть Group Box  "Статусы заказов/фильтр вывода информации". По умолчанию там фильтр "Показать все заказы кроме выбранного", если на эту надпись нажать, то фильтры сменяться на "Показать заказы только с выбранным статусом". У меня сейчас исходя из ваших рекомендаций настроены только кнопки в Group Box "ПРИНЯТО", т.е если нажать панельку "ПРИНЯТО" с включенным фильтром "Показать все заказы кроме выбранного" то соответственно должно быть показано всё кроме. Если выбрать фильтр "Показать заказы только с выбранным статусом", то при нажатии на панельку принято, должен быть выведен только статус "ПРИНЯТО". Всё, кроме панелек "ПРИНЯТО" с использованным предложенным вами скриптом работает. С вашим скриптом меняется только цвет панелек. Да, панелек соответственно на каждый статус по две, и они переключаются нажатием кнопок "Показать все заказы кроме выбранного" /  "Показать заказы только с выбранным статусом".Как-то так.

Проект отправил вам на почту.

DriveSoft wrote:

Пожалуйста, прикладывайте проект с данными измененями, и с пошаговым описанием действий, приводящих к ошибке. К сожалению мне трудно ориентироваться в незнакомом проекте.

Отправил вам на почту.
Спасибо.

DriveSoft wrote:

Пожалуйста, прикладывайте проект с данными измененями, и с пошаговым описанием действий, приводящих к ошибке. К сожалению мне трудно ориентироваться в незнакомом проекте.

Ок, чуть попозже вам дам всю раскладку. Спасибо!

DriveSoft wrote:
procedure frmAppearance_TableGrid1_OnCellDoubleClick (Sender: string; ACol, ARow: Integer);
begin
  if frmAppearance.CheckBox1.Checked=True then
  begin
    if frmApplication.textAppearance.Lines.IndexOf(frmAppearance.TableGrid1.Cells[0, ARow] + ', ') = -1 then
        frmApplication.textAppearance.Lines.Add(frmAppearance.TableGrid1.Cells[0, ARow] + ', ' ) else ShowMessage('Дубликат');
 end;
   frmAppearance.Close;
end;

procedure frmAppearance_Button7_OnClick (Sender: string; var Cancel: boolean);
var
   i,c: integer;
   iColumn: integer;
begin
    iColumn := frmAppearance.TableGrid1.Columns.Count-2;
    c := frmAppearance.TableGrid1.RowCount - 1;
    for i :=0 to c do
    if (frmAppearance.CheckBox1.Checked=True) and (frmAppearance.TableGrid1.Selected[i]) then
    begin
        if frmApplication.textAppearance.Lines.IndexOf(frmAppearance.TableGrid1.Cells[iColumn, i] + ', ') = -1 then
            frmApplication.textAppearance.Lines.Add(frmAppearance.TableGrid1.Cells[iColumn, i] + ', ') else ShowMessage('Дубликат');
    end;
   frmAppearance.Close;
end;

Спасибо! Работает!!! Не всегда хватает кумекалки прикрутить ваши рекомендации к своему проекту, а вот когда вы адаптируете ваши рекомендации к моему скрипту-картинка начинает складываться. Ещё раз спасибо!!!

DriveSoft wrote:

К сожалению по описанию не понял, в чем именно трудность. Попробуйте просто понять, как работает данная проверка.


Так например

Form1.ComboBox1.Text

является просто параметром с текстом, вместо этого там может быть простая текстовая переменная, либо любой другой компонент с текстом, например Form1.Edit1.Text, при это не важно из какой формы

Хорошо. Помогите пожалуйста. Имею

procedure frmAppearance_TableGrid1_OnCellDoubleClick (Sender: string; ACol, ARow: Integer);
begin
  if frmAppearance.CheckBox1.Checked=True then
  begin
    frmApplication.textAppearance.Lines.Add(frmAppearance.TableGrid1.Cells[0, ARow] + ', ' );
 end;
   frmAppearance.Close;
end;

Или

procedure frmAppearance_Button7_OnClick (Sender: string; var Cancel: boolean);
var
   i,c: integer;
   iColumn: integer;
begin
    iColumn := frmAppearance.TableGrid1.Columns.Count-2;
    c := frmAppearance.TableGrid1.RowCount - 1;
    for i :=0 to c do
    if (frmAppearance.CheckBox1.Checked=True) and (frmAppearance.TableGrid1.Selected[i]) then
  begin
   frmApplication.textAppearance.Lines.Add(frmAppearance.TableGrid1.Cells[iColumn, i] + ', ' );
end;
   frmAppearance.Close;
end;

Как мне это сюда прикрутить.

DriveSoft wrote:

Возможно вы не поняли скрипт, в примере Form1.Panel2 вы должны заменить это на имя панели используемую в вашем проекте.

т.е. данная части скрипта означает, что в параметре Sender содержится ссылка на объект Panel, от которой пришло событие, т.е. по которой кликнули, поэтому в условии проверяем, если кликнули на определенную панель, то выполняем определенное действие

if Sender is Form1.Panel2 Then 
   begin
      frmOrder.cdRepStatus.Caption:='Принят';
      frmOrder.bSearch.Click;
   end;

Вот мой скрипт

procedure PanelOnClick (Sender: TObject);
var
    panel: TdbPanel;
begin
    panel := TdbPanel(Sender);

    if panel.Color <> colorActive then
    begin
        panel.Color := colorActive;
        SavePanelStatus(panel, True);
    end else
    begin
        panel.Color := panel.Tag;
        SavePanelStatus(panel, False);
    end;

    if Sender is frmOrder.Panel2 Then
   begin
      frmOrder.cdRepStatus.Caption:='Принят';
      frmOrder.bSearch.Click;
   end;

   if Sender is frmOrder.Panel13 Then
   begin
      frmOrder.GridOrder.dbFilter := '(repairstatus <> "Принят")';
      frmOrder.GridOrder.dbUpdate;
   end;
end;

Пробовал отключать и нет скрипты

procedure frmOrder_Panel2_OnClick (Sender: string);
begin
   frmOrder.cdRepStatus.Caption:='Принят';
   frmOrder.bSearch.Click;
end;

и

procedure frmOrder_Panel13_OnClick (Sender: string);
begin
   frmOrder.GridOrder.dbFilter := '(repairstatus <> "Принят")';
   frmOrder.GridOrder.dbUpdate;
end;

Не хочет.

DriveSoft wrote:

Какая точно проблема с добавлением из другой формы?


Можно-ли при добавлении записи в мемо сравнивать с тем, что там уже есть?

приведенный выше скрипт именно это и делает.

Отправил вам проект с описанием вопроса на почту.
Спасибо.

DriveSoft wrote:

Приложите пожалуйста проект с данным скриптом и опишите, что именно не работает.

Отправил.

DriveSoft wrote:

попробуйте так

procedure PanelOnClick (Sender: TObject);
var
    panel: TdbPanel;
begin
    panel := TdbPanel(Sender);

    if panel.Color <> colorActive then
    begin
        panel.Color := colorActive;
        SavePanelStatus(panel, True);
    end else
    begin
        panel.Color := panel.Tag;
        SavePanelStatus(panel, False);
    end;

   if Sender is Form1.Panel2 Then
   begin
      frmOrder.cdRepStatus.Caption:='Принят';
      frmOrder.bSearch.Click;
   end;

   if Sender is Form1.Panel3 Then
   begin
      frmOrder.GridOrder.dbFilter := '(repairstatus <> "Принят")';
      frmOrder.GridOrder.dbUpdate;
   end;

end;

Не работает(((

DriveSoft wrote:

попробуйте так

procedure PanelOnClick (Sender: TObject);
var
    panel: TdbPanel;
begin
    panel := TdbPanel(Sender);

    if panel.Color <> colorActive then
    begin
        panel.Color := colorActive;
        SavePanelStatus(panel, True);
    end else
    begin
        panel.Color := panel.Tag;
        SavePanelStatus(panel, False);
    end;

   if Sender is Form1.Panel2 Then
   begin
      frmOrder.cdRepStatus.Caption:='Принят';
      frmOrder.bSearch.Click;
   end;

   if Sender is Form1.Panel3 Then
   begin
      frmOrder.GridOrder.dbFilter := '(repairstatus <> "Принят")';
      frmOrder.GridOrder.dbUpdate;
   end;

end;

Спасибо. И как я понимаю вот эти части скрипта

if Sender is Form1.Panel2 Then
   begin
      frmOrder.cdRepStatus.Caption:='Принят';
      frmOrder.bSearch.Click;
   end;

   if Sender is Form1.Panel3 Then
   begin
      frmOrder.GridOrder.dbFilter := '(repairstatus <> "Принят")';
      frmOrder.GridOrder.dbUpdate;
   end;

делаю для всех остальных панелек?

DriveSoft wrote:

Можно так

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
    if Form1.Memo1.Lines.IndexOf(Form1.ComboBox1.Text) = -1 then
        Form1.Memo1.Lines.Add(Form1.ComboBox1.Text) else ShowMessage('Дубликат');
end;

Дмитрий, а если записи добавляются из другой формы. Или добавляются вручную, тогда как? Просто я убрал добавление записей через ComboBox. Можно-ли при добавлении записи в мемо сравнивать с тем, что там уже есть?

Всех категорически!!!
Может кто подскажет как запретить добавление одной и той-же записи в поле Memo. Если по сути вопроса, есть справочник с комплектующими из которого добавляется всё необходимое в заказа (поле Memo). Как запретить добавление дублирующих строк в это поле?