Имя: Пароль:
1C
1C 7.7
v7: Табличное поле: Не пойму как *выбрать* строковый реквизит...
0 Zhuravlik
 
29.01.13
00:47
Доброго времени суток) Решил попробовать заменить таб. часть дока табличным полем. Напоролся на такой вопрос: есть строковый реквизит, если я его редактирую в диалоге тч документа, то ставлю там галку "Имеет кнопку выбора". Потом в ПриНачалеВыбораЗначения() использую метод "Выбрать()" из справочника, и подставляю наименование в реквизит. Пользователь может отказаться от выбора, и ввести что-нибудь свое (НЕ из справочника).
Захотел это повторить в таб. поле. Вот я в коде указал флагом, что мне там нужна кнопка выбора, кнопка появилась, запускается обработчик в ПриНачалеВыбораЗначения(), и я в тзТабЧасть (которую в ПриОткрытии()  заранее получил) запоминаю это значение. А вот табличное поле мне его показывает только после того, как я закончил редактировать ячейку. А мне так не нужно, мне нужно чтобы я выбрал, в ячейке появился нужный текст, и ячейка осталась в фокусе. Т.е. чтобы подвердить конец редактирования нужно нажать ентер, так же как и в тч документа.
Подумал, что можно менять текст в самой ячейке ТП, но он доступен только в ОформленииЯчейки, а она доступна только в событии ОбновитьСтроки().
Подскажите что-нибудь?
1 ADirks
 
29.01.13
06:46
Видимо, не туда подставляешь

Процедура ПриНачалеВыбораЗначения(Идентификатор, ФСО)
   Если Идентификатор = "ТЧ_АртикулВнешний" Тогда
       ФСО = 0;
       спр = СоздатьОбъект("Справочник.Артикулы");
       спр.ИспользоватьВладельца(тпТЧ.ТекущиеДанные.Материал);
       спр.НайтиПоНаименованию(тпТЧ.ТекущиеДанные.АртикулВнешний);
       Конт = "";
       ОткрытьПодбор("Справочник.Артикулы",, конт, 0, спр.ТекущийЭлемент());
       Конт.ИспользоватьВладельца(тпТЧ.ТекущиеДанные.Материал);
       Конт.АктивизироватьОбъект(спр.ТекущийЭлемент());
   КонецЕсли;
КонецПроцедуры

Процедура ОбработкаВыбораЗначения(ВыбЗнач, Идентификатор, ФСО)
   Если Идентификатор = "ТЧ_АртикулВнешний" Тогда
       ФСО = 0;
       Сам(Контекст).ТЧ_АртикулВнешний = ""+ВыбЗнач;
   КонецЕсли;
КонецПроцедуры


Обрати внимание, именно Сам(Контекст).ТЧ_АртикулВнешний = ...
2 ADirks
 
29.01.13
07:04
и на всякий: ТЧ_АртикулВнешний - это имя поля, которое я указываю в ТП::РедактироватьЗначение()

тпТЧ.РедактироватьЗначение(нСтрТП, КолонкаТП, ТипРегиона, Значение, Длина, 3, "ТЧ_"+ИмяКол, "0x100020");

На время жизни это самое обычное поле ввода на форме, со всеми вытекающими.
3 Zhuravlik
 
29.01.13
09:13
(2) А что значит Сам(Контекст)? Уже видел неоднократно, это для чего? Какой-то аналог глВзятьКонтекст?
4 Zhuravlik
 
29.01.13
09:18
+ Через глВзятьКонтекст(Контекст) получилось)
5 Zhuravlik
 
29.01.13
09:36
(2) А подскажите, вы мне пример показывали в прошлой ветке
В ПослеРедактирования... там было:
тз.ПолучитьСтрокуПоНомеру(НомерСтрокиТП)

А если я так делаю:

//======================================================================
Процедура ТаблПоле_ПриАктивизацииЯчейки(ТП)
   //Сопрягаю табличное поле и тч документа
   нс = ТП.ТекущаяСтрока;
   Если ПустоеЗначение(нс) = 1 Тогда
       Возврат;
   КонецЕсли;
   
   тзТабЧасть.ПолучитьСтрокуПоНомеру(нс);    

КонецПроцедуры // ТаблПоле_ПриАктивизацииЯчейки


Это нормально будет работать?
6 ADirks
 
29.01.13
09:44
(3) Ну, по функционалу - аналог, а так - нет  :)
Тебя вот не тошнит с глВзятьКонтекст()? Меня тошнит. Глагол в названии ф-ции считаю моветоном в 99% случаев. Префикс "гл" - абсолютно неинформативная мерзость. Контекст? Какой мля контекст?... нихера не понятно...  А Сам() - коротко и понятно.

(5) Конечно будет, куда оно денется. Если в событие не передаётся номер строки/колонки, то берём их из свойств ТП.
7 Zhuravlik
 
29.01.13
09:49
(6) База сейчас полностью типовая, хочу минимализировать свои внедрения. Тошнит-не тошнит, пусть будет) У меня глобальник сейчас весь по полочкам, все мои функции в отдельном модуле, если обновлять - все просто.
Спасибо)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.