powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
25 сообщений из 136, страница 1 из 6
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914121
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вход:
В системе имеются:
- некий перечень организаций, с которыми мы имели или имеем сношения (например, "Контрагенты");
- перечень договоров поставки контрагентам с признаком действия на текущий момент.
- некие формы ввода документов (например, "Создание заявки на отпуск товара клиенту", "Создание именной рекламы бывшему клиенту");
- обе формы в заголовке содержат реквизит "Контрагент" (т.е. клиент/бывший клиент);
- в заявке нужно выбирать только текущих клиентов (у которых есть действующий договор);
- в рекламе нужно выбирать только клиентов, у которых нет действующего договора.

Задача: спроектировать в системе возможность настройки удобного выбора клиента в зависимости от формы.
Условие: настройка хранится в реляционной СУБД.
Формат решения: диаграмма E/R.


Вариант решения №1 на рисунке (2-ой дан :)

Комментарии, предложения?
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914139
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛой- в заявке нужно выбирать только текущих клиентов (у которых есть действующий договор);
- в рекламе нужно выбирать только клиентов, у которых нет действующего договора.
Анатолий, а в чем сложность в первом случае выбирать контрагентов со значением в каком-то поле 1, а во втором - 0? Т.е. в запрос списка клиентов передавать параметром статус клиентов, в зависимости от того, в каком документе этот запрос вызывается.
Или есть какие-то скрытые особенности?
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914151
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmАнатоЛой- в заявке нужно выбирать только текущих клиентов (у которых есть действующий договор);
- в рекламе нужно выбирать только клиентов, у которых нет действующего договора.
Анатолий, а в чем сложность в первом случае выбирать контрагентов со значением в каком-то поле 1, а во втором - 0? Т.е. в запрос списка клиентов передавать параметром статус клиентов, в зависимости от того, в каком документе этот запрос вызывается.
Или есть какие-то скрытые особенности?

"Спасибо за вопрос" (с) набившие оскомину знатоки правильного диалога.

В предложенном решении №1 как раз явно присутствует недостаток: не выполняются эти самые условия.

Вход задачи- в заявке нужно выбирать только текущих клиентов (у которых есть действующий договор);
- в рекламе нужно выбирать только клиентов, у которых нет действующего договора.


Предлагаю уточнение к варианту №1 (вариант №2) (см. рисунок, 3-ий дан :).

Выгоды по сравнению с "передавать параметром статус клиентов" следующие:
- имеем "русскоговорящее название" критерия отбора данных;
- имеем учёт реквизитов, в формах которых используют тот или иной алгоритм отбора;
- не привязываемся к текущему способу получения/хранения реквизита "имеет действующий договор".

Комментарии/предложения принимаются.
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914178
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У варианта №2 есть важный момент: если необходимые критерии можно реализовать на уровне SQL, то "Алгоритм отбора" - это обычные предикаты WHERE к
Код: sql
1.
SELECT * FROM "Перечень" List


.
Например:
"is_client = 0"
или
"OrgIsClient(id_organization, TODAY) = 0",
или
"(
Код: sql
1.
SELECT count(*) FROM Contracts WHERE id_organization = List.id_organization AND NOT Contracts.IsClosed

) > 0".
Т.е. есть возможность использовать "SQL-скрипты" без подключения:
- интерпретатора скриптов на языке ООП;
- впиливания в сервер приложений case/switch, который в зависимости от "названия" алгоритма будет вызывать некий метод;
- впиливания в сервер приложений динамического вызова функции по названию и т.п.
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914182
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Недостаток варианта №2 - "безусловные" критерии. Как показано в примерах-коментариях, критерии работают без входных данных...
Ждите варианта №3... :)
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914199
dma_caviar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛойНедостаток варианта №2 - "безусловные" критерии. Как показано в примерах-коментариях, критерии работают без входных данных...
А почему бы в них не передать входные данные?
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914213
dma_caviar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dma_caviarАнатоЛойНедостаток варианта №2 - "безусловные" критерии. Как показано в примерах-коментариях, критерии работают без входных данных...
А почему бы в них не передать входные данные?
Например вот так как на скриншоте ниже. В данном примере есть общий справочник Сотрудники, в нем есть поле OfficeID. Мы хотим отфильтровать сотрудников только определенного офиса (пока не рассматриваем какого именно, это может быть "текущий" офис или параметр прибинденный к полю документа в котором и лежит собственно поле "Курьер").
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914214
dma_caviar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dma_caviar,

