PDA

Просмотр полной версии : Программирование. Найти Символы.ПС запросом на СКД



MichaelIII
19.04.2022, 14:17
Уважаемые форумчане, прошу помощи, поскольку не могу разобраться с, казалось бы, простой вещью:
Конфигурация Розница 2.3 (УФ). У элемента справочника Номенклатура имеется многострочное текстовое поле "Описание". Требуется запросом в отчёте на СКД найти элементы Номенклатуры, у которых текст в этом поле заканчивается на сочетание символов <пробел><перевод строки>.

К консоли запросов сделал тестовый запрос:

ВЫБРАТЬ
Номенклатура.Код КАК Код,
Номенклатура.Ссылка КАК Ссылка,
Номенклатура.Описание КАК Описание
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.ЭтоГруппа = ЛОЖЬ
И Номенклатура.Описание ПОДОБНО "% " + &Строка

Если параметр &Строка передать в консоль в качестве выражения Результат=Символы.ПС; то запрос отрабатывается нормально. Если же в последней строке запроса указать "ПОДОБНО "% "+Символы.ПС", то в консоли вываливается ошибка "Поле не найдено".

Вопрос: можно ли как-то обойтись в запросе без дополнительного параметра &Строка?
Если это невозможно, то как передать значение этого параметра во внешнем отчёте СКД? И можно ли это сделать средствами СКД, без кода?

"Рыба" отчёта ВнешнийОтчет1.erf: https://dropmefiles.com/T0xEh

MichaelIII
23.04.2022, 17:56
Сам спросил, сам и ответил :-)
В общем, получилось решить проблему следующим образом:
1. Параметр, как выяснилось, нельзя использовать в запросе в виде
ПОДОБНО "% " + &Параметр однако можно использовать как
ПОДОБНО &Параметр
Об этом написано в официальном мануале: https://its.1c.ru/db/v8std/content/726/hdoc

2. Конструкцию в виде Символы.ПС нельзя использовать в поле "Выражение" на вкладке "Параметры" во внешнем отчёте СКД, поскольку 1С в этом случае почему-то думает, что "Символы.ПС" - это поле, а не спецсимвол.

3. Соответственно, значение параметра &Строка пришлось установить в Модуле объекта внешнего отчёта:

Процедура ПриКомпоновкеРезультата(Д� �кументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
ПараметрРасчета = Новый ПараметрКомпоновкиДанных("Строка");
Строка = "% " + Символы.ПС;
КомпоновщикНастроек.Настр� �йки.ПараметрыДанных.Устан� �витьЗначениеПараметра(Пар аметрРасчета, Строка);
КонецПроцедуры
и в запросе при сравнении брать значение этого параметра:

ВЫБРАТЬ
Номенклатура.Код КАК Код,
Номенклатура.Ссылка КАК Ссылка,
Номенклатура.Описание КАК Описание
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.ЭтоГруппа = ЛОЖЬ
И Номенклатура.Описание ПОДОБНО &Строка
Рабочий пример: https://dropmefiles.com/SnFTW