1c программирование вставить текст

Обновлено: 02.07.2024

В статье на примере будут описаны все этапы создания поля html документа. В 1с html поле позволяет представить данные, которые не требуется редактировать, в более эстетичном виде. Разработчик может применить возможности html для создания и настройки формы справочника или бизнес-процесса (как делается в конфигурации Документооборот).

Рассмотрим пример. Разработаем обработку, которая будет представлять элемент справочника Пользователи в виде поля html документа. Для разработки примера я использовал демо БСП 3.1 (управляемое приложение).

Выведем в документ следующие поля справочника:

  • Наименование и Комментарий в виде текста;
  • ФизическоеЛицо и Подразделение в виде ссылок;
  • Фотографию пользователя;
  • Контактную информацию в виде таблицы.

Размещение реквизитов на форме

Для начала создадим внешнюю обработку и добавим форму. На форме создадим два реквизита Пользователь (тип СправочникСсылка.Пользователи) и ПредставлениеHTML (тип Строка неограниченной длины). Перетащим реквизиты в дерево элементов. Для элемента ПредставлениеHTML выберем вид Поле HTML документа и отключим отображение заголовка. Должно получится так:

Теперь поработаем над программной частью формы:

  • Заполнять html поле данными будем при изменении пользователя. Поэтому создадим для него обработчик события ПриИзменении;
  • Работа же с самим полем потребует перехода на сервер, так как нам необходимо выполнять запрос и получать данные из хранилища значений. Поэтому для заполнения данных html создадим функцию ЗаполнитьHTMLПредставление с директивой НаСервереБезКонтекста. В качестве параметра передадим в нее ссылку на пользователя;

В итоге должно получиться следующее:

Получение данных

Во входные параметры функции ЗаполнитьHTMLПредставление мы передаем только ссылку на пользователя, поэтому для начала надо собрать все данные, необходимые для вывода в html документ. Для этого воспользуемся запросом, который вынесем в отдельную процедуру. Приводить текст процедуры здесь я не буду, чтобы не занимать много места. Ознакомиться с ним можно во внешней обработке, ссылка на которую находится внизу статьи.

Заполнение стилей 1с html поля

Теперь в функции ЗаполнитьHTMLПредставление будем описывать html документ. Начнем с обязательных тегов <html> и <head>. После чего перейдем к заполнению стилей (тег <style>), которые будут применяться во всем документе, а также в отдельных его блоках.

Рассмотрим заполнение стилей более подробно:

Создание тела html документа в 1с 8

После описания стилей займемся формированием тела документа. Для этого используем тег <body>.

Вывод изображения в html

Начнем с вывода фотографии пользователя. В элементе справочника она хранится в реквизите Фотография, в виде хранилища значения. Его мы получили вместе с остальными данными пользователя, при помощи запроса.

