1с пустые строки при обмене
В ходе работы с запросами любому программисту приходится так или иначе взаимодействовать с пустыми значениями. Что мы понимаем под пустым значением?
Пустое значение – это или отсутствие значения, или значение по умолчанию для типа данных. С примитивными типами все довольно просто: значением по умолчанию является некое начальное значение, служащее точкой отсчета.
Виды пустых значений
Рассмотрим типы пустых значений, которые могут встретиться или потребоваться в запросе.
- Для типа Число – пустым значением является ноль – 0.
- Для типа Строка – пустая строка – «».
- Для типа Дата – первое января первого года – 01.01.0001 00:00:00. Именно с этой даты ведется отсчет времени в 1С.*
- Для типа Булево – значением по умолчанию, технически, является Ложь, но логически оба значения типа являются заполненными. Поэтому принятие решения о том пустое значение Ложь или нет, основывается на логике конкретного алгоритма.
*Будьте внимательны, вне 1С существуют различные системы счисления дат с разными точками отсчета.
Отсутствующее значение в полном смысле соответствует только типу Null. Этот тип содержит лишь одно значение, которое обозначает отсутствие значения.
Похожий на него тип Неопределено тоже содержит лишь одно значение, но Неопределено означает не отсутствие данных, а лишь невозможность определить значение по умолчанию для типа. Неопределено является значением по умолчанию для составных, в том числе не определенных явно, типов. Например, значение в новой строке таблицы значений в колонке, для которой тип не определен явно.
Со ссылочными типами намного меньше неопределенности. Все ссылочные типы предусматривают пустое значение. Пустое значение — это та же самая ссылка с указанием типа данных, но без уникального идентификатора конкретного значения. Благодаря этому мы можем обращаться с пустой ссылкой как с обычной и применять к ней все предусмотренные платформой методы, работая с ней как с полноценным значением.
Работа с пустыми значениями в запросе
Независимо от того, необходимо ли вам явно ввести в результат запроса пустое значение или сравнить с ним существующие значения, необходимо знать, каким образом описывать пустые значения в запросе.
Типы Число, Строка, Булево описываются в запросе как во встроенном языке:
Неопределено, являясь по существу примитивным типом, описывается аналогично:
Пустые ссылочные значения определяются немного сложнее. У всех ссылочных объектов предусмотрено предопределенное служебное значение ПустаяСсылка. Благодаря этому есть возможность единым способом выбрать пустую ссылку – через функцию Значение:
Возможности работы со значениями типа Null несколько богаче. Как и другие примитивные типы, Null описывается так же, как во встроенном языке. Помимо этого, предусмотрены специальный оператор Есть Null и функция ЕстьNull.
- Оператор Есть Null позволяет создать логическое выражение сравнивающее выбранное значение со значением Null.
- Функция ЕстьNull возвращает первый аргумент, если он не равен Null, и второй аргумент в обратном случае.
Выражения, определяющие пустые значения, можно использовать в любых разделах запроса поддерживающих выражения. Например, вы можете добавить пустую ссылку в секцию Выбрать или проверку на Null в Условие.
Практические примеры
Проверка на пустую ссылку
С использованием функции Значение
С использованием оператора Есть Null
Null при левом или полном соединении
Проверка на Null
Пример демонстрирует частую практическую ситуацию, когда при левом соединении, для первой таблицы не находится соответствия во второй. В этом случае все поля второй таблицы будут равны Null.
Обработка Null-значений
Модификация предыдущего запроса для демонстрации часто встречающейся методики по получению каких-либо значений по умолчанию, взамен отсутствующих. В данном примере с использованием функции ЕстьNull, производится замена отсутствующего значения остатка, на логически правильное 0.
В рамках этой статьи мы рассмотрели различные типы пустых значений и их свойства, изучили способы определения различных типов пустых значений в запросах, а в практической части убедились в простоте применения рассмотренного материала.
NULL – отсутствующие значения.
Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено.
NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа.
NULL значения появляются в запросе в следующих ситуациях:
а) Внешнее соединение, при котором не было найдено соответствующей записи в другой таблице (при левом – во второй, при правом – в первой, при полном – в обоих)
б) Обращение к реквизитам элементов для группы и наоборот.
в) NULL в списке полей выборки (ВЫБРАТЬ)
г) Обращение к реквизитам для битой ссылки
ЕСТЬ NULL используется в операторе ВЫБРАТЬ (как бы проверя, что значение это есть пустое ( Значение ЕСТЬ NULL )):
Код 1C v 8.х
еще пример:
Код 1C v 8.х
Функция ЕСТЬNULL (значение, РезультатЕслиNULL) возвращает значение своего первого параметра, в случае если он не равен NULL, и значение второго параметра в противном случае
Является свернутым ВЫБОР…КОНЕЦ, но ЕСТЬNULL предпочтительнее.
Код 1C v 8.х
еще пример:
Код 1C v 8.х
В данном примере получаются все элементы справочника номенклатуры, после чего, для каждой номенклатуры из регистра накопления получаются текущие остатки. Т.к. для номенклатуры, по которой отсутствуют остатки, виртуальная таблица остатков не запись вернет, то в результате соединения в поле "УчетНоменклатурыОстатки.КоличествоОстаток" будут значения NULL для номенклатуры, по которой не было остатков. Для того чтобы вместо значения NULL в результате запроса присутствовало значение 0, мы использовали функцию ЕСТЬNULL(), которая осуществит желаемую замену.
ЕСТЬNULL отличается от ВЫБОР по следующим причинам:
а) При ЕСТЬNULL лучше читается запрос (проще)
б) При ЕСТЬNULL, если проверяется сложное выражение, то работает быстрее, поскольку вычисляется один раз
в) При ЕСТЬNULL выражение замены приводится к типу проверяемого выражения, если оно имеет тип Строка (длина) или Число (разрядность).
Нельзя проверять значения на NULL обычным равенством, потому что в SQL действует трехзначная логика – Истина, Ложь, NULL, и результатом такого сравнения будет UNKNOWN, что в 1С 8.0 аналогично ЛОЖЬ.
NULL <> 0, поэтому при левых внешних соединениях спр. Номенклатура с таблицами остатков, цен, Контрагентов со взаиморасчетами при отсутствии таких записей там будет NULL, который не равен 0. Лучшее решение – ЕСТЬNULL
Рассмотрим основные методы использования пустых значений в условиях запросов 1С 8.3.
Проверка на NULL
выполняется с помощью конструкции ЕСТЬ NULL, например:
ВЫБРАТЬ
ВнутренниеЗаказыОстатки.Заказчик,
ВнутренниеЗаказыОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ВнутренниеЗаказы.Остатки КАК ВнутренниеЗаказыОстатки
ГДЕ
ВнутренниеЗаказыОстатки.КоличествоОстаток ЕСТЬ NULL
Получите 267 видеоуроков по 1С бесплатно:
Пустая дата в запросе 1С
Пустая дата в запросе устанавливается конструкцией ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0), пример:
ВЫБРАТЬ
СчетНаОплатуПокупателю.Ссылка,
СчетНаОплатуПокупателю.ДатаОтгрузки
ИЗ
Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
ГДЕ
СчетНаОплатуПокупателю.ДатаОтгрузки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
Пустая ссылка (значение) в запросе 1С 8.2 и 8.3
Для ссылочных значений (справочники, документы, перечисления, планы счетов и т.д) для проверки необходимо использовать конструкцию «ЗНАЧЕНИЕ(Справочник.ИмяСправочника.ПустаяСсылка)». Например:
ВЫБРАТЬ
Номенклатура.Ссылка
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
Проверка на пустую строку в запросе 1С
В условиях для нахождения пустой строки необходимо использовать пустое значение строки — «», например:
Если Вы начинаете изучать 1С программирование, рекомендуем наш курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
( голосов, в среднем: из 5)
Поддержите нас, расскажите друзьям!
СПРОСИТЕ в комментариях!
Запрос1.Текст = «ВЫБРАТЬ
|РемонтныйЛист.Номер,
|РемонтныйЛистМатериалыЗамена.ДатаРемонта,
|РемонтныйЛист.Проведен,
|РемонтныйЛист.Водитель1,
|РемонтныйЛист.Водитель2,
|РемонтныйЛист.Водитель3,
|РемонтныйЛистМатериалыЗамена.КолвоЧасов
|ИЗ
|Документ.РемонтныйЛист.МатериалыЗамена КАК РемонтныйЛистМатериалыЗамена
|ЛЕВОЕ СОЕДИНЕНИЕ Документ.РемонтныйЛист КАК РемонтныйЛист
|ПО РемонтныйЛистМатериалыЗамена.Ссылка = РемонтныйЛист.Ссылка
|ГДЕ
//|РемонтныйЛистМатериалыЗамена.ДатаРемонта >= Значение(«ДатаНач») И РемонтныйЛистМатериалыЗамена.ДатаРемонта = Значение(“ДатаНач”)
ПРАВИЛЬНО
//|РемонтныйЛистМатериалыЗамена.ДатаРемонта >= &ДатаНач
НЕ ПРАВИЛЬНО
//|РемонтныйЛист.Водитель3 НЕ ЗНАЧЕНИЕ (РемонтныйЛист.Водитель3.ПустаяСсылка)
ПРАВИЛЬНО
//|РемонтныйЛист.Водитель3 <> Значение(Справочник.Водители.ПустаяСсылка)
Где «Водители» имя справочника, тип которого имеет реквизит «Водитель3» (возможно сотрудники или физические лица)
Синтаксис не правильный так как я тока учусь:) спасибо большое. но водитель это реквизит не справочника а документа. имеет ли это значение?
а еще подскажите пожалуйста как вот на основании этого же запроса заполнить ячейки в отчете на пересечении водителя и даты необходимо поставить колво часов сколько он был в ремонте
РемонтныйЛист.Водитель3 — Это реквизит
Значение(Справочник.Водители.ПустаяСсылка) — это значение, которое вы передаете что бы наложить отбор, а Справочник.Водители — это ТИП реквизита РемонтныйЛист.Водитель3.
В конечном счете суть условия какая? Отобрать только те позиции, для которых выражение будет равняться ИСТИНА.
С этим я уже разобралась. вы правы были что это реквизит справочника Физические лица.у меня теперь проблема в том что он ругается на РемонтныйЛист.Проведен = Истина
Как мы уже знаем, правила конвертации объектов используются для сопоставления объектов в конфигурациях источнике и приемнике. Естественно, что в правиле задается объект источник данных (то есть откуда брать данные) и объект - приемник данных (то есть куда переносить или записывать данные).
Кроме них имеется еще ряд свойств смысл которых постараемся раскрыть.
Искать объект приемника по внутреннему идентификатору объекта источника - флаг определяющий поиск объектов в приемнике для версии платформы V8. Если этот флажок взведен, то поиск объекта для модификации в базе приемнике осуществляется по внутреннему (уникальному) идентификатору объекта. Этот идентификатор не виден пользователю а средствами программы поддерживается уникальность идентификаторов в информационной базе, так что никакие два объекта информационной базы не имеют одинаковых идентификаторов.
Продолжить поиск по полям поиска, если по идентификатору объект приемник не найден - флаг определяет продолжать поиск объекта в информационной базе приемнике, если поиск по уникальному идентификатору не привел к положительному результату.
Не замещать существующие объекты в приемнике при загрузке, а только создавать новые и заполнять их * - флаг определяет нужно ли выполнять изменение реквизитов объекта в информационной базе приемнике, если объект был успешно найден по уникальному идентификатору или по полям поиска.
Не создавать новый объект в приемнике, если он НЕ найден * - флаг определяет нужно ли создавать новый объект в информационной базе - приемнике, если он не был найден по уникальному идентификатору или по полям поиска.
При переносе объекта по ссылке НЕ создавать новый объект, а только переносить ссылку - флаг определяет нужно ли создавать новый объект в информационной базе - приемнике, если он не был найден по уникальному идентификатору или по полям поиска в том случае если объект переносится по ссылке. Если объект не находится и у него установлен поиск по уникальносу идентификатору то будет перенесена только ссылка на объект (без полей поиска - одна ссылка). Если же объект выгружается непосредственно (то есть выгружается не только ссылка на объект, но и все его реквизиты), то флаг ни на что не влияет.
Не выгружать объекты свойств источника по ссылкам - флаг определяет нужно ли выгружать все объекты на которые есть ссылки у объекта источника или достаточно выгрузить только информацию о ссылках на эти объекты. Допустим вы выгружаете справочник номенклатура. Если у соответствующего ПКО не взведен этот флажок, то кроме номенклатуры будут выгружены все объекты на которые она ссылается. Если же флаг взведен, то объекты на которые ссылается номенклатура выгружены не будут. Попробуйте поставить этот флажок и посмотреть результирующий файл выгрузки данных, а затем убрать его и сравнить результаты. Вам быстро станет понятен его смысл.
Не запоминать выгруженные объекты - флаг определяет нужно ли системе при выгрузке КЭШировать последние выгруженные объекты. КЭШирование позволяет ускорить процесс выгрузки и загрузки данных.
Использовать быстрый поиск объекта при выгрузке и загрузке - флаг определяет использовать ли быстрый поиск объектов для выгрузки. Имеет смысл применять для небольших по количеству записей справочников (Количество записей не более 1000 элементов). Эффект достигается в том случае, если у многих объектов установлен флаг Не выгружать объекты свойств по ссылкам. При такой схеме выгрузки и загрузке данных скорость возрастает в несколько раз.
Автоматически генерировать номер или код, если он не задан - флаг определяет нужно ли системе автоматически генерировать новый код или номер объекта, если перед записью он не заполнен.
On-line обмен
Выгружать объект (полностью), только при наличии на него ссылки - настройка определяет при каких обстоятельствах необходимо выгружать объект. В том случае, если флажок установлен, то выгрузка объекта будет выполнена по следующим правилам:
- По правилам выгрузки если объект уже выгружался, то выгружаем его как есть
- По правилам выгрузки если объект не выгружался, то не выгружаем
- При выгрузке по ссылке на объект выгружаем целиком
Например, если нужно переносить не всю номенклатуру из одной ИБ в другую, а только ту, на которую есть ссылки, то флажок подойдет.
Не замещать объект созданный в информационной базе приемнике при загрузке - настройка определяет нужно ли (обратно) переносить объект, который был создан в информационной базе, с которой организован обмен. То есть, если документ создан в информационной базе 1, при помощи обмена поступил в информационную базу 2, то стоит ли его при изменении в базе 2 переносить в базу 1. Настройка позволяет указать приоритет объекта при обмене по месту его создания. То есть изменения в информационной базе, где был создан объект распространяются везде, а изменения в других базах не влияют на этот объект в базе 1.
Приоритет объекта загрузки - настройка определяет приоритет объекта при загрузке в случае коллизии изменений. Значение по умолчанию и в случае незаполненного значения - Выше. Если произошла коллизия, программа анализирует приоритет объекта загрузки. Только в том случае, если приоритет объекта загрузки равен Выше он будет записан в информационную базу приемника. В случае если приоритет Совпадает или Ниже программа зафиксирует соответствующую информацию о коллизии в информационной базе, но объект менять при этом не будет.
Варианты настроек полей поиска - таблица с возможными вариантами настроек полей поиска для пользователя. Разработчик правил определяет возможные комбинации полей поиска, которые пользователь может выбирать при настройке обмена. Все настройки указанные разработчиком правил должны быть отработаны в коде обработчика "Поля поиска". Переменная НастройкаПоиска в обработчике определяет выбранный пользователем вариант сопоставления (ИмяНастройкиДляАлгоритма из соответствующей строки таблицы). Если пользователь не выбрал ни один вариант сопоставления, или ему ни один вариант не был предложен, то НастройкаПоиска - пустая строка.
На закладке "Дополнительно" можно редактировать наименование правила, вхождение его в определенную группу а так же описание правила.
Примечания:
* Не рекомендуется для использования при настройке on-line обмена
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
В ходе работы с запросами любому программисту приходится так или иначе взаимодействовать с пустыми значениями. Что мы понимаем под пустым значением?
Пустое значение – это или отсутствие значения, или значение по умолчанию для типа данных. С примитивными типами все довольно просто: значением по умолчанию является некое начальное значение, служащее точкой отсчета.
Виды пустых значений
Рассмотрим типы пустых значений, которые могут встретиться или потребоваться в запросе.
- Для типа Число – пустым значением является ноль – 0.
- Для типа Строка – пустая строка – «».
- Для типа Дата – первое января первого года – 01.01.0001 00:00:00. Именно с этой даты ведется отсчет времени в 1С.*
- Для типа Булево – значением по умолчанию, технически, является Ложь, но логически оба значения типа являются заполненными. Поэтому принятие решения о том пустое значение Ложь или нет, основывается на логике конкретного алгоритма.
*Будьте внимательны, вне 1С существуют различные системы счисления дат с разными точками отсчета.
Отсутствующее значение в полном смысле соответствует только типу Null. Этот тип содержит лишь одно значение, которое обозначает отсутствие значения.
Похожий на него тип Неопределено тоже содержит лишь одно значение, но Неопределено означает не отсутствие данных, а лишь невозможность определить значение по умолчанию для типа. Неопределено является значением по умолчанию для составных, в том числе не определенных явно, типов. Например, значение в новой строке таблицы значений в колонке, для которой тип не определен явно.
Со ссылочными типами намного меньше неопределенности. Все ссылочные типы предусматривают пустое значение. Пустое значение — это та же самая ссылка с указанием типа данных, но без уникального идентификатора конкретного значения. Благодаря этому мы можем обращаться с пустой ссылкой как с обычной и применять к ней все предусмотренные платформой методы, работая с ней как с полноценным значением.
Работа с пустыми значениями в запросе
Независимо от того, необходимо ли вам явно ввести в результат запроса пустое значение или сравнить с ним существующие значения, необходимо знать, каким образом описывать пустые значения в запросе.
Типы Число, Строка, Булево описываются в запросе как во встроенном языке:
Неопределено, являясь по существу примитивным типом, описывается аналогично:
Пустые ссылочные значения определяются немного сложнее. У всех ссылочных объектов предусмотрено предопределенное служебное значение ПустаяСсылка. Благодаря этому есть возможность единым способом выбрать пустую ссылку – через функцию Значение:
Возможности работы со значениями типа Null несколько богаче. Как и другие примитивные типы, Null описывается так же, как во встроенном языке. Помимо этого, предусмотрены специальный оператор Есть Null и функция ЕстьNull.
- Оператор Есть Null позволяет создать логическое выражение сравнивающее выбранное значение со значением Null.
- Функция ЕстьNull возвращает первый аргумент, если он не равен Null, и второй аргумент в обратном случае.
Выражения, определяющие пустые значения, можно использовать в любых разделах запроса поддерживающих выражения. Например, вы можете добавить пустую ссылку в секцию Выбрать или проверку на Null в Условие.
Практические примеры
Проверка на пустую ссылку
С использованием функции Значение
С использованием оператора Есть Null
Null при левом или полном соединении
Проверка на Null
Пример демонстрирует частую практическую ситуацию, когда при левом соединении, для первой таблицы не находится соответствия во второй. В этом случае все поля второй таблицы будут равны Null.
Обработка Null-значений
Модификация предыдущего запроса для демонстрации часто встречающейся методики по получению каких-либо значений по умолчанию, взамен отсутствующих. В данном примере с использованием функции ЕстьNull, производится замена отсутствующего значения остатка, на логически правильное 0.
В рамках этой статьи мы рассмотрели различные типы пустых значений и их свойства, изучили способы определения различных типов пустых значений в запросах, а в практической части убедились в простоте применения рассмотренного материала.
Строка в 1С:Предприятие – это базовый тип данных, представленный в виде строки в формате unicode. Тип «строка» доступна для работы в тонком клиенте, веб-клиенте, на сервере, толстом клиенте, внешнем соединении, мобильном приложении (клиент/сервер). Тип «строка» может быть передан между клиентом и сервером, может быть сериализован.
Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен . Имя типа XDTO: может быть любым из перечисленных: string, anySimpleType, anyURI, duration, gDay, gMonth, gMonthDay, gYear, gYearMonth, NOTATION.
Существует достаточно большой список функции работы со строками в 1С, перечень функций:
- СтрДлина
- СокрЛ
- СокрП
- СокрЛП
- Лев
- Прав
- Сред
- СтрНайти
- ВРег
- НРег
- ТРег
- Символ
- КодСимвола
- ПустаяСтрока
- СтрЗаменить
- СтрЧислоСтрок
- СтрПолучитьСтроку
- СтрЧислоВхождений
- СтрСравнить
- СтрНачинаетсяС
- СтрЗаканчиваетсяНа
- СтрРазделить
- СтрСоединить
- ПолучитьСклоненияСтроки
Представленные функции строк в 1С поддерживается платформой 8.3. Для платформ более ранних версий список функций может отличаться. Подробнее о функциях – во встроенной к языке справке.
Далее каждая функция будет рассмотрена более детально.
СтрДлина – функция возвращает длину строки (число).
Сигнатура (жирным курсивом выделены обязательные параметры):
СокрЛ, СокрП, СокрЛП – эти функции очень похожи по своей сути, поэтому будут рассмотрены совместно. Функции убирают пробелы, переносы строк, перевод каретки слева (СокрЛ), справа (СокрП), слева и права (СокрЛП).
- тонкий клиент
- веб-клиент
- мобильный клиент
- сервер, толстый клиент
- внешнее соединение
- мобильное приложение (клиент)
- мобильное приложение (сервер)
Лев, Прав, Сред – данные функции также будут рассмотрены совместно. Функции получают определенное количество символов слева, справа, с середины строки. Результат выполнения – строка.
Сигнатура (жирным курсивом выделены обязательные параметры):
- тонкий клиент
- веб-клиент
- мобильный клиент
- сервер
- толстый клиент
- внешнее соединение
- мобильное приложение (клиент)
- мобильное приложение (сервер)
Как (Какой-то текст)
кст (Какой-то текст)
СтрНайти – Функция находит подстроку (первое вхождение) в строке с учетом регистра. Результат выполнения – строка.
Сигнатура (жирным курсивом выделены обязательные параметры):
- Строка – исходная строка;
- ПодстрокаПоиска – подстрока, которую нужно найти;
- НаправлениеПоиска – системное перечисление (СКонца, СНачала);
- НачальнаяПозиция – число. Указывает позицию в строке, с которой начинается поиск.
Если параметр не задан и в параметре НаправлениеПоиска указано значение СНачала, то значение по умолчанию равно 1.
Если параметр не задан и в параметре НаправлениеПоиска указано значение СКонца, то значение по умолчанию равно длине строки.
Допускаются значения от 1 до количества символов в строке, в которой выполняется поиск. Если указано значение, не входящее в диапазон, генерируется ошибка «Неверное значение параметра».
- НомерВхождения – Число. Номер вхождения подстроки в строку.
- тонкий клиент
- веб-клиент
- мобильный клиент
- сервер
- толстый клиент
- внешнее соединение
- мобильное приложение (клиент)
- мобильное приложение (сервер)
- интеграция
10 (Какой-то текст, просто пробный текст)
32 (Какой-то текст, просто пробный текст)
32 (Какой-то текст, просто пробный текст)
10 (Какой-то текст, просто пробный текст)
ВРег, НРег, ТРег – данные функции будут рассмотрены совместно. Функции изменяют регистр строк. Верхний, нижний, каждое слово с заглавной буквы.
Сигнатура (жирным курсивом выделены обязательные параметры):
- тонкий клиент
- веб-клиент
- мобильный клиент
- сервер
- толстый клиент
- внешнее соединение
- мобильное приложение (клиент)
- мобильное приложение (сервер)
Символ – функция возвращает символ (строку) код которой был передан (код в формате unicode).
Сигнатура (жирным курсивом выделены обязательные параметры):
- тонкий клиент
- веб-клиент
- мобильный клиент
- сервер
- толстый клиент
- внешнее соединение
- мобильное приложение (клиент)
- мобильное приложение (сервер)
КодСимвола – Функция обратная функции Символ, т.е. на вход принимает строку, возвращает код (число) символа в формате unicode.
Сигнатура (жирным курсивом выделены обязательные параметры):
- тонкий клиент
- веб-клиент
- мобильный клиент
- сервер
- толстый клиент
- внешнее соединение
- мобильное приложение (клиент)
- мобильное приложение (сервер)
ПустаяСтрока – функция проверяет, пустая ли строковая переменная, возвращает тип булево. Игнорируются пробелы, переносы строк, перенос каретки.
Сигнатура (жирным курсивом выделены обязательные параметры):
- тонкий клиент
- веб-клиент
- мобильный клиент
- сервер
- толстый клиент
- внешнее соединение
- мобильное приложение (клиент)
- мобильное приложение (сервер)
СтрЗаменить – функция заменяет все подстроки в строке.
Сигнатура (жирным курсивом выделены обязательные параметры):
- тонкий клиент
- веб-клиент
- мобильный клиент
- сервер
- толстый клиент
- внешнее соединение
- мобильное приложение (клиент)
- мобильное приложение (сервер)
СтрЧислоСтрок – функция возвращает количество строк в многострочном документе, строки разделенные символом переноса строки.
Сигнатура (жирным курсивом выделены обязательные параметры):
- тонкий клиент
- веб-клиент
- мобильный клиент
- сервер
- толстый клиент
- внешнее соединение
- мобильное приложение (клиент)
- мобильное приложение (сервер)
СтрПолучитьСтроку – Получения строки по номеру из многострочного документа.
Сигнатура (жирным курсивом выделены обязательные параметры):
- тонкий клиент
- веб-клиент
- мобильный клиент
- сервер
- толстый клиент
- внешнее соединение
- мобильное приложение (клиент)
- мобильное приложение (сервер)
СтрЧислоВхождений – функция возвращает число вхождений подстроки в строку. Поиск регистронезависимый.
Сигнатура (жирным курсивом выделены обязательные параметры):
- тонкий клиент
- веб-клиент
- мобильный клиент
- сервер
- толстый клиент
- внешнее соединение
- мобильное приложение (клиент)
- мобильное приложение (сервер)
СтрСравнить – функция сравнивает строки без учета регистра. Возвращается число, если -1 – тогда первая строка меньше второй, 1 – первая строка больше второй, 0 – строки равны.
Сигнатура (жирным курсивом выделены обязательные параметры):
- тонкий клиент
- веб-клиент
- мобильный клиент
- сервер
- толстый клиент
- внешнее соединение
- мобильное приложение (клиент)
- мобильное приложение (сервер)
Строка "Какой-то текст" больше "Какой-то"
СтрНачинаетсяС, СтрЗаканчиваетсяНа – определяют (с учетом регистра) начинается/заканчивается строка с определенной подстроки. Возвращает булево.
Сигнатура (жирным курсивом выделены обязательные параметры):
- тонкий клиент
- веб-клиент
- мобильный клиент
- сервер
- толстый клиент
- внешнее соединение
- мобильное приложение (клиент)
- мобильное приложение (сервер)
"Какой-то текст" начинается с "как"
"Какой-то текст" заканчивается на "ст"
СтрРазделить – функция разбивает строку на подстроки, возвращается массив. Последний параметр определяет, нужно ли учитывать пустые строки, по умолчанию значение «Истина».
В ходе работы с запросами любому программисту приходится так или иначе взаимодействовать с пустыми значениями. Что мы понимаем под пустым значением?
Пустое значение – это или отсутствие значения, или значение по умолчанию для типа данных. С примитивными типами все довольно просто: значением по умолчанию является некое начальное значение, служащее точкой отсчета.
Виды пустых значений
Рассмотрим типы пустых значений, которые могут встретиться или потребоваться в запросе.
- Для типа Число – пустым значением является ноль – 0.
- Для типа Строка – пустая строка – «».
- Для типа Дата – первое января первого года – 01.01.0001 00:00:00. Именно с этой даты ведется отсчет времени в 1С.*
- Для типа Булево – значением по умолчанию, технически, является Ложь, но логически оба значения типа являются заполненными. Поэтому принятие решения о том пустое значение Ложь или нет, основывается на логике конкретного алгоритма.
*Будьте внимательны, вне 1С существуют различные системы счисления дат с разными точками отсчета.
Отсутствующее значение в полном смысле соответствует только типу Null. Этот тип содержит лишь одно значение, которое обозначает отсутствие значения.
Похожий на него тип Неопределено тоже содержит лишь одно значение, но Неопределено означает не отсутствие данных, а лишь невозможность определить значение по умолчанию для типа. Неопределено является значением по умолчанию для составных, в том числе не определенных явно, типов. Например, значение в новой строке таблицы значений в колонке, для которой тип не определен явно.
Со ссылочными типами намного меньше неопределенности. Все ссылочные типы предусматривают пустое значение. Пустое значение — это та же самая ссылка с указанием типа данных, но без уникального идентификатора конкретного значения. Благодаря этому мы можем обращаться с пустой ссылкой как с обычной и применять к ней все предусмотренные платформой методы, работая с ней как с полноценным значением.
Работа с пустыми значениями в запросе
Независимо от того, необходимо ли вам явно ввести в результат запроса пустое значение или сравнить с ним существующие значения, необходимо знать, каким образом описывать пустые значения в запросе.
Типы Число, Строка, Булево описываются в запросе как во встроенном языке:
Неопределено, являясь по существу примитивным типом, описывается аналогично:
Пустые ссылочные значения определяются немного сложнее. У всех ссылочных объектов предусмотрено предопределенное служебное значение ПустаяСсылка. Благодаря этому есть возможность единым способом выбрать пустую ссылку – через функцию Значение:
Возможности работы со значениями типа Null несколько богаче. Как и другие примитивные типы, Null описывается так же, как во встроенном языке. Помимо этого, предусмотрены специальный оператор Есть Null и функция ЕстьNull.
- Оператор Есть Null позволяет создать логическое выражение сравнивающее выбранное значение со значением Null.
- Функция ЕстьNull возвращает первый аргумент, если он не равен Null, и второй аргумент в обратном случае.
Выражения, определяющие пустые значения, можно использовать в любых разделах запроса поддерживающих выражения. Например, вы можете добавить пустую ссылку в секцию Выбрать или проверку на Null в Условие.
Практические примеры
Проверка на пустую ссылку
С использованием функции Значение
С использованием оператора Есть Null
Null при левом или полном соединении
Проверка на Null
Пример демонстрирует частую практическую ситуацию, когда при левом соединении, для первой таблицы не находится соответствия во второй. В этом случае все поля второй таблицы будут равны Null.
Обработка Null-значений
Модификация предыдущего запроса для демонстрации часто встречающейся методики по получению каких-либо значений по умолчанию, взамен отсутствующих. В данном примере с использованием функции ЕстьNull, производится замена отсутствующего значения остатка, на логически правильное 0.
В рамках этой статьи мы рассмотрели различные типы пустых значений и их свойства, изучили способы определения различных типов пустых значений в запросах, а в практической части убедились в простоте применения рассмотренного материала.
Читайте также: