[ФУНКЦИЯ] Замена обычных кавычек на кавычки-ёлочки «» для 1С: Предприятие 8.X

22.04.13

Разработка - Универсальные функции

Предназначена в основном для удовлетворения требований заказчиков к оформлению печатных форм.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Типограф1С.epf
.epf 10,00Kb
9
9 Скачать (1 SM) Купить за 1 850 руб.

Основано на Замена кавычек на «ёлочки» в C# и PHP

Быстродействие на больших объёмах текста не проверял, так как замена кавычек требуется в основном в наименованиях контрагентов или номенклатуры, а они в 99% явно меньше 255 символов. Также не рассматривал упоротые случаи вида Общество с ограниченной ответственностью "Торговый дом "ООО Мокрохрен"".

// Функция заменяет в строке двойные кавычки " на кавычки-елочки «»
// Ported from http://aione.ru/zamena-kavyichek-yolochkami-v-csharp_i_php/
// Coded by Sergey aka Porutchik, 2013, http://forum.aeroion.ru/cat1.html
//
// Параметры
//  ИсходныйТекст  - Строка - входная строка
//
// Возвращаемое значение:
//  Строка  - строка с заменёнными кавычками
//
Функция ЗаменитьКавычкиНаЕлочки(Знач ИсходныйТекст) Экспорт

    Если Не
ЗначениеЗаполнено(ИсходныйТекст) Тогда
        Возврат
ИсходныйТекст;
    КонецЕсли;

   
ДвойнаяКавычка = """";
   
КоличествоКавычек = СтрЧислоВхождений(ИсходныйТекст, ДвойнаяКавычка);

   
// Если количество кавычек меньше двух, ничего не делаем, так как нет смысла закрывать/открывать
   
Если КоличествоКавычек < 2 Тогда
        Возврат
ИсходныйТекст;
    КонецЕсли;

   
ЛеваяКавычка = "«";
   
ПраваяКавычка = "»";
   
БуквыИЦифры = "0123456789ABCDEFGHIKLMNJOPQRSTUVWXYZ";
   
БуквыИЦифры = БуквыИЦифры + "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";

   
Результат = "";
   
ПозицияКавычки = Найти(ИсходныйТекст, ДвойнаяКавычка);
    Пока
ПозицияКавычки > 0 Цикл
        Если
ПозицияКавычки = СтрДлина(ИсходныйТекст) Тогда
           
// Если конец строки заканчивается кавычкой
           
ИсходныйТекст = Лев(ИсходныйТекст, ПозицияКавычки - 1) + ПраваяКавычка; //
       
Иначе
           
// Если впереди кавычки идут буквы и цифры, - ставим открывающую "«"
            // Если любые другие символы, - ставим закрывающую "»"
           
СледующийСимвол = ВРег(Сред(ИсходныйТекст, ПозицияКавычки + 1, 1));
           
СтрокаЗамены = ?((Найти(БуквыИЦифры, СледующийСимвол) > 0) Или (ПозицияКавычки = 1), ЛеваяКавычка, ПраваяКавычка); //
           
ИсходныйТекст = Лев(ИсходныйТекст, ПозицияКавычки - 1) + СтрокаЗамены + Сред(ИсходныйТекст, ПозицияКавычки + 1); //
       
КонецЕсли;
       
// Если количество кавычек после последней замены осталось меньше двух, ничего не делаем, так как нет смысла закрывать/открывать
       
КоличествоКавычек = СтрЧислоВхождений(ИсходныйТекст, ДвойнаяКавычка);
        Если
СтрокаЗамены = ПраваяКавычка И КоличествоКавычек < 2 Тогда
           
ПозицияКавычки = 0;
        Иначе
           
ПозицияКавычки = Найти(ИсходныйТекст, ДвойнаяКавычка);
        КонецЕсли;
    КонецЦикла;

    Возврат
ИсходныйТекст;

КонецФункции
// ЗаменитьКавычкиНаЕлочки()

В очередной раз пожалел, что в 1С: Предприятии нет штатных возможностей регулярных выражений для замены текста. Использование COMОбъект VBScript.RegExp к ним не относится.

См. также

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    20199    dimanich70    81    

145

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    4096    3    John_d    11    

57

Универсальные функции Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    18156    atdonya    24    

57

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    5506    ke.92@mail.ru    16    

65

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14764    YA_418728146    7    

166

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3585    57    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    18488    171    sapervodichka    112    

135
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. cool.vlad4 2 22.04.13 11:29 Сейчас в теме
а упоротые случаи имхо и не сделать нормально из-за неоднозначностей «Торговый дом «ООО Мокрохрен». « ООО Мокрохрен » Торговый дом ».
2. Поручик 4692 22.04.13 11:44 Сейчас в теме
(1) Не сделать, потому и не пытался. Обсуждение http://forum.dklab.ru/viewtopic.php?t=10653
6. KillHunter 8 12.12.16 08:34 Сейчас в теме
(2)
А вы уверены что это будет прокатывать в 1ске ?
//**
// функция замены обычных кавычек " на русские елочки
function rus_quote($s) {
$s = preg_replace (www.php.net/preg_replace)(
array (www.php.net/array)(
"/(^|\s+|\(|\<|\{\[\|)\"/ms",
"/\"(\s+|\.|\,|\!|\?|\)|\>|\}|\]|\||$)/ms",
),
array (www.php.net/array)(
"\\1«",
"»\\1",
),
$s
);
return $s;
}
3. Intervent 22.04.13 14:16 Сейчас в теме
MS Word, например, обособленную кавычку или после открывающей скобки делает открывающей ёлочкой. Думаю имеет смысл задействовать такую же логику и в этой функции. Это в некотором роде обратная логика: всё, что не закрываем, - открываем.
Пример: [обособленная: " или после откр. скобки: (" - надо "открывающие"].

А заодно хорошо бы предоставить пользователю экранировать кавычку: \" → ".
Хотя, если шрифт печатной формы не моноширный, то можно две одинарных ставить. )
4. shoy 19 22.08.14 15:39 Сейчас в теме
Нет, уважаемые кроты, при анализе не лучше ли вначале посчитать количество кавычек и обычных и ёлочек?
5. natala_g 7 12.12.16 08:32 Сейчас в теме
Спасибо, очень выручили!
7. kozanostra-pajero 22.01.18 01:18 Сейчас в теме
8. dialogsoft 73 05.02.19 11:12 Сейчас в теме
// СтрокаСКавычками = "Alena" "Egorova"
СтрокаБезКавычки = СтрЗаменить(СтрокаСКавычками,"""","");
Сообщить(СтрокаБезКавычки); // Alena Egorova


https://helpf.pro/faq/view/560.html
9. bocr 05.12.19 11:43 Сейчас в теме
Пользуемся ALT и клавиатурой NumLock
ALT+0171 - «
ALT+0187 - »
olga-mp; SpaceOfMyHead; +2 Ответить
Оставьте свое сообщение