Как автоматически заполнить данные в строке табличной части 1С 7.7 при выборе элемента справочника

Программист 1С v7.7
← На главную

В работе с устаревшими, но все еще актуальными конфигурациями на платформе 1С:Предприятие 7.7 часто возникает задача ускорения ручного ввода данных. Представьте ситуацию: вам необходимо восстановить десятки актов, в каждом из которых сотни строк номенклатуры. Выбирать каждый элемент через стандартное дерево справочника — процесс крайне трудоемкий. В этой статье мы подробно разберем, как реализовать автоматический поиск и подстановку данных (артикула и цены) в табличную часть (ТЧ) документа при вводе названия материала.

Метод 1: Программный поиск по наименованию через формулу колонки

Этот способ позволяет реализовать следующую логику: пользователь вводит текст в колонку "Материал", нажимает Enter, и система сама находит соответствующий элемент в справочнике, заполняя остальные реквизиты строки. Рассмотрим этот процесс по шагам.

Во-первых, нам необходимо зайти в Конфигуратор, открыть форму нужного документа и найти свойства колонки "Материал" в табличной части. На закладке "Дополнительно" в поле "Формула" следует прописать название процедуры, которая будет срабатывать при изменении значения в ячейке. Назовем её ПриИзмененииМатериала().

Теперь перейдем в модуль формы документа и проанализируем код, который нам понадобится написать. Разберем пример реализации:


Процедура ПриИзмененииМатериала()
    // Создаем объект справочника для поиска
    Спр = СоздатьОбъект("Справочник.Номенклатура");
    
    // Получаем введенное пользователем значение из текущей строки
    ТекНазвание = Материал; 
    
    // Пытаемся найти элемент по полному или частичному совпадению
    // Параметры: НайтиПоНаименованию(СтрокаПоиска, РежимПоиска, РежимСоответствия)
    // 0 - поиск во всем справочнике, 1 - поиск по начальной части строки
    Если Спр.НайтиПоНаименованию(ТекНазвание, 0, 1) = 1 Тогда
        // Если элемент найден, присваиваем ссылочное значение в ТЧ
        Материал = Спр.ТекущийЭлемент();
        
        // Автоматически заполняем Артикул и Цену
        Артикул = Спр.Артикул;
        
        // Важный момент: если цена периодическая, используем метод Получить()
        Цена = Спр.Цена.Получить(ДатаДок);
        
        // Пересчитываем сумму строки, если это необходимо
        Сумма = Количество * Цена;
    Иначе
        Предупреждение("Материал с таким названием не найден!");
    КонецЕсли;
КонецПроцедуры

Разберем, почему мы использовали метод Получить(ДатаДок) для цены. В 1С 7.7 цены часто хранятся как периодические реквизиты. Это означает, что значение цены меняется во времени. Если мы просто обратимся к Спр.Цена, система может вернуть пустое значение или актуальное на текущий момент, в то время как нам нужна цена, действовавшая на дату оформления документа.

Метод 2: Оптимизация через режим "Подбор"

Если в справочнике много похожих названий (например, "Грымзалка сепульная" и "Грымзалка вонявая"), автоматический поиск из первого метода может выбрать не тот элемент. В этом случае эффективнее использовать механизм Подбора.

Проанализируем, как настроить подбор так, чтобы он работал максимально быстро. Мы можем вызвать форму выбора справочника программно при нажатии кнопки или по горячей клавише. В 1С 7.7 для этого используется команда ОткрытьПодбор.


Процедура СделатьПодбор()
    // Открываем справочник в режиме подбора
    // "ДляВыбора" - это название формы списка в конфигураторе
    ОткрытьПодбор("Справочник.Номенклатура", "ФормаСписка", Контекст, 0);
КонецПроцедуры

Процедура ОбработкаПодбора(Элемент)
    // Данная процедура срабатывает, когда пользователь выбирает товар в справочнике
    НоваяСтрока();
    Материал = Элемент;
    Артикул = Элемент.Артикул;
    Цена = Элемент.Цена.Получить(ДатаДок);
КонецПроцедуры

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

Метод 3: Использование вычисляемых текстовых граф

Рассмотрим ситуацию, когда вам не нужно хранить артикул непосредственно в табличной части документа, а достаточно лишь отображать его для печати или проверки. В 1С 7.7 есть элегантное решение — текстовые колонки.

Выясним, как это работает. Вместо того чтобы создавать в структуре документа реальный реквизит "Артикул", мы создаем в табличной части на форме "Текст" (на панели инструментов редактора форм). В свойствах этого текста на закладке "Дополнительно" в поле "Выражение" пишем:

Материал.Артикул

В этом случае система будет динамически "вытягивать" артикул из карточки товара прямо в момент отрисовки формы. Это экономит место в базе данных и гарантирует, что вы всегда видите актуальный артикул, привязанный к конкретной номенклатуре.

Метод 4: Массовое восстановление через импорт из Excel

Если перед вами стоит задача восстановить 60 объектов с тысячами строк, даже самый быстрый ручной ввод может затянуться на недели. Посмотрим на проблему шире: если акты есть в бумажном виде, их можно отсканировать.

Проанализируем алгоритм действий для такой ситуации:

  1. Сканируем бумажные документы и распознаем их с помощью программ класса OCR (например, ABBYY FineReader).
  2. Сохраняем результат в формат Excel (XLS). Важно следить, чтобы колонки "Артикул", "Наименование", "Количество" и "Цена" были четко разделены.
  3. Пишем или используем готовую обработку для 1С 7.7 "Загрузка из Excel".

При импорте данных крайне важно осуществлять поиск товара не по наименованию (которое при распознавании может содержать ошибки типа "гримзалка" вместо "грымзалка"), а по артикулу или коду. Код — это числовой идентификатор, который система распознает гораздо точнее.

Пример логики загрузки из внешнего файла:


// Фрагмент кода загрузки
Excel = СоздатьОбъект("Excel.Application");
// ... открытие файла и цикл по строкам ...
КодТовара = СокрЛП(Excel.Cells(Строка, 1).Value);
Если Спр.НайтиПоКоду(КодТовара) = 1 Тогда
    НоваяСтрока();
    Материал = Спр.ТекущийЭлемент();
    Количество = Число(Excel.Cells(Строка, 3).Value);
    // И так далее...
КонецЕсли;

Подведение итогов и важные замечания

Мы рассмотрели несколько подходов к решению задачи автоматизации в 1С 7.7. Выбор конкретного метода зависит от точности ваших данных и объема работы:

Важный совет: всегда делайте архивную копию базы данных перед внесением изменений в конфигурацию или массовой загрузкой данных. В 1С 7.7 это делается простым копированием папки с базой (файлы .dbf и .md).

← На главную