Доработка ABC-шаблона BrowseSelectButton

Программы на Clarion, шаблоны, библиотеки и пр.

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1379
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Доработка ABC-шаблона BrowseSelectButton

Сообщение RaFaeL »

Игорь Столяров писал(а): 24 Июль 2023, 10:19 Нужен этот список или не нужен - он каждый раз загружается при открытии карточки.
Не загружается, у нас хитрые динамические броузы на основе Dynalib, в которые информация прогружается при переходе на закладку. При этом сам броуз как объект в форме, по сути, один. Если типовые ABC использовать, то тупняк, конечно, был бы (он и был, пока не переписали). Тут дело еще в том, что у нас CRM система, где карточка клиента это чуть ли не основной рабочий инструмент менеджера. Журналы вне карточек практически не используются
http://support.monitor-crm.ru/documenta ... .html#s3q5
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7447
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 16 раз
Поблагодарили: 51 раз

Доработка ABC-шаблона BrowseSelectButton

Сообщение Игорь Столяров »

RaFaeL писал(а): 24 Июль 2023, 11:31 Пусть оформляют из карточки клиента
Ну да. Здесь просто вопрос организации бизнес - процесса ...
- Можно открыть журнал, добавить документ, выбрать контрагента и т.д.
- Можно открыть справочник, выбрать контрагента, добавить (для него) документ ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4688
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 10 раз
Поблагодарили: 37 раз

Доработка ABC-шаблона BrowseSelectButton

Сообщение finsoftrz »

Игорь Столяров писал(а): 24 Июль 2023, 12:05
RaFaeL писал(а): 24 Июль 2023, 11:31 Пусть оформляют из карточки клиента
Ну да. Здесь просто вопрос организации бизнес - процесса ...
- Можно открыть журнал, добавить документ, выбрать контрагента и т.д.
- Можно открыть справочник, выбрать контрагента, добавить (для него) документ ...
У нас при добавлении накладной в журнале сразу открывается список контрагентов, документ создаётся после выбора. Экономится время.

Менеджеры сами не оформляют документы, этим занимаются операторы (торговый отдел). Менеджеры продажники чаще в полях, а не в офисе. Они пользуются специальными отчетами по работе с закрепленными клиентами. Аналогично и закупщики. Им, конечно, иногда надо бывает посмотреть информацию о контрагенте, но для этого не надо открывать форму справочника, то что обычно нужно, отображается в колонке броуза. И им нужны не просто документы по контрагенту. Обычно работа строится от общего к частному. Например, вывели отчёт шахматку продаж по покупателям и периодам (возможно, с какими-то заданными ограничениями - по региону, кто появился, кто пропал, кто много или мало покупал и тп), щелкнули по строке с покупателем, открывается детализация по отгруженным товарам, щёлкнул по кнопке Карточка (у нас понятие Карточка другое, это отчёт, а не форма справочника) , открывается карточка контрагента, в которой все документы по этому контрагенту в хронологическом порядке с сальдовкой после каждого, щёлкнул по строке, открывается документ.
Торговый отдел сидит обычно в журналах. Им там обычно не по конкретному контрагенту информация нужна, а в других разрезах.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7447
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 16 раз
Поблагодарили: 51 раз

Доработка ABC-шаблона BrowseSelectButton

Сообщение Игорь Столяров »

finsoftrz писал(а): 24 Июль 2023, 13:35 документ создаётся после выбора. Экономится время.
Тоже вариант. Но интересно, что штатные шаблоны предлагают аналогичное решение в обратном порядке.
Т.е. при добавлении сразу открывается карточка и пользователь может при заполнении полей в т.ч. и выбрать нужное поле из списка.
Но если при сохранении карточки LookupField Required не заполнено (выбор не сделан) - автоматически откроется список для выбора.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4688
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 10 раз
Поблагодарили: 37 раз

Доработка ABC-шаблона BrowseSelectButton

Сообщение finsoftrz »

