Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Реквизит документа с выпадающим списком возможных значений
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
leonid_gun
Здравствуйте.
ТиС 032. платформа 7.7 027
Есть необходимость создать на форме реквизит документа тип Строка, который будет связан с выпадающим списком, из которого можно выбрать одно значение из многих для этого реквизита, с последующим сохранением этого значения. И при открытии сохраненного документа этот реквизит отображал сохраненное значение. Как можно правильно такое реализовать?
Prospero
Перечисления не подойдут?
leonid_gun
Prospero @ Сегодня, 14:49 необходимо зарегистрироваться для просмотра ссылки ,
Перечисления не подойдут, т.к таких реквизитов в форме будет до 50 штук. А видов документов, в которых такое надо применить будет не один десяток.
awp
leonid_gun @ Сегодня, 14:52 необходимо зарегистрироваться для просмотра ссылки ,
Вариант с кнопкой рядом с полем(ТипДок) : на копке прописываем ТипДокИзм()

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


Вернет правда значение, а оно 0-3, но вы укажите свои smile.gif
Naghual
По моему проще реализовать через Справочник.
leonid_gun
awp @ Сегодня, 15:09 необходимо зарегистрироваться для просмотра ссылки ,
Можно принять как вариант.
Есть у реквизита документа на вкладке Дополнительно такой параметр как "Имеет кнопку выбора". Для чего его можно использовать? Может на этой кнопке можно родить еще один вариант решения выбора из списка?
awp
leonid_gun @ Сегодня, 15:24 необходимо зарегистрироваться для просмотра ссылки ,

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

Процедура ПриНачалеВыбораЗначения(Рекв,ФлагСтандОбр)
    Если Рекв = "ИмяВашегоРеквизита" Тогда
        Делаем тут что нужно
    КонецЕсли;
КонецПроцедуры
Prospero
Цитата(leonid_gun @ 15.01.19, 16:24) необходимо зарегистрироваться для просмотра ссылки
Может на этой кнопке можно родить еще один вариант решения выбора из списка?

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


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

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

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


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


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

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

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


ТипДок = Зн;

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


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

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

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

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

Тут же выше awp выложил по этой функции описание...
Синтакс-Помощник Вам в помощь
leonid_gun
Prospero @ Сегодня, 9:32 необходимо зарегистрироваться для просмотра ссылки ,
Вот это
ФлагСтандОбр = 0;

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

leonid_gun
хотя если реквизит тип Число с дробной частью, тогда число из списка выбирается только его целая часть. А надо, чтобы было полностью и целая м дробная части. Не знаю как это победить не переводя сам реквизит в тип Строка (( 09000000.gif
Prospero
leonid_gun @ Сегодня, 22:36 необходимо зарегистрироваться для просмотра ссылки ,
Точность какая у реквизита типа Число?
leonid_gun
Prospero @ Сегодня, 22:39 необходимо зарегистрироваться для просмотра ссылки ,
разная. зависит от реквизита (их в у документа может быть больше трех десятков) и 0,00 и 0,000
Prospero
leonid_gun @ Сегодня, 22:43 необходимо зарегистрироваться для просмотра ссылки ,
странно, создал реквизит, кинул на форму, и целые и дробные
leonid_gun
Догнал. Надо просто использовать децимальный знак точку, а не запятую. Вот тупанул ((

Процедура ИзмУретальныеНитки()
    зн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
leonid_gun @ Сегодня, 22:56 необходимо зарегистрироваться для просмотра ссылки ,
Ваш код

(просто точность 5 ))
leonid_gun
Prospero @ Сегодня, 23:12 необходимо зарегистрироваться для просмотра ссылки ,
Старнненько.У меня если оставить запятую вместо точки, то в числовое поле попадает только целая часть, дробную отсекает и оставляет просто нули и их количество соответствует заявленной точности поля. Но если точка, тогда все в порядке и работает четко. Но все равно благодарю за содействие и помощь.
Prospero
leonid_gun @ Сегодня, 23:42 необходимо зарегистрироваться для просмотра ссылки ,
Просто в меню высвечивается текстовое представление (2 параметр, а если он не указан, то равен значению (1 параметр))
У Вас в представлении запятые, а в значении точки. поэтому на картинке запятая в списке, а в поле точка
Удачи.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.