7.7 АктивизироватьОбъект

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем tjv, 19 май 2008.

  1. TopicStarter Overlay
    tjv
    Offline

    tjv

    Регистрация:
    19 май 2008
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Из табличной части документа вызывается справочник, форма списка фильтруется через СпискоЗначений и ИспользоватьСписокЭлементов. При вводе первой строки все работает отлично, а вот при вводе второй строки в этом справочнике курсор становиться на строку предыдущего значения, а когда на клавиатуер набираешь нужное значение, если оно находиться в справочнике выше - не находиться. Пытались позиционировать на первый элемент в справочнике - не работает. в отладчике на строке АктивизироватьОбъект выдает "ошибк в выражении". Помогите разобраться пожалуйста...
    Код:
    Процедура ПриОткрытии()
    Параметр=Форма.Параметр;
    ДатаР=Параметр.ПолучитьЗначение(1,"ДатаРапорт");
    См=Параметр.ПолучитьЗначение(2,"Смена");
    Марш=Параметр.ПолучитьЗначение(3,"Маршрут");
    СписокРасписаний=СоздатьОбъект("СписокЗначений");
    Если НомерДняНедели(ДатаР)=6 Тогда
    Значение=6;
    ИначеЕсли НомерДняНедели(ДатаР)=7 Тогда
    Значение=7;
    Иначе Значение=1;	
    КонецЕсли;
    Расп=СоздатьОбъект("Справочник.Расписания");
    Первый=СоздатьОбъект("Справочник.Расписания");
    Флаг=0;
    Расп.ИспользоватьВладельца(Марш);
    Расп.ИспользоватьДату(ДатаР);
    Расп.ВыбратьЭлементы();
    Пока Расп.ПолучитьЭлемент()=1 Цикл
    Если (Расп.День=Значение) и (Расп.Смена=См) Тогда
    СписокРасписаний.ДобавитьЗначение(Расп.ТекущийЭлемент());
    Если Флаг=0 Тогда
    Первый=Расп.ТекущийЭлемент();
    Флаг=1;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;	
    ИспользоватьСписокЭлементов(СписокРасписаний);
    Если (Первый.Выбран()=1) и (ПустоеЗначение(Первый)=0) и (СписокРасписаний.НайтиЗначение(Первый)>0) Тогда
    АктивизироватьОбъект(Первый);
    Сообщить("Ок");
    КонецЕсли;
    КонецПроцедуры //ПриОткрытии
    
  2. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Как я понимаю проблема при интерактивном поиске элемента??? Тогда перед началом набора текста для поиска просто нижимай кнопку "HOME".
  3. TopicStarter Overlay
    tjv
    Offline

    tjv

    Регистрация:
    19 май 2008
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Это не выход, к сожалению. Будет обработка большого массива информации - ввод цифровой информации, и таких справочников будет несколько, оператору неудобно все время переключаться с клавиатуры на мышь. Кроме того, в типовой конфигурации "1С:Бухгалтерия" есть аналогичный пример, Справочник ВидыДоходов форма списка ДляНалКарт. Правда мы его не используем и проверить его работу не могу. Поэтому буду благодарна если поможете разобраться именно с этой проблемой.
  4. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    А зачем нужна мышь???
    Цифры находятся на клавиатуре, "HOME" тоже.
    Для добавления строки "INS", редактирование реквизита "F4", а элемента справочника "Shift+Enter".
    Если правильно спланировать формы, то для "набивки" документов мышь не нужна вообше, и скорость при этом очень возрастает.
  5. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    Ты в конце концов используешь список элементов, а не справочник.
    Копай в сторону
    СписокРасписаний.ДобавитьЗначение(Расп.ТекущийЭлемент()); Если Флаг=0 Тогда Первый=СписокРасписаний.ТекущаяСтрока(); Флаг=1; КонецЕсли;

    и далее не АктивизироватьОбъект(Первый);, а
    СписокРасписаний.ТекущаяСтрока(Первый);
    ЗЫ: сам не пробовал, так на вскидку
  6. TopicStarter Overlay
    tjv
    Offline

    tjv

    Регистрация:
    19 май 2008
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Если я правильно понимаю, то ТекущаяСтрока - метод для работы с элементами диалога типа "поле списка" или "список", т.е. в форме элемента справочника, а у меня форма списка - на получается.
  7. TopicStarter Overlay
    tjv
    Offline

    tjv

    Регистрация:
    19 май 2008
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Спасибо, в качестве выхода из ситуации можно и так, но все таки хотелось бы разобраться.
  8. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    АктивизироватьОбъект(); - Используется в формах СПИСКА справочника и журналах документов. Устанавливает фокус на нужную строку.

    НомерСтроки - как правило реквизит документа или таблицы значений. Указывает к значениям какой строки можно обращаться через реквизиты табличной части (названия колонок таблицы значений)

    ТекущаяСтрока() - метод, возвращающий номер строки, обрабатываемой в текущий момент в таблице значений или списке значений

    Все это бодробно в сопровождаемой документации
  9. TopicStarter Overlay
    tjv
    Offline

    tjv

    Регистрация:
    19 май 2008
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Документацию я читала, и приводимая процедура как раз из формы списка справочника. Только она не работает! не работает как раз в строке АктивизироватьОбъект. в отладчике - ошибка в выражении
  10. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Во-первых, в списке какого справочника используется процедура "ПриОткрытии"
    (Работать будет только в списке "Справочник.Расписания")

    Во-вторых, условие можно ооочень сократить (зачем 3 раза проверять одно и то же)

    Ну и еще как вариант, передавать в процедуру не ссылку на элемент, а сам элемент, т.е.

    Код:
    Если Первый.Выбран()=1  Тогда
    АктивизироватьОбъект(Первый.ТекущийЭлемент());
    Сообщить("Ок");
    КонецЕсли;
    
    
  11. TopicStarter Overlay
    tjv
    Offline

    tjv

    Регистрация:
    19 май 2008
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Процедура именно в этом справочнике, условие - это по-моему не принципиально, при передаче самого элемента - тоже не работает.
    А еще. Если убрать ИспользоватьСписокЭлементов (справочник конечно не удовлетворяет потребностям), то тогда все равно поизионирует на ранее выбранный элемент, но при наборе с клавиатуры, даже если набираешь наименование элемента выше ранее вытранного, то все равно курсор позиционируется. А при ИспользоватьСписокЭлементов, позиционирование идет только ниже по списку. Можно это как-то обойти?
  12. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Будем считать это глюком предприятия (а релиз какой?)
    Обойти можоно - програмно нажать клавишу "HOME", а потом искать из ниже стоящих.
    Код:
    WSHShell = СоздатьОбъект("WScript.Shell");
    WSHShell.SendKeys("{HOME}");
    WSHShell = 0;
    
    
    
  13. TopicStarter Overlay
    tjv
    Offline

    tjv

    Регистрация:
    19 май 2008
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Спасибо большое! получилось то что нужно :unsure:

Поделиться этой страницей