Операция конкатенации 1с это
Выражение — это математическая или логическая формула, по которой вычисляется значение. Математическое выражение может стоять справа от знака равенства в операторах присваивания, быть параметром процедур или функций, индексом массива переменных. Логическое выражение может быть условием в управляющих операторах Если , Пока , Для . Выражения состоят из констант, переменных и функций, связанных символами логических и/или арифметических операций.
Арифметические операции
В языке определены следующие виды арифметических операций:
остаток от деления
Арифметические операции имеют один или два операнда, в зависимости от типа которых операция имеет ту или иную семантику. Тот или иной семантический вариант операции определяется по первому операнду. В случае несовпадения типа второго операнда с требуемым, значение преобразуется к требуемому типу в соответствии с правилами преобразования типов. Если тип первого операнда не соответствует ни одному из допустимых типов, то в зависимости от ситуации может производиться преобразование типов или возбуждаться состояние ошибки выполнения.
Сложение определено для следующих типов операндов:
Дата + Число (к дате прибавляется число дней)
Вычитание определено для следующих типов операндов:
Дата – Число (от даты отнимается число дней)
Дата – Дата (результатом является число дней между датами)
Остаток от деления:
Замечание. При выполнении операции % (остаток от деления) оба операнда операции округляются до целого значения.
Операция конкатенации
Операция конкатенации ("+") используется для того, чтобы присоединить одну строку к другой. Длина результирующей строки равна сумме длин соединяемых строк. В случае несовпадения типа данных второго или последующих операндов со строковым типом, их значение преобразуется к строковому типу в соответствии с правилами преобразования типов.
· Для того, чтобы удалить ненужные пробелы, используются системные функции СокрЛ и СокрП .
ФИО = СокрП(Фамилия) + " " + СокрП(Имя) + " " + СокрП(Отчество);
Логические операции
Логическая операция сравнивает операнды и вырабатывает логическое значение: «истина» или «ложь». Существует два вида логических операций: операции сравнения и булевы операции. В операциях сравнения сравниваются два значения. Булевы операции выполняются над логическими значениями, реализуя булеву алгебру. Символы булевых операций могут комбинироваться, образуя составные операции.
Операции сравнения:
В языке определены следующие виды операций сравнения:
больше или равно
меньше или равно
Операции сравнения определены для следующих типов операндов:
Больше или равно:
Меньше или равно:
Булевы операции:
В языке определены следующие виды булевых операций:
конъюнкция (булево И)
дизъюнкция (булево ИЛИ)
логическое отрицание (булево отрицание НЕ)
Числовые константы
Константа числового типа представляется в виде:
0 123 -15 +24.11 0.245
Константы даты
Дата задается в формате 'ДД.ММ.ГГ' или 'ДД.ММ.ГГГГ' (дата заключается в одиночные кавычки). Неопределенная дата задается как '00.00.00'.
Строковые константы
Константа строкового типа представляется как любая последовательность символов, заключенных в двойные кавычки.
"Это самая правильная строка"
Кроме того, допускаются «многострочные» строковые константы. В исходном тексте многострочные константы могут задаваться двумя способами:
· Первый вариант: В данном случае между фрагментами, представляющими отдельные строки многострочной константы, не должно встречаться никаких символов, за исключением пробелов, переводов строки и строк комментариев.
Стр = "Первая строка" // пример строковой константы
· Второй вариант: В данном примере значение константы полностью идентично предыдущему примеру. Отличие заключается в том, что каждая отдельная составляющая не замыкается кавычками, а на каждой последующей строке помещен символ переноса строки "|". В этом варианте комментарии между открывающей и закрывающей кавычками не допускаются.
Стр = "Первая строка
Строковые выражения
Строковые выражения могут использоваться в качестве параметров методов, процедур и функций, либо в правой части оператора присваивания. Строковым выражением может быть отдельная строка или сложное сочетание строковых констант, функций и операций. То, что выражение является строковым, определяется по первому операнду. В случае несовпадения типа второго и последующих операндов со строковым типом, их значения преобразуются к требуемому типу в соответствии с правилами преобразования типов. Чтобы указать, что выражение является строковым, можно, например, начинать его с пустой строки символов "".
Стр = СокрП("Фамилия" + ", " + Имя + ", " + " отчество");
Стр1 = "" + Докум.Цена + Валюта.СокрНаим;
Логические выражения
В логических выражениях происходит вычисление логического значения (истина/ложь). Обычно логические выражения используются в управляющих операторах, в которых на основании результата логического выражения определяется дальнейшая последовательность выполнения программы. Логические выражения вычисляются слева направо. Для того, чтобы избежать неоднозначности и управлять последовательностью операндов, следует применять круглые скобки.
Конкатена́ция — это операция склеивания объектов линейной структуры. В 1С конкатенации (+ или &) используется для того, чтобы присоединить одну строку к другой. В результате использования конкатенации значений длина строки получается равна сумме длин соединяемых строк. Если типы данных второго или последующих операндов со строковым типом не совпадают, их значение преобразуется к строковому типу переменных (т.е., например, число автоматически будет преобразовано к типу переменной, указанной слева от оператора +).
ФИОГР=Имя+ “ “ +Отчество+ “ “ +Фамилия + “ гр- “ + 1987;
//получим Остап Ибрагимович Бендер гр-1987
Если нужно из некоторой коллекции строк получить одну единую, это можно сделать в цикле:
ИтогСтрока = Строка + ЭлементКоллекции;
Работа функции конкатенации не вызывает проблем с производительностью, когда обрабатывается небольшое количество данных. Производительность может упасть, когда счет строк идет на тысячи.
Есть несколько вариантов получения строки из коллекции.
Первый – с помощью текстового документа. В этом случае все составные части будут идти отдельными строками. При использовании функции ПолучитьТекст(), нужно будет сделать замену символов переноса строк в коде на пустую строку, а после получения результата использовать метод обратного преобразования.
Другой способ – занести все подстроки в массив, который преобразуется в текстовое представление с помощью функции ЗначениеВСтрокуВнутр(), а далее лишнее очищается.
При массовых операциях конкатенации строк можно использовать методы платформы СтрРазделить и СтрСоединить.
ИзвТекст= Новый Массив;
Для НомерКолонки = 1 По Макет.ШиринаТаблицы Цикл
ИзвТекст.Добавить(ТекстОбласти);
…
РезультатТекст = СтрСоединить(ИзвТекст, Символы.ПС);
Еще один способ операции конкатенации строк — использование объекта ЗаписьXML. У этого объекта можно использовать метод ЗаписатьБезОбработки() для «сборки» документа в том виде, какой подается на вход, т.е. без лишних тегов.
2. Конкатенация в запросах
Конкатенация в запросах может использоваться при программной "сборке" текста запроса. Пример:
Пример изменения имени таблицы в запросе:
"ВЫБРАТЬ
|ТаблицаСправочника.Наименование КАК Наименование,
|ТаблицаСправочника.Код КАК КодСправочника
|ИЗ
|&ТабСправочника КАК ТаблицаСправочника";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса , "&ТабСправочника", "Справочник." + ИмяСправочника);
Также к данной функции можно прибегнуть, когда нужно сложить части строки, чтобы результат мог потом стать проверяемым параметром.
ВЫРАЗИТЬ(ВЫРАЗИТЬ("123" КАК Строка(3))+ВЫРАЗИТЬ("789" КАК Строка(3))
КАК Строка(6)) КАК Результат
Справочник.Номенклатура КАК Номенклатура
Специалист компании «Кодерлайн»
Вас могут заинтересовать следующие статьи:
Конкатена́ция — это операция склеивания объектов линейной структуры. В 1С конкатенации (+ или &) используется для того, чтобы присоединить одну строку к другой. В результате использования конкатенации значений длина строки получается равна сумме длин соединяемых строк. Если типы данных второго или последующих операндов со строковым типом не совпадают, их значение преобразуется к строковому типу переменных (т.е., например, число автоматически будет преобразовано к типу переменной, указанной слева от оператора +).
ФИОГР=Имя+ “ “ +Отчество+ “ “ +Фамилия + “ гр- “ + 1987;
//получим Остап Ибрагимович Бендер гр-1987
Если нужно из некоторой коллекции строк получить одну единую, это можно сделать в цикле:
ИтогСтрока = Строка + ЭлементКоллекции;
Работа функции конкатенации не вызывает проблем с производительностью, когда обрабатывается небольшое количество данных. Производительность может упасть, когда счет строк идет на тысячи.
Есть несколько вариантов получения строки из коллекции.
Первый – с помощью текстового документа. В этом случае все составные части будут идти отдельными строками. При использовании функции ПолучитьТекст(), нужно будет сделать замену символов переноса строк в коде на пустую строку, а после получения результата использовать метод обратного преобразования.
Другой способ – занести все подстроки в массив, который преобразуется в текстовое представление с помощью функции ЗначениеВСтрокуВнутр(), а далее лишнее очищается.
При массовых операциях конкатенации строк можно использовать методы платформы СтрРазделить и СтрСоединить.
ИзвТекст= Новый Массив;
Для НомерКолонки = 1 По Макет.ШиринаТаблицы Цикл
ИзвТекст.Добавить(ТекстОбласти);
…
РезультатТекст = СтрСоединить(ИзвТекст, Символы.ПС);
Еще один способ операции конкатенации строк — использование объекта ЗаписьXML. У этого объекта можно использовать метод ЗаписатьБезОбработки() для «сборки» документа в том виде, какой подается на вход, т.е. без лишних тегов.
2. Конкатенация в запросах
Конкатенация в запросах может использоваться при программной "сборке" текста запроса. Пример:
Пример изменения имени таблицы в запросе:
"ВЫБРАТЬ
|ТаблицаСправочника.Наименование КАК Наименование,
|ТаблицаСправочника.Код КАК КодСправочника
|ИЗ
|&ТабСправочника КАК ТаблицаСправочника";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса , "&ТабСправочника", "Справочник." + ИмяСправочника);
Также к данной функции можно прибегнуть, когда нужно сложить части строки, чтобы результат мог потом стать проверяемым параметром.
ВЫРАЗИТЬ(ВЫРАЗИТЬ("123" КАК Строка(3))+ВЫРАЗИТЬ("789" КАК Строка(3))
КАК Строка(6)) КАК Результат
Справочник.Номенклатура КАК Номенклатура
Специалист компании «Кодерлайн»
Вас могут заинтересовать следующие статьи:
Конкатена́ция — это операция склеивания объектов линейной структуры. В 1С конкатенации (+ или &) используется для того, чтобы присоединить одну строку к другой. В результате использования конкатенации значений длина строки получается равна сумме длин соединяемых строк. Если типы данных второго или последующих операндов со строковым типом не совпадают, их значение преобразуется к строковому типу переменных (т.е., например, число автоматически будет преобразовано к типу переменной, указанной слева от оператора +).
ФИОГР=Имя+ “ “ +Отчество+ “ “ +Фамилия + “ гр- “ + 1987;
//получим Остап Ибрагимович Бендер гр-1987
Если нужно из некоторой коллекции строк получить одну единую, это можно сделать в цикле:
ИтогСтрока = Строка + ЭлементКоллекции;
Работа функции конкатенации не вызывает проблем с производительностью, когда обрабатывается небольшое количество данных. Производительность может упасть, когда счет строк идет на тысячи.
Есть несколько вариантов получения строки из коллекции.
Первый – с помощью текстового документа. В этом случае все составные части будут идти отдельными строками. При использовании функции ПолучитьТекст(), нужно будет сделать замену символов переноса строк в коде на пустую строку, а после получения результата использовать метод обратного преобразования.
Другой способ – занести все подстроки в массив, который преобразуется в текстовое представление с помощью функции ЗначениеВСтрокуВнутр(), а далее лишнее очищается.
При массовых операциях конкатенации строк можно использовать методы платформы СтрРазделить и СтрСоединить.
ИзвТекст= Новый Массив;
Для НомерКолонки = 1 По Макет.ШиринаТаблицы Цикл
ИзвТекст.Добавить(ТекстОбласти);
…
РезультатТекст = СтрСоединить(ИзвТекст, Символы.ПС);
Еще один способ операции конкатенации строк — использование объекта ЗаписьXML. У этого объекта можно использовать метод ЗаписатьБезОбработки() для «сборки» документа в том виде, какой подается на вход, т.е. без лишних тегов.
2. Конкатенация в запросах
Конкатенация в запросах может использоваться при программной "сборке" текста запроса. Пример:
Пример изменения имени таблицы в запросе:
"ВЫБРАТЬ
|ТаблицаСправочника.Наименование КАК Наименование,
|ТаблицаСправочника.Код КАК КодСправочника
|ИЗ
|&ТабСправочника КАК ТаблицаСправочника";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса , "&ТабСправочника", "Справочник." + ИмяСправочника);
Также к данной функции можно прибегнуть, когда нужно сложить части строки, чтобы результат мог потом стать проверяемым параметром.
ВЫРАЗИТЬ(ВЫРАЗИТЬ("123" КАК Строка(3))+ВЫРАЗИТЬ("789" КАК Строка(3))
КАК Строка(6)) КАК Результат
Справочник.Номенклатура КАК Номенклатура
Специалист компании «Кодерлайн»
Вас могут заинтересовать следующие статьи:
Практики использования типовых и самописных конфигураций 1С иногда сталкиваются с "торможениями" продуктов. Причины могут быть разными - некоторые любит делать множественные обращения через точку в циклах, другие используют вложенные запросы в параметрах виртуальных таблиц, третьи бессмысленно гоняют мегабайты контекста в клиент-серверной модели. Но иногда можно получить огромную потерю производительности на банальной операции сложения строк. Давайте рассмотрим эту ситуацию детальнее.
Во встроенном языке платформы 1С:Предприятие, как и во многих других языках программирования, присутствует возможность сложения строк. Это легко:
Когда же нужно из некоторой коллекции строк получить одну единую, то можно сделать в цикле:
Все это хорошо работает когда у нас немного данных. Но все кардинально меняется, когда счет строк идет на тысячи (обычное дело при работе с клиент-банками, веб-сервисами, КПК и в прочих ситуациях). Попробуйте и сами увидите как на глазах падает производительность. О резкой деградацию производительности при множественных конкатенациях уже писали. Даже на Инфостарте . .
Но водь нас больше всего интересуют практические решения. Варианты с внешними компонентами я даже не стал рассматривать. Нужно ведь писать код сразу так, что бы он работал кросплатформенно! Так же были проигнорированы варианты с записью в файл - нам лишние задержки от дисковой подсистемы совсем не нужны.
Некоторые предлагают очевидное в таком случае решение - использование текстового документа. С практической стороны необходимо отметить, что все составные строки в этом объекте идут отдельными строками. Т.е. воспользовавшись методом ПолучитьТекст() необходимо еще сделать замену переносов строк на пустую строку. В случае использования вами символа переноса строки в подстроках, необходимо предварительно сделать замену его на некоторую уникальную последовательность символов, а после получения результата произвести обратное преобразование.
Я же для себя изобрел собственный велосипед, который по скорости превзошел использование текстового документа. Все подстроки заносятся в массив, который перегоняется в текстовое представление с помощью ЗначениеВСтрокуВнутр(), а далее вычищается от "лишнего". Работает стабильно и довольно быстро. Подробности реализации можете посмотреть в прикрепленной обработке.
UPD 1. Из комментария узнал про новый способ конкатенирования - использование объекта ЗаписьXML. У него есть интересный метод ЗаписатьБезОбработки() для помещения уже готового документа в том виде, какой подается на вход, т.е. без лишних тегов.
Для того, что бы определить какой метод лучше (и стоило ли вообще заморачиваться) была написана маленькая обработка. Условия для всех равны - замер происходит в милисекундах от вызова серверной функции с реализацией соответствующего алгоритма до получения отклика. Что бы нивелировать случайные факторы, я проводил по четыре замера и выводил в таблицу среднее значение.
В результате я получил следующую таблицу:
В результате мы еще раз убедились в непрактичности использования обычной конкатенации на больших объемах строк. Как видно из получившегося графика зависимость скорости выполнения от количества элементов имеет экспоненциальный характер. В то время, как оба метода "обхода" стабильно показывают прямолинейную зависимость. Что позволяет нам прогнозировать общее время выполнения обработок связанных с обработкой текста. И мой метод превосходит по быстродействию использование текстового документа в 2 раза!
UPD 2. К сожалению не нашел в инфостартовском редакторе инструмента для редактирования количества столбцов таблицы и не увидел переключения в режим HTML-документа для правки руками. По результатам тестирования метода с ЗаписьXML получились результаты идентичные методу массивом как на малых, так и на больших наборах подстрок. Поэтому я отдаю этому методы лавры победителя - при прочих равных он легко запоминается и не содержит подводных камней.
Читайте также: