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


Вычисления php и яваскрипт в подчиненных таблицах.


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

#1 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

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

Срабатывают ли вычисления пхп и яваскрипт в подчиненных таблицах, если я добавляю строку в подчиненную таблицу с записи в родительской таблице?

#2 CbCoder

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

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

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

Вычисления срабатывают, яваскрипт - нет. Игнорирование js связано с табличным отображением записи.

#3 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

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

Пример из демонстрационной базы Склад -> приход на склад -> позиции прихода. В таблице позиции прихода поле наименование - выпадающий список с типом связь(данные берутся из табл. номенклатура). Мне необходима дополнительная функциональность: в поле наименования я хочу вводить наименование, по мере ввода формируется выпадающий список из записей в таблице номенклатура. Если же в номенклатуре такой записи нет, оставить текст который ввел. Введенный текст, после нажатия "Сохранить" должен добавляется в таблицу номенклатуры.

Как ее можно достичь?

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

Сообщение отредактировал wondertalik: 19 Октябрь 2012 - 13:13


#4 CbCoder

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

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

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

Цитата

Как ее можно достичь?

Теоретически - путем создания своего элемента управления. Конкретный алгоритм я понятное дело расписать тут не могу - т.к. это выходит за рамки техподдержки и потребует уйму времени. Примерное направление есть в текущей стандартной конфигурации, в позициях счетов - там как раз поле номенклатуры формируется динамически, хотя и по иной схеме.

#5 CbCoder

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

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

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

Цитата

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

Это связано с особенностью работы подтаблиц - тем что запись сразу сохраняется при добавлении, еще до заполнения полей. Возможно, в дальнейшем решим эту проблему.

#6 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

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

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

Это связано с особенностью работы подтаблиц - тем что запись сразу сохраняется при добавлении, еще до заполнения полей. Возможно, в дальнейшем решим эту проблему.
Вычисления при сохранении таблицы срабатывают, сразу как только я нажимаю кнопку "добавить запись". Я правильно понимаю?

#7 CbCoder

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

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

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

Да, по той же причине.

#8 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

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

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

Теоретически - путем создания своего элемента управления. Конкретный алгоритм я понятное дело расписать тут не могу - т.к. это выходит за рамки техподдержки и потребует уйму времени. Примерное направление есть в текущей стандартной конфигурации, в позициях счетов - там как раз поле номенклатуры формируется динамически, хотя и по иной схеме.
Я не прошу за меня это придумать. Мне лишь нужно понять, как вот этот новый элемент управления я смогу внедрить в поле подчиненной таблицы.

#9 CbCoder

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

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

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

Цитата

Примерное направление есть в текущей стандартной конфигурации, в позициях счетов - там как раз поле номенклатуры формируется динамически


#10 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 25 Октябрь 2012 - 01:23

Есть родительская таблица Акты расхода и подчиненная позиции расхода. В позиции расхода имеются поля (наимнование - тип связь(таблица склад), ед. изм. и количество). В позииции расхода написал вычисление при условии изменения поля наименования, чтобы подставлялись количество и ед. изм. из таблицы склад. Смысл в том, что если в одном акте расхода добавляют одно и тоже наименование несколько раз, каждый раз количество расчитывалось заново в добавляемой позиции. Вычисление имеет следующий вид:
//Определяем к какому  наименованию относится текущая строка
$sqlQuery = "SELECT f15 as IDnamePozition FROM ".DATA_TABLE."1 WHERE `id`=".$line['id']." AND status=0 LIMIT 1";
$result = sql_query($sqlQuery) or  user_error(mysql_error()." <br> ".$sqlQuery." <br> ", E_USER_ERROR);
$row = mysql_fetch_assoc($result);
//Определяем количество позиций данного наименования на складе
$sqlQuery = "SELECT f32 countName FROM ".DATA_TABLE."3 WHERE status=0 AND `id`='".$row['IDnamePozition']."' LIMIT 1";
$result = sql_query($sqlQuery) or  user_error(mysql_error()." <br> ".$sqlQuery." <br> ", E_USER_ERROR);
$rw = mysql_fetch_assoc($result);
//Определяем такие же позиции в текущем акте,
//определяем возможный остаток позиций на складе
$sqlQuery = "SELECT * FROM ".DATA_TABLE."1 WHERE status=0 AND `f15`=".$row['IDnamePozition'];
$result = sql_query($sqlQuery) or  user_error(mysql_error()." <br> ".$sqlQuery." <br> ", E_USER_ERROR);
if(($nn = mysql_num_rows($result)) > 1) {
  while($rowPozitionRasxod = mysql_fetch_assoc($result)) {
   //Отнимаем от общего количества на складе количество указанных позиций в текущем акте расходе
   $rw['countName'] -= $rowPozitionRasxod['f18'];
}
  if($rw['countName'] < 0)
   $line['Количество'] = 0;
  else
   $line['Количество'] = $rw['countName'];
} else {
//Если существует только одна позиция на складе
if($line['Количество'] > $rw['countName'])
  $line['Количество'] = $rw['countName'];
}

После добавления второй записи выборка того же наименования нечего не дает. Поля больше не заполняются автоматом. Если коментирую этот участок:
if($rw['countName'] < 0)
   $line['Количество'] = 0;
  else
   $line['Количество'] = $rw['countName'];
или меняю Количество на состояние, то все работает. В чем проблема?

