Имя: Пароль:
1C
1С v8
Почему в поле ввода не обновляется текст, если пишешь в связанную с ним переменную?
,
0 DJ Anthon
 
01.06.20
15:42
На форме поле ввода со строковой переменной. Пишу значение в переменную, значение присваивается, текст остаётся прежним.
Если пишу текст в поле ввода, то значение переменной изменяется.
Ут 11, УФ. Почему текст редактирования надо отдельно присваивать?
1 Фрэнки
 
01.06.20
15:44
контекст нарушен, вот потому и не присваивается. Точнее, не обновляется в поле.
2 Фрэнки
 
01.06.20
15:46
Элемент формы имеет множество полей. По событиям какие-то оказываются обновленными при получении нового значения, а какие-то нужно обновлять принудительно, т.к. событие контекста отсутствует.
3 DJ Anthon
 
01.06.20
15:53
Тогда почему
Расширение поля формы для поля ввода (Form field extension for a text box)
ТекстРедактирования (EditText)
Использование:
Только чтение


Сама платформа его не присваивает, а мне тогда как его присвоить? И как я смог нарушить контекст?
4 Фрэнки
 
01.06.20
16:12
Кусок кода дай. Вместе с определением контекста (Там предикаты или как там их правильно кличут - НаСервере НаКлиенте и т.д.)
Если это не слишком громоздкий код, конечно. Громоздкий в формате форума смотреть бесполезно.
5 DJ Anthon
 
01.06.20
16:13
Номенклатура = "123";


Номенклатура - это реквизит формы типа Строка. На форме есть поле ввода, где ПутьКДанным - Номенклатура
6 Фрэнки
 
01.06.20
16:16
И запись в коде строкового значения в строковый реквизит формы не вызывает его обновления на форме?
7 DJ Anthon
 
01.06.20
16:19
Да. пришлось сделать так:

&НаКлиенте
Процедура ОбновитьНоменклатуру(Номка)
    ЭтаФорма.Элементы.Номенклатура.Доступность = Ложь;
    НоменклатураСсылка = Номка;
    Номенклатура = СокрЛП(Номка.Наименование);
    ЭтаФорма.Элементы.Номенклатура.ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.Номенклатура");
    ЭтаФорма.Элементы.Номенклатура.ОграничениеТипа = Новый ОписаниеТипов("Строка");
    ЭтаФорма.Элементы.Номенклатура.УстановитьГраницыВыделения(1, СтрДлина(ЭтаФорма.Элементы.Номенклатура.ТекстРедактирования) + 1);
    ЭтаФорма.Элементы.Номенклатура.ВыделенныйТекст = Номенклатура;
    ЭтаФорма.Элементы.Номенклатура.Доступность = Истина;
КонецПроцедуры

Так работает.
Доступность временно затираю, чтобы не срабатывало событие при изменении объекта. даже в прошлом веке у объектов дельфи и билдера был реквизит Tag для нужд трудящихся. Здесь же передать в событие любую связанную с элементом формы информацию всегда проблематично. мне только один флаг был нужен, я его передал с помощью Доступность.
8 DJ Anthon
 
01.06.20
16:24
Это я создаю поле формы, в котором можно не только выбрать номенклатуру, но и написать просто текст, по которому номенклатура автоматически найдется.
Казалось бы, чем не устраивает стандартный ввод по строке? А дело в том, что мне надо отпустить поле ввода, если номенклатуры нет.
Она при этом создастся, когда будет проводиться документ. Два типа используется, чтобы работал штатный выбор номенклатуры из справочника и открытие.
9 Фрэнки
 
01.06.20
16:33
может просто лучше отделить элементы формы и работать с ними отдельно, а вот это с двумя типами и т.д. спрятать где-то с глаз пользователя да и все?
10 DJ Anthon
 
01.06.20
16:50
что от чего отделить? все работает, как надо и очень удобно. я такое еще на 7.7 на формексе писал. жаль, что 1совцы не додумались до такого еще сами. только палки в колеса вставляют.
вопрос заключается только в том, что я не могу понять причину, почему не обновляется текст в поле ввода. почему руками его туда писать надо. и почему текстредактирования только для чтения.
во всех других средах разработки это всегда было доступно.
к тому же как объяснить заказчику, которому надо именно так. "вот тут типа вводите текст, но если не получается, нажмите еск один раз, правда, 1с подвиснет и случайно не нажмите второй раз, а потом заново забейте в соседнем поле тот же текст". а со стандартными полями ввода в цеху работать неудобно, там надо максимально просто. вбил номенклатуру - записал. никаких тебе карточек ввода с тысячей полей.
11 DJ Anthon
 
01.06.20
16:51
ну, я в принципе и отделил НоменклатураСсылка и Номенклатура. если вы это имели в виду. НоменклатураСсылка скрыт, а Номенклатура - это текст, но при выборе это временно ссылка. иначе события на выбор не отрабатывают. 1совцы же умные. как можно выбрать строку? давайте мы не будем вызывать событие, хотя оно прописано.
12 Salimbek
 
01.06.20
17:14
(5) После присваивания

ЭтаФорма.ОбновитьОтображениеДанных(Элементы.Номенклатура);

пробовал делать?
13 DJ Anthon
 
01.06.20
18:04
(12) попробовал, к сожалению, не работает. но об этой функции слышу впервые, никогда не требовалась, буду иметь в виду.
14 Ненавижу 1С
 
гуру
01.06.20
19:07
(11) почему не срабатывают? может надо стандартную обработку отключать?
15 DJ Anthon
 
01.06.20
20:49
(14) в том-то и смысл, что в событие не запускается, и в нем нечего отключать. но мне надо наоборот, чтобы отработал стандартный выбор номенклатуры из справочника,
взять полученную ссылку, а в поле проставить только текст, чтобы его пользователь мог легко подправить, а 1С не просила выбрать или создать номенклатуру с измененным наименованием.
необходимость создания нового элемента определяется кодом "проведения" документа. к тому же, по специфике организации 90% номенклатур должны генерироваться автоматически,
но их название должно быть видно на месте данного поля. причем название должно быть уже готово до проведения документа, но номенклатура еще не должна быть создана.
16 DJ Anthon
 
01.06.20
20:52
(14) но если сделать реквизит составного типа (строка+ссылка), то событие работает и для реализации всей этой чепухи достаточно всего лишь
одной функции, которую надо вызывать всегда, когда значение реквизита меняется программным способом, вот и все. а в ней я ссылку переношу в отдельный скрытый реквизит.
пусть через костыль через выделенный фрагмент, но эта вещь работает.
я просто хотел узнать причину, почему вообще нельзя обойтись штатными средствами.
2 + 2 = 3.9999999999999999999999999999999...