Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Создание реквизита документа, который будет связан с выпадающим списком.

v7: Создание реквизита документа, который будет связан с выпадающим списком.
Я
   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
повесить выпадающий список на форму. задать ему имя СпЗн
   Duke1C
 
2 - 16.01.19 - 10:03
+1 Или завести перечисление
   Kigo_Kigo
 
3 - 16.01.19 - 10:36
А если тип значения НеОпределенный и НазначитьТип?
   trdm
 
4 - 16.01.19 - 10:47
(0) > Но хотелось бы оставить ограничение по разрядности для проверки ввода от руки.

Позицию точки проверь. Элементарный парсинг строки.
   Ёпрст
 
5 - 16.01.19 - 11:01
(0)
ФлагСтандОбр = 0 ; И выпадать ничего не будет
   Birmingem
 
6 - 16.01.19 - 11:13
(0)"А вот как быть если обрабатываем список для реквизита тип Число, еще и с дробной частью?"
Как именно заполняешь список значений? Код покажи.

А вообще, ничего сложного.
1. В форме документа создаешь реквизит формы - список (это ты уже сделал)
2. В процедуре ПриОткрытии() заполняешь этот список, чем тебе надо (см.(1)).
3. В процедуре ПриЗаписи() получаешь текущий элемент списка (выбранный пользователем) и присваиваешь его реквизиту документа.
   leonid_gun
 
7 - 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; , чем убирается стандарный вывод по нажатию на кнопку выбора.
   leonid_gun
 
8 - 16.01.19 - 16:06
Вот это 
ФлагСтандОбр = 0;

в теле предопределенной процедуре как раз и помогло!! Перестала появляться экранная цифровая клава на реквизитах типа Число. То что нужно ))) Всем спасибо!!!
   Ёпрст
 
9 - 16.01.19 - 18:05
(7) ёё.. нахрена ты в список строки пихаешь ?
   Birmingem
 
10 - 16.01.19 - 19:02
(7)Ты не понял. Это все выкидывай. Делай так:
1.Открываешь форму документа, меню Вставить-Список (или Поле со списком), и вставляешь этот реквизит формы, на форме куда тебе надо. В свойстве этого вставленного реквизита в Идентификатор пишешь СпЗн.
2. В модуле формы пишешь:
Процедура ПриОткрытии()
    СпЗн.ДобавитьЗначение(5.1,"5,1");
    СпЗн.ДобавитьЗначение(5.1,"5,1");
КонецПроцедуры
 
 Рекламное место пустует
   Birmingem
 
11 - 16.01.19 - 19:07
3.И при записи:
Процедура ПриЗаписи()
    Если СпЗн.ТекущаяСтрока()>0 Тогда
УдельныйВес=СпЗн.ПолучитьЗначение(СпЗн.ТекущаяСтрока());
    КонецЕсли;
КонецПроцедуры
   leonid_gun
 
12 - 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()
       ИначеЕсли Рекв = "Белок" Тогда
         ИзмБелок()
      ИначеЕсли Рекв = "Сахар" Тогда
         ИзмСахар()
    ИначеЕсли Рекв = "Ацетон" Тогда
         ИзмАцетон()
    ИначеЕсли Рекв = "РеакцияНаКровь" Тогда
         ИзмРеакцияНаКровь()
    ИначеЕсли Рекв = "Билирубин" Тогда
         ИзмБилирубин()
    ИначеЕсли Рекв = "УробилиновыеТела" Тогда
         ИзмУробилиновыеТела()
    ИначеЕсли Рекв = "ЖелчныеКислоты" Тогда
         ИзмЖелчныеКислоты()
    ИначеЕсли Рекв = "Нитриты" Тогда
         ИзмНитриты()
    КонецЕсли;
КонецПроцедуры
   leonid_gun
 
13 - 16.01.19 - 23:34
хотя если реквизит тип Число с дробной частью, тогда число из списка выбирается только его целая часть. А надо, чтобы было полностью и целая м дробная части. Не знаю как это победить не переводя сам реквизит в тип Строка ((
   leonid_gun
 
14 - 16.01.19 - 23:58
Догнал. Надо просто использовать децимальный знак точку, а не запятую в списке значений. Вот тупанул ((
   Duke1C
 
15 - 17.01.19 - 09:54
(12) А-бал-деть...
А завтра показатели твои поменяются, будешь конфу переписывать?
   Mikeware
 
16 - 17.01.19 - 09:58
Может, программиста позовёте все-таки?
   Duke1C
 
17 - 17.01.19 - 10:02
+ (15) Эта инфа из документа дальше как будет использоваться?
   Mikeware
 
18 - 17.01.19 - 10:03
(17) рецепт смешивания вычисляться будет...
   leonid_gun
 
19 - 17.01.19 - 16:27
(15) Буду переписывать )
   leonid_gun
 
20 - 17.01.19 - 16:30
(15) Это клинические исследования (анализы в простанородии). А конфа - медицинский центр )) Дальше эти данные будут распечатываться в утвержденной Минздравом форме
   Duke1C
 
21 - 18.01.19 - 08:16
(19) Это реквизиты шапки документа, я так понимаю?
Табличная часть есть у него?
   Duke1C
 
22 - 18.01.19 - 08:19
(20) "Дальше эти данные будут распечатываться в утвержденной Минздравом форме" - тупо сам документ, или всё-таки за период с группировками по этим реквизитам?
   Mikeware
 
23 - 18.01.19 - 08:55
(22) да-да-да! "средняя мутность мочи населения и ее корреляция с фазой луны" и "динамика биллирубина в период новогодних праздников"...
   Масянька
 
24 - 18.01.19 - 08:59
(17) (18) Честно - все не читала. Но по этим 2 (двум) постам: тебе нужен справочник и выбор из него.
Список значений используется, когда значения списка стабильны и практически не меняются.
   NikVars
 
25 - 18.01.19 - 09:03
(0) ТиС и выпадающий список... Это удобно?! Если раз в день его использовать, то да. Если 1 раз в минуту... Нужно начинать думать заново.
   leonid_gun
 
26 - 18.01.19 - 23:24
(24) Справочник думаю будет лишний,  все значения списка постоянны, т.к. утверждены протоколами мед. доков
   leonid_gun
 
27 - 18.01.19 - 23:34
(25) Это конфа переписана с ТиС под медучреждение, под мутки регистратуры, лаборатории, учета и расхода медпрепаратов по калькуляциям сложных услуг, сделанных на основании наборов номенклатуры (товаров). И вот один аспект в этой теме и попросил общество помочь организовать быстрое и с минимумом ошибок заполнение бланка результатов анализа, а конкретней заполнения реквизитов шапки документа из списков значений. Вот пример одного реквизита анализа мочи (простите!) на наличие солей )))
Процедура ИзмСоли()
СпЗн = СоздатьОбъект("СписокЗначений");
    СпЗн.ДобавитьЗначение("ам.фофсфати +","ам.фофсфаты +"); 
    СпЗн.ДобавитьЗначение("ам.фофсфати ++","ам.фофсфаты ++");  
    СпЗн.ДобавитьЗначение("ам.фофсфати +++","ам.фофсфаты +++");  
    СпЗн.ДобавитьЗначение("ам.фофсфати ++++","ам.фофсфаты ++++");
    СпЗн.ДобавитьЗначение("кр.сечової к-ти +","кр.мочевой к-ты +"); 
    СпЗн.ДобавитьЗначение("кр.сечової к-ти ++","кр.мочевой к-ты ++");  
    СпЗн.ДобавитьЗначение("кр.сечової к-ти +++","кр.мочевой к-ты +++");  
    СпЗн.ДобавитьЗначение("кр.сечової к-ти ++++","кр.мочевой к-ты ++++"); 
    СпЗн.ДобавитьЗначение("кр.сечокислого амонію к-ти +","кр.мочекислого аммония +"); 
    СпЗн.ДобавитьЗначение("кр.сечокислого амонію к-ти ++","кр.мочекислого аммония ++");
    СпЗн.ДобавитьЗначение("кр.сечокислого амонію к-ти +++","кр.мочекислого аммония +++"); 
    СпЗн.ДобавитьЗначение("кр.сечокислого амонію к-ти ++++","кр.мочекислого аммония ++++");
    СпЗн.ДобавитьЗначение("кр.білірубіну +","кр.билирубина +");  
    СпЗн.ДобавитьЗначение("кр.білірубіну ++","кр.билирубина ++");
    СпЗн.ДобавитьЗначение("оксалатовий пісок +","оксалатовый песок +");  
    СпЗн.ДобавитьЗначение("оксалатовий пісок ++","оксалатовый песок ++"); 
    СпЗн.ДобавитьЗначение("оксалатовий пісок +++","оксалатовый песок +++");  
    СпЗн.ДобавитьЗначение("оксалатовий пісок ++++","оксалатовый песок ++++");
    СпЗн.ДобавитьЗначение("оксалати +","оксалаты +");  
    СпЗн.ДобавитьЗначение("оксалати ++","оксалаты ++"); 
    СпЗн.ДобавитьЗначение("оксалати +++","оксалаты +++");
    СпЗн.ДобавитьЗначение("оксалати ++++","оксалаты ++++");
    СпЗн.ДобавитьЗначение("трипельфосфати +","трипельфосфаты +"); 
    СпЗн.ДобавитьЗначение("трипельфосфати ++","трипельфосфаты ++");  
    СпЗн.ДобавитьЗначение("трипельфосфати +++","трипельфосфаты +++"); 
    СпЗн.ДобавитьЗначение("трипельфосфати ++++","трипельфосфаты ++++");
    СпЗн.ДобавитьЗначение("урати +","ураты +");  
    СпЗн.ДобавитьЗначение("урати ++","ураты ++");
    СпЗн.ДобавитьЗначение("урати +++","ураты +++");  
    СпЗн.ДобавитьЗначение("урати ++++","ураты ++++");
    СпЗн.ДобавитьЗначение("фосфати +","фосфаты +"); 
    СпЗн.ДобавитьЗначение("фосфати ++","фосфаты ++");  
    СпЗн.ДобавитьЗначение("фосфати +++","фосфаты +++"); 
    СпЗн.ДобавитьЗначение("фосфати ++++","фосфаты ++++");
    Зн = 0;                                             
    Если СпЗн.ВыбратьЗначение(Зн,"Соли биоматериала",,,1) = 1 Тогда
        Соли = Зн;
    КонецЕсли;
КонецПроцедурыПроцедура
 
ПриНачалеВыбораЗначения(Рекв,ФлагСтандОбр)
ФлагСтандОбр = 0;
    Если Рекв = "Соли " Тогда
        ИзмСоли()
    КонецЕсли;
КонецПроцедуры

Мыслимо вручную вводить это? Наверняка вероятность ошибки высока. А так выбрал и пошел дальше )))
   hhhh
 
28 - 19.01.19 - 05:22
(27) ну как раз все используют справочник, для этого он и нужен. Чего вы со списком значений заморрочились, это маразм.
   Злопчинский
 
29 - 19.01.19 - 09:54
Лучше бы был склероз. Тогда забыли бы что маразм.
   DrZombi
 
30 - 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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует