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


Проблема с заполнением поля / фильтром по полю

Заполнение поля Фильтр поля

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

#1 AMudroff

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

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

Отправлено 19 Сентябрь 2016 - 14:16

Добрый день! Прошу помочь начинающему в КБ человеку с задачей. Никак не справлюсь сам.

Главная задача: задать значение в одно поле (Номенклатура, тип-связь с табл. Номенклатура) из другого поля (Тарифы, тип-связь с табл. Тарифы). Подробности ниже...

В данной задаче задействованы следующие таблицы и поля:

  • Контрагенты

    • Наименование

  • Номенклатура

    • Наименование

  • Договора

    • КОНТРАГЕНТ (связь - Наименование.Контрагенты)

    • НОМЕР

  • Тарифы договора

    • ДОГОВОР (связь - Номер.Договора)

    • НОМЕНКЛАТУРА (связь - Наименование.Номенклатура)

    • ТАРИФ

  • Поставки

    • ПОСТАВЩИК (связь - Наименование.Контрагенты)

    • НАИМЕНОВАНИЕ ТОВАРА (связь - Наименование.Номенклатура)

    • ЦЕНА

  • Позиции заказа

    • ПОКУПАТЕЛЬ (связь - Наименование.Контрагенты)

    • ДОГОВОР (связь - Номер.Договора с фильтром по Покупателю)

    • ТАРИФЫ (связь - Тариф.Тарифы с фильтром по Договору)

    • НОМЕНКЛАТУРА (связь - Наименование.Номенклатура с фильтром по Тарифу)

    • ПОСТАВЩИК (связь - Наименование.Контрагенты с фильтром по Номенклатуре)

Вот с полем Номенклатура у нас проблема. Его отбор должен происходить не из всего списка Номенклатуры, а только той что присутствует в Тарифах по выбранному Договору.

Первое решение, которое приходит на ум — это фильтр поля. Но фильтра по полю Тариф в поле Номенклатура не возникает. Может, что-то неправильно делаем? Но, по логике, похоже, оно там и не сможет возникнуть...

Второе решение — это заполнение поля при помощи вычисления PHP. Однако, выполнение вычисления на изменение поля требует сохранения, но нам нужно ещё заполнять остальные поля таблицы Позиции заказа и простое сохранение неудобно для пользователя. Если бы можно было повесить на изменение поля “ТАРИФЫ.Позиции заказа” вычисление на изменение поля “НОМЕНКЛАТУРА.Позиции заказа”, а затем сохранение записи и открытие её снова в режиме редактирования - это было бы в какой-то степени решением вопроса.

Подскажите, может есть ещё какое-то третье решение?

Заранее всем, кто откликнется, спасибо!

#2 CbCoder

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

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

Отправлено 19 Сентябрь 2016 - 16:52

Во-первых, принято писать не "Наименование.Контрагенты", а наоборот - "Контрагенты.Наименование" (Таблица.Поле). Так в том числе в настройках поля связи отражено.

Во-вторых, вы путаете направление фильтра. Можно отфильтровать Тарифы по Номенклатуре (т.к. последнее там в виде поля связи, как и в случае с Договорами), но не наоборот. Более того, наоборот нет никакого смысла фильтровать, т.к. там однозначное соответствие Номенклатуры Тарифу. Тут не фильтрация должна быть, а автоматическое заполнение поля вычислением. И при этом естественно скрыть редактирование этого поля пользователем, т.к. оно теряет смысл.

$line['НОМЕНКЛАТУРА'] = $line['ТАРИФЫ']['НОМЕНКЛАТУРА']['ID'];


#3 AMudroff

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

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

Отправлено 20 Сентябрь 2016 - 10:25

Данное выражение $line['НОМЕНКЛАТУРА'] = $line['ТАРИФЫ']['НОМЕНКЛАТУРА']['ID']; решает конечно вопрос заполнения поля, однако не решает вопрос с последующим заполнением других полей этой записи, так как срабатывает на кнопку "Сохранить". Автоматически же нажатие кнопки "Сохранить" можно сделать в JavaScript, но в нём нельзя присвоить значение полю связи из другого поля. Может ли JavaScript запустить вычисление? Если может, то как?

#4 CbCoder

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

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

Отправлено 20 Сентябрь 2016 - 11:17

Цитата

решает конечно вопрос заполнения поля, однако не решает вопрос с последующим заполнением других полей этой записи, так как срабатывает на кнопку "Сохранить". Автоматически же нажатие кнопки "Сохранить" можно сделать в JavaScript, но в нём нельзя присвоить значение полю связи из другого поля.

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

P.S. В первом варианте сообщения (возможно оно пришло к вам на почту) я написал что "последующее заполнение" не нужно, пользователь просто заполняет все поля по порядку (кроме скрытого поля Номенклатуры), жмет сам на Сохранить и видит конечный результат, но затем увидел что заполнение Поставщика завязано фильтром на Номенклатуре. Так что автоматическое сохранение через JS по всей видимости все таки необходимо.

#5 AMudroff

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

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

Отправлено 20 Сентябрь 2016 - 13:00

Спасибо, разобрался.





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

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