Выделить комиссию из строки назначения платежа

1. user1086581 15.12.18 14:49 Сейчас в теме
Всем доброго времени. Есть код
МассивСлов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаСекции.НазначениеПлатежа, "", истина);
ТипЧисло = Новый ОписаниеТипов("Число");
Для Индекс = 0 По МассивСлов.ВГраница() Цикл
Слово = МассивСлов[Индекс];
Если СтрНайти(Слово, "ком") Тогда
комиссия = 0 + ТипЧисло.ПривестиЗначение(МассивСлов[Индекс+1]);
УстановитьСвойство(ОбъектДляЗаписи, Строка("_СуммаУслуги"), комиссия);
Прервать;
КонецЕсли;
КонецЦикла;

Но он проставляет комиссию только если в назначение платежа есть слово ком, как сделать чтобы еще и тянулось по слову комиссия. У меня два разных банка.
+
По теме из базы знаний
Найденные решения
40. Noob001 15.12.18 17:27 Сейчас в теме
(39) в 35 вам написал жи
комиссия = 0 + ТипЧисло.ПривестиЗначение(СтрЗаменить(МассивСлов[Индекс+1],",",""));
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Denis_CFO 48 15.12.18 14:57 Сейчас в теме
(1)
Если СтрНайти(Слово, "ком") Тогда

Если СтрНайти(НРег(Слово), "ком") ИЛИ СтрНайти(НРег(Слово), "комиссия") Тогда


хотя "ком" присутствует и в слове "комиссия". Должно работать и без этого. Приведите все к одному регистру. т.е. обработайте все слова функцией НРег() или ВРег().
+
3. user1086581 15.12.18 15:07 Сейчас в теме
(2) Не сработало. И я не могу понять в чем дело?
+
4. Noob001 15.12.18 15:11 Сейчас в теме
(3)
СтрНачинаетсяС(НРег(Слово), "ком")


СтрНачинаетсяС(<Строка>, <СтрокаПоиска>)
Параметры:

<Строка> (обязательный)

Тип: Строка.
Строка, начало которой проверяется на совпадение с подстрокой поиска.
<СтрокаПоиска> (обязательный)

Тип: Строка.
Строка, содержащая предполагаемое начало строки.
В случае если переданное значение является пустой строкой генерируется исключительная ситуация.
Возвращаемое значение:

Тип: Булево.
Истина - строка начинается с указанной подстроки, Ложь - в противном случае.
Denis_CFO; +1
17. Denis_CFO 48 15.12.18 15:32 Сейчас в теме
(4) кстати, спасибо за "СтрНачинаетсяС". Давно СП не читал. :)
+
18. Noob001 15.12.18 15:33 Сейчас в теме
(17) Всегда пожалуйста :)
+
5. user1086581 15.12.18 15:20 Сейчас в теме
Эквайринг, по мерчанту 245184311548 от 01.12.2018 операции 50 на сумму 10000.00 удержано ком 100.00 Возвр 0.00/0.00 рога и копыта

Оплата по Договору N18546 от 24.09.11, НДС не выделяется.MISC комиссия 200.01, Дата выручки 06-12-18/MAST/SD5000,CM500,MIR/SD4000 CM40,00,VISA/SD20000.00,CM245.81,.

вот такого типа строки. Во второй по слову "комиссия" комиссия не вытягивается в нужное поле.
+
6. Denis_CFO 48 15.12.18 15:24 Сейчас в теме
(5) а в массиве слова "MISC" и "комиссия" присутствуют?
+
7. user1086581 15.12.18 15:25 Сейчас в теме
(6) да. У меня эти строки берутся из назначения платежа. в коде есть ссылка на эту строку.
+
8. Denis_CFO 48 15.12.18 15:26 Сейчас в теме
(7) а символы в словах все русские?
+
10. user1086581 15.12.18 15:27 Сейчас в теме
(8) В коде да, в назначении платежа-нет.
+
11. Denis_CFO 48 15.12.18 15:28 Сейчас в теме
(10)
В коде да, в назначении платежа-нет
я имею в виду слово "комиссия" :)
+
9. Denis_CFO 48 15.12.18 15:27 Сейчас в теме
(7)
в коде есть ссылка на эту строку.
подробнее можно?
+
13. user1086581 15.12.18 15:28 Сейчас в теме
(9) МассивСлов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаСекции.НазначениеПлатежа, " ", истина);
+
12. Noob001 15.12.18 15:28 Сейчас в теме
(5)И 2 и 4 должно работать.

Попробуйте добавить ещё СокрЛП()
СтрНачинаетсяС(СокрЛП(НРег(Слово)), "ком")


Ну и вариация на тему
СтрНайти(Лев(СокрЛП(НРег(Слово)),3), "ком")


