Расшифровка аббревиатуры ООО,ПАО,ЗАО и ИП в справочнике Контрагенты
Добрый день! Задача: Поле ФормыЭлемента ПолноеНаименование должно перенимать значение поля Наименование, при этом аббревиатуры типа ООО, ПАО , ЗАО и ИП должны превращаться в полные значение по примеру:
Наименование: ИП Иванов А.А.
После заполнения значение должно сразу передаваться в форму:
ПолноеНаименование: Индивидуальный Предприниматель Иванов А.А.
Получилась такая процедура, она работает, но имеются 2 вопроса.
1.Вопрос: Почему отрабатывается только последнее значение " Объект.ПолноеНаименование = Предприниматель; "?
2.Вопрос: Мб есть другой способ попроще?
&НаКлиенте
Процедура НаименованиеПриИзменении(Элемент)
ООО = "Общество с Ограниченной Ответственностью";
ПАО = "Публичное Акционерное Общество";
ЗАО = "Закрытое Акцианерное Общество";
ИП = "Индивидуальный Предприниматель";
Объект.ПолноеНаименование = Объект.Наименование;
Общество = СтрЗаменить(Объект.Наименование,"ООО", ООО);
Публичное = СтрЗаменить(Объект.Наименование,"ПАО", ПАО);
Закрытое = СтрЗаменить(Объект.Наименование,"ЗАО", ЗАО);
Предприниматель = СтрЗаменить(Объект.Наименование,"ИП", ИП);
Объект.ПолноеНаименование = Общество;
Объект.ПолноеНаименование = Публичное;
Объект.ПолноеНаименование = Закрытое;
Объект.ПолноеНаименование = Предприниматель;
КонецПроцедуры
P.S. Только учусь, по этому не всё ещё знаю.
Наименование: ИП Иванов А.А.
После заполнения значение должно сразу передаваться в форму:
ПолноеНаименование: Индивидуальный Предприниматель Иванов А.А.
Получилась такая процедура, она работает, но имеются 2 вопроса.
1.Вопрос: Почему отрабатывается только последнее значение " Объект.ПолноеНаименование = Предприниматель; "?
2.Вопрос: Мб есть другой способ попроще?
&НаКлиенте
Процедура НаименованиеПриИзменении(Элемент)
ООО = "Общество с Ограниченной Ответственностью";
ПАО = "Публичное Акционерное Общество";
ЗАО = "Закрытое Акцианерное Общество";
ИП = "Индивидуальный Предприниматель";
Объект.ПолноеНаименование = Объект.Наименование;
Общество = СтрЗаменить(Объект.Наименование,"ООО", ООО);
Публичное = СтрЗаменить(Объект.Наименование,"ПАО", ПАО);
Закрытое = СтрЗаменить(Объект.Наименование,"ЗАО", ЗАО);
Предприниматель = СтрЗаменить(Объект.Наименование,"ИП", ИП);
Объект.ПолноеНаименование = Общество;
Объект.ПолноеНаименование = Публичное;
Объект.ПолноеНаименование = Закрытое;
Объект.ПолноеНаименование = Предприниматель;
КонецПроцедуры
P.S. Только учусь, по этому не всё ещё знаю.
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
потому что присваиваете наименованию "Объект.ПолноеНаименование = Предприниматель;"
да и такое не отработает правильно(СтрЗаменить(Объект.Наименование,"ООО", ООО);) если будет наименование у клиента
Клиент = ООО "ВОООЛЬТ"
тогда у вас преобразует
Общество с Ограниченной Ответственностью ВОбщество с Ограниченной ОтветственностьюЛЬТ
а что руками они не могут правильно сразу внести?)
да и такое не отработает правильно(СтрЗаменить(Объект.Наименование,"ООО", ООО);) если будет наименование у клиента
Клиент = ООО "ВОООЛЬТ"
тогда у вас преобразует
Общество с Ограниченной Ответственностью ВОбщество с Ограниченной ОтветственностьюЛЬТ
а что руками они не могут правильно сразу внести?)
(2) Сергей, спасибо за комментарий.
А что нужно присваивать чтобы отрабатывались значения в зависимости от написанной аббревиатуры?
Спасибо за пример с ООО ВОООЛЬТ , добавил значению "ООО " пробел, так будет находить только ООО , ну или окончание компании, что очень мало вероятно.
Руками это всё вводить очень долго, да и на будущие я должен уметь Расшифровывать аббревиатуры вдруг понадобится с ( НДС , УСН, РКО) и прочими терминами.
А что нужно присваивать чтобы отрабатывались значения в зависимости от написанной аббревиатуры?
Спасибо за пример с ООО ВОООЛЬТ , добавил значению "ООО " пробел, так будет находить только ООО , ну или окончание компании, что очень мало вероятно.
Руками это всё вводить очень долго, да и на будущие я должен уметь Расшифровывать аббревиатуры вдруг понадобится с ( НДС , УСН, РКО) и прочими терминами.
(6) правильно понимаете.
Как вариант:
Как вариант:
Аббревиатуры = Новый Соответствие;
Аббревиатуры.Вставить("ООО", "Общество с Ограниченной Ответственностью ");
Аббревиатуры.Вставить("ПАО","Публичное Акционерное Общество ");
Аббревиатуры.Вставить("НАО", "Непубличное Акцианерное Общество ");
Аббревиатуры.Вставить("ИП","Индивидуальный Предприниматель ");
НаименованиеМассив = СтрРазделить(Наименование, " ");
Для к = 0 По НаименованиеМассив.ВГраница() Цикл
Аббревиатура = Аббревиатуры[ВРег(НаименованиеМассив[к])];
Если НЕ Аббревиатура = Неопределено Тогда
НаименованиеМассив[к] = Аббревиатура;
Прервать;
КонецЕсли;
КонецЦикла;
Наименование = СтрСоединить(НаименованиеМассив, " ");
Показать
(5)
Ну, а полное наименование - как требуется в документах, без вариантов.
Часто встречал такие записи как:
"Имя фирмы ООО"
Со времен 7.7 учу клиентов писать сокращенные наименования контрагентов именно так, очень помогает видеть в алфавитном порядке список названий, а не сокращений - "сначала все ИП, потом - все ООО". А если при этом одни бухи ставят кавычки, а другие - нет, то вовсе винегрет получается.
"Имя фирмы ООО"
Ну, а полное наименование - как требуется в документах, без вариантов.
С аббревиатурами как в примере можно поступить так:
Добавить эти строковые "расшифровки" в соответствие или таблицу значений (колонка1 = сокращенное название, вторая = полное) . Сделать Цикл " для каждого " строки, внутри сравнивать на равенство левым 3 (или 4, если с пробелом) символам от наименования, Если нашли то ставим наименование и прерываем цикл.
Добавить эти строковые "расшифровки" в соответствие или таблицу значений (колонка1 = сокращенное название, вторая = полное) . Сделать Цикл " для каждого " строки, внутри сравнивать на равенство левым 3 (или 4, если с пробелом) символам от наименования, Если нашли то ставим наименование и прерываем цикл.
(4)Спасибо за совет!
Вот что у меня получилось:
Отрабатывает со всеми значениями) Ну конечно если Аббревиатура идёт с начала строки
Вот что у меня получилось:
&НаКлиенте
Процедура НаименованиеПриИзменении(Элемент)
Объект.ПолноеНаименование = Объект.Наименование;
Аббревиатуры = Новый Соответствие;
Аббревиатуры.Вставить("ООО ", "Общество с Ограниченной Ответственностью ");
Аббревиатуры.Вставить("ПАО ","Публичное Акционерное Общество ");
Аббревиатуры.Вставить("НАО ", "Непубличное Акцианерное Общество ");
Аббревиатуры.Вставить("ИП ","Индивидуальный Предприниматель ");
Для Каждого Элемент Из Аббревиатуры Цикл
Если Элемент.Ключ = Лев(Объект.Наименование, 4) ИЛИ Элемент.Ключ = "ИП " Тогда
Аббр = СтрЗаменить(Объект.Наименование,Элемент.Ключ,Элемент.Значение);
КонецЕсли;
КонецЦикла;
Объект.ПолноеНаименование = Аббр;
КонецПроцедуры
ПоказатьОтрабатывает со всеми значениями) Ну конечно если Аббревиатура идёт с начала строки
(7)мне кажется тут проще не в цикле а черещ получить .есть такой метод у соответсвия
что то такое -
что то такое -
НаименованияПреобразованное = Объект.Наименование;
если Не Аббревиатуры.Получить( Лев(Объект.Наименование, 4) ) = Неопределено Тогда
НаименованияПреобразованное = СтрЗаменить(Объект.Наименование,Элемент.Ключ,Элемент.Значение);
КонецЕсли;
Объект.ПолноеНаименование = НаименованияПреобразованное
бр;
(7)
если заменять нечего будет, то вылетит с ошибкой (либо очистит наименование, если Аббр это реквизит). Можно сразу внутри цикла устанавливать полноеНаименование, без промежуточной переменной, или самую первую строку в процедуре переделать на "Аббр = = Объект.Наименование;"
Объект.ПолноеНаименование = Аббр;
если заменять нечего будет, то вылетит с ошибкой (либо очистит наименование, если Аббр это реквизит). Можно сразу внутри цикла устанавливать полноеНаименование, без промежуточной переменной, или самую первую строку в процедуре переделать на "Аббр = = Объект.Наименование;"
Меняет Аббревиатуры, находящиеся, хоть сначала хоть в конце
&НаСервере
Процедура ЛюбаяПроцедура()
Аббревиатуры = Новый Соответствие;
Аббревиатуры.Вставить("ООО", "Общество с Ограниченной Ответственностью ");
Аббревиатуры.Вставить("ПАО","Публичное Акционерное Общество ");
Аббревиатуры.Вставить("НАО", "Непубличное Акцианерное Общество ");
Аббревиатуры.Вставить("ИП","Индивидуальный Предприниматель ");
Аббревиатуры.Вставить("ЗАО","Закрытое Акционерное Общество ");
Аббревиатуры.Вставить("АО","Акционерное общество ");
Для Каждого Элемент Из Аббревиатуры Цикл
Шаблон = "(^|\s|\w)"+СокрЛП(Элемент.Ключ)+"($|\s|\w)";
// Найдем и удалим расшифровку
СтрокаБезРасш = RegExp_Replace(СокрЛП(Объект.Контрагент.ПолноеНаименование()),Шаблон,"");
Если СокрЛП(Объект.Контрагент.ПолноеНаименование()) <> СтрокаБезРасш Тогда
// Что то нашли и заменили
// подставляем значение
СтрокаСРасшифровкой = Элемент.Значение + СтрокаБезРасш;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция RegExp_Replace(Строка,Шаблон,СТрокаЗамены)
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.IgnoreCase = Истина; //Игнорировать регистр
RegExp.Global = Истина; //Поиск всех вхождений шаблона
RegExp.MultiLine = Истина; //Многострочный режим
RegExp.Pattern = Шаблон;
Строка = RegExp.Replace(Строка, СТрокаЗамены);
Возврат Строка;
КонецФункции
&НаСервере
Процедура ЛюбаяПроцедура()
Аббревиатуры = Новый Соответствие;
Аббревиатуры.Вставить("ООО", "Общество с Ограниченной Ответственностью ");
Аббревиатуры.Вставить("ПАО","Публичное Акционерное Общество ");
Аббревиатуры.Вставить("НАО", "Непубличное Акцианерное Общество ");
Аббревиатуры.Вставить("ИП","Индивидуальный Предприниматель ");
Аббревиатуры.Вставить("ЗАО","Закрытое Акционерное Общество ");
Аббревиатуры.Вставить("АО","Акционерное общество ");
Для Каждого Элемент Из Аббревиатуры Цикл
Шаблон = "(^|\s|\w)"+СокрЛП(Элемент.Ключ)+"($|\s|\w)";
// Найдем и удалим расшифровку
СтрокаБезРасш = RegExp_Replace(СокрЛП(Объект.Контрагент.ПолноеНаименование()),Шаблон,"");
Если СокрЛП(Объект.Контрагент.ПолноеНаименование()) <> СтрокаБезРасш Тогда
// Что то нашли и заменили
// подставляем значение
СтрокаСРасшифровкой = Элемент.Значение + СтрокаБезРасш;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция RegExp_Replace(Строка,Шаблон,СТрокаЗамены)
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.IgnoreCase = Истина; //Игнорировать регистр
RegExp.Global = Истина; //Поиск всех вхождений шаблона
RegExp.MultiLine = Истина; //Многострочный режим
RegExp.Pattern = Шаблон;
Строка = RegExp.Replace(Строка, СТрокаЗамены);
Возврат Строка;
КонецФункции