|   |   | 
| 
 | 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 | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |