8.х установить текущую строку в табличной части

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем udmesk, 2 дек 2008.

  1. TopicStarter Overlay
    udmesk
    Offline

    udmesk

    Регистрация:
    2 дек 2008
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    Получить как то, что хочу знаю, а как сделать ее текущей?

    Надо сделать текущей следующую строку после редактирования, делаю это так:

    Процедура ТабличнаяЧастьПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
    Индекс = ТабличнаяЧасть.Индекс(ЭлементыФормы.ТабличнаяЧасть.ТекущаяСтрока)+1;
    Стр = ТабличнаяЧасть.ТабличнаяЧасть.Получить(Индекс);
    ???
    КонецПроцедуры
  2. Maks21
    Offline

    Maks21

    Регистрация:
    17 сен 2008
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    а зачем? )))
  3. TopicStarter Overlay
    udmesk
    Offline

    udmesk

    Регистрация:
    2 дек 2008
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    ну пользователь в табличной части заполняет только колонку количество. Так чтобы он на первую строку встал там забил количество и у него автоматом шагнуло на след строку в количество, как в Excel при заполнении ячеек чтобы шагал вниз по этой колонке.
  4. x_under
    Offline

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

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    А строки в документе заполнены??? Пользователь не добавляет их???
  5. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    ЭлементыФормы.ТЧ.ТекущаяСтрока = СТР;
  6. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Согласен. Это, наверно, единственный способ переместиться на другую строку.
    Пара замечаний:
    Нужна проверка индекса, чтобы он не вышел за пределы на последней строке;
    В событии "ПриОкончанииРедактирования" это работать не будет.

    В общем, примерно так:

    Код:
    //Переход на следующую от текущей строку
    //Параметры:
    //ПолеТабличнойЧасти - элемент формы Табличное поле, связанный с одной из табличных
    //частей документа
    //ТабличнаяЧасть - табличная часть документа, с которой связано ПолеТабличнойЧасти
    Процедура СледующаяСтрока(ПолеТабличнойЧасти, ТабличнаяЧасть)
    //Получим номер текущей строки табличного поля
    Индекс = ПолеТабличнойЧасти.ТекущиеДанные.НомерСтроки;
    //Если строка не последняя, то сдвинемся вниз
    Если Индекс<ТабличнаяЧасть.Количество() Тогда
    //Так как номер строки на единицу больше, чем ее индекс,
    //индекс следующей строки будет совпадать с номером текущей
    ПолеТабличнойЧасти.ТекущаяСтрока = ТабличнаяЧасть[Индекс];
    КонецЕсли;
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/конецпроцедуры')">КонецПроцедуры	</span>
    
    
    Вызывать процедуру придется из события "ПриИзменении" поля ввода соответствующего реквизита табличной части (судя из предыдущих постов "Количество")
  7. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    Сделайц проще...
    закинь получение индекса и позиционирование строки в ПОПЫТКУ
    т.е.
    попытка
    Строка....
    Исключение
    // значит последняя строка
    КонецПопытки;
    и все.. при генерации исключения ничего делаться не будет и никаких доп проверок не надо
  8. TopicStarter Overlay
    udmesk
    Offline

    udmesk

    Регистрация:
    2 дек 2008
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    Всем спасибо за ответы.
    Да действительно "ПриОкончанииРедактирования" это не работает как и "ПриИзменении" в количестве.
    работает в событии тч "ПриВыводеСтроки" поэтому остановился на следующем коде.
    Криво конечно, но работает, пришлось пару фильтров добавить, ато он в "ПриВыводеСтроки" лезет постоянно.
    Вот код:
    Код:
    Процедура ТабличнаяЧастьПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    Попытка
    Если ЭлементыФормы.ТабличнаяЧасть.ТекущаяСтрока <> Неопределено Тогда
    Если ЭлементыФормы.ТабличнаяЧасть.ТекущаяСтрока.НомерСтроки < ТабличнаяЧасть.Количество() Тогда
    Индекс =  ТабличнаяЧасть.Индекс(ЭлементыФормы.ТабличнаяЧасть.ТекущаяСтрока)+1;
    Элемент.ТекущаяСтрока = ТабличнаяЧасть.Получить(Индекс);
    КонецЕсли;
    КонецЕсли;
    Исключение
    КонецПопытки
    КонецПроцедуры
    
  9. TopicStarter Overlay
    udmesk
    Offline

    udmesk

    Регистрация:
    2 дек 2008
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    Спасибо ASh закинул в событие "ПриИзменении" поля ввода "Количество" следующий код все работает:
    Код:
    Процедура ТабличнаяЧастьКоличествоПриИзменении(Элемент)
    //Получим номер текущей строки табличного поля
    Индекс = ЭлементыФормы.ТабличнаяЧасть.ТекущаяСтрока.НомерСтроки;
    //Если строка не последняя, то сдвинемся вниз
    Если Индекс<ТабличнаяЧасть.Количество() Тогда                            
    //Так как номер строки на единицу больше, чем ее индекс,
    //индекс следующей строки будет совпадать с номером текущей
    ЭлементыФормы.ТабличнаяЧасть.ТекущаяСтрока = ТабличнаяЧасть[Индекс];
    КонецЕсли;
    КонецПроцедуры
    
    
  10. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    можно и проще )) Сделай просто попытку
    попытка
    ЭлементыФормы.ТабличнаяЧасть.ТекущаяСтрока = ТабличнаяЧасть[Индекс];
    Исключение
    КонецПопытки;
  11. TopicStarter Overlay
    udmesk
    Offline

    udmesk

    Регистрация:
    2 дек 2008
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    согласен это будет предел совершенства кода для данной задачки:unsure:

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