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


Фильтр данных связанных таблиц по записи из основной.


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

#1 mak

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

  • Активный пользователь
  • PipPipPip
  • 207 сообщений

Отправлено 11 Май 2011 - 22:59

есть таблица "контрагенты".
у нее две подчиненных - "реквизиты" и "адреса доставки".

в таблице "счета" поле связи с таблицей "контрагенты" + поля связи с таблицами "реквизиты" и "адреса доставки".

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

#2 CbCoder

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

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

Отправлено 12 Май 2011 - 09:11

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

#3 costas

    Новичок

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

Отправлено 12 Май 2011 - 09:21

Просмотр сообщенияРазработчик (12.5.2011, 9:11) писал:

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

#4 mak

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

  • Активный пользователь
  • PipPipPip
  • 207 сообщений

Отправлено 12 Май 2011 - 11:16

Просмотр сообщенияРазработчик (12.5.2011, 9:11) писал:

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

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

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

#5 CbCoder

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

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

Отправлено 12 Май 2011 - 11:22

Просмотр сообщенияcostas (12.5.2011, 10:21) писал:

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

Вкратце данный способ можно описать так:
1. В программе есть возможность фильтра по полям связи из одной таблицы, например выбор рубрики-подрубрики. Описывалось неоднократно на форуме, в документации возможно тоже есть.
2. По вышеозначенному фильтру можно добавить в счет поля контрагента из подчиненных таблиц "реквизиты" и "адреса доставки", соответсвенно сами реквизиты и адреса будут фильтроваться по контрагенту. Но если просто их добавить - придется выбирать контрагента 3 раза для разных таблиц, что естественно глупо, поэтому эти поля должны быть вычисляемые на основе выбранного контрагента из таблицы "контрагенты". И скрытые естественно.
3. Чтобы сработали вычисления, необходимо пересохранить запись, соответственно нужно добавить яваскрипт на событие "изменение" поля "контрагент", команду на submit формы.

Сами видите что способ довольно трудоемкий и требует соответствующей квалификации и опыта разработчика.

#6 CbCoder

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

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

Отправлено 12 Май 2011 - 11:26

Просмотр сообщенияmak (12.5.2011, 12:16) писал:

объясните пожалуйста в общих чертах идею...
сейчас не понимаю, как могут помочь вычисления, если для применения фильтра таблица должна быть сохранена, т.е. доступен ID?
Выше описал уже.

Просмотр сообщенияmak (12.5.2011, 12:16) писал:

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

#7 mak

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

  • Активный пользователь
  • PipPipPip
  • 207 сообщений

Отправлено 12 Май 2011 - 11:55

Просмотр сообщенияРазработчик (12.5.2011, 11:26) писал:

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

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

#8 costas

    Новичок

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

Отправлено 13 Май 2011 - 06:21

Просмотр сообщенияРазработчик (12.5.2011, 11:26) писал:

Выше описал уже.
В конкретных планах нет, т.к. не пока не совсем ясно как реализовать универсальный механизм, по крайней мере не обдумывали еще серьезно.
Наверно надо смотреть в сторону AJAX фреймворков в купе с фреймворком на PHP с использованием MVC (если вы избрали PHP в качестве языка программирования), про smarty ничего сказать не могу хорошего, как и плохого, но наши ребята плюются при одном упоминании, да и осадочек остался с былых времён эксплуатации ПО на нём написанного.
Но то, что отстаёте по интерфейсу от многих WEB-ориентированных CRM/Groupware и им подобных, это факт, скажем так - серьёзный минус, который портит картинку.

Вот только изменение кода с переползанием на другой инструментарий слишком затратно, но если смотреть в будущее, где предполагается развитие и дальше, то всё равно рано или поздно придётся что то менять.

#9 costas

    Новичок

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

Отправлено 13 Май 2011 - 07:00

Просмотр сообщенияРазработчик (12.5.2011, 11:22) писал:

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

Вкратце данный способ можно описать так:
1. В программе есть возможность фильтра по полям связи из одной таблицы, например выбор рубрики-подрубрики. Описывалось неоднократно на форуме, в документации возможно тоже есть.
2. По вышеозначенному фильтру можно добавить в счет поля контрагента из подчиненных таблиц "реквизиты" и "адреса доставки", соответсвенно сами реквизиты и адреса будут фильтроваться по контрагенту. Но если просто их добавить - придется выбирать контрагента 3 раза для разных таблиц, что естественно глупо, поэтому эти поля должны быть вычисляемые на основе выбранного контрагента из таблицы "контрагенты". И скрытые естественно.
3. Чтобы сработали вычисления, необходимо пересохранить запись, соответственно нужно добавить яваскрипт на событие "изменение" поля "контрагент", команду на submit формы.

Сами видите что способ довольно трудоемкий и требует соответствующей квалификации и опыта разработчика.
По первому пункту не нашёл ничего на форуме и в документации.
Второй и третий пункт был выявлен опытным путём, но не совсем понятны были критерии фильтрации, не всегда срабатывало почему то, решили что не предназначено для использования, но раз вопрос всплыл то и спросили соответственно.

С сохранением было сразу понятно, но с java script вариант не всегда работает, поле "контрагент" не всегда меняется, нужны более глобальные события, типа добавление связанной записи уже к существующему контрагенту, то есть запись (видимо в контексте таблицы) помимо полей и их свойств, должна обладать рядом событий "до", "после" и тд (тоже самое при удалении, архивации и тд), наличие такой "обёртки" не повредит.
Как вариант возможность сформировать своё поле (вернее содержание для полей/поля формы) преред открытием формы добавления/редактирования записи...

#10 costas

    Новичок

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

Отправлено 13 Май 2011 - 07:09

Просмотр сообщенияcostas (13.5.2011, 7:00) писал:

По первому пункту не нашёл ничего на форуме и в документации.
Второй и третий пункт был выявлен опытным путём, но не совсем понятны были критерии фильтрации, не всегда срабатывало почему то, решили что не предназначено для использования, но раз вопрос всплыл то и спросили соответственно.

С сохранением было сразу понятно, но с java script вариант не всегда работает, поле "контрагент" не всегда меняется, нужны более глобальные события, типа добавление связанной записи уже к существующему контрагенту, то есть запись (видимо в контексте таблицы) помимо полей и их свойств, должна обладать рядом событий "до", "после" и тд (тоже самое при удалении, архивации и тд), наличие такой "обёртки" не повредит.
Как вариант возможность сформировать своё поле (вернее содержание для полей/поля формы) преред открытием формы добавления/редактирования записи...
Простое решение напрашивается само, доработайте тип поля "Список", добавьте возможность создания списка на основе связи с другой таблицей, этого будет достаточно.

#11 CbCoder

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

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

Отправлено 13 Май 2011 - 10:27

Просмотр сообщенияcostas (13.5.2011, 8:00) писал:

По первому пункту не нашёл ничего на форуме и в документации.
Впервые было описано здесь: http://clientbase.ru/forum/index.php?s=&am...post&p=2989
Затем много раз в ответах на другие темы
В документацию добавим.

#12 CbCoder

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

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

Отправлено 13 Май 2011 - 10:35

Просмотр сообщенияcostas (13.5.2011, 8:09) писал:

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





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

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