Из поля Комментарий выделить номер заказа

1. user1004898 28 15.01.19 11:02 Сейчас в теме
Есть поле ввода в форме заказа клиентов именуемое Комментарий. В это поле чудным образом прописывали и внутренние номера заказов и адреса доставки. (не отдельно а именно в Комментарий). Теперь стоит вопрос для отчета вывести из этого Комментария те самые Номер и Адрес. Отчет на СКД, хотелось бы без дополнительных подключений функций в общий модуль. То есть средствами внешнего запроса или функциональностью СКД. Полагаю тут надо Коммент переобразовать в строку, а после разбить строку на массив, и после путем цикла отбора выбрать нужные слова.

Виды комментариев такие:
БК00-009050, Адрес доставки:143422, Московская обл, Красногорский р-н, Петрово-Дальнее с, Промышленная ул, дом № 436, строение 44
в ПД, № БК00-023264, был счет 28274, подтв. почта 16.01
Доставка до склада в Ленинградской обл., Ломоносовский р-он, д. Разбегаево, № БК00-020046
где БК.... - и есть нужный вн. номер заказа.

Подскажите как реализовать подобное?
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. namazi74 4 15.01.19 11:57 Сейчас в теме
Если нужно вытянуть номер, который начинается с БК и имеет одинаковую длину, то:
	Комментарий = "БК00-009050, Адрес доставки:143422, Московская обл, Красногорский р-н, Петрово-Дальнее с, Промышленная ул, дом № 436, строение 44";
	//Комментарий = "Доставка до склада в Ленинградской обл., Ломоносовский р-он, д. Разбегаево, № БК00-020046";
	БК = Найти(Комментарий, "БК");
	НомерБК = Сред(Комментарий, БК, 11);
	Сообщить (НомерБК);
3. user1004898 28 15.01.19 12:02 Сейчас в теме
(2) иногда на 1 символ больше.
и как можно это решение в запрос или в СКД закинуть?
Тут по-моему только функция поможет? Или ошибаюсь?
5. Stref75 15.01.19 12:06 Сейчас в теме
(3) ну тогда искать строки "БК##-" где ## цифры и брать все последующие цифры
6. user1004898 28 15.01.19 12:07 Сейчас в теме
(5) алгоритм понимаю, но как реализовать запросом или через вычисляемые поля СКД пока не пойму..
9. namazi74 4 15.01.19 12:25 Сейчас в теме
(6) если разово для себя, то сделать выборку по регистру, потом перебрать и вывести на экран отчет. Если нужны дополнительные группировки, отборы по датам и т.д., то лучше на СКД тогда
11. user1004898 28 15.01.19 12:34 Сейчас в теме
(9)
Данное поле оно как обьект формы заказа - ЗаказКлиента.Комментарий.
Мне для отчета на СКД нужно.
Хотел вначале переобразовать с строку "Выразить(ЗаказКлиента.Комментарий КАК Строка(200))" и потом как-то найти начало с БК - "%БК%", дойти до первого разделителя (разделитель есть "пробел", "точка", "запятая".) и вывести это слово с этими же условиями.

И всё это в СКД..
4. Stref75 15.01.19 12:03 Сейчас в теме
(2) чуть опередили
но я бы искал строку " БК" (с пробелом) и проверял бы какой идет символ после шаблона номера, если это пробел, зпт или тчк, то это искомый номер
иначе, например, следуя вашему алгоритму из строки "В БКЗ Россия прошел концерт знаменитого исполнителя" будет получен номер "БКЗ Россия "

с адресами сложнее. искал бы все возможные сокращения например обл., гор., дом д. ул и т.п. и анализировал окружение, где запятые, где точки.
7. namazi74 4 15.01.19 12:11 Сейчас в теме
(4) согласен, вариант не идеальный, но может сделать адекватную выборку.
(4)
с адресами сложнее. искал бы все возможные сокращения например обл., гор., дом д. ул и т.п. и анализировал окружение, где запятые, где точки.

если искать адреса, то можно в екселе посмотреть и все вхождения "БК" и решить - нужны ли дополнительные проверки.
8. Stref75 15.01.19 12:23 Сейчас в теме
если запросом делать, то примерно так
(больничный лист взял просто что под руку попало)

ВЫБРАТЬ
	ПОДСТРОКА(БольничныйЛист.Комментарий, 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
	КОНЕЦ КАК Номер,
	ВТ_Номер.Ссылка КАК Ссылка
ИЗ
	ВТ_Номер КАК ВТ_Номер
Показать


но это сработает для строк конечной длины и делать перебор этой строки - это бред конечно
10. user1004898 28 15.01.19 12:29 Сейчас в теме
(8) тут интересность в том, что номер не всегда вначале, не всегда начинается с 12-го символа данного комментария. Часто в разных местах, и потому разбивать строку на части (9, 10, 11) считаю не уместным...
12. Stref75 15.01.19 12:57 Сейчас в теме
(10) я не просто разбиваю строку на части, а раскидываю её по полям вирт таблицы по 11 символов, и потом если эта подстрока удовлетворяет шаблону - беру её в качестве номера
например:
есть комментарий "Документ БК00-123456 для адреса такого то"
получаю поля - подстроки
поле1 Документ БК
поле2 окумент БК0
поле3 кумент БК00
...
поле10 БК00-123456
...
полеN а такого то

затем проверка по шаблону, и если он подходит беру это поле
13. user1004898 28 15.01.19 13:09 Сейчас в теме
(12)
разобрался, таки будет бредово делать свыше 20 таких полей (комменты длинные)... и иногда этот БК в середине.
20. user1004898 28 15.01.19 16:02 Сейчас в теме
(8)
кстати, данная модификация сильно грузит время обработки отчета и загружает сильно память, что собственно мне и уведомила база.
22. Stref75 16.01.19 05:59 Сейчас в теме
(20) ну это и логично, о чем я сразу и писал, что такой способ, хоть и рабочий, но бредовый
14. bad_wag 48 15.01.19 13:32 Сейчас в теме
Если конфа на замке, можно создать расширение с общим модулем и функцией, которая будет парсить комментарий и вызывать ее в вычисляемых полях скд
15. user1004898 28 15.01.19 13:39 Сейчас в теме
(14)
прошу решения без вариантов с общим модулем и функцией
16. bad_wag 48 15.01.19 13:44 Сейчас в теме
А чем не устраивает такой вариант? Если будет использоваться скд, то это очень расширяет возможности и на мой (скромный) взгляд отлично подходит в данном случае. А парсить в запросе это такое себе
alex-l19041; +1 Ответить
17. user1004898 28 15.01.19 13:50 Сейчас в теме
(16)
нужно будет данный отчет использовать как внешний. не прибегая к модификации самой конфигурации.
18. bad_wag 48 15.01.19 13:55 Сейчас в теме
(17) Ну так расширения для этого и созданы, чтобы не модифицировать конфигурацию. Ваш отчет также можно встроить в расширение и подключать его в пользовательском режиме в разделе доп. обработок. Хотя это смотря какая конфигурация будет использоваться
19. user1004898 28 15.01.19 15:41 Сейчас в теме
Подобное никак вывести в СКД?
Ругается на наличие ошибок. Оно то ясно, но такой алгоритм более был бы рабочий.

**
Символ отсчета = СтрНайти(Выразить(ЗаказКлиента.Комментарий КАК Строка(200)), "%БК%", НаправлениеПоиска.СНачала);
Сообщить(Сред(Выразить(ЗаказКлиента.Комментарий КАК Строка(200)), 11, Символ отсчета));
23. solutioncp24 136 16.01.19 13:55 Сейчас в теме
(19) через вычисляемые поля можно, но таки придется функцию в общий модуль затолкать, если скд в чистом виде то обратите внимание на тип набора данных "Объект" и событие "ПриКомпоновкеРезультата" думаю погуглите разберетесь или просто пример в типовых отчетах гляньте как такие наборы данных делаются
bad_wag; Deryni; +2 Ответить
25. dakork 32 17.01.19 18:50 Сейчас в теме
(19)если решился на функцию, то лучше использовать регулярное выражение. Можно глянуть сюда https://infostart.ru/public/464971/
21. independ 1518 15.01.19 16:34 Сейчас в теме
Можно использовать функцию СтрРазделить(), в качестве разделителя - запятая + символ №, можно что-то еще добавить, а дальше просто, из полученного массива выбрать все с "БК-
24. meriferi 16.01.19 15:29 Сейчас в теме
В запросе используй ПОДОБНО %?%
26. user1004898 28 23.01.19 10:19 Сейчас в теме
Коллеги, не увидел типового нужного варианта мне, ибо не понадобилось. Но тем, не менее, уверен, что для кого-то ветка обсуждения будет уж точно полезна.
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день