|
v7: Создание реквизита документа, который будет связан с выпадающим списком. | ☑ | ||
---|---|---|---|---|
0
leonid_gun
16.01.19
✎
01:18
|
Здравствуйте.
ТиС 032. платформа 7.7 027 Есть необходимость создать в форме реквизит документа тип Строка, который будет связан с выпадающим списком, из которого можно выбрать одно значение из многих для этого реквизита, с последующим сохранением этого значения. И при открытии сохраненного документа этот реквизит отображал сохраненное значение. Как можно правильно такое реализовать? Попробовал по подсказке ребят с другого форума(спасибо им!) реквизит с кнопкой выбораю Немного продвинулся с кодом но это работает с реквизитом документа тип Строка Процедура ИзмПрозрачность() СпЗн = СоздатьОбъект("СписокЗначений"); СпЗн.ДобавитьЗначение("прозрачная","прозрачная"); СпЗн.ДобавитьЗначение("непрозрачная","непрозрачная"); Зн = 0; Если СпЗн.ВыбратьЗначение(Зн,"Прозрачность биоматериала",,,1) = 1 Тогда Прозрачность = Зн; КонецЕсли; КонецПроцедуры и далее Процедура ПриНачалеВыбораЗначения(Рекв,ФлагСтандОбр) // предопределенная Если Рекв = "Прозрачность" Тогда ИзмПрозрачность() КонецЕсли; КонецПроцедуры А вот как быть если обрабатываем список для реквизита тип Число, еще и с дробной частью? )) при выборе "педальки" список выводится, но при выборе значения из списка, выпадает экранная цифровая калава, стандартная для цифрового поля ввода с кнопкой. Нужно менять тип на Строку? Но хотелось бы оставить ограничение по разрядности для проверки ввода от руки. |
|||
1
Смотрящий
16.01.19
✎
01:56
|
(0) 1. в ПриНачалеВыбораЗначения(Рекв,ФлагСтандОбр)
ФлагСтандОбр = 0; 2. СпЗн = СоздатьОбъект("СписокЗначений"); убрать7 повесить выпадающий список на форму. задать ему имя СпЗн |
|||
2
Duke1C
16.01.19
✎
10:03
|
+1 Или завести перечисление
|
|||
3
Kigo_Kigo
16.01.19
✎
10:36
|
А если тип значения НеОпределенный и НазначитьТип?
|
|||
4
trdm
16.01.19
✎
10:47
|
(0) > Но хотелось бы оставить ограничение по разрядности для проверки ввода от руки.
Позицию точки проверь. Элементарный парсинг строки. |
|||
5
Ёпрст
16.01.19
✎
11:01
|
(0)
ФлагСтандОбр = 0 ; И выпадать ничего не будет |
|||
6
Birmingem
16.01.19
✎
11:13
|
(0)"А вот как быть если обрабатываем список для реквизита тип Число, еще и с дробной частью?"
Как именно заполняешь список значений? Код покажи. А вообще, ничего сложного. 1. В форме документа создаешь реквизит формы - список (это ты уже сделал) 2. В процедуре ПриОткрытии() заполняешь этот список, чем тебе надо (см.(1)). 3. В процедуре ПриЗаписи() получаешь текущий элемент списка (выбранный пользователем) и присваиваешь его реквизиту документа. |
|||
7
leonid_gun
16.01.19
✎
15:40
|
(6) порядок заполнения списка значений я привел в первом своем посте и в процедуре ПриОткрытии() это и делаю. Все прекрасно работает до момента, когда мне надо так обработать реквизит с типом Число и у которого установлена кнопка выбора в свойствах реквизита на вкладке Дополнительно. При выборе списка "педалькой" можно выбрать значение, но потом появляется экранная цифровая клава и мешает поместить выбор в окно реквизита.
Процедура ИзмУдельныйВес() СпЗн = СоздатьОбъект("СписокЗначений"); СпЗн.ДобавитьЗначение("5,1","5,1"); СпЗн.ДобавитьЗначение("5,5","5,5"); СпЗн.ДобавитьЗначение("6,1","6,1"); СпЗн.ДобавитьЗначение("6,5","6,5"); СпЗн.ДобавитьЗначение("7,0","7,0"); Зн = 0; Если СпЗн.ВыбратьЗначение(Зн,"УдельныйВес биоматериала",,,1) = 1 Тогда УдельныйВес = Зн; //присваиваем результат выюора реквизиту документа КонецЕсли; КонецПроцедуры Здесь уже реквизит УдельныйВес тип Число. Попробую как посоветовал Смотрящий ФлагСтандОбр = 0; , чем убирается стандарный вывод по нажатию на кнопку выбора. |
|||
8
leonid_gun
16.01.19
✎
16:06
|
Вот это
ФлагСтандОбр = 0; в теле предопределенной процедуре как раз и помогло!! Перестала появляться экранная цифровая клава на реквизитах типа Число. То что нужно ))) Всем спасибо!!! |
|||
9
Ёпрст
16.01.19
✎
18:05
|
(7) ёё.. нахрена ты в список строки пихаешь ?
|
|||
10
Birmingem
16.01.19
✎
19:02
|
(7)Ты не понял. Это все выкидывай. Делай так:
1.Открываешь форму документа, меню Вставить-Список (или Поле со списком), и вставляешь этот реквизит формы, на форме куда тебе надо. В свойстве этого вставленного реквизита в Идентификатор пишешь СпЗн. 2. В модуле формы пишешь: Процедура ПриОткрытии() СпЗн.ДобавитьЗначение(5.1,"5,1"); СпЗн.ДобавитьЗначение(5.1,"5,1"); КонецПроцедуры |
|||
11
Birmingem
16.01.19
✎
19:07
|
3.И при записи:
Процедура ПриЗаписи() Если СпЗн.ТекущаяСтрока()>0 Тогда УдельныйВес=СпЗн.ПолучитьЗначение(СпЗн.ТекущаяСтрока()); КонецЕсли; КонецПроцедуры |
|||
12
leonid_gun
16.01.19
✎
23:12
|
Я не понял, зачем мне в ПриОткрытии() добавлять в СписокЗначений варианты? А потом их записвать в ПриЗаписи.. А если у меня таких реквизитов документа например 45 ??? Они имеют все разные варианты значений списка ))) вот фрагмент записи толпы реквизитов документа
Процедура ИзмУретальныеНитки() СпЗн = СоздатьОбъект("СписокЗначений"); СпЗн.ДобавитьЗначение("1,001","1,001"); СпЗн.ДобавитьЗначение("1,010","1,010"); СпЗн.ДобавитьЗначение("1,020","1,020"); СпЗн.ДобавитьЗначение("1,030","1,030"); СпЗн.ДобавитьЗначение("1,040","1,040"); Зн = 0; Если СпЗн.ВыбратьЗначение(Зн,"УретальныеНитки биоматериала",,,1) = 1 Тогда УретальныеНитки = Зн; КонецЕсли; КонецПроцедуры Процедура ИзмУдельныйВес() СпЗн = СоздатьОбъект("СписокЗначений"); СпЗн.ДобавитьЗначение("5,1","5,1"); СпЗн.ДобавитьЗначение("5,5","5,5"); СпЗн.ДобавитьЗначение("6,1","6,1"); СпЗн.ДобавитьЗначение("6,5","6,5"); СпЗн.ДобавитьЗначение("7,0","7,0"); Зн = 0; Если СпЗн.ВыбратьЗначение(Зн,"УдельныйВес биоматериала",,,1) = 1 Тогда УдельныйВес = Зн; КонецЕсли; КонецПроцедуры Процедура ИзмРеакцияPH() СпЗн = СоздатьОбъект("СписокЗначений"); СпЗн.ДобавитьЗначение("1,1","1,1"); СпЗн.ДобавитьЗначение("1,2","1,2"); СпЗн.ДобавитьЗначение("1,3","1,3"); СпЗн.ДобавитьЗначение("1,4","1,4"); СпЗн.ДобавитьЗначение("1,5","1,5"); Зн = 0; Если СпЗн.ВыбратьЗначение(Зн,"РеакцияPH биоматериала",,,1) = 1 Тогда РеакцияPH = Зн; КонецЕсли; КонецПроцедуры ..... и собственно обработка нажатий на "педальки" элементов формы документа Процедура ПриНачалеВыбораЗначения(Рекв,ФлагСтандОбр = 0) ФлагСтандОбр = 0; Если Рекв = "Цвет" Тогда ИзмЦвет() ИначеЕсли Рекв = "Прозрачность" Тогда ИзмПрозрачность() ИначеЕсли Рекв = "УретальныеНитки" Тогда ИзмУретальныеНитки() ИначеЕсли Рекв = "УдельныйВес" Тогда ИзмУдельныйВес() ИначеЕсли Рекв = "РеакцияPH" Тогда ИзмРеакцияPH() ИначеЕсли Рекв = "Белок" Тогда ИзмБелок() ИначеЕсли Рекв = "Сахар" Тогда ИзмСахар() ИначеЕсли Рекв = "Ацетон" Тогда ИзмАцетон() ИначеЕсли Рекв = "РеакцияНаКровь" Тогда ИзмРеакцияНаКровь() ИначеЕсли Рекв = "Билирубин" Тогда ИзмБилирубин() ИначеЕсли Рекв = "УробилиновыеТела" Тогда ИзмУробилиновыеТела() ИначеЕсли Рекв = "ЖелчныеКислоты" Тогда ИзмЖелчныеКислоты() ИначеЕсли Рекв = "Нитриты" Тогда ИзмНитриты() КонецЕсли; КонецПроцедуры |
|||
13
leonid_gun
16.01.19
✎
23:34
|
хотя если реквизит тип Число с дробной частью, тогда число из списка выбирается только его целая часть. А надо, чтобы было полностью и целая м дробная части. Не знаю как это победить не переводя сам реквизит в тип Строка ((
|
|||
14
leonid_gun
16.01.19
✎
23:58
|
Догнал. Надо просто использовать децимальный знак точку, а не запятую в списке значений. Вот тупанул ((
|
|||
15
Duke1C
17.01.19
✎
09:54
|
(12) А-бал-деть...
А завтра показатели твои поменяются, будешь конфу переписывать? |
|||
16
Mikeware
17.01.19
✎
09:58
|
Может, программиста позовёте все-таки?
|
|||
17
Duke1C
17.01.19
✎
10:02
|
+ (15) Эта инфа из документа дальше как будет использоваться?
|
|||
18
Mikeware
17.01.19
✎
10:03
|
(17) рецепт смешивания вычисляться будет...
|
|||
19
leonid_gun
17.01.19
✎
16:27
|
(15) Буду переписывать )
|
|||
20
leonid_gun
17.01.19
✎
16:30
|
(15) Это клинические исследования (анализы в простанородии). А конфа - медицинский центр )) Дальше эти данные будут распечатываться в утвержденной Минздравом форме
|
|||
21
Duke1C
18.01.19
✎
08:16
|
(19) Это реквизиты шапки документа, я так понимаю?
Табличная часть есть у него? |
|||
22
Duke1C
18.01.19
✎
08:19
|
(20) "Дальше эти данные будут распечатываться в утвержденной Минздравом форме" - тупо сам документ, или всё-таки за период с группировками по этим реквизитам?
|
|||
23
Mikeware
18.01.19
✎
08:55
|
(22) да-да-да! "средняя мутность мочи населения и ее корреляция с фазой луны" и "динамика биллирубина в период новогодних праздников"...
|
|||
24
Масянька
18.01.19
✎
08:59
|
(17) (18) Честно - все не читала. Но по этим 2 (двум) постам: тебе нужен справочник и выбор из него.
Список значений используется, когда значения списка стабильны и практически не меняются. |
|||
25
NikVars
18.01.19
✎
09:03
|
(0) ТиС и выпадающий список... Это удобно?! Если раз в день его использовать, то да. Если 1 раз в минуту... Нужно начинать думать заново.
|
|||
26
leonid_gun
18.01.19
✎
23:24
|
(24) Справочник думаю будет лишний, все значения списка постоянны, т.к. утверждены протоколами мед. доков
|
|||
27
leonid_gun
18.01.19
✎
23:34
|
(25) Это конфа переписана с ТиС под медучреждение, под мутки регистратуры, лаборатории, учета и расхода медпрепаратов по калькуляциям сложных услуг, сделанных на основании наборов номенклатуры (товаров). И вот один аспект в этой теме и попросил общество помочь организовать быстрое и с минимумом ошибок заполнение бланка результатов анализа, а конкретней заполнения реквизитов шапки документа из списков значений. Вот пример одного реквизита анализа мочи (простите!) на наличие солей )))
Процедура ИзмСоли() СпЗн = СоздатьОбъект("СписокЗначений"); СпЗн.ДобавитьЗначение("ам.фофсфати +","ам.фофсфаты +"); СпЗн.ДобавитьЗначение("ам.фофсфати ++","ам.фофсфаты ++"); СпЗн.ДобавитьЗначение("ам.фофсфати +++","ам.фофсфаты +++"); СпЗн.ДобавитьЗначение("ам.фофсфати ++++","ам.фофсфаты ++++"); СпЗн.ДобавитьЗначение("кр.сечової к-ти +","кр.мочевой к-ты +"); СпЗн.ДобавитьЗначение("кр.сечової к-ти ++","кр.мочевой к-ты ++"); СпЗн.ДобавитьЗначение("кр.сечової к-ти +++","кр.мочевой к-ты +++"); СпЗн.ДобавитьЗначение("кр.сечової к-ти ++++","кр.мочевой к-ты ++++"); СпЗн.ДобавитьЗначение("кр.сечокислого амонію к-ти +","кр.мочекислого аммония +"); СпЗн.ДобавитьЗначение("кр.сечокислого амонію к-ти ++","кр.мочекислого аммония ++"); СпЗн.ДобавитьЗначение("кр.сечокислого амонію к-ти +++","кр.мочекислого аммония +++"); СпЗн.ДобавитьЗначение("кр.сечокислого амонію к-ти ++++","кр.мочекислого аммония ++++"); СпЗн.ДобавитьЗначение("кр.білірубіну +","кр.билирубина +"); СпЗн.ДобавитьЗначение("кр.білірубіну ++","кр.билирубина ++"); СпЗн.ДобавитьЗначение("оксалатовий пісок +","оксалатовый песок +"); СпЗн.ДобавитьЗначение("оксалатовий пісок ++","оксалатовый песок ++"); СпЗн.ДобавитьЗначение("оксалатовий пісок +++","оксалатовый песок +++"); СпЗн.ДобавитьЗначение("оксалатовий пісок ++++","оксалатовый песок ++++"); СпЗн.ДобавитьЗначение("оксалати +","оксалаты +"); СпЗн.ДобавитьЗначение("оксалати ++","оксалаты ++"); СпЗн.ДобавитьЗначение("оксалати +++","оксалаты +++"); СпЗн.ДобавитьЗначение("оксалати ++++","оксалаты ++++"); СпЗн.ДобавитьЗначение("трипельфосфати +","трипельфосфаты +"); СпЗн.ДобавитьЗначение("трипельфосфати ++","трипельфосфаты ++"); СпЗн.ДобавитьЗначение("трипельфосфати +++","трипельфосфаты +++"); СпЗн.ДобавитьЗначение("трипельфосфати ++++","трипельфосфаты ++++"); СпЗн.ДобавитьЗначение("урати +","ураты +"); СпЗн.ДобавитьЗначение("урати ++","ураты ++"); СпЗн.ДобавитьЗначение("урати +++","ураты +++"); СпЗн.ДобавитьЗначение("урати ++++","ураты ++++"); СпЗн.ДобавитьЗначение("фосфати +","фосфаты +"); СпЗн.ДобавитьЗначение("фосфати ++","фосфаты ++"); СпЗн.ДобавитьЗначение("фосфати +++","фосфаты +++"); СпЗн.ДобавитьЗначение("фосфати ++++","фосфаты ++++"); Зн = 0; Если СпЗн.ВыбратьЗначение(Зн,"Соли биоматериала",,,1) = 1 Тогда Соли = Зн; КонецЕсли; КонецПроцедурыПроцедура ПриНачалеВыбораЗначения(Рекв,ФлагСтандОбр) ФлагСтандОбр = 0; Если Рекв = "Соли " Тогда ИзмСоли() КонецЕсли; КонецПроцедуры Мыслимо вручную вводить это? Наверняка вероятность ошибки высока. А так выбрал и пошел дальше ))) |
|||
28
hhhh
19.01.19
✎
05:22
|
(27) ну как раз все используют справочник, для этого он и нужен. Чего вы со списком значений заморрочились, это маразм.
|
|||
29
Злопчинский
19.01.19
✎
09:54
|
Лучше бы был склероз. Тогда забыли бы что маразм.
|
|||
30
DrZombi
гуру
19.01.19
✎
10:04
|
(0) в 7.7 можно и просто список разместить на форме, без магии от 8.3 УФ :)
|
|||
31
Злопчинский
19.01.19
✎
17:14
|
(30) причем даже список с крыжиками!
|
|||
32
Злопчинский
19.01.19
✎
17:17
|
а если сделать список значений типа
СЗ.ДобавитьЗначение(1,"Первый"); СЗ.ДобавитьЗначение(2,"ПервыйПервый"); СЗ.ДобавитьЗначение(3,"Явторой"); СЗморе = СоздатьОббъект("СписокЗначений"); СЗморе.ДобавитьЗначение("4","ВторойСлышуВас"); СЗморе.ДобавитьЗначение("5","ВэфиреУтенок"); СЗ.ДобавитьЗначение(СЗморе,"Караван"); итд с произвольной вложенностью - то можно штатно без извратом, типовым Формексом получить многоуровневый Выбор глСервис.ВыбратьЗначение(СЗ,....); |
|||
33
ДенисЧ
19.01.19
✎
17:20
|
(32) @можно штатно типовым Формексом!@
Нельзя так шутить. Я чуть со стула не упал... |
|||
34
Злопчинский
19.01.19
✎
17:21
|
а когда делать было нефиг я талмуды писал
http://catalog.mista.ru/public/16973/ - статья, сама обработка http://catalog.mista.ru/public/14837/ для типовой ТиС |
|||
35
Злопчинский
19.01.19
✎
17:23
|
(33) он обновился, кстати, 17 числа
дописал в доках, внизу страницы по ссылке http://www.1cpp.ru/forum/YaBB.pl?num=1189693831/30 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |