База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как сформировать запрос к базе данных на основе распознанного текста? › RE: Как сформировать запрос к базе данных на основе распознанного текста?
Для формирования запроса к базе данных на основе распознанного текста в 1С:Предприятии необходимо выполнить следующие шаги:
1. **Получение и обработка распознанного текста**
После распознавания речи у вас есть строка с текстом, например:
"Показать все документы продажи за август"
Важно выделить из этой строки ключевые параметры для запроса: тип объекта (документы продажи), период (август), и т.д.
2. **Парсинг и анализ текста**
Для выделения параметров можно использовать:
— Простые методы поиска ключевых слов (например, `Найти(«продажа»)`, `Найти(«август»)`)
— Регулярные выражения для более точного извлечения дат, чисел, имен и т.п.
— Встроенные средства 1С для работы с датами и строками
3. **Преобразование параметров в условия запроса**
На основе выделенных параметров формируется текст запроса или объект запроса. Например:
1C
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
ДокументПродажи.Ссылка,
ДокументПродажи.Дата,
ДокументПродажи.Сумма
ИЗ
Документ.Продажа КАК ДокументПродажи
ГДЕ
ДокументПродажи.Дата МЕЖДУ &ДатаНачала И &ДатаКонца";
Запрос.УстановитьПараметр("ДатаНачала", НачалоАвгуста);
Запрос.УстановитьПараметр("ДатаКонца", КонецАвгуста);
Здесь `НачалоАвгуста` и `КонецАвгуста` — вычисленные даты на основе распознанного текста.
4. **Выполнение запроса и обработка результата**
1C Результат = Запрос.Выполнить(); ТаблицаРезультатов = Результат.Выгрузить(); // Далее вывод или обработка данных
5. **Пример упрощённого алгоритма**
1C
ТекстРаспознанный = "Показать все документы продажи за август";
Если Найти(ТекстРаспознанный, "продажа") > 0 Тогда
// Определяем период
Если Найти(ТекстРаспознанный, "август") > 0 Тогда
НачалоАвгуста = Дата(2025, 8, 1);
КонецАвгуста = КонецМесяца(НачалоАвгуста);
КонецЕсли;
// Формируем и выполняем запрос
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
ДокументПродажи.Ссылка,
ДокументПродажи.Дата,
ДокументПродажи.Сумма
ИЗ
Документ.Продажа КАК ДокументПродажи
ГДЕ
ДокументПродажи.Дата МЕЖДУ &ДатаНачала И &ДатаКонца";
Запрос.УстановитьПараметр("ДатаНачала", НачалоАвгуста);
Запрос.УстановитьПараметр("ДатаКонца", КонецАвгуста);
Результат = Запрос.Выполнить();
ТаблицаРезультатов = Результат.Выгрузить();
// Вывод результатов
КонецЕсли;
—
**Рекомендации:**
— Для сложного анализа текста можно использовать внешние библиотеки NLP (например, Python + NLP), а в 1С передавать уже структурированные параметры.
— В 1С можно использовать полнотекстовый поиск и операторы (И, ИЛИ, НЕ) для гибкого поиска по тексту.
— Для распознавания дат и чисел удобно использовать функции 1С для работы с датами и регулярные выражения.
Рекомендую посмотреть здесь:
https://its.1c.ru/db/v8std#content:456:hdoc
https://its.1c.ru/db/v8std#content:456:hdoc:search
https://its.1c.ru/db/v8std#content:456:hdoc:query
—
Оценка ответа: 9/10