Но вообще-то это жутко фиговый подход. Какие-то обрывистые sql запросы. Совсем не очевидно с первого взгляда что тут происходит. Нужно лезть в скрипт справочника Сотрудников и догонять смысл (хотя можно визуально подсвечивать). А ведь платформы для того и создаются чтобы удешевлять разработку и повышать управляемость проектов.
Я хочу у себя эту фичу прикрыть. Гораздо лучше унаследовать от Сотрудников еще один справочник, например "Сотрудники текущего офиса" или "Сотрудники", но с фильтрацией по офису, куда необходимо передавать обязательный параметр "Офис".
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914225
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dma_caviarНо вообще-то это жутко фиговый подход. Какие-то обрывистые sql запросы. Совсем не очевидно с первого взгляда что тут происходит.
Хотели настраиваемую систему, а получили плохо управляемые метаданные.
Куски кода, разбросанные по интерфейсу и без IDE для компиляции/поиска ошибок/рефакторинга...

Предлагаю вариант №3 на рисунке (уже дан на 6-ой тянет :)...

Сохраняем логику в реляционном виде: и совсем не проблема собрать запросом всё необходимое для анализа в кучу.
И куча эта будет анализируема ровно настолько, насколько была декомпозирована изначально... :)

Вариант №2:
входные параметры + использование в качестве значений параметров:
- констант,
- констант из перечней,
- переменных из текущих значений в форме.

Комментарии/предложения/замечания/апплодисменты? :)
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914230
dma_caviar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛойСохраняем логику в реляционном виде: и совсем не проблема собрать запросом всё необходимое для анализа в кучу.
И куча эта будет анализируема ровно настолько, насколько была декомпозирована изначально... :)
Вот я как раз это имел в виду
авторхотя можно визуально подсвечивать

Это можно и к варианту 2 применить.
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914231
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dma_caviarГораздо лучше унаследовать от Сотрудников еще один справочник, например "Сотрудники текущего офиса" или "Сотрудники", но с фильтрацией по офису, куда необходимо передавать обязательный параметр "Офис".
1. О! Спасибо, добавлю реквизит "Обязательный" во "Входной параметр критерия"

2.
а) Переименуйте мои "Критерии отбора с фильтрацией" в "Подмножество перечня"
или
б)
1. Архитектуру реализации хранения настроек выберите не РСУБД, а язык ООП.
2. Для каждой сущности/реквизита/связи укажите альтернативу хранения в новой архитектуре
2.1. "Перечень" в "Тип/Класс" Domain Model,
2.2. "Критерии отбора с фильтрацией" в "Подтип/Наследник" Domain Model.
2.3. "Форму" в класс "UI View"
...


Получим "тот же вид сбоку" (с)... :)
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914234
dma_caviar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛой2.3. "Форму" в класс "UI View"
Вот тут не соглашусь. Форма и Представление, это все же разные вещи. Форма это сугубо разметка элементов управления и ничего более. А представление это фактически UI логика.
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914236
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dma_caviarНо вообще-то это жутко фиговый подход. Какие-то обрывистые sql запросы. Совсем не очевидно с первого взгляда что тут происходит. Нужно лезть в скрипт справочника Сотрудников и догонять смысл (хотя можно визуально подсвечивать). А ведь платформы для того и создаются чтобы удешевлять разработку и повышать управляемость проектов.


Очень хочу себя перепроверить.
Если не затруднит, можно примеры проблем в вашей реализации, а я проверю и отпишусь, может ли это "проблема" быть реализаована как "рутинная задача" на моём варианте №3?
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914237
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dma_caviarАнатоЛой2.3. "Форму" в класс "UI View"
Вот тут не соглашусь. Форма и Представление, это все же разные вещи. Форма это сугубо разметка элементов управления и ничего более. А представление это фактически UI логика.
Пардон, я использовал "UI View" из плохого паттерна "батонобросательной 2-х-звенки" :). Да, конечно, же тут "Форма" = "Представление/View", если брать паттерн MVP.
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914240
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛой1. Архитектуру реализации хранения настроек выберите не РСУБД, а язык ООП.
2. Для каждой сущности/реквизита/связи укажите альтернативу хранения в новой архитектуре
2.1. "Перечень" в "Тип/Класс" Domain Model,
2.2. "Критерии отбора с фильтрацией" в "Подтип/Наследник" Domain Model.
2.3. "Форму" в класс "UI View"
...

Получим "тот же вид сбоку" (с)... :)
Т.е. получим вместо "хранения настроек функционала (настройка выбора значения из перечня в реквизит) " в виде "кода реализации настройки...на языке ООП" :).
Мы правильно поняли друг-друга? :).
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914241
dma_caviar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛой,

Собственно основная проблема тут одна, это разрыв sql кода, который будет в рантайме единым скрипитом. Т.е. скрипт вроде как единый, но конфигурится он в двух разных местах.

Например
автор"is_client = 0"
или
"OrgIsClient(id_organization, TODAY) = 0",
Открываем и видим нечто непонятное.

Ну в общем да... согласен, что можно в конфигураторе автоматом считать скрипт загрузки самого справочника, затем взять "is_client = 0", слить их оба и показать настройщику как единый скрипт (при этом можно даже заблокировать редактирование первой части и разрешить только вот эту часть править - "is_client = 0". Есть контролы с подсветкой синтаксиса, позволяющие это делать.
И это, если я правильно понял и есть смысл "Варианта №3".

Я даже было загорелся этой идеей сначала. Но потом прикинул, что все это маскировка проблемы. По идее, если настройщику требуется наложить фильтр на какой-то существующий справочник, значит ему просто не хватает еще одного справочника (точнее выборки на основе этого справочника). К тому же эта выборка может еще где-нибудь понадобится, так уж лучше пусть этот код будет описан в одном месте, например в "Сотрудники текущего офиса", и будет использоваться потом в нескольких местах безо всяких фильтров. В противном случае все эти фильтры придется дублировать.
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914242
dma_caviar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛойАнатоЛой1. Архитектуру реализации хранения настроек выберите не РСУБД, а язык ООП.
2. Для каждой сущности/реквизита/связи укажите альтернативу хранения в новой архитектуре
2.1. "Перечень" в "Тип/Класс" Domain Model,
2.2. "Критерии отбора с фильтрацией" в "Подтип/Наследник" Domain Model.
2.3. "Форму" в класс "UI View"
...

Получим "тот же вид сбоку" (с)... :)
Т.е. получим вместо "хранения настроек функционала (настройка выбора значения из перечня в реквизит) " в виде "кода реализации настройки...на языке ООП" :).
Мы правильно поняли друг-друга? :).
Наверное да)) Хотя разговор получился настолько абстрактным, что я уже слабо догоняю.
Только не понятно зачем все это заменять. Реализация левых частей перечисленных пунктов (архитектура реализации хранения метаданных в СУБД) более гибче, чем правых (язык ООП и т.п.) :))
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914245
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dma_caviarНаверное да)) Хотя разговор получился настолько абстрактным, что я уже слабо догоняю.
Забудь... По-крайней мере, пока... :).
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914274
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dma_caviar,

