1 (edited by Nilaus 2015-05-04 11:21:13)

Topic: Несколько вопросов

Сделал частично базу, поднакопилось  несколько вопросов, помогите пожалуйста по-возможности.
База отправлена на почту: support@drive-software.com со ссылкой на данную тему.

1.
На главной форме три таблицы, во второй и третьей значения меняются в зависимости от первой и второй соответственно (корреспонденты, переписка и объекты).
Если последовательно вносить в базу данные таким образом:
Шаг1. Form1: Добавить –  вводим данные о корреспонденте, добавляем объект (объекты),
Шаг2. Открываем форму добавить переписку, там вносим данные о входящей записи,
Шаг3. Выбираем объект (объекты) к этой записи, которые добавляли ранее сохраняем. Все ОК.

Теперь, нам надо изменить данные о переписки, либо изменить, или добавить объект.
Если кликнуть по значению в первой таблице, то проблем нет, но чтобы добраться например до объектов надо открыть три формы (три шага как при добавлении корреспондента).
Если кликнуть  по значению во второй таблице, то действий меньше, но тут возникает проблема.  Комбобокс с добавлением объекта к переписке ( ID объектов комбобокс берет с кнопки сохранить корреспондента на форме его добавления) показывает объекты того корреспондента, которого в последний раз я открывал в первой таблице на главной форме, а им может быть другой корреспондент со своими объектами. И именно его объекты и будут в этом комбобоксе. Аналогично, если кликнуть по значению третье таблицы,. Форма с кнопкой "сохранить корреспондента"   не участвует при изменении данных вторым способом, в этом наверное все дело?

2. Цвет фона ячейки при определенном значении. Очень странно работает. В ином случае подкрашивает, когда значения появляются в таблице, но лишь частично, в ином случае подкрашивает при нажатии на ячейку, в ином случае не подкрашивает вообще. Кстати, в примере в факе работает похоже. Хотелось бы, что цветом выделялось постоянно, т.е. открыл и видно, что есть такие-то записи, соответствующие условию, а не щелкать по записям.

3. Нестандартный счетчик. Для исходящей корреспонденции добавил нестандартный счетчик вида 125/м/001. С этим проблем не было.
Для технических условий нужен счетчик другого типа. В таблице "Uch" (участки) есть аббревиатура, соответствующая определенному участку.  При добавлении технических условий я выбираю объект, который относится к участку.  Хотелось бы при выборе объекта чтобы счетчик брал аббревиатуру с нужного участка. Например: Зав/001.

4. Создание папок.
Возможно ли такое, что при  добавлении корреспондента в определенной директории создавалась папка с наименованием корреспондента и подпапка с наименованием объекта? Туда будут добавляться файлы относящиеся к данному корреспонденту и объекту.

5. Есть ли функция похожая на SetFocus. только не устанавливающая фокус на строке, а выбирающая ее? Т.е. в таблице, от выбора значения которой, изменяются значения в другой,  автоматически выбиралась первая (или последняя) строка.

Re: Несколько вопросов

1. К сожалению не могу ответить на этот вопрос,  я могу помочь только с конкретными вопросами, т.к. довольно сложно разобраться в незнакомом проекте, чтобы все понять, как было реализовано.


2. Проверил, не смог воспроизвести данную ошибку.


3. В вашем случае будет примерно так, если объект выбирается из ComboBox на предыдущей форме

procedure frmEmployee_OnShow (Sender: string; Action: string);
var
    id : integer;
   sAbbbr: string;
begin
    if Action='NewRecord' then
    begin
        id := StrToInt(frmEmployee.EditCounter1.Text);
        sAbbbr := SQLExecute('SELECT Abbbr FROM Uch WHERE id='+Form2.ComboBox1.sqlValue);
        frmEmployee.Edit1.Text:= Format(sAbbbr + '%.3d', [id]); 
    end;
end;

4. Можно, вы можете менять значение компонента DBFile1.CopyTo
тем самым менять местоположение, куда будет сохранен файл.


5.

Form1.TableGrid1.SelectedRow := 0; // выберет первую строку
Dmitry.

3 (edited by Nilaus 2015-05-04 12:07:48)

Re: Несколько вопросов

Спасибо большое за ответы.
Еще вопрос про счетчик.
Можно ли на основе счетчика сделать поле, которое будет брать номер с этого счетчика и будет иметь предустановленный префикс с номером года. Например: 5-125/м/001 (где 5 это 2005 год ).  Это надо для того, чтобы в начале года обнулить номер письма ( у нас каждый год нумерация начинается сначала). Обнулять можно и вручную (минусовать от номера в поле количество записей в предыдущем году), или автоматически как-то настроить. Вопрос только в том, как сделать такое составное поле.

И еще, уже имеется множество таблиц, связанных отношением многие-ко-многим (созданы связующие таблицы).  Например прибор учета имеет класс точности, который может быть у другого прибора учета.  Я так понял организовать поиск прибора учета, учитывая его класс точности невозможно, т.к. эти таблицы напрямую не связаны и поиск придется делать на отдельной форме? Просто таких таблиц уже много и по каждому делать отдельный поиск неудобно.
Извините, если отвлекаю Вас глупыми вопросами.

P.S. Про SelectedRow понятно, но это только выделяет строку, но не кликает по ней. Какой-то процедуры CellClick  я не нашел, не знаю, существует ли она.

Re: Несколько вопросов

Nilaus wrote:

Спасибо большое за ответы.
Еще вопрос про счетчик.
Можно ли на основе счетчика сделать поле, которое будет брать номер с этого счетчика и будет иметь предустановленный префикс с номером года. Например: 5-125/м/001 (где 5 это 2005 год ).  Это надо для того, чтобы в начале года обнулить номер письма ( у нас каждый год нумерация начинается сначала). Обнулять можно и вручную (минусовать от номера в поле количество записей в предыдущем году), или автоматически как-то настроить. Вопрос только в том, как сделать такое составное поле.

Пример с обнулением счетчика при изменении текущего года
http://myvisualdatabase.com/forum/viewtopic.php?id=1387


Nilaus wrote:

И еще, уже имеется множество таблиц, связанных отношением многие-ко-многим (созданы связующие таблицы).  Например прибор учета имеет класс точности, который может быть у другого прибора учета.  Я так понял организовать поиск прибора учета, учитывая его класс точности невозможно, т.к. эти таблицы напрямую не связаны и поиск придется делать на отдельной форме? Просто таких таблиц уже много и по каждому делать отдельный поиск неудобно.

В данном случае необходимо организовывать поиск кнопкой "SQL запрос" с помощью которого вы можете сделать поиск любой сложности.



Nilaus wrote:

P.S. Про SelectedRow понятно, но это только выделяет строку, но не кликает по ней. Какой-то процедуры CellClick  я не нашел, не знаю, существует ли она.

необходимо кликнуть по кнопке поиске после этого

Form1.Button1.Click;
Dmitry.