Версия подсистемы: Инструменты разработчика 8.19.1e, вариант — расширение конфигурации (CFE).
Версия платформы: 8.5.1.1343 (по коду воспроизводимо и на 8.3).
Клиентское приложение: толстый клиент, обычное приложение (управляемая форма инструмента).
Конфигурация: <название/версия>, вариант встроенного языка — Английский.
СУБД: файловая ИБ.
Инструмент «Динамический список (ИР)»: команда «Сколько строк» при установленном отборе
падает с ошибкой:
Код
Template string "0 КАК СлужебноеПоле3463" not found in the text
{ИнструментыРазработчикаTormozit CommonModule.ирОбщий.Module(35662)}: ВызватьИсключение ирОбщий.СтрШаблонЛкс(НСтр("ru = 'Шаблонная строка ""%1"" не найдена в тексте'..."), ЧтоЗаменять);
{ИнструментыРазработчикаTormozit CommonModule.ирОбщий.Module(31844)}: Запрос.Текст = СтрЗаменитьЛкс(Запрос.Текст, "0 КАК " + ИмяСлужебногоПоля, "РАЗРЕШЕННЫЕ КОЛИЧЕСТВО(*) КАК КоличествоСтрок");
{ИнструментыРазработчикаTormozit CommonModule.ирКлиент.Module(16969)}: Количество = ирОбщий.КоличествоСтрокВТаблицеБДЛкс(ПолноеИмяТаблицы, Отбор);
{ИнструментыРазработчикаTormozit DataProcessor.ирДинамическийСписок.Form.ФормаУпр.Form(1167)}: ирКлиент.ТабличноеПолеИлиТаблицаФормы_СколькоСтрокЛкс(ЭлементыФормы.ДинамическийСписок, НастройкиСписка);
Причина — в общем модуле **ирОбщий**, функция **КоличествоСтрокВТаблицеБДЛкс** (ветка с отбором,
строки 31833–31844): исходный текст запроса пишется с русским синтаксисом
(`"ВЫБРАТЬ Т.*, 0 КАК " + ИмяСлужебногоПоля + " ИЗ ..."`), затем пересобирается через СКД
(СоздатьСхемуКомпоновкиПоЗапросуЛкс → ЗапросИзКомпоновкиЛкс). На конфигурации с английским
вариантом встроенного языка СКД генерирует текст запроса с английскими ключевыми словами —
`0 AS СлужебноеПолеNNN` — и текстовая замена `"0 КАК " + ИмяСлужебногоПоля` не находит шаблон.
Порядок воспроизведения:
1. Конфигурация с вариантом встроенного языка «Английский», ИР 8.19.1e.
2. Динамический список (ИР) по любой таблице → установить любой отбор.
3. Команда «Сколько строк».
Фактический результат: ошибка «Шаблонная строка "0 КАК …" не найдена в тексте».
Ожидаемый: показ количества строк с учётом отбора.
Предлагаемая правка — искать тот вариант, который присутствует; строку замены можно оставить
русской (язык запросов принимает оба синтаксиса независимо от варианта встроенного языка):
Код
Запрос.Текст = СтрЗаменитьЛкс(Запрос.Текст,
?(Найти(Запрос.Текст, "0 КАК " + ИмяСлужебногоПоля) > 0, "0 КАК ", "0 AS ") + ИмяСлужебногоПоля,
"РАЗРЕШЕННЫЕ КОЛИЧЕСТВО(*) КАК КоличествоСтрок");