Игорь Столяров писал(а): 24 Июль 2023, 15:16
finsoftrz писал(а): 24 Июль 2023, 13:35 документ создаётся после выбора. Экономится время.
Тоже вариант. Но интересно, что штатные шаблоны предлагают аналогичное решение в обратном порядке.
Т.е. при добавлении сразу открывается карточка и пользователь может при заполнении полей в т.ч. и выбрать нужное поле из списка.
Но если при сохранении карточки LookupField Required не заполнено (выбор не сделан) - автоматически откроется список для выбора.
Дело не в шаблонах. Просто в форме документа в какой-то точке вставки при добавлении записей вставляется вызов справочника контрагентов для выбора. Если не выбрали, то завершаем возвращаемся из формы, не добавляя записи.

Кстати, идея с передачей в форму параметра оказалась интересной. Можно сделать необязательный string параметр с идентификатором записи и открывать форму в отдельном потоке (если этот параметр передается). Поясню, когда может пригодиться. У меня на колонках броузов навешано открытие формы ассоциированного справочника в режиме только чтение (Shift+MouseLeft). Аналогично в окнах в контролах для выбора записи из справочника (Shift+F4). Это не всегда удобно, так как бывает потребность не просто посмотреть, а изменить информацию в справочнике. Можно немного подрихтовать шаблоны и сделать возможность открытия справочников на редактирование в отдельном потоке. Не для всех, конечно, а тех, где есть потребность - контрагенты, товары, сотрудники. Тогда получается и удобно (не надо лишних телодвижений), и без потенциальных конфликтов с окнами в текущем потоке. Единственное, могут возникнуть некоторые телодвижения в настройке прав доступа, хотя обычно они и так прописываются.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7447
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 16 раз
Поблагодарили: 51 раз

Доработка ABC-шаблона BrowseSelectButton

Сообщение Игорь Столяров »

finsoftrz писал(а): 24 Июль 2023, 15:50 Единственное,
Подскажу и второе. При открытии карточек в отдельном потоке - нужно будет в них передавать ID родительского потока,
что бы при закрытии - отправить в этот поток событие на обновление списка. Не проблема, но рабочий вопрос.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4688
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 10 раз
Поблагодарили: 37 раз

Доработка ABC-шаблона BrowseSelectButton

Сообщение finsoftrz »

Игорь Столяров писал(а): 24 Июль 2023, 16:10
finsoftrz писал(а): 24 Июль 2023, 15:50 Единственное,
Подскажу и второе. При открытии карточек в отдельном потоке - нужно будет в них передавать ID родительского потока,
что бы при закрытии - отправить в этот поток событие на обновление списка. Не проблема, но рабочий вопрос.
Зачем? При возврате фокуса в исходное окно записи броуза и так обновляются. В контролах для выбора (в форме), в принципе, тоже можно обновлять при получении фокуса. Я с этим не заморачиваюсь, редко коллизии возникают и их можно объяснить кэшированием. Хотя обновлять выглядит корректнее. У Вас, кстати, глянул, где обновляются, где не обновляются. :-) Да, тут еще покрутил, у меня можно и без параметра в прототипе формы обойтись, есть механизм передачи между потоками через глобальную очередь. Просто в шаблоне флажок добавить "Открывать в отдельном потоке".
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7447
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 16 раз
Поблагодарили: 51 раз

Доработка ABC-шаблона BrowseSelectButton

Сообщение Игорь Столяров »

finsoftrz писал(а): 24 Июль 2023, 16:50 При возврате фокуса в исходное окно записи броуза и так обновляются.
Если при получении фокуса в окно идёт обновление списков - тогда конечно дополнительное обновление по событию не нужно. :)
Но потребуется дополнительный фильтр в списке, т.к. при простом переключении с карточки на список - будет отображаться
добавляемая запись, она ведь уже физически добавлена в список даже без завершения карточки ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4688
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 10 раз
Поблагодарили: 37 раз

