Здравствуйте.
ТиС 032. платформа 7.7 027
Есть необходимость создать на форме реквизит документа тип Строка, который будет связан с выпадающим списком, из которого можно выбрать одно значение из многих для этого реквизита, с последующим сохранением этого значения. И при открытии сохраненного документа этот реквизит отображал сохраненное значение. Как можно правильно такое реализовать?
Перечисления не подойдут?
Prospero @ Сегодня, 14:49
,
Перечисления не подойдут, т.к таких реквизитов в форме будет до 50 штук. А видов документов, в которых такое надо применить будет не один десяток.
leonid_gun @ Сегодня, 14:52
,
Вариант с кнопкой рядом с полем(ТипДок) : на копке прописываем ТипДокИзм()
Процедура ТипДокИзм()
СпЗн = СоздатьОбъект("СписокЗначений");
СпЗн.ДобавитьЗначение(0,"Рішення(Стяг. з контрагента)");
СпЗн.ДобавитьЗначение(1,"Рішення(Стяг. з Унікредіт Лізінг)");
СпЗн.ДобавитьЗначение(2,"Позов до суду");
СпЗн.ДобавитьЗначение(3,"Корр. Позову до суду");
Зн = 0;
Если СпЗн.ВыбратьЗначение(Зн,"Тип Документа",,,1) = 1 Тогда
ТипДок = Зн;
КонецЕсли;
УстВидимость();
КонецПроцедуры
По моему проще реализовать через Справочник.
awp @ Сегодня, 15:09
,
Можно принять как вариант.
Есть у реквизита документа на вкладке Дополнительно такой параметр как "Имеет кнопку выбора". Для чего его можно использовать? Может на этой кнопке можно родить еще один вариант решения выбора из списка?
leonid_gun @ Сегодня, 15:24
,
Процедура ПриНачалеВыбораЗначения(<?>,)
КонецПроцедуры
Синтаксис:
ПриНачалеВыбораЗначения(<ИдентЭлемДиалога>,<ФлагСтандОбр>)
Назначение:
Предопределенная процедура после выбора значения в форме выбора (выбор может быть инициирован в немодальном режиме интерактивно, при помощи элемента диалога с ''педалькой'').
<ИдентЭлемДиалога> - идентификатор элемента диалога, которым инициализирован выбор значения.
<ФлагСтандОбр> - флаг, изначально, при вызове процедуры равен 1, если в теле процедуры значение этого параметра поменять на 0, то стандартный процесс выбора значения не будет происходить.
Замечание:
Данная процедура может располагаться только в программном модуле формы.
Процедура ПриНачалеВыбораЗначения(Рекв,ФлагСтандОбр)
Если Рекв = "ИмяВашегоРеквизита" Тогда
Делаем тут что нужно
КонецЕсли;
КонецПроцедуры
ТипДокИзм()
, указанный awp,Prospero @ Сегодня, 15:50
,
с реквизитом тип Строка работает безупречно.
Процедура ИзмПрозрачность()
СпЗн = СоздатьОбъект("СписокЗначений");
СпЗн.ДобавитьЗначение("прозора","прозора");
СпЗн.ДобавитьЗначение("непрозора","непрозора");
Зн = 0;
Если СпЗн.ВыбратьЗначение(Зн,"Прозрачность биоматериала",,,1) = 1 Тогда
Прозрачность = Зн;
КонецЕсли;
КонецПроцедуры
leonid_gun,
Вы "от руки" вводите или выбираете из списка?
На скорую руку, извините, если что:
// (с) awp :)
Функция ТипДокИзм()
Перем Зн;
СпЗн = СоздатьОбъект("СписокЗначений");
СпЗн.ДобавитьЗначение("прозора");
СпЗн.ДобавитьЗначение("непрозора");
СпЗн.ДобавитьЗначение(0);
СпЗн.ДобавитьЗначение(2);
СпЗн.ДобавитьЗначение(1.1);
СпЗн.ДобавитьЗначение(2.5);
Рез = СпЗн.ВыбратьЗначение(Зн,,,,1);
Если Рез = 1 Тогда
Возврат Зн;
КонецЕсли;
КонецФункции
Процедура ПриНачалеВыбораЗначения()
Сообщить("Перед появлением меню");
Зн = ТипДокИзм();
Сообщить("Зн="+Зн);
Сообщить("Меняем Зн на Зн+Зн");
Если ТипЗначенияСтр(Зн)="Число" Тогда
Зн = Число(Зн);
КонецЕсли;
Зн = Зн+Зн;
Сообщить("А теперь Зн="+Зн);
ТипДок = Зн;
КонецПроцедуры
Процедура ПриНачалеВыбораЗначения()
Процедура ПриНачалеВыбораЗначения(Рекв)
ТипДок = Зн;
УстановитьАтрибут(Рекв,Зн)
Если так, то попробуйте поменять
на
Процедура ПриНачалеВыбораЗначения(Рекв,ФлагСтандОбр)
ФлагСтандОбр=0;
Prospero @ Сегодня, 9:32
,
Вот это
ФлагСтандОбр = 0;
хотя если реквизит тип Число с дробной частью, тогда число из списка выбирается только его целая часть. А надо, чтобы было полностью и целая м дробная части. Не знаю как это победить не переводя сам реквизит в тип Строка ((
Prospero @ Сегодня, 22:39
,
разная. зависит от реквизита (их в у документа может быть больше трех десятков) и 0,00 и 0,000
leonid_gun @ Сегодня, 22:43
,
странно, создал реквизит, кинул на форму, и целые и дробные
Догнал. Надо просто использовать децимальный знак точку, а не запятую. Вот тупанул ((
Процедура ИзмУретальныеНитки()
зн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 @ Сегодня, 23:12
,
Старнненько.У меня если оставить запятую вместо точки, то в числовое поле попадает только целая часть, дробную отсекает и оставляет просто нули и их количество соответствует заявленной точности поля. Но если точка, тогда все в порядке и работает четко. Но все равно благодарю за содействие и помощь.
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