ты потихоньку ВИПРОС будешь делать :)
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914275
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dma_caviarАнатоЛой,

Собственно основная проблема тут одна, это разрыв sql кода, который будет в рантайме единым скрипитом. Т.е. скрипт вроде как единый, но конфигурится он в двух разных местах.

Например
автор"is_client = 0"
или
"OrgIsClient(id_organization, TODAY) = 0",
Открываем и видим нечто непонятное.

Ну в общем да... согласен, что можно в конфигураторе автоматом считать скрипт загрузки самого справочника, затем взять "is_client = 0", слить их оба и показать настройщику как единый скрипт (при этом можно даже заблокировать редактирование первой части и разрешить только вот эту часть править - "is_client = 0". Есть контролы с подсветкой синтаксиса, позволяющие это делать.
И это, если я правильно понял и есть смысл "Варианта №3".

Это можно сделать как в вариенте №3, так и в варианте №2. "Алгоритм отбора" появился уже в №2.
Смысл вариант №3: есть описание выделенных входных параметров скрипта и описание правил заполенния параметров при вызове "критерия отбора" в рантайме...

dma_caviarЯ даже было загорелся этой идеей сначала. Но потом прикинул, что все это маскировка проблемы. По идее, если настройщику требуется наложить фильтр на какой-то существующий справочник, значит ему просто не хватает еще одного справочника (точнее выборки на основе этого справочника).

Вот же она, эта "выборка" - запись в "Критерии отбора из перечня".
- описываешь один раз (например, "Актуальный клиент");
- алгоритм отбора описываешь один раз (настройщик сам или по чьей-то наводке - всё с наворотами из первой цитаты);
- используешь везде, где требуется "актуальный клиент";
- видишь по связям (FK для РСУБД), где используется;
...

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


Хорошо, если "Текущий офис" и "Отв.сотрудник текущего офиса" в "Заявке на канцтовары" - реквизит заголовка документа.
А если "Офис" и "Отв.сотрудник офиса" в "Бюджете заказа канцтоваров по офисам" - связанные реквизиты в строке документа?

На рисунке вариант №4:
Явно разделены сторона "Форма" с настройками реквизита (слева) и описание перечней и критериев отбора (справа), водораздел между ними: 3 отношения, левые части которых выделены жирным.

Задавайте конкретные вопросы, устану расписывать :( :).
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914277
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914278
dma_caviar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛойХорошо, если "Текущий офис" и "Отв.сотрудник текущего офиса" в "Заявке на канцтовары" - реквизит заголовка документа.
А если "Офис" и "Отв.сотрудник офиса" в "Бюджете заказа канцтоваров по офисам" - связанные реквизиты в строке документа?
В смысле, что делать если нужного поля нет в документе?
Тогда или добавляем это поле в этот документ как "виртуальное поле", ну чисто для наших нужд, т.е. в таблице документа его конечно нет. Или второй вариант - ну что-то же есть в документе, например ID заявки. А справочник тогда может называться "Справочник чего-то там... для заказа канцтоваров" и в нем обязательный параметр "ID заявки на канц. товары".
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914279
dma_caviar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

Во-во)) Макротипы и т.п. Не, у меня свой лисапед)) Я понимаю что в ВИПРОСе даже sql не нужно знать, но я все-таки придерживаюсь золотой середины по уровню сложности конфигуратора - кодить не нужно вообще, но сложные конфигурации можно наваять только зная sql, хотя бы основы.
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914281
dma_caviar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

Кстати вижу, Вы все-таки кнопочки в тулбаре слева сделали?)) Давно хотел предложить, справа как-то не удобно.
...
Рейтинг: 0 / 0
Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
    #38914282
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dma_caviar,

о чем ты?
...
Рейтинг: 0 / 0
25 сообщений из 136, страница 1 из 6
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Выбор данных в значение реквизита из перечня ("справочника") в разных формах ввода
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]