Версия для печати темы (https://pro1c.org.ua/index.php?s=9e9b15e0f4dedddfd4a7fc8fbcae58a0&showtopic=49942)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Реквизит документа с выпадающим списком возможных значений

Автор: leonid_gun 15.01.19, 14:38

Здравствуйте.
ТиС 032. платформа 7.7 027
Есть необходимость создать на форме реквизит документа тип Строка, который будет связан с выпадающим списком, из которого можно выбрать одно значение из многих для этого реквизита, с последующим сохранением этого значения. И при открытии сохраненного документа этот реквизит отображал сохраненное значение. Как можно правильно такое реализовать?

Автор: Prospero 15.01.19, 14:49

Перечисления не подойдут?

Автор: leonid_gun 15.01.19, 14:52

Prospero @ Сегодня, 14:49 * ,
Перечисления не подойдут, т.к таких реквизитов в форме будет до 50 штук. А видов документов, в которых такое надо применить будет не один десяток.

Автор: awp 15.01.19, 15:09

leonid_gun @ Сегодня, 14:52 * ,
Вариант с кнопкой рядом с полем(ТипДок) : на копке прописываем ТипДокИзм()

Процедура ТипДокИзм()
    СпЗн = СоздатьОбъект("СписокЗначений");
    СпЗн.ДобавитьЗначение(0,"Рішення(Стяг. з контрагента)");
    СпЗн.ДобавитьЗначение(1,"Рішення(Стяг. з Унікредіт Лізінг)");
    СпЗн.ДобавитьЗначение(2,"Позов до суду");
    СпЗн.ДобавитьЗначение(3,"Корр. Позову до суду");
    Зн = 0;                                            
    Если СпЗн.ВыбратьЗначение(Зн,"Тип Документа",,,1) = 1 Тогда
        ТипДок = Зн;
    КонецЕсли;
    УстВидимость();
КонецПроцедуры


Вернет правда значение, а оно 0-3, но вы укажите свои smile.gif

Автор: Naghual 15.01.19, 15:18

По моему проще реализовать через Справочник.

Автор: leonid_gun 15.01.19, 15:24

awp @ Сегодня, 15:09 * ,
Можно принять как вариант.
Есть у реквизита документа на вкладке Дополнительно такой параметр как "Имеет кнопку выбора". Для чего его можно использовать? Может на этой кнопке можно родить еще один вариант решения выбора из списка?

Автор: awp 15.01.19, 15:29

leonid_gun @ Сегодня, 15:24 * ,

Процедура ПриНачалеВыбораЗначения(<?>,)
КонецПроцедуры
Синтаксис:
ПриНачалеВыбораЗначения(<ИдентЭлемДиалога>,<ФлагСтандОбр>)
Назначение:
Предопределенная процедура после выбора значения в форме выбора (выбор может быть инициирован в немодальном режиме интерактивно, при помощи элемента диалога с ''педалькой'').
<ИдентЭлемДиалога> - идентификатор элемента диалога, которым инициализирован выбор значения.
<ФлагСтандОбр> - флаг, изначально, при вызове процедуры равен 1, если в теле процедуры значение этого параметра поменять на 0, то стандартный процесс выбора значения не будет происходить.
Замечание:
Данная процедура может располагаться только в программном модуле формы.

Процедура ПриНачалеВыбораЗначения(Рекв,ФлагСтандОбр)
    Если Рекв = "ИмяВашегоРеквизита" Тогда
        Делаем тут что нужно
    КонецЕсли;
КонецПроцедуры

Автор: Prospero 15.01.19, 15:50

Цитата(leonid_gun @ 15.01.19, 16:24) *
Может на этой кнопке можно родить еще один вариант решения выбора из списка?

leonid_gun,
Пропишите вызов
ТипДокИзм()
, указанный awp,
и не надо будет дополнительная кнопка.

Автор: leonid_gun 15.01.19, 23:54

Prospero @ Сегодня, 15:50 * ,
с реквизитом тип Строка работает безупречно.

Процедура ИзмПрозрачность()
    СпЗн = СоздатьОбъект("СписокЗначений");
    СпЗн.ДобавитьЗначение("прозора","прозора");
    СпЗн.ДобавитьЗначение("непрозора","непрозора");
    Зн = 0;                                            
    Если СпЗн.ВыбратьЗначение(Зн,"Прозрачность биоматериала",,,1) = 1 Тогда
        Прозрачность = Зн;
    КонецЕсли;
КонецПроцедуры


А вот как быть если обрабатываем список для реквизита тип Число, еще и с дробной частью? ))

Цитата(leonid_gun @ 15.01.19, 23:41) *
А вот как быть если обрабатываем список для реквизита тип Число, еще и с дробной частью? ))

при выборе "педальки" список выводится, но при выборе значения из списка, выпадает экранная цифровая калава, стандартная для цифрового поля ввода с кнопкой. Нужно менять тип на Строку? Но хотелось бы оставить ограничение по разрядности для проверки ввода от руки.

Автор: Prospero 16.01.19, 2:40

leonid_gun,
Вы "от руки" вводите или выбираете из списка?
На скорую руку, извините, если что:

// (с) awp :)
Функция ТипДокИзм()  
    Перем Зн;
    СпЗн = СоздатьОбъект("СписокЗначений");
    СпЗн.ДобавитьЗначение("прозора");
    СпЗн.ДобавитьЗначение("непрозора");
    СпЗн.ДобавитьЗначение(0);
    СпЗн.ДобавитьЗначение(2);
    СпЗн.ДобавитьЗначение(1.1);
    СпЗн.ДобавитьЗначение(2.5);    
    Рез = СпЗн.ВыбратьЗначение(Зн,,,,1);    
    Если Рез = 1 Тогда
        Возврат Зн;
    КонецЕсли;
КонецФункции  


Процедура ПриНачалеВыбораЗначения()    
    Сообщить("Перед появлением меню");     
    Зн = ТипДокИзм();
    Сообщить("Зн="+Зн);
    Сообщить("Меняем Зн на Зн+Зн");
    Если ТипЗначенияСтр(Зн)="Число" Тогда
        Зн = Число(Зн);
    КонецЕсли;
    Зн = Зн+Зн;
    Сообщить("А теперь Зн="+Зн);    
    ТипДок = Зн;
КонецПроцедуры


2 параметр убрал, лень выписывать его ))
Получайте значение и делайте с ним что хотите...

Извиняюсь,вот чуть подправленный...
Изменения:
Процедура ПриНачалеВыбораЗначения()

на
Процедура ПриНачалеВыбораЗначения(Рекв)


ТипДок = Зн;

на
УстановитьАтрибут(Рекв,Зн)


Должно для каждого реквизита выбирать свое значение.
Рекв - Идентификатор Вашего реквизита, таким образом можно на все поля навесить
обработку и каждому присвоить разные значения из списка.

Тыц.тыц.тыц...
Недопонял вначале smile.gif
У Вас жменька разнотиповых
реквизитов, и для них Вы хотите
эту менюшку прикрутить?


Автор: Prospero 16.01.19, 9:32

Если так, то попробуйте поменять
на

Процедура ПриНачалеВыбораЗначения(Рекв,ФлагСтандОбр)     
    ФлагСтандОбр=0;

Калькулятор не будет появляться, только нечисловые значения будут в 0;

Тут же выше awp выложил по этой функции описание...
Синтакс-Помощник Вам в помощь

Автор: leonid_gun 16.01.19, 15:35

Prospero @ Сегодня, 9:32 * ,
Вот это

ФлагСтандОбр = 0;

в теле предопределенной процедуре как раз и помогло!! Перестала появляться экранная цифровая клава на реквизитах типа Число. То что нужно )))


Автор: leonid_gun 16.01.19, 22:36

хотя если реквизит тип Число с дробной частью, тогда число из списка выбирается только его целая часть. А надо, чтобы было полностью и целая м дробная части. Не знаю как это победить не переводя сам реквизит в тип Строка (( 09000000.gif

Автор: Prospero 16.01.19, 22:39

leonid_gun @ Сегодня, 22:36 * ,
Точность какая у реквизита типа Число?

Автор: leonid_gun 16.01.19, 22:43

Prospero @ Сегодня, 22:39 * ,
разная. зависит от реквизита (их в у документа может быть больше трех десятков) и 0,00 и 0,000

Автор: Prospero 16.01.19, 22:55

leonid_gun @ Сегодня, 22:43 * ,
странно, создал реквизит, кинул на форму, и целые и дробные

Автор: leonid_gun 16.01.19, 22:56

Догнал. Надо просто использовать децимальный знак точку, а не запятую. Вот тупанул ((

Процедура ИзмУретальныеНитки()
    зн1 = 1.001;
    зн2 = 1.021;
    зн3 = 1.051;
    СпЗн = СоздатьОбъект("СписокЗначений");
    СпЗн.ДобавитьЗначение(зн1,"1,001");
    СпЗн.ДобавитьЗначение(зн2,"1,010");
    СпЗн.ДобавитьЗначение(зн3,"1,020");
    СпЗн.ДобавитьЗначение("1.030","1,030");  
    СпЗн.ДобавитьЗначение("1.040","1,040");
    Зн = 0;                                            
    Если СпЗн.ВыбратьЗначение(Зн,"УретальныеНитки биоматериала",,,1) = 1 Тогда
        УретальныеНитки = Зн;
    КонецЕсли;
КонецПроцедуры

и все ровно вставляет в реквизит типа Число

Автор: Prospero 16.01.19, 23:12

leonid_gun @ Сегодня, 22:56 * ,
Ваш код

(просто точность 5 ))

Автор: leonid_gun 16.01.19, 23:42

Prospero @ Сегодня, 23:12 * ,
Старнненько.У меня если оставить запятую вместо точки, то в числовое поле попадает только целая часть, дробную отсекает и оставляет просто нули и их количество соответствует заявленной точности поля. Но если точка, тогда все в порядке и работает четко. Но все равно благодарю за содействие и помощь.

Автор: Prospero 16.01.19, 23:51

leonid_gun @ Сегодня, 23:42 * ,
Просто в меню высвечивается текстовое представление (2 параметр, а если он не указан, то равен значению (1 параметр))
У Вас в представлении запятые, а в значении точки. поэтому на картинке запятая в списке, а в поле точка
Удачи.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua