Расшифровка аббревиатуры ООО,ПАО,ЗАО и ИП в справочнике Контрагенты

1. user1642571 06.08.21 23:44 Сейчас в теме
Добрый день! Задача: Поле ФормыЭлемента ПолноеНаименование должно перенимать значение поля Наименование, при этом аббревиатуры типа ООО, ПАО , ЗАО и ИП должны превращаться в полные значение по примеру:

Наименование: ИП Иванов А.А.

После заполнения значение должно сразу передаваться в форму:

ПолноеНаименование: Индивидуальный Предприниматель Иванов А.А.

Получилась такая процедура, она работает, но имеются 2 вопроса.

1.Вопрос: Почему отрабатывается только последнее значение " Объект.ПолноеНаименование = Предприниматель; "?
2.Вопрос: Мб есть другой способ попроще?

&НаКлиенте
Процедура НаименованиеПриИзменении(Элемент)

ООО = "Общество с Ограниченной Ответственностью";
ПАО = "Публичное Акционерное Общество";
ЗАО = "Закрытое Акцианерное Общество";
ИП = "Индивидуальный Предприниматель";
Объект.ПолноеНаименование = Объект.Наименование;
Общество = СтрЗаменить(Объект.Наименование,"ООО", ООО);
Публичное = СтрЗаменить(Объект.Наименование,"ПАО", ПАО);
Закрытое = СтрЗаменить(Объект.Наименование,"ЗАО", ЗАО);
Предприниматель = СтрЗаменить(Объект.Наименование,"ИП", ИП);
Объект.ПолноеНаименование = Общество;
Объект.ПолноеНаименование = Публичное;
Объект.ПолноеНаименование = Закрытое;
Объект.ПолноеНаименование = Предприниматель;

КонецПроцедуры

P.S. Только учусь, по этому не всё ещё знаю.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. serg-lom89 76 07.08.21 00:29 Сейчас в теме
потому что присваиваете наименованию "Объект.ПолноеНаименование = Предприниматель;"

да и такое не отработает правильно(СтрЗаменить(Объект.Наименование,"ООО", ООО);) если будет наименование у клиента
Клиент = ООО "ВОООЛЬТ"
тогда у вас преобразует
Общество с Ограниченной Ответственностью ВОбщество с Ограниченной ОтветственностьюЛЬТ

а что руками они не могут правильно сразу внести?)
3. user1642571 07.08.21 01:56 Сейчас в теме
(2) Сергей, спасибо за комментарий.
А что нужно присваивать чтобы отрабатывались значения в зависимости от написанной аббревиатуры?

Спасибо за пример с ООО ВОООЛЬТ , добавил значению "ООО " пробел, так будет находить только ООО , ну или окончание компании, что очень мало вероятно.

Руками это всё вводить очень долго, да и на будущие я должен уметь Расшифровывать аббревиатуры вдруг понадобится с ( НДС , УСН, РКО) и прочими терминами.
5. spacecraft 07.08.21 08:51 Сейчас в теме
(3)
добавил значению "ООО " пробел, так будет находить только ООО , ну или окончание компании, что очень мало вероятно.

