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

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

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

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

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

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

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

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

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

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

P.S. Только учусь, по этому не всё ещё знаю.
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. serg-lom89 71 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 По НаименованиеМассив.ВГраница() Цикл
	Аббревиатура = Аббревиатуры[ВРег(НаименованиеМассив[к])];
	Если НЕ Аббревиатура = Неопределено Тогда
		НаименованиеМассив[к] = Аббревиатура;
		Прервать;
	КонецЕсли;
КонецЦикла;
Наименование = СтрСоединить(НаименованиеМассив, " ");
Показать
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 71 07.08.21 13:07 Сейчас в теме
(7)мне кажется тут проще не в цикле а черещ получить .есть такой метод у соответсвия

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

если заменять нечего будет, то вылетит с ошибкой (либо очистит наименование, если Аббр это реквизит). Можно сразу внутри цикла устанавливать полноеНаименование, без промежуточной переменной, или самую первую строку в процедуре переделать на "Аббр = = Объект.Наименование;"
11. Fox-trot 152 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(Строка, СТрокаЗамены);
Возврат Строка;
КонецФункции
Оставьте свое сообщение
Вакансии
Аналитик
Москва
зарплата от 150 000 руб.
Полный день

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

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

Аналитик 1С:ЗУП
Москва
зарплата от 150 000 руб.
Полный день

Ведущий разработчик 1С
Москва
зарплата от 200 000 руб.
Полный день