Ну и вариант тупости банка
kомиссия <> комиссия // k в первом слове латинская
кoмиссия <> комиссия // о в первом слове латинская

Например в искомой строке используются символы Латинского алфавита
+
14. user1086581 15.12.18 15:29 Сейчас в теме
(12) Я уже из строки сделала копипаст, тоже думала об этом.
+
15. Denis_CFO 48 15.12.18 15:31 Сейчас в теме
(14)
из строки сделала копипаст
наберите ВРУЧНУЮ текст на русской раскладке и скормите его функции, что скажет?
+
20. user1086581 15.12.18 15:38 Сейчас в теме
(15)
наберите ВРУЧНУЮ текст на русской раскладке и скормите его функции, что скажет?

ничего не сказал, проглотил в легкую.
+
21. Denis_CFO 48 15.12.18 15:39 Сейчас в теме
(20)
проглотил в легкую
да это понятно. элементы массива какие функция вернула?
+
22. user1086581 15.12.18 15:41 Сейчас в теме
(21) Описала в 19. Это то что сообщило слово.
+
23. Denis_CFO 48 15.12.18 15:42 Сейчас в теме
(22)
Ну и вариант тупости банка
kомиссия <> комиссия // k в первом слове латинская
кoмиссия <> комиссия // о в первом слове латинская

вот это проверяли?
+
25. user1086581 15.12.18 15:45 Сейчас в теме
(23) У меня это не в функции описано, поэтому про элементы массива не могу сказать. А как проверить. Я еще новичек в этом деле и пока не все сразу понимаю.
+
24. user856012 13 15.12.18 15:45 Сейчас в теме
(20)
ничего не сказал, проглотил в легкую.
Может, наконец скопируете сюда точное и полное содержание строки, на которой спотыкается ваш код? А то пока лечим больного по словесному описанию его фотографии.
(23)
вот это проверяли?
Я бы еще проверил на слова "коммисия" и "коммиссия" - немало людей напишет именно так. И чем дальше, тем их будет больше.
+
16. Noob001 15.12.18 15:32 Сейчас в теме
Добавьте Сообщить и посмотрите что выводит.
МассивСлов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаСекции.НазначениеПлатежа, "", истина);
ТипЧисло = Новый ОписаниеТипов("Число");
Для Индекс = 0 По МассивСлов.ВГраница() Цикл

Сообщить(Слово);

Слово = МассивСлов[Индекс];
Если СтрНайти(Слово, "ком") Тогда
комиссия = 0 + ТипЧисло.ПривестиЗначение(МассивСлов[Индекс+1]);
УстановитьСвойство(ОбъектДляЗаписи, Строка("_СуммаУслуги"), комиссия);
Прервать;
КонецЕсли;
КонецЦикла; 
Показать

(14)
+
19. user1086581 15.12.18 15:37 Сейчас в теме
(16)
1. не
выделяется.MISC
комиссия-
дальше текста нет,

2. удержано
ком-дальше текста нет.
вроде правильно тянет.
+
30. Noob001 15.12.18 15:58 Сейчас в теме
(19)
А почему дальше текста нет, если в ваших строках он дальше есть.
+
33. user1086581 15.12.18 16:02 Сейчас в теме
(30) Я сейчас из текста Оплата по Договору N18546 от 24.09.11, НДС не выделяется.MISC комиссия 200.01, Дата выручки 06-12-18/MAST/SD5000,CM500,MIR/SD4000 CM40,00,VISA/SD20000.00,CM245.81,.

после сочетания комиссия 200.01, убрала в ручную из файла запятую и все считалось правильно ошибка была в запятой после суммы, а не в слове комиссия. А как теперь решать вопрос с этой запятой???
+
35. Noob001 15.12.18 16:04 Сейчас в теме
(33)

СтрЗаменить(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>)

комиссия = 0 + ТипЧисло.ПривестиЗначение(СтрЗаменить(МассивСлов[Индекс+1],",",""));
+
37. user856012 13 15.12.18 16:08 Сейчас в теме
(33)
А как теперь решать вопрос с этой запятой???
Возможно, явно задать параметр разделителя строк в РазложитьСтрокуВМассивПодстрок() - он у вас пустой.

Кстати, если мне не изменяет мой склероз, то по дефолту он как раз запятая, так что как у вас этот код вообще работает - ХЗ.
+
38. Noob001 15.12.18 16:14 Сейчас в теме
(33) в 35 одну скобочку забыл, поправил :)
+
27. user1086581 15.12.18 15:54 Сейчас в теме
(5)
(5)
Эквайринг, по мерчанту 245184311548 от 01.12.2018 операции 50 на сумму 10000.00 удержано ком 100.00 Возвр 0.00/0.00 рога и копыта

Оплата по Договору N18546 от 24.09.11, НДС не выделяется.MISC комиссия 200.01, Дата выручки 06-12-18/MAST/SD5000,CM500,MIR/SD4000 CM40,00,VISA/SD20000.00,CM245.81,.


А это назначение платежа как приходит из банка.
+
26. user1086581 15.12.18 15:51 Сейчас в теме
Сам код
МассивСлов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаСекции.НазначениеПлатежа, " ", истина);
ТипЧисло = Новый ОписаниеТипов("Число");
Для Индекс = 0 По МассивСлов.ВГраница() Цикл
Слово = МассивСлов[Индекс];
Сообщить(Слово);
Если СтрНачинаетсяС(НРег(Слово), "ком") ИЛИ СтрНачинаетсяС(НРег(Слово), "комиссия") Тогда
комиссия = 0 + ТипЧисло.ПривестиЗначение(МассивСлов[Индекс+1]);
УстановитьСвойство(ОбъектДляЗаписи, Строка("_СуммаУслуги"), комиссия);
Прервать;
КонецЕсли;
КонецЦикла;


Вот что вышло по строке сообщить слово:
Оплата
по
Договору
N18146
от
24.09.11,
НДС
не
выделяется.MISC
комиссия
Эквайринг,
по
мерчанту
123456789000
от
01.12.2018
операции
50
на
сумму
50000
удержано
ком

по слову комиссия по-прежнему не не проставляется в нужное поле.
+
28. user856012 13 15.12.18 15:55 Сейчас в теме
(26)
по слову комиссия по-прежнему не не проставляется в нужное поле
И не должно проставляться: в исходном коде вы берете значение из слова, следующего за "ком" (или "комиссия") - это "Эквайринг" - где тут сумма комиссии?

Если назначение платежа стандартизовано, то искать надо по слову "сумм", а не "ком(иссия)". А если нестандартизовано... дело тухлое.
+
29. user1086581 15.12.18 15:57 Сейчас в теме
(28) Нееет. Со слова эквайринг пошло следующее назначение платежа, это уже другой банк. Я же показала строки выше как выгружается из банка.
+
31. Denis_CFO 48 15.12.18 16:01 Сейчас в теме
(29) у вас вот это:
Вот что вышло по строке сообщить слово:
Оплата
по
Договору
N18146
от
24.09.11,
НДС
не
выделяется.MISC
комиссия
Эквайринг,
по
мерчанту
123456789000
от
01.12.2018
операции
50
на
сумму
50000
удержано
ком
Показать

вот с этим не сходится:
Оплата по Договору N18546 от 24.09.11, НДС не выделяется.MISC комиссия 200.01, Дата выручки 06-12-18/MAST/SD5000,CM500,MIR/SD4000 CM40,00,VISA/SD20000.00,CM245.81,.

Скажу так. Наймите программиста - это не Ваш путь.
+
32. Noob001 15.12.18 16:02 Сейчас в теме
(29) Ну давайте так попробуем, что выводит Сообщить при таком коде:

МассивСлов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаСекции.НазначениеПлатежа, " ", истина);
ТипЧисло = Новый ОписаниеТипов("Число");
Для Индекс = 0 По МассивСлов.ВГраница() Цикл
Слово = МассивСлов[Индекс];
Если СтрНачинаетсяС(СокрЛП(НРег(Слово)), "ком") Тогда
комиссия = 0 + ТипЧисло.ПривестиЗначение(МассивСлов[Индекс+1]);
Сообщить(Слово + ": "+комиссия );
УстановитьСвойство(ОбъектДляЗаписи, Строка("_СуммаУслуги"), комиссия);
Прервать;
КонецЕсли;
КонецЦикла;
Показать
+
34. Denis_CFO 48 15.12.18 16:04 Сейчас в теме
(32)
ТипЧисло.ПривестиЗначение(МассивСлов[Индекс+1])

Сообщить(Слово + ": "+комиссия ); - вот здесь сломается :).
+
36. Noob001 15.12.18 16:06 Сейчас в теме
(34) Почему?
Оно конвертнет число обратно к строке. Автоматом
+
39. user1086581 15.12.18 16:46 Сейчас в теме
(34)
а как можно избавиться от запятой в (33)?
+
40. Noob001 15.12.18 17:27 Сейчас в теме
(39) в 35 вам написал жи
комиссия = 0 + ТипЧисло.ПривестиЗначение(СтрЗаменить(МассивСлов[Индекс+1],",",""));
+
41. user1086581 17.12.18 04:36 Сейчас в теме
(40)
комиссия = 0 + ТипЧисло.ПривестиЗначение(СтрЗаменить(МассивСлов[Индекс+1],",",""));

не убирает этот код запятую, она как была так и осталась, хотя должен.
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот