Перейти к содержимому


Добавление записи через вычисление


Сообщений в теме: 196

#21 Aleksey

    Новичок

  • Пользователи
  • Pip
  • 8 сообщений

Отправлено 24 Август 2012 - 13:53

Немного запутался, помогите решить проблему: как в этом вычислении в связное поле "Выполнил" установить выбранное значение из высплывающего окна?

if (isset($_REQUEST['jober']))
   {
         $line['Телефон']=$_REQUEST['jober']; //Тест на случай не вставки данных
		 $line['Выполнил']=$_REQUEST['jober'];
		 echo "<script>";
		 echo "window.opener.location.reload(1);"; // Перезагружаем родительское окно
		 echo "window.close()"; // Закрываем текущее
		 echo "</script>";
   }
 
//Выбираем всех сотрудников
$sqlQuery = "SELECT * FROM ".DATA_TABLE."4";//
$result = mysql_query($sqlQuery) or user_error(mysql_error()."<br>".$sqlQuery."<br>", E_USER_ERROR);
 
echo "<form method='get'>";
echo "Выполнил:";
echo "n<input type='hidden' name='id' value='$button_id'>"; // Передаем значение кнопки
echo "<input type='hidden' name='line_id' value=$ID>";  // Значение строки
echo "<SELECT name='jober'>";
while ($row = mysql_fetch_array($result))
    echo "<OPTION VALUE='".$row['f26']."'>".$row['f26']."</OPTION>";
echo "</SELECT>";
echo "<input type='submit' value='Выполнить'>";
echo "</form>";


#22 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 687 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 25 Август 2012 - 13:23

А что вообще за вычисление? Где работает, при каком условии?

#23 Aleksey

    Новичок

  • Пользователи
  • Pip
  • 8 сообщений

Отправлено 28 Август 2012 - 08:44

Это доп. действие для таблицы. При нажатии на кнопку появляется всплывающее окно со списком сотрудников, пользователь выбрав сотрудника нажимает кнопку выполнить, а выбранный сотрудник должен заполнить поле таблицы типа связь. Как я понимаю в поле типа связь должен быть ID поля связной таблицы, но если в OPTION VALUE ставить $row['f21'] (это ID связной таблицы), то ничего не выдает.

#24 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 687 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 28 Август 2012 - 11:30

Поле "Выполнил" - это поле связи с таблицей Сотрудники? Тогда в option value должен быть $row['id'] разумеется. Причем здесь $row['f21'] то, не совсем понял?

#25 Aleksey

    Новичок

  • Пользователи
  • Pip
  • 8 сообщений

Отправлено 29 Август 2012 - 13:55

Спасибо, разобрался. f21 ставил уже в качестве эксперимента. Оказалось, что id я писал как ID, поэтому не отрабатывало.

Сообщение отредактировал Aleksey: 29 Август 2012 - 13:56


#26 Дмитрий ЕСП

    Активный участник

  • Пользователи
  • PipPipPip
  • 78 сообщений
  • Пол:Мужчина

Отправлено 24 Сентябрь 2012 - 02:39

