![]() |
1С:Предприятие
:: 1С:Предприятие 8 общая
|
|
| ||
DJ Anthon 01.06.20 - 15:42 | На форме поле ввода со строковой переменной. Пишу значение в переменную, значение присваивается, текст остаётся прежним.
Если пишу текст в поле ввода, то значение переменной изменяется. Ут 11, УФ. Почему текст редактирования надо отдельно присваивать? | ||
Фрэнки 1 - 01.06.20 - 15:44 | контекст нарушен, вот потому и не присваивается. Точнее, не обновляется в поле. | ||
Фрэнки 2 - 01.06.20 - 15:46 | Элемент формы имеет множество полей. По событиям какие-то оказываются обновленными при получении нового значения, а какие-то нужно обновлять принудительно, т.к. событие контекста отсутствует. | ||
DJ Anthon 3 - 01.06.20 - 15:53 | Тогда почему
Расширение поля формы для поля ввода (Form field extension for a text box) ТекстРедактирования (EditText) Использование: Только чтение Сама платформа его не присваивает, а мне тогда как его присвоить? И как я смог нарушить контекст? | ||
Фрэнки 4 - 01.06.20 - 16:12 | Кусок кода дай. Вместе с определением контекста (Там предикаты или как там их правильно кличут - НаСервере НаКлиенте и т.д.)
Если это не слишком громоздкий код, конечно. Громоздкий в формате форума смотреть бесполезно. | ||
DJ Anthon 5 - 01.06.20 - 16:13 | Номенклатура = "123";
Номенклатура - это реквизит формы типа Строка. На форме есть поле ввода, где ПутьКДанным - Номенклатура | ||
Фрэнки 6 - 01.06.20 - 16:16 | И запись в коде строкового значения в строковый реквизит формы не вызывает его обновления на форме? | ||
DJ Anthon 7 - 01.06.20 - 16:19 | Да. пришлось сделать так:
&НаКлиенте Процедура ОбновитьНоменклатуру(Номка) ЭтаФорма.Элементы.Номенклатура.Доступность = Ложь; НоменклатураСсылка = Номка; Номенклатура = СокрЛП(Номка.Наименование); ЭтаФорма.Элементы.Номенклатура.ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.Номенклатура"); ЭтаФорма.Элементы.Номенклатура.ОграничениеТипа = Новый ОписаниеТипов("Строка"); ЭтаФорма.Элементы.Номенклатура.УстановитьГраницыВыделения(1, СтрДлина(ЭтаФорма.Элементы.Номенклатура.ТекстРедактирования) + 1); ЭтаФорма.Элементы.Номенклатура.ВыделенныйТекст = Номенклатура; ЭтаФорма.Элементы.Номенклатура.Доступность = Истина; КонецПроцедурыТак работает. Доступность временно затираю, чтобы не срабатывало событие при изменении объекта. даже в прошлом веке у объектов дельфи и билдера был реквизит Tag для нужд трудящихся. Здесь же передать в событие любую связанную с элементом формы информацию всегда проблематично. мне только один флаг был нужен, я его передал с помощью Доступность. | ||
DJ Anthon 8 - 01.06.20 - 16:24 | Это я создаю поле формы, в котором можно не только выбрать номенклатуру, но и написать просто текст, по которому номенклатура автоматически найдется.
Казалось бы, чем не устраивает стандартный ввод по строке? А дело в том, что мне надо отпустить поле ввода, если номенклатуры нет. Она при этом создастся, когда будет проводиться документ. Два типа используется, чтобы работал штатный выбор номенклатуры из справочника и открытие. | ||
Фрэнки 9 - 01.06.20 - 16:33 | может просто лучше отделить элементы формы и работать с ними отдельно, а вот это с двумя типами и т.д. спрятать где-то с глаз пользователя да и все? | ||
DJ Anthon 10 - 01.06.20 - 16:50 | что от чего отделить? все работает, как надо и очень удобно. я такое еще на 7.7 на формексе писал. жаль, что 1совцы не додумались до такого еще сами. только палки в колеса вставляют.
вопрос заключается только в том, что я не могу понять причину, почему не обновляется текст в поле ввода. почему руками его туда писать надо. и почему текстредактирования только для чтения. во всех других средах разработки это всегда было доступно. к тому же как объяснить заказчику, которому надо именно так. "вот тут типа вводите текст, но если не получается, нажмите еск один раз, правда, 1с подвиснет и случайно не нажмите второй раз, а потом заново забейте в соседнем поле тот же текст". а со стандартными полями ввода в цеху работать неудобно, там надо максимально просто. вбил номенклатуру - записал. никаких тебе карточек ввода с тысячей полей. | ||
DJ Anthon 11 - 01.06.20 - 16:51 | ну, я в принципе и отделил НоменклатураСсылка и Номенклатура. если вы это имели в виду. НоменклатураСсылка скрыт, а Номенклатура - это текст, но при выборе это временно ссылка. иначе события на выбор не отрабатывают. 1совцы же умные. как можно выбрать строку? давайте мы не будем вызывать событие, хотя оно прописано. | ||
Salimbek 12 - 01.06.20 - 17:14 | |||
DJ Anthon 13 - 01.06.20 - 18:04 | (12) попробовал, к сожалению, не работает. но об этой функции слышу впервые, никогда не требовалась, буду иметь в виду. | ||
Ненавижу 1С 14 - 01.06.20 - 19:07 | (11) почему не срабатывают? может надо стандартную обработку отключать? | ||
DJ Anthon 15 - 01.06.20 - 20:49 | (14) в том-то и смысл, что в событие не запускается, и в нем нечего отключать. но мне надо наоборот, чтобы отработал стандартный выбор номенклатуры из справочника,
взять полученную ссылку, а в поле проставить только текст, чтобы его пользователь мог легко подправить, а 1С не просила выбрать или создать номенклатуру с измененным наименованием. необходимость создания нового элемента определяется кодом "проведения" документа. к тому же, по специфике организации 90% номенклатур должны генерироваться автоматически, но их название должно быть видно на месте данного поля. причем название должно быть уже готово до проведения документа, но номенклатура еще не должна быть создана. | ||
DJ Anthon 16 - 01.06.20 - 20:52 | (14) но если сделать реквизит составного типа (строка+ссылка), то событие работает и для реализации всей этой чепухи достаточно всего лишь
одной функции, которую надо вызывать всегда, когда значение реквизита меняется программным способом, вот и все. а в ней я ссылку переношу в отдельный скрытый реквизит. пусть через костыль через выделенный фрагмент, но эта вещь работает. я просто хотел узнать причину, почему вообще нельзя обойтись штатными средствами. |
|
Список тем форума
|