Сообщение отредактировал wondertalik: 25 Октябрь 2012 - 13:19


#11 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

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

Последний пост в теме все еще актуален. Разработчики пожалуйста проконсультируйте.

#12 CbCoder

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

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

Отправлено 25 Октябрь 2012 - 15:01

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

#13 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 25 Октябрь 2012 - 15:44

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

Боюсь, такие консультации выходят за рамки бесплатной техподдержки. Беглый просмотр явных ошибок не выявил, программировать в КБ вы очевидно умеете, просто где-то ошиблись в алгоритме.
В какой последовательности происходят вычисления, если у меня их несколько в подчиненной таблице? Если поле Количество изменятся таким кодом, сработает ли вычисление для поля Количество, которое вычисляется при условии изменения этого поля.

$line['Ед. изм.'] = $line['Наименование']['raw'];
$line['Количество'] = $line['Наименование']['Количество'];
И что содержит в себе $line['Наименование']['raw']?

Сообщение отредактировал wondertalik: 25 Октябрь 2012 - 16:14


#14 CbCoder

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

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

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

В какой последовательности происходят вычисления, если у меня их несколько в подчиненной таблице?
В порядке очередности.

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

И что содержит в себе $line['Наименование']['raw']?
http://clientbase.ru...indpost&p=15082

#15 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

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

Пример. Есть родительская таблица Акты расхода, подчиненная таблица позиция расхода(наименование-связь с наименованием таблицы склад, ед. изм. - связь с ед. изм. таблицы склад и поле количество - числовое). Добавляю в Позиции расхода вычисление, которое срабатывает при изменении поля Наименование:
$line['Ед. изм.'] = $line['Наименование']['raw'];
$line['Количество'] = $line['Наименование']['Количество'];
Вычисление работает. Далее добавляю вычисление, которое срабатывает при изменении поля Количество:
$line['Количество']=5;
Работает. Меняю вычисление на что-то динамическое типо:
$line['Количество']=$line['Количество'] - 10;
Все. Не работает. Отсюда возникают вопросы. Что делается в подчиненных таблицах, когда заполняется массив $line? После нажатия кнопки сохранить или как-то по другому?
Если я изменю поле Количество, но не нажму сохранить и перейду куда-то в другую таблицу, запись останется прежней или уже новое значение?

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

сработает ли вычисление для поля Количество, которое вычисляется при условии изменения этого поля
Должно сработать, если Наименование - это поле связи и в связанной таблице есть поле Количество.
Меня интересовало поле количество в подчиненной таблице, а не в родительской. Или я не правильно понял?

Сообщение отредактировал wondertalik: 25 Октябрь 2012 - 16:19


#16 CbCoder

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

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

Отправлено 25 Октябрь 2012 - 16:52

Цитата

Работает. Меняю вычисление на что-то динамическое типо:
$line['Количество']=$line['Количество'] - 10;
Все. Не работает.
А зачем вы создаете бесконечную рекурсию? Вы меняете поле Количество, срабатывает событие на изменение, оно снова вычисляется, снова срабатывает событие - и так до бесконечности. Программа искусственно прерывает такие циклы, иначе зависла бы.

Цитата

Что делается в подчиненных таблицах, когда заполняется массив $line? После нажатия кнопки сохранить или как-то по другому?
Кнопка Сохранить в подчиненных таблицах фиктивная (для снятия фокуса с поля в устройствах без мыши). Событие на изменение срабатывает сразу при выходе курсора из поля.

Цитата

Меня интересовало поле количество в подчиненной таблице, а не в родительской
Какая разница, не совсем понял? Поля связи везде одинаковые

#17 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 25 Октябрь 2012 - 17:23

Спасибо за ответы.

#18 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

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

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

Примерное направление есть в текущей стандартной конфигурации, в позициях счетов - там как раз поле номенклатуры формируется динамически

Разобрался. Все работает. Теперь стала задача сделать строки в подчиненной таблицы только на чтение. Для этого я использовал расширенные права доступа. И вот здесь возникла проблема. Итак если стоят права (СКРИН1, СКРИН2), то после смены поля тип(ввод или номенклатура) наименование меняется на поле обычного текстового ввода или выпадающего списка. При смене пользователя "кто добавил" на администратора например, поля тип и наименования все так же можно редактировать.

Меняю с помощью расширенных прав права(СКРИН4 И СКРИН5). Теоретически должно работать, но смена значения типа не меняет наименование, как было до установки расширенных прав.

Прикрепленные изображения

  • Прикрепленное изображение: СКРИН2.PNG
  • Прикрепленное изображение: СКРИН1.PNG
  • Прикрепленное изображение: СКРИН4.PNG
  • Прикрепленное изображение: СКРИН5.PNG


#19 CbCoder

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

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

Отправлено 01 Ноябрь 2012 - 11:28

Если речь о динамических полях, то насколько я знаю, стандартная система прав для них не работает. Необходимо вносить изменения в код формирования элемента управления.

#20 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 15 Ноябрь 2012 - 16:01

Есть подчиненная таблица Таблица1 в которой поля "Наименование"(текст) , "Ед. изм."(текст), "Статус"(список: тип1(по умолчанию) и тип2). Хочу чтобы при выборе типа 2, заполнения наименования и ед.изм все поля обнулялись. При этом тип 2 устанавливался по умолчанию. Как это сделать?





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

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