Есть документ с табличной частью. Задача состоит в том, чтобы при заполнении первой ячейки (там указывается штрихкод с помощью сканера штрихкодов) в строке осуществлялся автоматический переход на следующую строку. Надо чтобы туда переходил курсор.

В идеале нужен вообще автоматический переход, к примеру когда количество символов доходит до определенного уровня (штрихкод можно вводить и вручную), но подойдет и по нажатию на клавишу enter.

```1c
    &НаКлиенте
    Процедура ТаблицаШтрихкодовШтрихкодПриИзменении(Элемент)
    Строка = Элементы.ТаблицаШтрихкодов.ТекущиеДанные;
    Если Строка.НомерСтроки > 1 Тогда
    Строка.Склад = Объект.ТаблицаШтрихкодов[Элементы.ТаблицаШтрихкодов.ТекущиеДанные.НомерСтроки-2].Склад;
    КонецЕсли;
    Строка.Номенклатура = ПолучитьНоменклатуру(Строка.Штрихкод);
    Строка.Количество = 1;
    СлужебноеСообщение(Строка.Номенклатура, Строка.Штрихкод);
    НоваяСтрока = Объект.ТаблицаШтрихкодов.Добавить();
    КонецПроцедуры
```

На данный момент при нажатии enter курсор переходит на следующую ячейку в текущей строке.
---
либо сенд кеем, можно сэмитировать нажатие "ввода"
SendKeys.Send("{ENTER}").

или в самом сканере штрих кода, наверняка можно посыл после штрих кода засылать еще один ентер
---
```1c
    Процедура КоличествоИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)
```

оно?
---
пример установки текущей строки на последнюю.

```1c
    &НаКлиенте
    Процедура УстановитьПоследнююТекущуюСтроку()
    Элементы.СостоянияЗаявки.ТекущаяСтрока=?(Объект.СостоянияЗаявки.Количество()=0,0,Объект.СостоянияЗаявки.Количество()-1);
    КонецПроцедуры
```

так же и у вас,
Элементы.ТаблицаШтрихкодов.ТекущаяСтрока = идентификаторстроки (число).
---
```1c
    &НаКлиенте
    Процедура ТаблицаШтрихкодовШтрихкодПриИзменении(Элемент)
    Строка = Элементы.ТаблицаШтрихкодов.ТекущиеДанные;
    Если Строка.НомерСтроки > 1 Тогда
    Строка.Склад = Объект.ТаблицаШтрихкодов[Элементы.ТаблицаШтрихкодов.ТекущиеДанные.НомерСтроки-2].Склад;
    КонецЕсли;
    Строка.Номенклатура = ПолучитьНоменклатуру(Строка.Штрихкод);
    Строка.Количество = 1;
    СлужебноеСообщение(Строка.Номенклатура, Строка.Штрихкод);
    НоваяСтрока = Объект.ТаблицаШтрихкодов.Добавить();
    УстановитьПоследнююТекущуюСтроку();
    КонецПроцедуры

    &НаКлиенте
    Процедура УстановитьПоследнююТекущуюСтроку()
    Элементы.ТаблицаШтрихкодов.ТекущаяСтрока=?(Объект.ТаблицаШтрихкодов.Количество()=0,0,Объект.ТаблицаШтрихкодов.Количество()-1);
    КонецПроцедуры
```

Не сработало, ячейка в новой строке не становиться активной, надо ее сначала прощелкать
---
так строка вообще появляется в таблице ? Есть на что позиционироваться то ?
список обновить еще надо. Или форму целиком.
или сэмулировать нажатия клавиш

```1c
    ТекущийЭлемент = Элементы.твойСписок;
    Shell = Новый COMОбъект("WScript.Shell");
    Shell.SendKeys("^{END}");
```
---
Я не совсем точно сказал, ваша процедура отработала нормально, т.е. переход произошел на новую строку, а не на новую ячейку.

Просто ячейка не открыта для редактирования. В итоге происходит то что на рисунке 1, а мне надо как на рисунке 2
---
у колонки режим выбора можно сделать при активизации.
---
режим выбора можно сделать при активизации
Не могу найти, где он задается
---
вот этим поиграйся
---
Это настройка у меня задана, но ячейка все равно не открывается для редактирования, просто выделяется и все. Если добавляю строку через кнопку "Добавить", то ячейка открывается для редактирования, все как надо, но если добавление идет через процедуру в форме, то она просто выделяется
---
Это настройка у меня задана
так ты ее поменяй. Я же говорю поиграйся.
Естественно, радактирование - при вводе, как и написано. Сделай непосредственно, там еще третий вариант какой то есть
---
Поигрался, без толку, при любой из настроек не происходит открытия ячейки
---
спасибо
---
либо сенд кеем, можно сэмитировать нажатие "ввода"
SendKeys.Send("{ENTER}").

или в самом сканере штрих кода, наверняка можно посыл после штрих кода засылать еще один ентер
---
такого не встречал, чтоб еще один ентер или еще чего
нада просто указать автодобавление строки у ТЧ мобыть
---
Смутно припоминаю, что делал сабж. И вроде там был ньюанс, чтобы осуществлять переход не напрямую из обработчика события изменения ячейки, а так сказать независимо - через подключение обработки ожидания на доли секунды.
---
Не самое хорошее решение, хотя я другого не знаю
---
что насчет
SendKeys.Send("{ENTER}"). ?
---
Я его еще не сделал, для меня главное сейчас это открыть ячейку для редактирования. В любом случае надо задать условие, по которому будет запускаться код. Т.е. грамотно указать момент, когда произойдет имтация enter
---
ты же говришь что у тебя на строку новую позиционируется, и функция установитьпоследнюю строку отрабатывает.
Пот после этой строки остается только нажать ввод, чтобы строка вошла в режим редактирования.
Вот туда и добавляй.
---
Да, вы правы, сейчас и пытаюсь это сделать, но я с com объектами не работал, поэтому не получается

```1c
    &НаКлиенте
    Процедура ТаблицаШтрихкодовШтрихкодПриИзменении(Элемент)
    Строка = Элементы.ТаблицаШтрихкодов.ТекущиеДанные;
    Если Строка.НомерСтроки > 1 Тогда
    Строка.Склад = Объект.ТаблицаШтрихкодов[Элементы.ТаблицаШтрихкодов.ТекущиеДанные.НомерСтроки-2].Склад;
    КонецЕсли;
    Строка.Номенклатура = ПолучитьНоменклатуру(Строка.Штрихкод);
    Строка.Количество = 1;
    СлужебноеСообщение(Строка.Номенклатура, Строка.Штрихкод);
    НоваяСтрока = Объект.ТаблицаШтрихкодов.Добавить();
    УстановитьПоследнююТекущуюСтроку();
    ОткрытьЯчейкуДляРедактирования();
    КонецПроцедуры

    &НаКлиенте
    Процедура УстановитьПоследнююТекущуюСтроку()
    Элементы.ТаблицаШтрихкодов.ТекущаяСтрока = ?(Объект.ТаблицаШтрихкодов.Количество()=0,0,Объект.ТаблицаШтрихкодов.Количество()-1);
    КонецПроцедуры

    &НаСервере
    Процедура ОткрытьЯчейкуДляРедактирования()
    Shell= Новый COMОбъект("Wscript.Shell");
    Shell.SendKeys("{ENTER}");
    КонецПроцедуры
```
---
зачем ты на сервере это делаешь ?
при переходе с сервера на клиент, весь контекст формы перерисовывается.
На клиенте это и делай
---
Дурак, бывает))

В идеале сейчас еще надо, чтобы при вводе определенного количества символов автоматически отрабатывали процедуры создания новой строки и перехода на нее
---
если длина используемого штрих-кода постоянна, то проблем с алгоритмом быть не должно
---
Длина будет постоянна, номенклатурных позиций всего несколько тысяч и сам штрихкод мы задаем сами.

Но вот я не понимаю как осуществлять проверку длины штрихкода во время ввода, после окончания ввода оно записывается в реквизит, но до записи этот код нигде не записан, как его проверять.

А тут главное осуществлять проверку еще до записи значения
---
```1c
    Процедура КоличествоИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)
```

оно?
---
КоличествоИзменениеТекстаРедактирования

Это процедура из БСП?
---
событие
---
Да, отлично, все заработало

```1c
    &НаКлиенте
    Процедура УстановитьПоследнююТекущуюСтроку()
    Элементы.ТаблицаШтрихкодов.ТекущаяСтрока = ?(Объект.ТаблицаШтрихкодов.Количество()=0,0,Объект.ТаблицаШтрихкодов.Количество()-1);
    КонецПроцедуры

    &НаКлиенте
    Процедура ОткрытьЯчейкуДляРедактирования()
    Shell= Новый COMОбъект("Wscript.Shell");
    Shell.SendKeys("{ENTER}");
    КонецПроцедуры

    &НаКлиенте
    Процедура ТаблицаШтрихкодовШтрихкодИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)
    Если СтрДлина(Текст) > 10 Тогда
    НоваяСтрока = Объект.ТаблицаШтрихкодов.Добавить();
    УстановитьПоследнююТекущуюСтроку();
    ОткрытьЯчейкуДляРедактирования();
    КонецЕсли
    КонецПроцедуры
```
---
Всем спасибо за помощь, получилось то что надо