Часто встречал такие записи как:
"Имя фирмы ООО"
6. user1642571 07.08.21 11:38 Сейчас в теме
(5) Понимаю, это нужно скорре всего дробить строку на массив и там уже делать выборку(
8. spacecraft 07.08.21 11:58 Сейчас в теме
(6) правильно понимаете.
Как вариант:
Аббревиатуры = Новый Соответствие;
Аббревиатуры.Вставить("ООО", "Общество с Ограниченной Ответственностью ");
Аббревиатуры.Вставить("ПАО","Публичное Акционерное Общество ");
Аббревиатуры.Вставить("НАО", "Непубличное Акцианерное Общество ");
Аббревиатуры.Вставить("ИП","Индивидуальный Предприниматель ");

НаименованиеМассив = СтрРазделить(Наименование, " ");
Для к = 0 По НаименованиеМассив.ВГраница() Цикл
	Аббревиатура = Аббревиатуры[ВРег(НаименованиеМассив[к])];
	Если НЕ Аббревиатура = Неопределено Тогда
		НаименованиеМассив[к] = Аббревиатура;
		Прервать;
	КонецЕсли;
КонецЦикла;
Наименование = СтрСоединить(НаименованиеМассив, " ");
Показать
user1989330; +1 Ответить
12. ishelper 07.08.21 16:17 Сейчас в теме
(5)
Часто встречал такие записи как:
"Имя фирмы ООО"
Со времен 7.7 учу клиентов писать сокращенные наименования контрагентов именно так, очень помогает видеть в алфавитном порядке список названий, а не сокращений - "сначала все ИП, потом - все ООО". А если при этом одни бухи ставят кавычки, а другие - нет, то вовсе винегрет получается.

Ну, а полное наименование - как требуется в документах, без вариантов.
4. BackinSoda 07.08.21 02:07 Сейчас в теме
С аббревиатурами как в примере можно поступить так:
Добавить эти строковые "расшифровки" в соответствие или таблицу значений (колонка1 = сокращенное название, вторая = полное) . Сделать Цикл " для каждого " строки, внутри сравнивать на равенство левым 3 (или 4, если с пробелом) символам от наименования, Если нашли то ставим наименование и прерываем цикл.
7. user1642571 07.08.21 11:40 Сейчас в теме
(4)Спасибо за совет!
Вот что у меня получилось:

&НаКлиенте
Процедура НаименованиеПриИзменении(Элемент)
	
	Объект.ПолноеНаименование = Объект.Наименование;
	Аббревиатуры = Новый Соответствие;
	Аббревиатуры.Вставить("ООО ", "Общество с Ограниченной Ответственностью ");
	Аббревиатуры.Вставить("ПАО ","Публичное Акционерное Общество ");
	Аббревиатуры.Вставить("НАО ", "Непубличное Акцианерное Общество ");
	Аббревиатуры.Вставить("ИП ","Индивидуальный Предприниматель ");
	Для Каждого Элемент Из Аббревиатуры Цикл
	Если Элемент.Ключ = Лев(Объект.Наименование, 4) ИЛИ Элемент.Ключ = "ИП " Тогда
		Аббр = СтрЗаменить(Объект.Наименование,Элемент.Ключ,Элемент.Значение);
	КонецЕсли;
	КонецЦикла;
	
	Объект.ПолноеНаименование = Аббр;
	
КонецПроцедуры
Показать


Отрабатывает со всеми значениями) Ну конечно если Аббревиатура идёт с начала строки
9. serg-lom89 76 07.08.21 13:07 Сейчас в теме
(7)мне кажется тут проще не в цикле а черещ получить .есть такой метод у соответсвия

что то такое -
НаименованияПреобразованное = Объект.Наименование;
если Не Аббревиатуры.Получить( Лев(Объект.Наименование, 4) ) = Неопределено Тогда
НаименованияПреобразованное = СтрЗаменить(Объект.Наименование,Элемент.Ключ,Элемент.Значение);
КонецЕсли;
Объект.ПолноеНаименование = НаименованияПреобразованное
 бр;
10. BackinSoda 07.08.21 15:38 Сейчас в теме
(7)
Объект.ПолноеНаименование = Аббр;

если заменять нечего будет, то вылетит с ошибкой (либо очистит наименование, если Аббр это реквизит). Можно сразу внутри цикла устанавливать полноеНаименование, без промежуточной переменной, или самую первую строку в процедуре переделать на "Аббр = = Объект.Наименование;"
11. Fox-trot 158 07.08.21 15:43 Сейчас в теме
(7)
Аббревиатуры
оберни в функцию
13. RedHatRed 08.06.23 01:48 Сейчас в теме
Меняет Аббревиатуры, находящиеся, хоть сначала хоть в конце

&НаСервере
Процедура ЛюбаяПроцедура()
Аббревиатуры = Новый Соответствие;
Аббревиатуры.Вставить("ООО", "Общество с Ограниченной Ответственностью ");
Аббревиатуры.Вставить("ПАО","Публичное Акционерное Общество ");
Аббревиатуры.Вставить("НАО", "Непубличное Акцианерное Общество ");
Аббревиатуры.Вставить("ИП","Индивидуальный Предприниматель ");
Аббревиатуры.Вставить("ЗАО","Закрытое Акционерное Общество ");
Аббревиатуры.Вставить("АО","Акционерное общество ");
Для Каждого Элемент Из Аббревиатуры Цикл
Шаблон = "(^|\s|\w)"+СокрЛП(Элемент.Ключ)+"($|\s|\w)";

// Найдем и удалим расшифровку
СтрокаБезРасш = RegExp_Replace(СокрЛП(Объект.Контрагент.ПолноеНаименование()),Шаблон,"");
Если СокрЛП(Объект.Контрагент.ПолноеНаименование()) <> СтрокаБезРасш Тогда
// Что то нашли и заменили
// подставляем значение
СтрокаСРасшифровкой = Элемент.Значение + СтрокаБезРасш;
КонецЕсли;
КонецЦикла;

КонецПроцедуры

&НаСервере
Функция RegExp_Replace(Строка,Шаблон,СТрокаЗамены)

RegExp = Новый COMОбъект("VBScript.RegExp");

RegExp.IgnoreCase = Истина; //Игнорировать регистр
RegExp.Global = Истина; //Поиск всех вхождений шаблона
RegExp.MultiLine = Истина; //Многострочный режим

RegExp.Pattern = Шаблон;

Строка = RegExp.Replace(Строка, СТрокаЗамены);
Возврат Строка;
КонецФункции
Оставьте свое сообщение

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