Разберем представленный код:

  • Хранилище содержит двоичные данные изображения, их необходимо получить. Используем для этого метод Получить(), который распаковывает данные хранилища;
  • В html мы можем вывести изображение либо указав ссылку на него, либо использовав его двоичные данные, в кодировке base64. Для этого используем метод Base64Строка;
  • После подготовки данных, можно выводить их в документ.
    • Используем тег <img>, применяемый для вывода изображений;
    • Атрибут src указывает адрес выводимого изображения или его данные. У нас это двоичные данные, поэтому в дополнение к ним необходимо использовать префикс data:image/ и указание типа данных base64.

    Для того чтобы отделить изображение от следующей информации, используем тег <p>. Он означает начало нового абзаца. При описании стилей мы указали, что перед началом нового абзаца устанавливается отступ в 10 пикселей.

    Вывод текстового реквизита в html

    После фотографии выведем основные данные пользователя в следующем формате:

    Начнем с имени пользователя:

    Разберем представленный код:

    • Для того, чтобы имя реквизита не сливалось с его содержанием, выделим его другим цветом. Для этого используем свойство <font>, позволяющее изменять характеристики текста. В нашем случае это цвет color.
    • После вывода данных используем тег <br>. Он предназначен для перехода на следующую строку.

    Вывод ссылки в html

    Теперь выведем в документ физлицо пользователя. Так как оно представлено ссылочным типом, оформим его в виде ссылки.

    Разберем представленный код:

    • Для создания ссылок используется тег <a>. Его атрибут href задает адрес ссылки. Для удобства работы создадим шаблон для вывода навигационной ссылки на физлицо. В параметр %1 будем выводить ссылку, а в параметр %2 текст ссылки;
    • Для получения навигационной ссылки используем метод ПолучитьНавигационнуюСсылку(<Ссылка>);
    • Заполним параметры шаблона, используя строковую функцию СтрШаблон;

    Далее нам необходимо будет вывести еще один текстовый реквизит и еще один ссылочный. Для того чтобы не дублировать код вынесем добавление реквизита в html в отдельную, универсальную процедуру.

    Вывод всех реквизитов будет выглядеть следующим образом:

    Вывод таблицы в html 1с

    Осталось вывести таблицу контактной информации пользователя. Это делается довольно просто.

    • Для вывода таблицы используется тег <table>;
    • Для вывода строки таблицы тег <tr>;
    • Тег <td> отвечает за вывод ячейки;
    • Для вывода ячейки заголовка используется тег <th>.

    На этом формирование поля html документа в 1с завершено. Осталось только закрыть теги и вернуть сформированный текст.

    В итоге у нас получается html поле, заполненное следующим образом:

    Html документ сформированный в 1с

    Обработка нажатия на ссылку

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

    Мне частенько приходится взаимодействовать с 1С-разработчиками, и во время совместной работы над проектами замечаю, что далеко не все из них хорошо знают свой главный инструмент – «Конфигуратор». Причем это не относится к степени крутости девелопера. Как оказалось, даже синьоры пользуются далеко не всеми возможностями «Конфигуратора», а ведь они могут сэкономить кучу времени, а тем самым повысить продуктивность разработчика.

    Под катом я решил собрать несколько полезных фишек стандартного конфигуратора, которыми пользуюсь регулярно. Многие из них появились в платформе «1С:Предприятие 8.3.х», поэтому перед тестированием обязательно проверьте номер версии установленной у вас платформы.

    Закладки

    Хорошо, если новые функции добавлены в самый конец модуля, а если потребовалось расположить в разных частях? Вот тут начинается самое интересное. Одни программисты начинают скролить текст (как правило, этим страдают новички). Более продвинутые применяют поиск по тексту (Ctrl + F).

    Оба способа рабочие, но пользоваться ими долго. Куда правильней использовать функцию «закладки». Например, переходим к какой-нибудь строке. Нажимаем ALT + F2 и получаем закладку (слева от строки отобразиться квадратик).


    Убирается закладка тем же сочетанием клавиш. Так вот, закладок может быть в модуле расставлено много. По ним легко передвигаться нажатием клавиши F2. Фича крутая, но она была изначально не доделана и не позволяла, например, передвигаться по закладкам в разных модулях. Это досадное ограничение создавало лишние тормоза для программистов, привыкших к хорошим IDE (например, Visual Studio, PHP Storm).

    В версии 8.3 недочет исправили и сделали классную вещь – «Список закладок». Нажимаем клавиши «Ctrl + Shift + F2», и перед нами откроется окно с полным списком установленных закладок:


    В нем перечислены все закладки в разрезе модулей. Для каждой закладки указан номер строк и доступен перечень действий: перейти к коду, удалить закладку, удалить все закладки.

    Таким образом, работать с закладками стало на порядок проще. Еще бы добавили возможность установки горячих клавиш на закладки, и стало бы совсем хорошо. Помню еще со времен «Delphi 6» привык к установке закладок по горячим клавишам Alt + <Цифра>. Наставил закладок и быстро перемещайся по ним.

    Группировка строк

    В «1С:Предприятие» с самого начала была одна большая проблема – отсутствие возможности создавать дополнительные модули для определенных объектов. Например, есть у меня справочник «Контрагенты» и мне хочется разделить его функционал на модули. Допустим, функционала очеееень много. Так вот, в моем распоряжении все равно стандартный набор: Модуль объекта, Модуль менеджера и модуль формы. Понятное дело, что у каждого модуля своя роль, но что делать мне с моими 100500 функциями, которые относятся непосредственно к справочнику «Контрагенты»?

    По мнению 1С я должен оформить их в виде общего модуля. С одной стороны, идея классная. Делаем модуль, его сразу видно и т.д., и т.п. Правда всегда есть один нюанс. Если следователь этой методике, то при наличии кучу объектов в конфигурации число общих модулей будет зашкаливать.

    Вот взять хотя бы библиотеку БСП. Стоит ее внедрить и в количестве модулей начинает теряться. Я уже молчу про конфигурации, которые построены на базе БСП. Там и сто пятьсот модулей от БСП, и еще столько же специально для конфигурации.

    В общем, неудобство налицо (особенно после опыта разработки в языках, где нет подобных ограничений). Увы, спастись от этой проблемы в настоящее время не получится. Зато, мы можем использовать возможности группировки функций/процедур в модулях.+

    Например, есть у нас общий модуль «РаботаСКонтрагентами». В нем часть функций отвечают за поиск контрагента, другая часть за загрузку контрагентов из внешних источников и т.д. Чтобы не потеряться во всем этом многообразии возможностей, можно логически сгруппировать все функции/процедуру. Для этого в платформе 8.3 появилась функция под названием «Области». Рассмотрим пример:

    После добавление областей (язык препроцессора) наш код будет сгруппирован. Если их свернуть (области), то в итоге мы увидим симпатичный комментарий (см. рисунок ниже):


    Клик мышкой по плюсику развернет область, и мы увидим свернутые функции. Если хочется сразу развернуть все имеющиеся функции (в пределах области), то кликаем по плюсику удерживая Ctrl.

    Вот такая мега удобная вещь и в модулях с большим количеством функций спасает очень даже. В предыдущих версиях платформы было модно использовать для подобных целей блоки комментариев, но управлять/добавлять областями явно удобней.

    Форматирование кода

    Собственно говоря, тут и рассказывать особо нечего – выделяем код, нажимаем «Alt + Shift + F» и редактор попытается привести его в божеский вид в соответствии с вшитым code-style. Функция работает вполне сносно и ей обязательно надо пользоваться. Пишу это потому, что неоднократно видел, как разработчики пытаются отбивать отступы самостоятельно. Это конечно круто, но зачем тратить время, если большую часть работы можно выполнить одной горячей клавишей?

    Комментирование

    Опять же, никаких секретных действий – выделили код, нажали “Ctrl + num /” (слеш на дополнительной области клавиатуры) и получили закомментированный участок. Захотели вернуть обратно? Не беда! Выделяем закомментированный участок кода, нажимаем «Ctrl + Shift + num /» и мгновенно приводим его в боевой режим. Фишка попсовая, но опять же, новички про нее не знают, и тратят кучу времени на расстановку слешей. Да еще и матерят компанию «1С», за отсутствие возможности многострочного комментирования, как в продвинутых язык программирования.

    Быстрая вставка специальных символов

    Иногда возникает необходимость быстро вставить в редактор специальный символ (которого нет на клавиатуре). В большинстве случаев разработчики используют для этого функции встроенного языка (например, символ). А ведь есть способ проще. Если удерживать клавишу Alt и набрать на доп. клавиатуре код нужного символа (из таблицы ASKII), то он тут же будет вставлен. Например, держим ALT и набираем 65. На выходе получаем букву «А». Или вводим 4 и получаем бубновую масть.


    Вставка специальных символов

    Хорошо, с этим понятно, но какой от этого еще можно получить профит? Лично я, таким образом вставляю символ амперсанда (&). Все знают, что этот символ используется для определения параметров в языке запросов. Неудобство состоит в том, что текст запроса мы пишем на русском языке, а для добавления этого символа перед параметром приходится переключить на английский, затем нажать Shift + 7, а потом вернуться обратно на русский.

    Чтобы избавить себя от этой рутиной последовательности действий, я использую выше озвученную функцию. С ее помощью для установки амперсанда требуется лишь набрать с удержанной клавишей «alt» последовательность цифр 38. При этом надобность в двойном переключении языка отпадает.

    Многие могут подумать, что я искусственно раздул проблему из ничего, но тут просто дело привычки. Кода приходится писать много и вот такие мелочи немного повышают производительность и избавляют от лишних нажатий клавиши backspace (для удаления случайно набранных символов). Не убедил? Тогда просто выделите время и попробуйте себя переучить

    работа со строками в 1С

    Функции работы со строками в 1С

    Рассмотрим основные функции встроенного языка программирования 1С.

    Строка

    Функция Строка() позволяет получить текстовое представление переменных других типов.

    СтрДлина

    Функция позволяет получить количество символов в строке 1C, включая пробелы и незначащие символы.

    СокрЛП, СокрЛ, СокрП

    Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
    Попробуйте бесплатно по ссылке >>

    Помимо пробелов, функция 1C удаляет такие символы, как перенос строки, неразрывный пробел и т.д.

    Лев, Прав, Сред

    С помощью данных функций очень просто получить первые (Лев) или последние (Прав) символы в строке, а также произвольное количество символов (Сред).

    Найти

    ВРег, НРег, ТРег

    ПустаяСтрока

    Функция, позволяющая сравнить исходную строку с пустой строкой. Проверяется наличие незначащих символов.

    Аналогично можно проверить строку на пустое значение следующим образом:

    СтрЗаменить

    Функция СтрЗаменить позволяет массово заменить искомое значение на нужное нам. Синтаксис:

    СтрЧислоСтрок

    Позволяет получить количество строк в многострочном тексте. Функция считает количество переносов строк (Символы.ПС).

    Например, построчная обработка текстового фрагмента:

    СтрПолучитьСтроку

    СтрЧислоВхождений

    Функция для подсчета числа вхождений произвольного фрагмента в строку. Например, подсчитать количество вхождений определенных символов или слов в текст.

    Символ и КодСимвола

    Две обратные функции. С помощью КодСимвола можно получить код символа в кодировке Unicode. Функцией Символ можно получить символ, зная Unicode кодификатор.

    Часто встречающиеся задачи по работе со строками в 1С

    Рассмотрим классические примеры решения задач в работе с текстовыми переменными.

    Конкатенация строк в 1С

    Преобразовать число в строку

    Однако может смущать наличие неразрывного пробела.

    Его можно убрать с помощью замены неразрывного пробела на пустую строку:

    или с помощью метода Формат:

    Кавычки в строке 1С

    Для новичков достаточно трудно установить кавычки внутри строки, хотя в этом нет ничего сложного. Достаточно внутри строки поставить вместо одних кавычек двое.

    Символ переноса строки

    Сравнение строк в 1С

    Однако для получения корректного сравнения часто требуется возвести строки в один регистр и убрать незначащие символы:

    Таким образом, мы получим более точное сравнение двух строк.

    Убрать пробелы в строке 1С

    Достаточно часто нужно убрать пробелы в строке 1С.

    Если требуется убрать пробелы справа и слева:

    Если требуется убрать абсолютно все пробелы, можно заменить их на пустую строку:

    Если требуется убрать неразрывные пробелы из строки, которая получена из числового типа, сделать это можно так:

    Другие статьи по 1С:


    &НаКлиенте
    Процедура ЗаписьТекстовогоФайла ( Команда )

    КаталогСохранения = "D:\Storage\data" ;
    СоздатьКаталог ( КаталогСохранения ); // Имя каталога (путь)

    Файл_ТХТ = Новый ТекстовыйДокумент ;

    // Наполнение файла содержимым
    Файл_ТХТ . УстановитьТекст ( "
    |MS Windows
    |Linux
    |MacOS
    |OSX" );

    // Очистка содержимого файла
    Файл_ТХТ . Очистить ();

    // Добавление 1-й строки:
    Файл_ТХТ . ДобавитьСтроку ( "Word" );
    // Добавление 2-й строки:
    Файл_ТХТ . ДобавитьСтроку ( "Excel" );
    // Добавление 3-й строки:
    Файл_ТХТ . ДобавитьСтроку ( "Powerpoint" );

    // Замена первой строки на "Outlook"
    Файл_ТХТ . ЗаменитьСтроку ( 1 , "Outlook" );

    // Вставка новую строки сразу после 1-й (*на место 2-й)
    Файл_ТХТ . ВставитьСтроку ( 2 , "Access" );

    // Удаление 2-й строки: ("Access")
    Файл_ТХТ . УдалитьСтроку ( 2 );

    // Запись/перезапись файла (D:\Storage\data\MS.txt) на диск
    // Параметры: путь, кодировка, разделитель строк
    Файл_ТХТ . Записать ( КаталогСохранения + "\MS.txt" , КодировкаТекста . UTF8 , Символы . ВК + Символы . ПС );

    // Открытие созданного файла в блокноте
    ЗапуститьПриложение ( КаталогСохранения + "\MS.txt" );

    &НаКлиенте
    Процедура ЧтениеТекстовогоФайла ( Команда )

    Файл_ТХТ = Новый ТекстовыйДокумент ;

    Файл_ТХТ . Прочитать ( ПутьКФайлу_ТХТ , КодировкаТекста . UTF8 , Символы . ВК + Символы . ПС );

    // Показать текст целиком
    Сообщить ( Файл_ТХТ . ПолучитьТекст ());
    //Outlook
    //Excel
    //Powerpoint

    // Показать текст по строкам
    Для Индекс = 1 По Файл_ТХТ . КоличествоСтрок () Цикл
    Сообщить ( Файл_ТХТ . ПолучитьСтроку ( Индекс )); //. Outlook . Excel . Powerpoint
    КонецЦикла;

    Формирование печатной формы из текстового макета в 1С 8.3:

    &НаКлиенте
    Процедура ФормированиеПечатнойФормыИзТекстовогоМакета ( Команда )

    ФормаПечати = СформироватьПечатнуюФорму ();
    ФормаПечати . Показать ( "Счет №2020" );

    &НаСервере
    Функция СформироватьПечатнуюФорму ()

    ФормаПечати = Новый ТекстовыйДокумент ;
    Макет = ЭтотОбъект . ПолучитьМакет ( "Макет_Счета" );

    // Получение области и макета по имени
    Шапка = Макет . ПолучитьОбласть ( "Шапка" );
    // Заполнение параметров
    Шапка . Параметры . Дата = ТекущаяДата ();
    Шапка . Параметры . Номер = 2020 ;
    // Вывод шапки в документ
    ФормаПечати . Вывести ( Шапка );

    // Заголовок табличной части.
    ЗаголовокТ = Макет . ПолучитьОбласть ( "ТЧ_Заголовок" );
    ФормаПечати . Вывести ( ЗаголовокТ );

    // Строки табличной части (обычно в цикле)
    СтрокаТ = Макет . ПолучитьОбласть ( "ТЧ_Строка" );

    // Строка 1
    СтрокаТ . Параметры . Номенклатура = "SSD Intel Optane DC P4800X 1.5TB" ;
    СтрокаТ . Параметры . Количество = 7 ;
    ФормаПечати . Вывести ( СтрокаТ );

    // Строка 2
    СтрокаТ . Параметры . Номенклатура = "SSD Huawei 02351SPX 1.92TB" ;
    СтрокаТ . Параметры . Количество = 12 ;
    ФормаПечати . Вывести ( СтрокаТ );

    // Вывод подвала ТЧ
    СтрокаТ = Макет . ПолучитьОбласть ( "ТЧ_Подвал" );
    СтрокаТ . Параметры . ИтогоКоличество = 19 ; // Всего
    ФормаПечати . Вывести ( СтрокаТ );

    Читайте также: