Переход на следующую строку табличной части

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

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

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


На данный момент при нажатии enter курсор переходит на следующую ячейку в текущей строке.
По теме из базы знаний
Найденные решения
7. Boneman 298 17.08.18 13:49 Сейчас в теме
либо сенд кеем, можно сэмитировать нажатие "ввода"
SendKeys.Send("{ENTER}").

или в самом сканере штрих кода, наверняка можно посыл после штрих кода засылать еще один ентер
tatoshka0403; +1 Ответить
24. Fox-trot 158 17.08.18 15:23 Сейчас в теме
Процедура КоличествоИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)

оно?
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Boneman 298 17.08.18 12:34 Сейчас в теме
(1)
пример установки текущей строки на последнюю.
&НаКлиенте
Процедура УстановитьПоследнююТекущуюСтроку()
	Элементы.СостоянияЗаявки.ТекущаяСтрока=?(Объект.СостоянияЗаявки.Количество()=0,0,Объект.СостоянияЗаявки.Количество()-1);
КонецПроцедуры


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

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


Не сработало, ячейка в новой строке не становиться активной, надо ее сначала прощелкать
4. Boneman 298 17.08.18 13:37 Сейчас в теме
(3) так строка вообще появляется в таблице ? Есть на что позиционироваться то ?
список обновить еще надо. Или форму целиком.
или сэмулировать нажатия клавиш
ТекущийЭлемент = Элементы.твойСписок; 
Shell = Новый COMОбъект("WScript.Shell"); 
Shell.SendKeys("^{END}");
5. MikhailDr 17.08.18 13:41 Сейчас в теме
(4)
Я не совсем точно сказал, ваша процедура отработала нормально, т.е. переход произошел на новую строку, а не на новую ячейку.

Просто ячейка не открыта для редактирования. В итоге происходит то что на рисунке 1, а мне надо как на рисунке 2
Прикрепленные файлы:
6. Boneman 298 17.08.18 13:47 Сейчас в теме
у колонки режим выбора можно сделать при активизации.
9. MikhailDr 17.08.18 14:08 Сейчас в теме
(6)
режим выбора можно сделать при активизации

Не могу найти, где он задается
10. Boneman 298 17.08.18 14:15 Сейчас в теме
(9) вот этим поиграйся
Прикрепленные файлы:
user2023499; +1 Ответить
11. MikhailDr 17.08.18 14:21 Сейчас в теме
(10)
Это настройка у меня задана, но ячейка все равно не открывается для редактирования, просто выделяется и все. Если добавляю строку через кнопку "Добавить", то ячейка открывается для редактирования, все как надо, но если добавление идет через процедуру в форме, то она просто выделяется
Прикрепленные файлы:
12. Boneman 298 17.08.18 14:23 Сейчас в теме
(11)
Это настройка у меня задана

так ты ее поменяй. Я же говорю поиграйся.
Естественно, радактирование - при вводе, как и написано. Сделай непосредственно, там еще третий вариант какой то есть
13. MikhailDr 17.08.18 14:26 Сейчас в теме
(12)
Поигрался, без толку, при любой из настроек не происходит открытия ячейки
29. user2023499 29.01.24 10:10 Сейчас в теме
7. Boneman 298 17.08.18 13:49 Сейчас в теме
либо сенд кеем, можно сэмитировать нажатие "ввода"
SendKeys.Send("{ENTER}").

или в самом сканере штрих кода, наверняка можно посыл после штрих кода засылать еще один ентер
tatoshka0403; +1 Ответить
8. Fox-trot 158 17.08.18 14:04 Сейчас в теме
такого не встречал, чтоб еще один ентер или еще чего
нада просто указать автодобавление строки у ТЧ мобыть
14. herfis 498 17.08.18 14:31 Сейчас в теме
Смутно припоминаю, что делал сабж. И вроде там был ньюанс, чтобы осуществлять переход не напрямую из обработчика события изменения ячейки, а так сказать независимо - через подключение обработки ожидания на доли секунды.
15. MikhailDr 17.08.18 14:34 Сейчас в теме
(14)
Не самое хорошее решение, хотя я другого не знаю
16. Boneman 298 17.08.18 14:37 Сейчас в теме
(15)
что насчет
SendKeys.Send("{ENTER}"). ?
17. MikhailDr 17.08.18 14:42 Сейчас в теме
(16)
Я его еще не сделал, для меня главное сейчас это открыть ячейку для редактирования. В любом случае надо задать условие, по которому будет запускаться код. Т.е. грамотно указать момент, когда произойдет имтация enter
18. Boneman 298 17.08.18 14:52 Сейчас в теме
(17) ты же говришь что у тебя на строку новую позиционируется, и функция установитьпоследнюю строку отрабатывает.
Пот после этой строки остается только нажать ввод, чтобы строка вошла в режим редактирования.
Вот туда и добавляй.
19. MikhailDr 17.08.18 15:03 Сейчас в теме
(18)
Да, вы правы, сейчас и пытаюсь это сделать, но я с com объектами не работал, поэтому не получается

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

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

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

В идеале сейчас еще надо, чтобы при вводе определенного количества символов автоматически отрабатывали процедуры создания новой строки и перехода на нее
22. Fox-trot 158 17.08.18 15:19 Сейчас в теме
если длина используемого штрих-кода постоянна, то проблем с алгоритмом быть не должно
23. MikhailDr 17.08.18 15:21 Сейчас в теме
(22)
Длина будет постоянна, номенклатурных позиций всего несколько тысяч и сам штрихкод мы задаем сами.

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

А тут главное осуществлять проверку еще до записи значения
24. Fox-trot 158 17.08.18 15:23 Сейчас в теме
Процедура КоличествоИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)

оно?
25. MikhailDr 17.08.18 15:27 Сейчас в теме
(24)
КоличествоИзменениеТекстаРедактирования


Это процедура из БСП?
26. Fox-trot 158 17.08.18 15:32 Сейчас в теме
27. MikhailDr 17.08.18 15:49 Сейчас в теме
(26)Да, отлично, все заработало

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

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

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот