Имя: Пароль:
1C
1C 7.7
v7: Как спозиционироваться из модуля формы документа на ячейке в табличной части
,
0 Palll
 
21.06.16
11:35
Необходимо при вводе значения в табличную часть документа, позиционироваться на следующую строку табличной части и войти в режим редактирования. Пробовал использовать метод Активизировать(), получаю ошибку {Документ.ПоступлениеТМЦ.Форма.Модуль(3524)}: В данной формуле не может быть вызвана эта процедура(функция).
1 Ёпрст
 
21.06.16
11:38
автоввод строки галку воткнуть и на всех остальных колонках - пропускать при вводе. усё
2 Palll
 
21.06.16
11:42
(1) Позиционироваться нужно в пределах уже существующих строк, как я понимаю автоввод строки будет добавлять пустую строку?
3 Ёпрст
 
21.06.16
11:46
(2) да, а тебе, разве не это надо ?
Если в уже существующие, то АктивизироватьСтроку + Активизировать + ложное закрытие формы
4 Palll
 
21.06.16
11:50
(3) Я таким образом и пытаюсь сделать, но на Активизировать() получаю ошибку.
Вот кусок кода:
АктивизироватьСтроку(НомерСтроки+1);  
Активизировать("Марка",1);
5 Palll
 
21.06.16
11:55
(4)
Функция ПереводСтроки()
    
    АктивизироватьСтроку(НомерСтроки+1);  
    Активизировать("Марка",1);
    
КонецФункции    

Функция НайтиМарку()  
    
    АлкогольныйКод = РасшифроватьМарку(Марка);
    Сообщить(Строка(АлкогольныйКод));
    ПереводСтроки();
    
КонецФункции;
6 Palll
 
21.06.16
14:03
(5)
Попробовал таким образом, безрезультатно.
// глобальный модуль

Процедура глАктивизироватьПоле(Конт, Поле) Экспорт
   Сп=СоздатьОбъект("СписокЗначений");
   Сп.Установить("Контекст", Конт);
   Сп.Установить("Поле", Поле);
   ОткрытьФормуМодально("Обработка.АктивизироватьПоле", Сп);
КонецПроцедуры

// модуль формы Обработка.АктивизироватьПоле

Процедура ПриОткрытии()
   Сп=Форма.Параметр;
   Если НРег(ТипЗначенияСтр(Сп))<>"списокзначений" Тогда
       Сообщить("'Активизировать поле': неверный вызов","!");
       СтатусВозврата(0);
       Возврат;
   КонецЕсли;
  
   Конт=Сп.Получить("Контекст");
   Поле=Сп.Получить("Поле");
   Конт.Активизировать(Поле, 1);
   СтатусВозврата(0);
КонецПроцедуры

Соответственно - вызов в коде:
глАктивизироватьПоле(Контекст, "Артикул");
7 Ёпрст
 
21.06.16
14:16
да ё

Перем Вася;
Функция ПереводСтроки()
    Вася=НомерСтроки;
    Форма.Закрыть(0);
КонецФункции
Процедура ПриЗакрытии()
   Если ПустоеЗначение(Вася)=0 Тогда
        АктивизироватьСтроку(Вася+1);  
        Активизировать("Марка",1);
        Вася="";
         СтатусВозврата(0);
   КонецЕсли;
КонецПроцедуры
8 Palll
 
21.06.16
15:30
(7) Спасибо за помощь. Не понял с ходу что АктивизироватьСтроку + Активизировать + ложное закрытие формы означает вызывать АктивизироватьСтроку и Активизировать в процедуре при закрытии :)
9 Ёпрст
 
21.06.16
15:41
(8) это просто стандартный трюк переноса события из обработчиков через ложное событие формы. Можно еще и через функцию текста делать, только затратнее по ресурсам
10 Palll
 
21.06.16
15:44
(9) Как раз начинал уже через текст делать, но через закрытие удобнее. Теперь буду знать, еще раз спасибо :)