Есть поле ввода в форме заказа клиентов именуемое Комментарий. В это поле чудным образом прописывали и внутренние номера заказов и адреса доставки. (не отдельно а именно в Комментарий). Теперь стоит вопрос для отчета вывести из этого Комментария те самые Номер и Адрес. Отчет на СКД, хотелось бы без дополнительных подключений функций в общий модуль. То есть средствами внешнего запроса или функциональностью СКД. Полагаю тут надо Коммент переобразовать в строку, а после разбить строку на массив, и после путем цикла отбора выбрать нужные слова.
Виды комментариев такие:
БК00-009050, Адрес доставки:143422, Московская обл, Красногорский р-н, Петрово-Дальнее с, Промышленная ул, дом № 436, строение 44
в ПД, № БК00-023264, был счет 28274, подтв. почта 16.01
Доставка до склада в Ленинградской обл., Ломоносовский р-он, д. Разбегаево, № БК00-020046
где БК.... - и есть нужный вн. номер заказа.
(6) если разово для себя, то сделать выборку по регистру, потом перебрать и вывести на экран отчет. Если нужны дополнительные группировки, отборы по датам и т.д., то лучше на СКД тогда
(9)
Данное поле оно как обьект формы заказа - ЗаказКлиента.Комментарий.
Мне для отчета на СКД нужно.
Хотел вначале переобразовать с строку "Выразить(ЗаказКлиента.Комментарий КАК Строка(200))" и потом как-то найти начало с БК - "%БК%", дойти до первого разделителя (разделитель есть "пробел", "точка", "запятая".) и вывести это слово с этими же условиями.
(2) чуть опередили
но я бы искал строку " БК" (с пробелом) и проверял бы какой идет символ после шаблона номера, если это пробел, зпт или тчк, то это искомый номер
иначе, например, следуя вашему алгоритму из строки "В БКЗ Россия прошел концерт знаменитого исполнителя" будет получен номер "БКЗ Россия "
с адресами сложнее. искал бы все возможные сокращения например обл., гор., дом д. ул и т.п. и анализировал окружение, где запятые, где точки.
если запросом делать, то примерно так
(больничный лист взял просто что под руку попало)
ВЫБРАТЬ
ПОДСТРОКА(БольничныйЛист.Комментарий, 1, 11) КАК Поле1,
ПОДСТРОКА(БольничныйЛист.Комментарий, 2, 11) КАК Поле2,
ПОДСТРОКА(БольничныйЛист.Комментарий, 3, 11) КАК Поле3,
ПОДСТРОКА(БольничныйЛист.Комментарий, 4, 11) КАК Поле4,
ПОДСТРОКА(БольничныйЛист.Комментарий, 5, 11) КАК Поле5, // таких строк будет столько, пока не закончится строка комментария
БольничныйЛист.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВТ_Номер
ИЗ
Документ.БольничныйЛист КАК БольничныйЛист
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВЫБОР
КОГДА ВТ_Номер.Поле1 ПОДОБНО "БК[0-9][0-9]-%"
ТОГДА ВТ_Номер.Поле1
КОГДА ВТ_Номер.Поле2 ПОДОБНО "БК[0-9][0-9]-%"
ТОГДА ВТ_Номер.Поле2
КОГДА ВТ_Номер.Поле3 ПОДОБНО "БК[0-9][0-9]-%"
ТОГДА ВТ_Номер.Поле3
КОГДА ВТ_Номер.Поле4 ПОДОБНО "БК[0-9][0-9]-%"
ТОГДА ВТ_Номер.Поле4
КОГДА ВТ_Номер.Поле5 ПОДОБНО "БК[0-9][0-9]-%" // условий будет столько, сколько полей
ТОГДА ВТ_Номер.Поле5
КОНЕЦ КАК Номер,
ВТ_Номер.Ссылка КАК Ссылка
ИЗ
ВТ_Номер КАК ВТ_Номер
Показать
но это сработает для строк конечной длины и делать перебор этой строки - это бред конечно
(8) тут интересность в том, что номер не всегда вначале, не всегда начинается с 12-го символа данного комментария. Часто в разных местах, и потому разбивать строку на части (9, 10, 11) считаю не уместным...
(10) я не просто разбиваю строку на части, а раскидываю её по полям вирт таблицы по 11 символов, и потом если эта подстрока удовлетворяет шаблону - беру её в качестве номера
например:
есть комментарий "Документ БК00-123456 для адреса такого то"
получаю поля - подстроки
поле1 Документ БК
поле2 окумент БК0
поле3 кумент БК00
...
поле10 БК00-123456
...
полеN а такого то
затем проверка по шаблону, и если он подходит беру это поле
А чем не устраивает такой вариант? Если будет использоваться скд, то это очень расширяет возможности и на мой (скромный) взгляд отлично подходит в данном случае. А парсить в запросе это такое себе
(17) Ну так расширения для этого и созданы, чтобы не модифицировать конфигурацию. Ваш отчет также можно встроить в расширение и подключать его в пользовательском режиме в разделе доп. обработок. Хотя это смотря какая конфигурация будет использоваться
Подобное никак вывести в СКД?
Ругается на наличие ошибок. Оно то ясно, но такой алгоритм более был бы рабочий.
**
Символ отсчета = СтрНайти(Выразить(ЗаказКлиента.Комментарий КАК Строка(200)), "%БК%", НаправлениеПоиска.СНачала);
Сообщить(Сред(Выразить(ЗаказКлиента.Комментарий КАК Строка(200)), 11, Символ отсчета));
(19) через вычисляемые поля можно, но таки придется функцию в общий модуль затолкать, если скд в чистом виде то обратите внимание на тип набора данных "Объект" и событие "ПриКомпоновкеРезультата" думаю погуглите разберетесь или просто пример в типовых отчетах гляньте как такие наборы данных делаются
Можно использовать функцию СтрРазделить(), в качестве разделителя - запятая + символ №, можно что-то еще добавить, а дальше просто, из полученного массива выбрать все с "БК-
Коллеги, не увидел типового нужного варианта мне, ибо не понадобилось. Но тем, не менее, уверен, что для кого-то ветка обсуждения будет уж точно полезна.