Доработка ABC-шаблона BrowseSelectButton

Сообщение finsoftrz »

Игорь Столяров писал(а): 24 Июль 2023, 17:00 [Но потребуется дополнительный фильтр в списке, т.к. при простом переключении с карточки на список - будет отображаться
добавляемая запись, она ведь уже физически добавлена в список даже без завершения карточки ...
Не понял. Мы про изменение записи в отдельном потоке обсуждаем.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7447
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 16 раз
Поблагодарили: 51 раз

Доработка ABC-шаблона BrowseSelectButton

Сообщение Игорь Столяров »

finsoftrz писал(а): 24 Июль 2023, 17:16 Мы про изменение записи в отдельном потоке обсуждаем.
Да. И получается, что одна таблица открыта в двух потоках: BROWSE и FORM.

Когда в отдельном потоке мы откроем FORM в режиме InsertRecord - в таблицу будет добавлена пустая запись.
При переключении на поток с BROWSE произойдёт обновление списка по Event:GainFocus и в списке появится эта пустая запись.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4688
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 10 раз
Поблагодарили: 37 раз

Доработка ABC-шаблона BrowseSelectButton

Сообщение finsoftrz »

Игорь Столяров писал(а): 24 Июль 2023, 17:30
finsoftrz писал(а): 24 Июль 2023, 17:16 Мы про изменение записи в отдельном потоке обсуждаем.
Да. И получается, что одна таблица открыта в двух потоках: BROWSE и FORM.

Когда в отдельном потоке мы откроем FORM в режиме InsertRecord - в таблицу будет добавлена пустая запись.
При переключении на поток с BROWSE произойдёт обновление списка по Event:GainFocus и в списке появится эта пустая запись.
Обсуждения только про ChangeRecord. Добавлять в отдельном потоке потребности нет.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7447
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 16 раз
Поблагодарили: 51 раз

Доработка ABC-шаблона BrowseSelectButton

Сообщение Игорь Столяров »

finsoftrz писал(а): 24 Июль 2023, 17:41 Обсуждения только про ChangeRecord.
Я понял. У всех обстоятельства и особый случай. :)
Понятное и универсальное решение нафиг никому не нужно. ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4688
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 10 раз
Поблагодарили: 37 раз

Доработка ABC-шаблона BrowseSelectButton

Сообщение finsoftrz »

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

Кстати, у меня не создаются пустые записи, всегда сразу заполняются необходимые поля. В рассмотренном примере с отгрузочной накладной, вначале запрашивается контрагент, при создании документа он там уже присутствует, а кроме него фирма, склад и т.п. по соответствующим правилам.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7447
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 16 раз
Поблагодарили: 51 раз

Доработка ABC-шаблона BrowseSelectButton

Сообщение Игорь Столяров »

finsoftrz писал(а): 24 Июль 2023, 20:36 Понятное и универсальное решение это как?
Наверно, если мы делаем операции с записью в потоке - то делаем их все.
Безусловно, многое зависит от применяемой бизнес-модели, да и просто сложившейся практики работы. :)
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 5025
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 22 раза

Доработка ABC-шаблона BrowseSelectButton

Сообщение kreator »

Игорь Столяров писал(а): 24 Июль 2023, 17:00
finsoftrz писал(а): 24 Июль 2023, 16:50 При возврате фокуса в исходное окно записи броуза и так обновляются.
Если при получении фокуса в окно идёт обновление списков - тогда конечно дополнительное обновление по событию не нужно. :)
Но потребуется дополнительный фильтр в списке, т.к. при простом переключении с карточки на список - будет отображаться
добавляемая запись, она ведь уже физически добавлена в список даже без завершения карточки ...
Нет. Раньше это была некая настройка окна. Сейчас (во всяком случае в ABC) это отключено. И я уже забыл где эта настройка. Зачем обновлять окно при получении фокуса. Всё время дёргать сервер, напрягать сеть?
We are hard at work… for you. :)
Ответить