Разработка интерфейсных решений на платформе 1С:Предприятие 7.7 часто сопряжена с определенными ограничениями. Одной из классических задач является организация удобного ввода данных в табличную часть документа. Стандартное поведение системы предполагает выбор элемента из справочника через диалоговое окно, однако для операторов склада или розничных точек гораздо удобнее вводить код товара, артикул или штрихкод напрямую в строку и сразу получать найденную номенклатуру.
Проанализируем ситуацию: основной проблемой является то, что обычная колонка типа "Текст" в табличной части 1С 7.7 не является полем ввода. Она предназначена лишь для отображения вычисляемых данных. Рассмотрим подробнее доступные методы решения этой задачи, от стандартных средств до использования внешних компонент.
Это самый простой и надежный способ, не требующий сторонних библиотек. Несмотря на то, что авторы обсуждений иногда стремятся избежать "лишних" реквизитов в структуре метаданных, этот подход обеспечивает максимальную стабильность.
Разберем по шагам реализацию этого метода:
ВводКода с типом "Строка".ПриИзмененииКода().Теперь проанализируем пример кода, который будет обрабатывать ввод:
Процедура ПриИзмененииКода()
// Получаем текущее значение введенного кода
ВведКод = СокрЛП(ВводКода);
Если ПустаяСтрока(ВведКод) = 1 Тогда
Возврат;
КонецЕсли;
// Пытаемся найти товар по коду
СпрНоменклатура = СоздатьОбъект("Справочник.Номенклатура");
Если СпрНоменклатура.НайтиПоКоду(ВведКод, 0) = 1 Тогда
Товар = СпрНоменклатура.ТекущийЭлемент();
// После успешного поиска очищаем поле ввода для удобства следующего ввода
ВводКода = "";
Иначе
Предупреждение("Товар с таким кодом не найден!", 2);
КонецЕсли;
КонецПроцедуры
Важный момент: если мы хотим искать не только по коду, но и по артикулу или штрихкоду, мы можем добавить логику перебора. Программа сначала проверит совпадение по одному полю, затем по другому, обеспечивая универсальность ввода.
Если мы принципиально не хотим загромождать табличную часть новыми колонками, рассмотрим вариант с выносным полем ввода. Посмотрим на этот алгоритм: пользователь перемещается по табличной части, а фокус для ввода данных переводит в отдельное текстовое поле, расположенное над таблицей или под ней.
В этом случае последовательность действий будет следующей:
ПолеБыстрогоВвода.НомерСтроки и подставит туда найденный товар.Этот способ часто критикуют за необходимость переключать фокус (нажимать мышкой или Tab), однако он позволяет оставить структуру документа "чистой".
Для продвинутых разработчиков 1С 7.7 наиболее элегантным решением является использование внешней компоненты FormEx. Она позволяет расширить событийную модель формы и перехватывать нажатия клавиш клавиатуры еще до того, как они будут обработаны стандартными механизмами платформы.
Разберем, как это работает. С помощью FormEx мы можем отловить событие ПриНажатииКнопкиКлавиатуры. Если фокус находится в определенной колонке табличной части, мы можем программно вызвать окно ввода значения или начать накапливать вводимые символы в буфер.
Основные преимущества использования FormEx:
Еще один профессиональный путь — полная замена стандартной таблицы документа на объект "Табличное поле" (Grid) из состава компоненты 1С++. Это превращает работу с таблицей в подобие того, как это реализовано в современных версиях 1С 8.x.
Проанализируем возможности этого метода:
ПослеРедактированияДанных, ПриВыбореЯчейки и другие.Рассмотрим пример логики при использовании табличного поля:
// Пример перехвата события после завершения редактирования ячейки "Код"
Процедура ПослеРедактирования(Контекст, НомерСтроки, НомерКолонки, Значение)
ИмяКолонки = Контекст.Контроль.ПолучитьИмяКолонки(НомерКолонки);
Если ИмяКолонки = "КодТовара" Тогда
// Здесь выполняется поиск товара в справочнике
// и обновление соседней ячейки "Товар"
КонецЕсли;
КонецПроцедуры
Иногда самым эффективным решением оказывается не модификация самой таблицы, а создание удобной формы подбора. Выясним причину популярности этого метода: он позволяет пользователю работать в специализированном интерфейсе, где реализован полнотекстовый поиск или поиск по вхождению строки.
В этом случае в табличной части оставляется стандартное поле "Товар", но при начале выбора значения (процедура ПриНачалеВыбораЗначения) мы открываем свою форму подбора. В ней пользователь может быстро насканировать штрихкоды или ввести артикулы, а программа будет автоматически добавлять строки в основной документ.
Подводя итог, можно сказать: если ваша задача требует быстрого внедрения без установки сторонних компонент — используйте служебный реквизит в ТЧ. Если же вам нужен современный, быстрый и максимально удобный интерфейс, стоит обратить внимание на связку 1С++ и FormEx.