|
v7: Отбор в общем журнале документов по строковому реквизиту и "линейка прокрутки" ↓ (Волшебник 18.02.2024 22:37) |
☑ | ||
---|---|---|---|---|
0
MWWRuza
17.02.24
✎
23:49
|
Добрый вечер!
Одна клиентка пожаловалась, что ей нехватает отбора в журнале сразу по двум видам отбора - "Склад" и "Вид документа". Сначала сказал - "А низяяя... Семерка так не умеет, отбор работает только по одному критерию :-( " А потом подумал, а почему-бы и нет??? Хотелка в принципе вполне разумная, и если платформа этого не умеет, то почему-бы ее не обмануть? В общем, не стал сильно мудрить, создал общий реквизит строковый, в который пихаю при записи доков код справочника "Склады" и "Вид документа", добивая строку пробелами до длины этого общего реквизита(иначе не отбирает). В принципе - все работает, и даже очень не плохо. Но!!! Словил странный глюк - почему-то при "взятии" мышкой за движок линейки прокрутки списка журнала, с отбором происходит что-то непонятное, все документы "исчезают", остается какой-то один, без имени, типа и т.п., только номер, дата/время... И из этого состояния вывести уже никак нельзя - ни стрелками прокрутки, ни стрелками клавиатуры, ни колесом мышки, ни чем-то другим... "Вернуть все обратно" можно только отключив отбор, или установив его по любому другому критерию, после этого за движок линейки прокрутки можно опять "таскать" как хочешь, ничего не глючит... Вот видео, как это выглядит в реале: https://cloud.mail.ru/public/hkTp/6BingXR2Y Что за хрень, не могу понять... Ничего особенного в этой форме не делаю, никаких поцедур функций через ВК в ней нет... При старте системы грузится ФормЕкс(много где использую, но в этой форме точно нет), но, не думаю, что он как-то может влиять... Толкните в нужную сторону, куда хоть копать... PS Только пожалуйста не надо флуда по типу "переходите на восьмерку, там это штатно есть"... PSS Нет, ФормЕкс тут точно ни при чем, попробовал отключить его загрузку, ничего в поведении этого журнала не меняется. |
|||
1
Ёпрст
18.02.24
✎
00:13
|
(0)
[:]\\\\\||||||||||//////[:] Ибо нефик пихать в индексируемое поле строку немерянного размера. Если очень нннадо, то справочник, хотя бы. А так, табличное поле решает все эти проблемы. И таи будет любой отбор ро любым реквизитам и их комбинациям. |
|||
2
MWWRuza
18.02.24
✎
00:34
|
(1) Да, все так :-)
Подвела "доброта душевная" :-) типа, не жалко, да на, 99 символов :-) Уменьшил до 50 - и все заработало, глюк прошел, все идеально работает :-) А табличное поле, конечно лучше однозначно, но, лень все переделывать, так быстро и беззатратно это не прокатит... |
|||
3
vicof
18.02.24
✎
00:43
|
Может, все-таки на восьмерку?)))
|
|||
4
Ёпрст
18.02.24
✎
00:48
|
(2) нафига 50? Достаточно 13. Вид 4 и склад 9.
|
|||
5
Ёпрст
18.02.24
✎
00:48
|
Пихать идентификаторы
|
|||
6
SleepyHead
18.02.24
✎
08:06
|
(0) Сделай дополнительный справочник, у которого два реквизита - склад и вид документа. И графу отбора по этому справочнику.
|
|||
7
MarySue
18.02.24
✎
08:31
|
(4) +100
(6) -1 это один из наиболее упоротых способов решения |
|||
8
Калиостро
18.02.24
✎
09:12
|
(7) Когда-то совсем давно я делал еще более упоротый.
Журнал документов подменял справочником, причем многоуровневым. При записи документа создавался и записывался соответствующий элемент справочника со ссылкой на документ. И пользователь работал не с журналом, а со справочником. |
|||
9
АгентБезопасной Нацио
18.02.24
✎
09:43
|
(2) переход на ПоставщикДанных.Журнал почти беззатратен
|
|||
10
Aleksey
18.02.24
✎
10:36
|
(8) Это называется типовая 8-ка, в частности УТ-ка и ей подобное
Есть справочник "Ключи реестра документов" и РС "реестр документов". И в журнале идет работа не с журналом, а с записями реестра. Соответственно если нет записи в реестре, то и в журнале документ "не видно" |
|||
11
MWWRuza
18.02.24
✎
11:19
|
(9) Да, согласен. Тем более, где-то на ИнфоСтарте попадалось готовое решение такого журнала. Но... Не готов пока.
(2) Как в том анекдоте "Отладил? Проверил? Работает? Ну, и ни чего не трогай! (С)" :-) Но, идентификаторы из (4)(5) мне уж очень понравились, переделаю все равно :-) Вот только не понимаю, откуда у справочника "Склады" - длина 9-? От него можно брать только его код, это длина 5, идентификатор там не нужен, он всегда одного вида. Тогда общая длина строкового реквизита отбора будет всего 9... Или я чего-то упустил? |
|||
12
Ёпрст
18.02.24
✎
12:22
|
(11) поменяют код справочника - твоя работа коту под хвост.
Идентификатор однозначно определяет элемент справочника. |
|||
13
SleepyHead
18.02.24
✎
13:00
|
(7) Вы работаете, чтобы другие тру-программисты оценили ваш код, или чтобы пользователям было удобно выбирать аналитику и для него это выглядело прозрачно и наглядно?
|
|||
14
SleepyHead
18.02.24
✎
13:01
|
(12) А после выгрузки-загрузки данных он превращается в тыкву. Так что кто бы там говорил об упоротости...
|
|||
15
MWWRuza
18.02.24
✎
14:55
|
(12) Понятно...
Очень маловероятно, что код будут менять, наименование - еще могут. Но, пусть будет идентификатор, так правильнее, потому-как - "а вдруг?" :-) (14) Это да. Но, не смертельно - после выгрузки/загрузки, если таковое будет, обработкой переписать строку отбора на новую, с заменой ИД. Типа - было "1234" а стало "4321". Естественно, только для склада, конкретного значения, и ИД для ВидаДокумента. Значения ссылки самих доков, мы тут не поймаем, но они нам и не нужны в рамках задачи(да их там и нет, пусть меняются, нам они не интересны). В варианте из (6) такого не будет. Но, он сложнее(переделок уже сделанного больше). |
|||
16
Djelf
18.02.24
✎
17:18
|
Периодически недоумеваю (привык уже, но как-так...) - Зачем в (суперкрутой) 8ке нужны Журналы документов, если они там делают такие костыли как "Ключи реестра документов" и РС "реестр документов".
Если Журналы в 8ке настолько убогие, что приходится костылить на уровне Справочников и Регистров, то почему разработчики прикладного ПО не обратятся к разработчикам платформы с описанием проблемы? Или у разработчиков платформы уши воском забиты и они не слышат/не понимают проблем (разработчиков ПО)? Может, что-то в консерватории подправить? (с)Жванецкий |
|||
17
MWWRuza
18.02.24
✎
16:43
|
(16) Там вообще много "чудес" :-(
Вопрос - как из списка возможных значений для отбора(штатного, по кнопочке из панели инструментов), убрать свой добавленный отбор по строке, как не имеющий смысла? Эту строку "пешком" все равно никто ввести не сможет, поэтому, хорошо бы если бы она не отображалась... Метод ВидыОтбора(), по идее должен устанавливать доступные виды отбора. Но, для этого, их нужно передать строкой через запятые... Писать руками - влом... Возвращащать этот метод должен строку видов отбора на момент до исполнения метода. Можно был-бы удалить из этой строки свой отбор, и выполнить его опять, с передачей этой "откорректированной строки"... Но, нет... Он возвращает - ВидыОтбора() = "". в параметр тоже пустая строка возвращается(точнее, он не изменяется). Как это решить? Неужели только руками писать строку доступных видов отбора, перечисляя все кроме одного своего, который нужно выкинуть? Но, их там "овер дофига" :-( |
|||
18
MWWRuza
18.02.24
✎
17:00
|
Ёпрст, а можно обновить ссылку из сообщения 6, темы: v7 Перехват глобального события ПриЗаписи() или ОбработкаПроведения(), а то она протухла за давностью лет...
|
|||
19
Ёпрст
18.02.24
✎
17:26
|
||||
20
mishaPH
18.02.24
✎
17:35
|
(0) по скольки угодно
1. делаем прямой запрос к скулю по любому набору параметров. 2. полученный список элементов уже устанавливаем в отбор списком |
|||
21
mishaPH
18.02.24
✎
17:35
|
работает быстро
|
|||
22
MWWRuza
18.02.24
✎
18:12
|
(20) к скулю по любому набору параметров
База DBF и другого не будет. (19) Спасибо, буду разбираться... |
|||
23
mishaPH
18.02.24
✎
18:18
|
(22) а кто сказал, что 1с++ и прямые запросы не работают на дбф
|
|||
24
mishaPH
18.02.24
✎
18:20
|
тут главное принцип - получить набор элементов по своим параметрам быстро.
еще и "социальный" инжиниринг тут можно задействовать. Например когда-то делал для работников пр-ва запоминание продукции которую они персонально выпускают или их бригада. И вуаля подбор чего-то где-то сразу сокращался |
|||
25
Ёпрст
18.02.24
✎
18:30
|
(22) и че ? Даже поставщикданных работает на дбф
Да и на дбф, есть выбор, или 1sqlite или vfpoledb |
|||
26
MWWRuza
18.02.24
✎
19:23
|
(19) В принципе - работает перехват, по крайней мере интерактивные события записи перехватываются, не нужно в 100500 документов в процедуру Призаписи() прописывать действие формирования строки отбора и установку ее в реквизит документа. В программные процедуры формирования доков(это обработки обмена с кассой, ЕГАИС, ЭДО) допишу, не проблема, там их не очень много, около десятка.
Но, чего-то в этой обработке не хватает(при этом не мешает ей работать :-)), какой-то функции вирт(): ![]() при проверке синтаксиса ругается, но работает... Что это за функция, что она должна делать? |
|||
27
Злопчинский
18.02.24
✎
19:56
|
Вирт() вроде прос о контекст возвращает
Типа глВернутьКонтекст . Меня всегда о пугивало от использования всяких классов какие-то непонятные Сам() или Я сам() |
|||
28
MWWRuza
18.02.24
✎
20:13
|
(27) Меня всегда о пугивало от использования всяких классов
Ты знаешь, меня тоже... Но, тут "нужда заставляет", иначе нужно в каждый док прописывать вызов функции формирования строки отбора и присвоение ее реквизиту дока. Тут, вроде работает, по крайней мере для интерактивно записываемых доков. Не понятно только как погасить ошибку при проверке синтаксиса... Пробовал вместо вирт() - "" - бесполезно, создавал пустую функцию вирт() тоже не дает результатов, ошибки сыпет при выполнении и не перехватывает ничего. В оригинале, при выполнении ошибок нет, и событие перехватывается, ошибки только при проверке синтаксиса... |
|||
29
MWWRuza
18.02.24
✎
20:22
|
(27) Хм... Спасибо за идею, так работает и ошибок не пишет:
Перехватчик.ПерехватитьСобытияГК(КонтФормы,глВзятьКонтекст(Контекст)); Я так понимаю, "КонтФормы" - контекст документа, событие которого мы перехватываем, а "Контекст" - контекст самой обработки, где все это безобразие размещается :-) |
|||
30
Ёпрст
18.02.24
✎
21:19
|
(26) вирт() - возвращает контекст базового класса
|
|||
31
Ёпрст
18.02.24
✎
21:19
|
не надо ее на глВзятьКонтекст заменять
|
|||
32
Ёпрст
18.02.24
✎
21:21
|
||||
33
Builder
18.02.24
✎
23:32
|
(20) А есть пример для журнала с отборами для SQL базы? Давно хочу сделать, но все времени не хватает разобраться....
|
|||
34
Ёпрст
18.02.24
✎
23:42
|
(33) как грязи, например,
https://www.1cpp.ru/forum/YaBB.pl?num=1273512019 |
|||
35
MWWRuza
18.02.24
✎
23:48
|
(32) Спасибо, все получилось, работает как часы :-)
Вообще, конечно странный подход :-) Функции, которые не нужны, так, как и без них все работает, но, проверка синтаксиса не проходит. И для этого в ГМ просто функции-пустышки, начало-конец без содержимого, не несущие никакого функционала, только для того, что-бы проверка синтаксиса проходила :-))) Почему нельзя было сделать параметр "не обязательным", что-бы его просто пропускать, не понятно. |
|||
36
Злопчинский
19.02.24
✎
02:53
|
(35) это бляха-муха ООП такое... наверное...
|
|||
37
Волшебник
19.02.24
✎
10:10
|
Извращенцы
|
|||
38
MWWRuza
19.02.24
✎
12:06
|
Елки палки... А отладчик то в перехваченное событие не попадает... Как понять, что он там делает?
(он перехватывает запись всего подряд, не только документов, соответственно не дает справочники сохранять с ошибками)... Выносить функцию определения типа контекста в ГМ - ? |
|||
39
MWWRuza
19.02.24
✎
12:34
|
Сделал функцию определения вида контекста в ГМ, теперь все работает.
Просто на будущее надо будет понимать, что отладчик "туда" не попадает, и ничего "лишнего" там писать не стоит, проще выносить эти процедуры/функции в ГМ, иначе не отладить... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |