Люди!!!! Помогите!!!! Подскажите!!!!
Застрял на скрипте:

procedure frmCard_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
// при создании новой записи, фильтруем инвентарные номера, чтобы видеть только непривязанные
frmFixed.ComboBox3.dbFilter:='(SELECT count(*) FROM Fixed WHERE fixed.id_Unit = Unit.id)=0';
end;

Дело в том, что скрипт в том виде, как записан выше, прекрасно работает.
Но в правую часть нужно дописать условие, что ComboBox3 исключает инвентарные номера не только те, которые уже выданы. Нужно ещё исключить те, которые не рабочие или находятся в ремонте. Как это можно организовать?
Проект во вложении.

Спасибо большое.  С ковырянием из грида вопрос уже решён.

Имеется такой скрипт, и он работает:

procedure frmCard_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
// при создании новой записи, фильтруем инвентарные номера, чтобы видеть только непривязанные
frmFixed.ComboBox3.dbFilter:='(SELECT count(*) FROM Fixed WHERE fixed.id_Unit = Unit.id)=0';
end;

Т.е., если предмет уже выдан, то повторно его выдать нельзя. Но возникают ситуации, когда предмет неисправен или находится в ремонте, а значит его тоже нужно отфильтровать.
Для этого в таблицу Unit добавил поле remont типа ДА/НЕТ.
Как в приведенный выше код дописать ещё условие, что Unit.remont=0?

Жаль. Но обращение было не только к Вам, Дмитрий. Если кого-то интересует проект по учёту мат. ценностей и их закреплению за сотрудниками - добро пожаловать в проект. Жду посильной помощи. Ранее выложенная проблема до сих пор не решена, а это важно.

Мозги закипают, время идёт, работа стоит. Ну никак не пойму, в чём ошибка! Прошу помощи! SOS!

Доброго всем дня!
Прошу помощи в моей проблеме. Не работают строки 167 и 188 кода:

156 procedure frmMain_tgUnit_OnCellClick (Sender: string; ACol, ARow: Integer);
157 begin
158 frmMain.Button6.Enabled := True;
159 ///// ОТОБРАЖЕНИЕ ДАННЫХ ПРИ КЛИКЕ /////////////////////////////////////////////
160 frmMain.Edit1.Text := SQLExecute ('SELECT mfr FROM Unit WHERE id='+frmMain.tgUnit.sqlValue);
161 frmMain.Edit4.Text := SQLExecute ('SELECT mfrYear FROM Unit WHERE id='+frmMain.tgUnit.sqlValue);
162 frmMain.ComboBox1.dbItemID := SQLExecute ('SELECT id_UnitGroup FROM Unit WHERE id='+frmMain.tgUnit.sqlValue);
163 frmMain.ComboBox2.dbItemID := SQLExecute ('SELECT id_UnitName FROM Unit WHERE id='+frmMain.tgUnit.sqlValue);
164 frmMain.ComboBox5.dbItemID := SQLExecute ('SELECT IFNULL(id_Unit, -1) FROM Fixed WHERE
Fixed.id_Unit='+frmMain.tgUnit.sqlValue);
165   if frmMain.ComboBox5.dbItemID<>-1 then
166   begin
167    frmMain.cbPerson.dbItemID := SQLExecute ('SELECT IFNULL(id_Person, -1) FROM Fixed WHERE Fixed.id_Unit='+frmMain.tgUnit.sqlValue);
168    frmMain.edRoom.Text := SQLExecute ('SELECT fixedRoom FROM Fixed WHERE Fixed.id_Unit='+frmMain.tgUnit.sqlValue);
169    end;
170    if frmMain.ComboBox5.dbItemID=-1 then
171    begin
172    frmMain.edRoom.Text := '';
173    frmMain.cbPerson.dbItemID := -1;
174    end;
175 end;
176
177 procedure frmMain_tgUnit_OnKeyUp (Sender: string; var Key: Word; Shift, Alt, Ctrl: boolean);
178 begin
179 frmMain.Button6.Enabled := True;
180 ///// ОТОБРАЖЕНИЕ ДАННЫХ ПРИ КЛИКЕ /////////////////////////////////////////////
181 frmMain.Edit1.Text := SQLExecute ('SELECT mfr FROM Unit WHERE id='+frmMain.tgUnit.sqlValue);
182 frmMain.Edit4.Text := SQLExecute ('SELECT mfrYear FROM Unit WHERE id='+frmMain.tgUnit.sqlValue);
183 frmMain.ComboBox1.dbItemID := SQLExecute ('SELECT id_UnitGroup FROM Unit WHERE id='+frmMain.tgUnit.sqlValue);
184 frmMain.ComboBox2.dbItemID := SQLExecute ('SELECT id_UnitName FROM Unit WHERE id='+frmMain.tgUnit.sqlValue);
185 frmMain.ComboBox5.dbItemID := SQLExecute ('SELECT IFNULL(id_Unit, -1) FROM Fixed WHERE Fixed.id_Unit='+frmMain.tgUnit.sqlValue);
186     if frmMain.ComboBox5.dbItemID<>-1 then
187     begin
188     frmMain.cbPerson.dbItemID := SQLExecute ('SELECT IFNULL(id_Person, -1) FROM Fixed WHERE Fixed.id_Unit='+frmMain.tgUnit.sqlValue);
189     frmMain.edRoom.Text := SQLExecute ('SELECT fixedRoom FROM Fixed WHERE Fixed.id_Unit='+frmMain.tgUnit.sqlValue);
190     end;
191     if frmMain.ComboBox5.dbItemID=-1 then
192     begin
193     frmMain.edRoom.Text := '';
194    frmMain.cbPerson.dbItemID := -1;
195    end;
196 end;

Т.е., если конкретная железка выдана конкретному человеку и в гриде tgUnit для этой железки сформировалась отметка "ВЫДАНО", то при навигации по гриду в cbPerson формы frmMain хочу видеть фамилию этого конкретного человека.
Проект во вложении.

57

(9 replies, posted in Russian)

Столкнулся со следующей проблемой. В этот грид на frmMain загружаются данные через CSV, а значит даты при наличии в гриде вычисляемого поля, загружать нет возможности. Можно ли не создавать вычисляемое поле, а в гриде задать формат для даты MMMM yyyy (как на frmAddUnit)? Речь идёт о дате изготовления техники, число в ней как правило отсутствует. Проект прилагаю.

Спасибо. Разобрался. Пока в карточке есть наполнение, удалить её нельзя. Прежде нужно карточку обнулить.

А это проект.

Коллеги! Прошу посмотреть проект. На форме frmMain не работает кнопка удаления записи Button3. Выдаёт ошибку, связанную с ключом (скрин ошибки во вложении).

61

(9 replies, posted in Russian)

Создайте вычисляемое поле вида

strftime('%m/%Y', datefield)

затем можете его вывести в грид.

СПАСИБО!

62

(9 replies, posted in Russian)

Здравствуйте!
Если для DateTimePicker1 на форме установлен формат "MMMM, yyyy", то каким образом в гриде можно получить выбранное значение в виде "ММ/уууу" (например сейчас август 2016, значит в гриде отображается 08/2016)?
Полагаю, что помимо поля Date в таблице нужно иметь вычисляемое поле DateText и уже его значение выводить в грид. Так? Но как в нём прописать формулу?

63

(3 replies, posted in Russian)

Странности продолжаются. Отправил проект в личку. Может быть проблема в версии MyVisualDB (на работе я делаю проект в MyVisualDB 1.53 BETA)? Добавил в гриде вычисление суммы по колонке, и все стоимости в гридах обнулились. Причём только в гридах. В таблице данные по стоимости остались и на печать в SQL отчёте выводятся.

DriveSoft wrote:

kunar80
если равна нулю, тогда
numMaino.balancePrice = 0


если NULL
numMaino.balancePrice IS NULL

Первое в моём случае не работает. Со вторым вариантом получилось. СПАСИБО, ДМИТРИЙ!

В отчёте SQL задано условие

WHERE card.record_count={EditCounter1} AND numMaino.balancePrice > 0

и оно работает.
Как для другого отчёта задать противоположное условие на отбор только тех значений, у которых балансовая стоимость не указана, т.е. равна 0. Формат поля - ДЕНЬГИ. Пробовал и =0, и =NULL. Эти варианты не проходят.

66

(3 replies, posted in Russian)

Отправил.

67

(3 replies, posted in Russian)

Доброго дня всем. Непонятка какая-то с деньгами. В таблице деньги сохраняются, но в гриде почему-то не отображаются (см. рисунок).

68

(3 replies, posted in Russian)

СПАСИБО!!!

69

(3 replies, posted in Russian)

При входе в проект через форму frmLogin после клика по кнопке "Вход" выскакивает ошибка (см. рисунок), хотя дальше всё работает без проблем.
Что это за ошибка и как её устранить?

70

(28 replies, posted in Russian)

Доброго всем дня!
Вот таким скриптом организуется импорт в таблицу данных АКТ-ПАПКА-ДОКУМЕНТ.

// id_Act - текстовое содержимое первого столбца содержится в arrStr[0]
if arrStr[0] <> '' then
begin
   ActID := SQLExecute ('SELECT id FROM act WHERE act LIKE "' + arrStr[0] +'"');
   if ActID = '' then
     begin
        SQLExecute ('INSERT INTO act (act) VALUES ("'+ arrStr[0] +'");');
        ActID := IntToStr(Last_Insert_id('act'));
        if ActID = '-1' then ActID := 'NULL';
     end;
end else ActID := 'NULL';

// id_Folder - текстовое содержимое второго столбца содержится в arrStr[1]
if arrStr[1] <> '' then
begin
   FolderID := SQLExecute ('SELECT id FROM folder WHERE folder LIKE "' + arrStr[1] +'"');
   if FolderID = '' then
      begin
         SQLExecute ('INSERT INTO folder (folder) VALUES ("'+ arrStr[1] +'");');
        FolderID := IntToStr(Last_Insert_id('folder'));
        if FolderID = '-1' then FolderID := 'NULL';
      end;
end else FolderID := 'NULL';

// Document -  текстовое содержимое третьего столбца содердижится в arrStr[2]
if arrStr[2]<>'' then sDocument := '"'+arrStr[2]+'"' else sDocument := 'NULL';

               SQLExecute ('INSERT INTO document (id_act, id_folder, [document]) VALUES ('+
               ActID +','+
               FolderID +','+
               sDocument +
               ');'); // с помощью SQL запрос вставляем данные в БД

Проблема в следующем. Помимо номера акт имеет ещё и дату (поле date в таблице act). Актов с одинаковыми номерами может быть несколько, но с разными датами (за разные годы).  Если не указана дата, а только номер, то при загрузке новые записи привязываются к тому акту, у которого наименьший ID.
Как в этот скрипт добавить дату акта? Файл CSV соответственно должен иметь колонки АКТ-ДАТА--ПАПКА-ДОКУМЕНТ

Есть таблица ДЕЛО и в ней поля id_КОМНАТА, id_СТЕЛЛАЖ, id_ПОЛКА, хранящие информацию о месте нахождения ДЕЛА.
И есть связанная с ней таблица ТОМ с полями id_ДЕЛО, id_КОМНАТА, id_СТЕЛЛАЖ, id_ПОЛКА. Если дело многотомное, то места хранения разных томов могут быть разными (ну не помещаются на одной полке или стеллаже!)
Как в сводном гриде объединить в одной ячейке ДЕЛО.id_КОМНАТА и ТОМ.id_КОМНАТА, в другой ДЕЛО.id_СТЕЛЛАЖ и ТОМ.id_СТЕЛЛАЖ, в третьей ДЕЛО.id_ПОЛКА и ТОМ.id_ПОЛКА?

Имеется ввиду, что sprava.id_room отсутствует, а есть document.id_room у подчинённых документов. Проект прилагаю.

Прошу помощи по вычисляемому полю calculate_room.
В двух связанных таблицах есть поля id_room. В вычисляемом поле нужно прописать:
- Если sprava.id_room = 0 , а document.id_room > 0, то вычисляется значение последнего, и наоборот.

Илюстрация к сказанному:
дело может состоять из одного тома, находящегося в каком-то указанном месте (здесь вычисляется и записывается sprava.id_room), а может состоять из многих томов, и тогда для каждого тома определяется своё место хранения document.id_room.
Можно использовать sprava.folder - оно показывает количество привязанных к делу документов.

Здравствуйте! В DateTimePicker мне нужен только год. Установил для него формат = yyyy, DateMode =  UpDown, Kind = MonthYear. В самом DateTimePicker виден только год и есть возможность стрелками вверх-вниз выбирать нужное значение. Но в таблицу сохраняет в формате DD.MM.yyyy. Как сделать, чтобы сохранялся только год?

DriveSoft wrote:

можно так в CombBox-ы

Спасибо, работает!