Вопрос № 177010: Здравствуйте уважаемые эксперты! Имеется программа: «Ввод остатков по складу готовой продукции» ССЫЛКА <img src="http://rfpro.ru/d/1717.png"> Записи в полях «Черт N – ...
Вопрос № 177010:
Здравствуйте уважаемые эксперты! Имеется программа: «Ввод остатков по складу готовой продукции» ССЫЛКА <img src="http://rfpro.ru/d/1717.png"> Записи в полях «Черт N – Наименование», «Ед. изм.» и «Цена» берутся из таблицы KACZCH.dbf, в остальные поля данные вводятся с клавиатуры, и по нажатию на кнопку «Сохранить» формируется файл OSGP.dbf куда передаются соответствующие данные из таблицы KACZCH.dbf и соответствующие введенные
данные. Все данные хранящиеся в таблице OSGP.dbf можно посмотреть, нажав кнопку «Остатки». Нажав на кнопку «Оглавление» можно посмотреть остатки готовой продукции по отдельно выбранному кладовщику. Задание: 1) Добавить выбор ещё двух кладовщиков, а именно чтобы было так: 1. Суворова А.Н. 2. Никитина Е.В. 3. Сидорова Е.М. 4. Платонова М.С. 5. Петрова И.Н. Следовательно в форме «Оглавление» тоже поменять выбор кладовщиков. В OSGP.dbf запи
сываются только порядковые номера кладовщиков (без фамилии).
2) В форме «Остатки» поменять расположение полей: «Цех-сдатчик ЧТО» после «№ карт.», а «Код заказа» перед «Код ЧТО»
3) Создать кнопку «Приход», по нажатию на которую открывалась бы новая форма: сверху выбор кладовщика, по которому формируется приход, а ниже таблица записи из которой берутся из ARA.dbf. Выводимые поля: «Цех-изготовитель» - CI, «Наименование ЧТО» - NCHTO, «Сдаваемое кол-во» - KOL, «Дата» - вводится с клавиатуры (по
маске), «Принято» - вводится с клавиатуры (если введенное число больше чем «Сдаваемое кол-во», то вывести сообщение « Вы не можете принимать больше сдаваемого кол-ва»).
function TForm5.CreateTable(TabName, TabStruct, TabIDX: string): boolean; // Создаём новую таблицу begin result := true; with Form1.Query1 do // Для query делаем try try SQL.Clear; // Отчистили запрос SQL.Add(CreateTab + TabName + '(' + TabStruct + TabIDX + ')'); // Добавили новый запрос Prepare; // Оптимизация выполнения
запроса ExecSQL; // Выполняем запрос except // Обработка ошибок открытия таблицы Exception.Create('Ошибка открытия таблицы'); // Генерация исключения result := false; end; finally Close; // Закрыть запрос end; end;
procedure TForm5.BitBtn1Click(Sender: TObject); var i, j: integer; begin for i:= 0 to StringGrid1.ColCount do for j:= 1 to StringGrid1.RowCount d
o StringGrid1.Cells[i, j]:= ''; StringGrid1.RowCount:= 2; StringGrid1.ColCount:= 5; Close; end;
procedure TForm5.ComboBox1Change(Sender: TObject); var i: integer; begin StringGrid1.ColCount:= 5; if ComboBox1.Text = ''
; then // Нужен номер кладовщика begin ShowMessage('Выбирете сначала кладовщика'); exit; end; Form1.Query1.Close; // Закрыли запрос Form1.Query1.SQL.Clear; // Отчистили запрос Form1.Query1.SQL.Add('Select CI, NCHTO, KOL from ' + (#39 + 'ARA.DBF' + #39)); // Добавили новый запрос Form1.Query1.Open; // Открыли запрос Form1.Query1.First; StringGrid1.RowCount:= Form1.Query1.RecordCount + 1; for i:= 1 to Form1.Query1.RecordCount do begin StringGrid1.Cells[0, i]:= Form1.Query1.FieldValues['CI']; StringGrid1.Cells[1, i]:=
Form1.Query1.FieldValues['NCHTO']; StringGrid1.Cells[2, i]:= DatetoStr(Date); StringGrid1.Cells[3, i]:= Form1.Query1.FieldValues['KOL']; StringGrid1.Cells[4, i]:= ''; Form1.Query1.Next; end; Form1.Query1.Close; // Закрыли запрос MaskEdit1.Text:= DateToStr(Date); end;
procedure TForm5.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); var R: TRect; begin if (ACol = 2) or (ACol = 4) then // Редактируем только 2 и 4 ячейки StringGrid1.Options := StringGrid1.Options + [goEditing] // Разрешаем редактировать таблицу else StringGrid1.Options := StringGrid1.Options - [goEditing]; // Запрещаем редактировать таблицу if ACol = 2 then begin {Ширина и положение MaskEdit должно соответствовать ячейке StringGrid} R:= StringGrid1.CellRect(ACol, ARow); R.Left:= R.Left + StringGrid1.Left;
R.Right:= R.Right + StringGrid1.Left; R.Top:= R.Top + StringGrid1.Top; R.Bottom:= R.Bottom + StringGrid1.Top; MaskEdit1.Left:= R.Left + 1; MaskEdit1.Top:= R.Top + 1; MaskEdit1.Width:= (R.Right + 1) - R.Left; MaskEdit1.Height:= (R.Bottom + 1) - R.Top; {Покажем MaskEdit} { MaskEdit1.Text:= '';} MaskEdit1.Visible:= True; MaskEdit1.SetFocus; end; CanSelect:= True;<
br>end;
procedure TForm5.CheckBox1Click(Sender: TObject); var i: integer; begin if CheckBox1.Checked then for i:= 1 to StringGrid1.RowCount do StringGrid1.Cells[4, i]:= StringGrid1.Cells[3, i] else for i:= 1 to StringGrid1.RowCount do StringGrid1.Cells[4, i]:= ''; end;
procedure TForm5.MaskEdit1Exit(Sender: TObject); begin {Перебросим выбранное в значение из MaskEdit в grid} StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row]:=
MaskEdit1.Text; MaskEdit1.Visible:= False; // Спрятали MaskEdit StringGrid1.SetFocus; // Фокус на сетку end;
procedure TForm5.StringGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); var i, j: integer; begin i:= StrToint(StringGrid1.Cells[4, StringGrid1.Row]); j:= Strtoint(StringGrid1.Cells[3, StringGrid1.Row]); if i > j then begin ShowMessage('Вы не можете принимать больш
е сдаваемого кол-ва'); StringGrid1.Cells[4, StringGrid1.Row]:= StringGrid1.Cells[3, StringGrid1.Row]; end; end;
procedure TForm5.BitBtn2Click(Sender: TObject); var i: integer; s: string; begin if not FileExists(ExtractFilePath(ParamStr(0))+'Prin.dbf') then // Если таблицы не существует CreateTable('"Prin.dbf"', MyTabStruct, ''); // Создаём её Form1.Table1.TableName:= ExtractFilePath(ParamStr(0))+'Prin.dbf';
// Добавление имя базы Form1.Table1.Active:= true; // Открыли таблицу
for i:= 1 to StringGrid1.RowCount do // Проходим все строки сетки if StringGrid1.Cells[4, i] <> '' then // Если ввели число в ячейку begin s:= #39 + StringGrid1.Cells[1, i] + #39; // Получаем строку для запроса обрамлённую апострофами Form1.Query1.Close; // Закрыли запрос Form1.Query1.SQL.Clear; // Отчистил
и запрос Form1.Query1.SQL.Add('Select * from ' + FileNames + ' where NCHTO = '+s+''); // Добавили зап
рос Form1.Query1.Open; // Открыли запрос if Form1.Table1.Locate('NCHTO', StringGrid1.Cells[1, i], [loPartialKey]) then // Нашли в таблице нужную запись begin // Такие данные уже есть if ((Form1.Table1.FieldValues['NKL'] = IntToStr(ComboBox1.itemindex + 1)) and (Form1.Table1.FieldValues['DOST'] = StringGrid1.Cells[2, i]) and (Form1.Table1.FieldValues['NKOL'] = StrtoFloat(StringGrid1.Cells[4, i]))) then ShowMessage('Введенные
данные для записи ' + StringGrid1.Cells[1, i] + ' имеются в базе Prin.dbf') else begin // Меняем данные в записи Form1.Table1.Edit; // Ставим запись на редактирование Form1.Table1.FieldValues['NKL']:= ComboBox1.ItemIndex + 1; Form1.Table1.FieldValues['CI']:= StringGrid1.Cells[0, i]; // Записываем новые данные
Form1.Table1.FieldValues['NCHTO']:= StringGrid1.Cells[1, i]; Form1.Table1.FieldValues['DOST']:= StringGrid1.Cells[2, i]; Form1.Table1.FieldValues['KOL']:= StrToFloat(StringGrid1.Cells[3, i]); Form1.Table1.FieldValues['NKOL']:= StrToFloat(StringGrid1.Cells[4, i]); Form1.Table1.Post; // Сохранили изменения end; end else // Нужную запись не нашли
if StringGrid1.Cells[4, i] <> '' then // Если ввели число в ячейку begin Form1.Table1.Insert; // Вставили новую запись в таблицу Form1.Table1.FieldValues['NKL']:= ComboBox1.ItemIndex + 1; Form1.Table1.FieldValues['CI']:= StringGrid1.Cells[0, i]; // Записываем новые данные Form1.Table1.FieldValues['NCHTO']:= StringGrid1.Cells[1, i];
Form1.Table1.FieldValues['DOST']:= StringGrid1.Cells[2, i]; Form1.Table1.FieldValues['KOL']:= StrtoFloat(StringGrid1.Cells[3, i]); Form1.Table1.FieldValues['NKOL']:= StrtoFloat(StringGrid1.Cells[4, i]); Form1.Table1.Post; // Сохранили таблицу end; // end; Form1.Table1.Active:= false; // Закрыли таблицу Form1.Query1.Close; // Закрыли запрос ShowMessage('Данные сохранены на диск.'); end;
procedure
TForm5.BitBtn3Click(Sender: TObject); var i: integer; begin StringGrid1.ColCount:= 6; Form1.Query1.Close; // Закрыли запрос Form1.Query1.SQL.Clear; // Отчистили запрос Form1.Query1.SQL.Add('Select * from ' + (#39 + 'Prin.dbf' + #39)); // Добавили новый запрос Form1.Query1.Open; // Открыли запрос Form1.Query1.First; StringGrid1.RowCount:= Form1.Query1.RecordCount + 1; for i:= 1 to Form1.Query1.RecordCount do begin StringGrid1.Cells[0, i]:= Form1.Query1.FieldValues['CI']; StringGrid1.Cells[1, i]:= Form1.Query1.FieldValues['NCHTO']; StringGrid1.Cells[2, i]:= Form1.Query1.FieldValues['DOST']; StringGrid1.Cells[3, i]:= Form1.Query1.FieldValues['KOL']; StringGrid1.Cells[4, i]:= Form1.Query1.FieldValues['NKOL']; StringGrid1.Cells[5, i]:= Form1.Query1.FieldValues['NKL'];
Form1.Query1.Next; end; Form1.Query1.Close; // Закрыли запрос end;
procedure TForm5.BitBtn4Click(Sender: TObject); var i: integer; begin Form1.Table1.TableName:= ExtractFilePath(ParamStr(0))+'KACZCH.DBF'; // Добавление имя базы Form1.Table1.Active:= true; // Открыли таблицу Form1.Query1.Close; // Закрыли запрос Form1.Query1.SQL.Clear; // Отчистили запрос Form1.Query1.SQL.Add('Selec
t CI, NCHTO, NKOL from ' + (#39 + 'Prin.dbf' + #39)); // Добавили новый запрос Form1.Query1.Open; // Открыли запрос<
br> Form1.Query1.First; Form6.StringGrid1.RowCount:= Form1.Query1.RecordCount + 1; for i:= 1 to Form1.Query1.RecordCount do begin Form6.StringGrid1.Cells[0, i]:= Form1.Query1.FieldValues['CI']; Form6.StringGrid1.Cells[1, i]:= Form1.Query1.FieldValues['NCHTO']; if Form1.Table1.Locate('NCHTO', Form6.StringGrid1.Cells[1, i], [loPartialKey]) then // Нашли в таблице нужную запись begin Form6.StringGrid1.Cells[2, i]:= Form1.Query1.FieldValues['NKOL']
* Form1.Table1.FieldValues['OCN']; end; Form1.Query1.Next; end; Form1.Query1.Close; // Закрыли запрос Form1.Table1.Active:= false; // Закрыли таблицу Form6.Visible:= true; end;
procedure TForm5.StringGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var s: string; begin s:= StringGrid1.Cells[4, StringGrid1.Row]; if ComboBox1.Text
= '' then begin ShowMessage('Вы не можете принимать товар без выбора кладовщика!'); StringGrid1.Cells[4, StringGrid1.Row]:= s; end; end;
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.