Узнал о функции update_query (здесь - http://clientbase.ru/forum/index.php?showtopic=3610&hl=array('f&st=20 ).
Приведите, пожалуйста, пример функции update_query с выбором массива (стороки).
Если есть функция delete_query, тоже прошу пример с выбором массива (стороки).

#27 Гость_Roman_*

  • Гости

Отправлено 24 Сентябрь 2012 - 09:08

$updated['Компания'] = "Восток";
$updated['Дата'] = date("Y-m-d H:i:s");
// Обновит поля "Компания" и "Дата" в таблице "Контрагенты" для строки с id=8.
update_query($updated, "Контрагенты", "`id`=8");


// Удаление строки из таблицы "Контрагенты" с id=8
delete_query("Контрагенты", "`id`=8");

Массив во втором случае не используется.

#28 Дмитрий ЕСП

    Активный участник

  • Пользователи
  • PipPipPip
  • 78 сообщений
  • Пол:Мужчина

Отправлено 26 Сентябрь 2012 - 13:19

Поля типа связь могут быть вычисляемыми?
Т.е. значение не выбирается из списка связи, а присваивается при вычислении и поле связывается с соответствующей записью из таблицы связи.
Применять буду при создании/редактировании записи в другой таблицы (insert_query и select_ query).
Пробовал различные варианты, результата нет.

Какое должно быть вычисление?
1. Вариант - Если я знаю выбираемое значение.

2. Вариант - Если я знаю значение ID соответствующей записи (ну, или значение другова поля).

#29 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 687 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 26 Сентябрь 2012 - 14:37

1. Могут.
2. Заноситься должен id связанной записи, т.к. в БД хранятся именно они.

#30 zizitopa

    Участник

  • Пользователи
  • PipPip
  • 25 сообщений

Отправлено 03 Октябрь 2012 - 22:11

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

Задача - необходимо сделать журнал отгрузок. (чтобы отображался под карточкой клиента так же как таблица "работа с клиентом" в базовой конфигурации).
Журнал заполняется автоматически при выполнении допдействия "отгрузили партию" в таблице "Заказы" (связь с таблицей "Контрагенты" по полю "название").

Метод решения который использовался:
1. Создал таблицу "Журнал отгрузок" с необходимым набором полей - связь с таблицей "контрагенты" по полю "Рабочее название", с таблицей "Заказы" по полю "Название".
2. Добавил допдействие в таблицу "Заказы" со следующим кодом:
$line['Отгружено'] = $line['Отгружено'] + $line['Отгружать по'];
$line['История отгрузок'] = "\n" . date ("Y-m-d H:i:s") . " Отправлено " . $line['Отгружать по'] . " тонн " . "\n" . $line['История отгрузок'];


$data['Компания'] = $ID;
$data['Дата отгрузки'] = date ("Y-m-d H:i:s");
$data['Тип товара'] = $line['Товар'];
$data['Водитель'] = $line['Водитель'];
$data['Объем'] = $line['Отгружать по'];
insert_query($data,"Журнал отгрузок");

Где начало кода - это заполнение лога отгрузок (конкретно под этот заказ и в поле в таблице "Заказы"), а вторая часть посвящена заполнению глобального журнала отгрузок клиента (по разным заказам).

Что для чего делал - связь с таблицей заказы делал чтобы заполнялось поле "Компания" при выполнение допдействия. Связь с таблицей "контрагенты" по полю "рабочее название" делал для того чтобы в карточке клиента снизу таблицу "журнал отгрузок" было видно. Однако поле "рабочее название" я заполнить не могу (вернее не знаю как), соответственно таблица отображается но в ней пусто (т.к. там фильтр по полю "рабочее название" автоматом стоит). В саму таблицу все добавляется. Как убрать/редактировать фильтр в этом отображении я не нашел..

Подскажите пожалуйста как задачу эту решить.
Может можно все проще сделать, без нескольких полей связи.

#31 Дмитрий ЕСП

    Активный участник

  • Пользователи
  • PipPipPip
  • 78 сообщений
  • Пол:Мужчина

Отправлено 07 Октябрь 2012 - 02:55

Необходимо вставлять, изменять и удалять данные в другую таблицу.
Хочу использовать insert_query, update_query и delete_query,
1. т.к.
- автоматически заполняются служебные поля и значения по умолчанию,
- автоматом запускаются и имеющиеся вычисления в таблице (при изменении полей)
- и функция insert_query возвращает id добавленной записи, который можно записать в переменную и затем использовать в последующей обработке.
2. Но мне необходимо работать с внутренними именами полей типа "f235" и внутренними именами таблиц типа 89, т.к. заносится они будут через переменные (при разных условиях, разные таблицы и разные поля).

Пример:
$fld_1_id = "`f".$line['Поле']['ID Поля1']."`"; В связанной таблице уже есть id полей таблиц в виде 221
$fld_2_id = "`f".$line['Поле']['ID Поля2']."`";
$fld_3_id = "`f".$line['Поле']['ID Поля3']."`";
$tbl_id = $line['Поле']['ID Таблицы'];

Далее необходимо вставит запись
в таблицу с id равным $tbl_id где id поля равное:
$fld_1_id присвоит ТЕКСТ (переменную типа текс)
$fld_2_id присвоит 123 (переменную типа число)
$fld_3_id присвоит 01.01.2012 (переменную типа дату)

при вставки необходимо, чтобы выполнялись условия п.1. (автоматическое заполнение системных и по умолчанию полей, возврат id новой записи, НО ГЛАВНОЕ запуск вычислений)

Можно ли это сделать через insert_query? И как?
Если нет, то как при использовании data_insert (которая удовлетворяет п.2) выполнить условия п.1 (ГЛАВНОЕ запуск вычислений)?
Или как ещё выполнить условия п.1 и п.2 ?

Если можно, то ответ прошу с примером.

Заранее БЛАГОДАРЮ за ответ.

P.S. Внешние имена таблиц и полей не могу использовать, т.к. для удобства работы пользователей в КБ, имена таблиц и полей могут меняться в процессе использования КБ, а поля в разных таблицах называются по-разному (хотя суть одна дебет-кредит, но называются: приход-расход, выполнение-оплата, доход-затраты и т.д. и т.п., ). Т.е. одна запись в таблице журнал-проводок создает записи-аналоги в разных таблицах аналитического учета (в зависимости от того какие счета бух учёта участвуют в проводке).
А проводки (записи в журнале-проводок) создаются при формировании документов, но тут нормально работает _query в описанном уже варианте использования.

Сообщение отредактировал Дмитрий ЕСП: 07 Октябрь 2012 - 23:25


#32 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 687 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 08 Октябрь 2012 - 09:14

В insert_query можно вносить поля как с внешними, так и с внутренними именами.

data_insert, в отличие от insert_query - всего лишь обертка стандартного insert-запроса, поэтому ничего кроме собственно выполнения запроса, он не делает. Его главное преимущество - быстрота выполнения.

#33 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 687 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 08 Октябрь 2012 - 10:00

Цитата

и функция insert_query возвращает id добавленной записи, который можно записать в переменную и затем использовать в последующей обработке.
data_insert кстати тоже возвращает.

#34 Дмитрий ЕСП

    Активный участник

  • Пользователи
  • PipPipPip
  • 78 сообщений
  • Пол:Мужчина

Отправлено 08 Октябрь 2012 - 10:20

Просмотр сообщенияCbCoder (08 Октябрь 2012 - 09:14) писал:

В insert_query можно вносить поля как с внешними, так и с внутренними именами.

Попробовал:

$data['f1663'] = "Петр";
$data['f1662'] = "Иванов";
insert_query($data,118);

НЕ РАБОТАЕТ.

Можно пример?

#35 Дмитрий ЕСП

    Активный участник

  • Пользователи
  • PipPipPip
  • 78 сообщений
  • Пол:Мужчина

Отправлено 08 Октябрь 2012 - 10:27

А в результате мне надо:

$fld_1_id = "`f".$line['Поле']['ID Поля1']."`"; В связанной таблице уже есть id полей таблиц в виде 221
$fld_2_id = "`f".$line['Поле']['ID Поля2']."`";
$fld_3_id = "`f".$line['Поле']['ID Поля3']."`";
$tbl_id = $line['Поле']['ID Таблицы'];

$data[$fld_1_id] = "Петр";
$data[$fld_2_id] = "Иванов";
$data[$fld_3_id] = "Васильевич";

insert_query($data,$tbl_id);

Как правильно?


Т.е. мне в массиве надо прописать не внешние имена поле, а внутренние имена полей (указав их чрез переменные). А в функции прописать не внешнее имя таблицы, а внутреннее (указав через переменную).

Спасибо.

Сообщение отредактировал Дмитрий ЕСП: 08 Октябрь 2012 - 11:04


#36 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 687 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 08 Октябрь 2012 - 11:12

Извиняюсь, спутал с условиями запросов. В insert_query действительно можно использовать только внешние имена, но никто не мешает автоматически заменить ваши внутренние имена на внешние.

$fld_1_id = $line['Поле']['ID Поля1'];
$fld_2_id = $line['Поле']['ID Поля2'];
$fld_3_id = $line['Поле']['ID Поля3'];
$tbl_id = $line['Поле']['ID Таблицы'];

$result = sql_select(FIELDS_TABLE, "`id`=",$fld_1_id);
$row = mysql_fetch_assoc($result);
$fld_1_name = $row['name_field'];
$result = sql_select(FIELDS_TABLE, "`id`=",$fld_2_id);
$row = mysql_fetch_assoc($result);
$fld_2_name = $row['name_field'];
$result = sql_select(FIELDS_TABLE, "`id`=",$fld_2_id);
$row = mysql_fetch_assoc($result);
$fld_2_name = $row['name_field'];
$result = sql_select(TABLES_TABLE, "`id`=",$tbl_id);
$row = mysql_fetch_assoc($result);
$tbl_name = $row['name_table'];

$data[$fld_1_name] = "Петр";
$data[$fld_2_name] = "Иванов";
$data[$fld_2_name] = "Васильевич";

insert_query($data, $tbl_name);


#37 Дмитрий ЕСП

    Активный участник

  • Пользователи
  • PipPipPip
  • 78 сообщений
  • Пол:Мужчина

Отправлено 08 Октябрь 2012 - 11:46

Всё понятно, подходит.

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

Хорошо, что программисты КБ есть!

Спасибо Вам от накапливающего знания и развивающего навыки.

Сообщение отредактировал Дмитрий ЕСП: 08 Октябрь 2012 - 11:49


#38 zizitopa

    Участник

  • Пользователи
  • PipPip
  • 25 сообщений

Отправлено 08 Октябрь 2012 - 21:19

Я заранее извиняюсь, а в моем вопросе было что-то не так? или он уже выходит за рамки стандартной тех поддержки?.
Если что-то не так, то скажите пожалуйста.

#39 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 687 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 09 Октябрь 2012 - 09:18

Просмотр сообщенияzizitopa (08 Октябрь 2012 - 21:19) писал:

Я заранее извиняюсь, а в моем вопросе было что-то не так?
Все так, просто видимо времени не было сразу ответить, и вопрос затерялся.

По вопросу. Проблема в том, что непонятно как заполнить поле связи с Контрагентом в таблице "Журнал отгрузок" из таблицы Заказы? Назовите поле связи с контрагентом и там и там (в Заказах и в Журнале), я вам напишу код с комментарием.

Еще вот этот момент меня смутил:
$data['Компания'] = $ID;
"Компания" - это поле связи? тогда с чем? Судя по заполнению из ID - это связь с Заказом, но тогда странное имя у поля - "Компания", тогда как логичнее назвать его "Заказ". Если же это связь с контрагентом - то оно неверно заполняется.

#40 zizitopa

    Участник

  • Пользователи
  • PipPip
  • 25 сообщений

Отправлено 09 Октябрь 2012 - 14:18

Просмотр сообщенияCbCoder (09 Октябрь 2012 - 09:18) писал:

Все так, просто видимо времени не было сразу ответить, и вопрос затерялся.

По вопросу. Проблема в том, что непонятно как заполнить поле связи с Контрагентом в таблице "Журнал отгрузок" из таблицы Заказы? Назовите поле связи с контрагентом и там и там (в Заказах и в Журнале), я вам напишу код с комментарием.

Еще вот этот момент меня смутил:
$data['Компания'] = $ID;
"Компания" - это поле связи? тогда с чем? Судя по заполнению из ID - это связь с Заказом, но тогда странное имя у поля - "Компания", тогда как логичнее назвать его "Заказ". Если же это связь с контрагентом - то оно неверно заполняется.

Компания - это поле связи между таблицами "Журнал отгрузок" и заказы. Делалось так исходя из того что по каждой компании может быть несколько заказов по различным типам товаров.
В таблице заказы есть поле "Заказчик" (именно с этим полем связано поле "Компания" о котором речь шла чуть выше) оно является полем связи с таблицей "Контрагенты" (привязано к полю "название").

Тот код, который я набрал, корректно заполняет таблицу "Журнал отгрузок", проблема в том что при таком заполнении этот журнал не отображается под карточкой компании (как, например, отображаются таблицы "работа с клиентами" и "сотрудники" в базовой версии клиентской базы).

Вычисление забито в допдействие к таблице "Заказы". При нажатии кнопки "произведена отгрузка партии" в журнал отгрузок должна по этой компании внестись запись по какому заказу сколько и чего отгрузили (это чтобы было понятно для чего делаем). Заказов на одну компанию может быть несколько.

p.s. дальше свои рассуждения, не факт что полезные.

Я так понимаю проблема в том что поле связи "Компания" связывает таблицы "Журнал отгрузок" и "Заказы". Если все оставить так как написано, то эта таблица будет отображаться при просмотре записи в таблице "Заказы".
Добавлял я новое поле связи (пытался решить кустарно) - добавил поле связи "Рабочее название" в таблицу Журнал отгрузок (связывает с таблицей контрагенты). После этого таблица стала отображаться при просмотре карточки компании в таблице Контрагенты, но там не отображаются элементы таблицы (пустая), т.к. стоит фильтрация поле "Рабочее название" = название компании которую просматриваем, а заполнить поле "Рабочее название" я не знаю как (оно должно совпадать с полем "Компания")

Решиться должно либо если заполнить поле "Рабочее название", либо если отредактировать фильтрацию при отображении таблицы (фильтрацию перевести на поле связи "Компания"). вот. Спасибо за помощь.





Количество пользователей, читающих эту тему: 9

0 пользователей, 9 гостей, 0 анонимных