1с преобразовать дату в строку в запросе 1с
1с предприятие 8.2 (8.2.15.289)
Как это можно сделать?
4 ответа 4
А теперь по делу.
Два дня серфил, чтобы найти ответ на вопрос. В итоге получилась такая незамысловатая конструкция запроса:
Прошу заметить, что данный запрос учитывает только один год, только один месяц, и три последних дня. Значит надо добавить сюда over9000 строк кода, чтобы просматривались еще хотя бы несколько лет (с запасом), все 12 месяцев и 31 день.
А все потому что функция ДАТАВРЕМЯ не понимает в аргументах другие функции, а если бы и понимала, то в запросе нельзя представить строку датой, кроме как вышепредставленным онанизмом.
нельзя просто так взять и написать нормальный запрос
1С:Предприятие предоставляет возможность в запросах разыменовывать ссылочные поля, т.е. обращаться к подчиненным полям «через точку». Очень удобная возможность, которая позволяет упростить текст запроса. Но следует понимать каким образом в платформе реализован данный функционал и чем он опасен. Разберемся более подробно.
При обращении к подчиненному полю «через точку» происходит неявное соединение с таблицей этого типа. Например, обращение в запросе
ВЫБРАТЬ
ЗаказыКлиентовОстатки.Номенклатура.Артикул ,
ЗаказыКлиентовОстатки.ЗаказаноОстаток
ИЗ
РегистрНакопления.ЗаказыКлиентов.Остатки КАК ЗаказыКлиентовОстатки
Приведет к неявному соединению с таблицей справочника Номенклатура, а реальный запрос, который будет выполняться к базе будет аналогичен этому:
ВЫБРАТЬ
СпрНоменклатура.Артикул ,
ЗаказыКлиентовОстатки.ЗаказаноОстаток
ИЗ
РегистрНакопления.ЗаказыКлиентов.Остатки КАК ЗаказыКлиентовОстатки
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
ПО ЗаказыКлиентовОстатки.Номенклатура = СпрНоменклатура.Ссылка
На первый взгляд все корректно и правильно, но как система поведет себя, когда разыменовывается поле составного типа? Система будет соединяться СО ВСЕМИ таблицами, входящими в составной тип! Т.е. запрос
ВЫБРАТЬ
ЦеныНоменклатурыПоставщиков.Регистратор.Номер ,
ЦеныНоменклатурыПоставщиков.Цена
ИЗ
РегистрСведений.ЦеныНоменклатурыПоставщиков КАК ЦеныНоменклатурыПоставщиков
будет преобразован во что-то вроде:
И ко всей этой конструкции будут добавлены ограничения на уровне записей (RLS), если они используются. Все это может существенно замедлить выполнение запроса.
Иногда при написании запроса известно какая ссылка будет находиться в поле составного типа. В этом случае правильно привести составной тип к одному необходимому и избежать соединения со всеми таблицами составного типа. Для приведения составного типа к какому-то одному используется оператор
Выразить ( Выражение > КАК Тип значения >)
Параметр можно привести к ссылочному типу или к одному из примитивных типов.
Если содержит в составном типе требуемый , то приведение типа считается осуществимым, и для каждого значения указанного типа результатом будет это самое значение. Для значений других типов результатом приведения типа будет значение NULL.
Если не содержит в составном типе требуемый , то выполнение данного запроса завершится ошибкой.
Пример использования оператора Выразить, когда известно какая ссылка будет находиться в поле составного типа:
ВЫБРАТЬ
ВЫРАЗИТЬ (ЦеныНоменклатурыПоставщиков.Регистратор КАК Документ.ЗаказПоставщику).Номер КАК Номер,
ЦеныНоменклатурыПоставщиков.Цена
ИЗ
РегистрСведений.ЦеныНоменклатурыПоставщиков КАК ЦеныНоменклатурыПоставщиков
ГДЕ
ЦеныНоменклатурыПоставщиков.Регистратор ССЫЛКА Документ.ЗаказПоставщику
В запросе выше пожертвовали компактностью получения поля Номер ради производительности. В результате текст запроса получился более громоздким, но запрос выполнится быстрее за счет того, что не будет лишних ненужных соединений со всеми таблицами составного поля Регистратор.
Остались вопросы?
Спросите в комментариях к статье.
Идея простая: создаем 2 временных таблицы, одну - содержащую числа от 0 до 99 и их строковые представления, вторую - числа от 1900 до 2099 и их строковые представления. Соединяем при помощи левого соединения нашу таблицу дат и эти таблицы:
Или в компактном виде
Недостаток: диапазон допустимых дат 1900-2099 годы. Этот недостаток можно устранить соединив с годами 2 таблицы:
Специальные предложения
Да был такой случай, надо было в отчете чтобы дата являлась частью строки, поэтому дата выводилась через шаблон а не через параметр, поэтому форматирование в ячейке на нее не действовало. А дата была со временем и это время никак не удавалось убрать.
Может придумаете еще какой способ, но у меня так получилось. Все в запросе для СКД безусловно хорошо, только область применения тоже пока представляю весьма смутно. Предполагается, что параметр &Дата время не содержит. Если это не так, запись будет подлиннее (4) ildarovich,
А вообще интересна идея использовать "подстроку" в виде некоего переключателя, или преобразователя числа в последовательность символов.
вместо нескольких КОГДА ТОГДА
спасибо за идею! (4) ildarovich,
А где данный пост в "Минимализмы"? А то искать Ваши гениальные и простые решения по всему форуму - тяжко. (4) ildarovich,
Кстати, а зачем учёт 1900 года? Мне кажется так лучше будет:
(9) EmpireSer, да, согласен. Со старшей цифрой так хорошо получается. То, что взяли секунду - значит уловили саму суть. Секунда лучше всего, но длиннее в записи. У меня еще есть вариант с вложенным запросом - чуть покороче по числу символов.
(8) Я сейчас думаю, не сделать ли вторую часть минимализмов (Минимализмы-2), а то до последнего далеко листать в таком длинном тексте. Еще не решил окончательно. А задачи и решения пока коплю.
(10) ildarovich,
Да я долго втягивался в эту логику. А секунду взял из-за возможного уменьшения математических действий ядром СУБД.
Может вам в минимализмы добавить пункт "Интересное" и там просто перечислить ссылки на Ваши примеры решений к чужим публикациям?
По хорошему Ваши идеи должны в БСП попасть :-)
Просмотры 5316
Загрузки 0
Рейтинг 19
Создание 19.02.15 13:45
Обновление 19.02.15 13:45
№ Публикации 330793
Тип файла Нет файла
Конфигурация Конфигурации 1cv8
Операционная система Windows
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)
Код открыт Не указано
Учебно-методический комплекс является уникальной разработкой с использованием «лучших практик», наработанных автором в проектах на предприятиях разных масштабов, отраслей и сфер деятельности Учебно-методический комплекс «Управление закупками: инструменты работы с требованиями»См. также
Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо
В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.
12.12.2020 4558 Eugen-S 23
СКД: 5 советов, как сделать лучше
Несколько примеров решения задач с использованием разных подходов
27.10.2021 4477 Neti 19
Что за ? в коде, или Секретный оператор в 1С
Инкремент, модуль и прочая магия, которая скрыта под символом "?"
21.10.2021 8368 SeiOkami 41
Полезные примеры СКД, ч.2
Еще несколько примеров решения задач в СКД.
06.04.2021 10874 Neti 8
27.01.2016 85834 Serginio 116
Обзор полезных методов БСП 3.1.4
Библиотека стандартных подсистем (далее - БСП) является частью любой типовой конфигурации, поэтому умение применять готовые процедуры и функции повышает качество разработки и избавляет от написания лишнего кода. К сожалению, не у всех есть время и упорство овладеть всей документацией, поэтому я собрал воедино наиболее популярный функционал.
25.03.2021 41409 rayastar 51
Звуковое управление в 1С 8.3
В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.
16.03.2021 7227 velemir 33
Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions
"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.
28.12.2020 8960 comol 31
Использование программных перечислений, ч.1: строковые константы Промо
Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?
10.12.2016 41157 unichkin 74
Базовые вещи БСП, которые облегчат жизнь программисту 1С
В данной публикации я опишу полезные процедуры и функции модуля общего назначения библиотеки стандартных подсистем, обязательные к использованию любым программистом 1С.
30.08.2020 20391 quazare 34
[Общий модуль] Динамическое формирование интерфейса
Версия 2.0.0.1 + добавил GitHub
28.08.2020 13066 rpgshnik 74
Форма выбора (подбор) в управляемых формах
Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.
08.05.2020 79450 user5300 19
Вспомогательные инструкции в коде 1С Промо
Помогаем редактору кода 1С помогать нам писать и анализировать код.
15.10.2018 36202 tormozit 106
Программная работа с настройками СКД
Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.
27.01.2020 66182 ids79 26
[СКД] Программное создание схемы компоновки данных
Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".
15.01.2020 43923 John_d 22
Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения
30.12.2019 35633 kuzyara 38
Оформление и рефакторинг сложных логических выражений Промо
В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.
20.09.2012 82910 tormozit 131
Сходство Джаро - Винклера. Нечеткое сравнение строк
В области информатики и статистики сходство Джаро - Винклера представляет собой меру схожести строк для измерения расстояния между двумя последовательностями символов. В публикации рассмотрены некоторые особенности алгоритма, и представлен вариант его реализации на языке 1С.
25.12.2019 8466 brooho 19
22.11.2019 12434 Sibars 19
Полезные процедуры и функции для программиста
Все мы пишем программный код и часто используем процедуры, облегчающие его написание. Ниже приведена выборка таких полезных процедур и функций.
07.10.2019 39858 HostHost 41
Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо
Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.
11.07.2007 54515 tormozit 51
Таблица значений. Нюансы
Обзор некоторых аспектов использования общеизвестного инструмента 1С.
01.10.2019 53328 Yashazz 56
[Шпаргалка] Программное создание элементов формы
Программное создание практически всех популярных элементов формы.
06.09.2019 103297 rpgshnik 75
Агрегатные функции СКД, о которых мало кто знает
Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.
05.09.2019 78160 ids79 56
Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо
Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки
10.09.2017 51283 tormozit 74
Регистры бухгалтерии. Общая информация
Общая информация о внутреннем устройстве регистров бухгалтерии.
05.09.2019 46871 YPermitin 25
Три костыля. Сказ про фокусы в коде
Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.
03.09.2019 30254 YPermitin 81
Иерархия без "В ИЕРАРХИИ"
22.08.2019 15103 ildarovich 24
Выгрузка документа по условию Промо
Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий. А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.
25.04.2019 18047 m-rv 3
Отслеживание выполнения фонового задания
Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.
17.08.2019 45361 ids79 22
Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив
Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.
08.08.2019 153360 ids79 75
Фоновое выполнение кода в 1С - это просто
Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.
02.08.2019 61124 avalakh 27
Как прикрутить ГУИД к регистру сведений Промо
. и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.
16.04.2019 23373 m-rv 18
Разбираемся с параметрами редактирования СКД
Связь по типу, Параметры выбора, Связи параметров выбора
31.07.2019 42095 json 17
СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты
Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.
26.07.2019 106299 ids79 17
Обработчики событий при записи объектов. Зачем и что за чем?
Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта. Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.
В языке запросов отсутствуют встроенные функции преобразования одних типов данных в другие, например, строк в числа или даты и наоборот. В работе «Выразить строку как число и строку как дату в запросе» были предложены достаточно компактные способы преобразований «из строки». Теперь дошла очередь до обратных к ним преобразований «в строку».
Основной проблемой рассматриваемого преобразования в строку является выделение каждого конкретного разряда исходного числа. Например, число 123 состоит из трех разрядов. Пусть разряды нумеруются справа налево, начиная с нуля. Разряды отличаются весом: нулевой разряд в десятичной позиционной системе счисления имеет вес 1, первый – 10, второй – 100 и так далее. Для выделения каждого разряда требуется найти целое от деления числа на вес разряда, а затем – остаток от деления полученного целого на 10. Первый (второй слева) разряд, таким образом, получится так: 123 разделим на 10, получим 12,3. Затем возьмем целое, получим 12. Затем найдем остаток от деления на 10, получим 2 – искомый первый (второй слева) разряд. Буквальная запись этих выражений в запросе получается очень и очень громоздкой, но существует другой путь.
Этот путь заключается в использовании для нахождения остатка от деления пары функций: СЕКУНДА и ДОБАВИТЬКДАТЕ. Дело в том, что функция СЕКУНДА фактически является функцией остатка от деления на 60 числа секунд, прошедшего с начала времен. Чтобы превратить ее в функцию расчета остатка от деления на 10 достаточно считать секунды шестерками. То есть требуемая функция будет записываться так:
Эта функция выделяет самый правый (нулевой) разряд числа Икс. Чтобы выделить первый разряд, нужно использовать функцию
А чтобы выделить второй – функцию
И так далее. Множитель 60 позволяет выделить разряд десятых долей, 600 – сотых и так далее.
Ограничением рассмотренного подхода является максимальное число секунд при работе с датами. Оно таково, что мы можем выделить не более 10-ти десятичных знаков в числе. Если число значащих знаков больше, исходное число потребуется предварительно разделить на две части «обычным» способом с использованием операции ВЫРАЗИТЬ КАК.
Приведем пример запроса для случая ЧИСЛО(10, 2)
Чтобы сделать запись чуть более короткой, две постоянные - цепочку цифр «0123456789» и начало времен можно вынести во вложенный запрос
Аналогичным образом можно преобразовать число в строку в двоичной системе счисления. Вот запрос для записи в виде строки восьми младших двоичных разрядов заданного числа:
Побочным следствием использованных закономерностей является то, что выражение
можно использовать в запросе для проверки четности числа Икс.
Для перевода даты в строку достаточно перевести в строку по отдельности число дней, месяцев и лет исходной даты. В итоге получается следующий запрос
Как видно, используемые для преобразования в строку выражения довольно просты и компактны, особенно если сравнить их с тем, что приходилось использовать до сих пор.
Текущая дата(и время) в запросе 1С получается только в качестве параметра.
Получение дат
Как передать текущую дату в запрос?
Далее приводятся только тексты запросов.
Как получить начало текущего месяца?
Конец текущего года?
Как получить полдень текущей даты?
Добавим использование функции ДОБАВИТЬКДАТЕ(ДАТА,,ЧИСЛО)
Как получить дату без времени (0:00)
Как задать дату-константу в запросе 1С?
Возможно задать дату с точностью до секунды?
А до милисекунды?
Вычисления над датами
Разность в секундах,минутах,часах, днях, неделях получается при использовании функции РАЗНОСТЬДАТ(Дата1,Дата2,)
Как получить номер текущего месяца?
ВЫБРАТЬ
МЕСЯЦ(&ТекущаяДата) как ТекущийМесяц,
РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ТекущаяДата,ГОД),КОНЕЦПЕРИОДА(&ТекущаяДата,МЕСЯЦ),МЕСЯЦ) как ПолныхПрошедшихМесяцев
Как получить день недели?
ВЫБРАТЬ
ДЕНЬНЕДЕЛИ(&ТекущаяДата) КАК НомерДня,
ВЫБОР
КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 1
ТОГДА "понедельник"
КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 2
ТОГДА "вторник"
КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 3
ТОГДА "среда"
КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 4
ТОГДА "четверг"
КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 5
ТОГДА "пятница"
КОГДА ДЕНЬНЕДЕЛИ(&ТекущаяДата) = 6
ТОГДА "суббота"
ИНАЧЕ "Воскресенье"
КОНЕЦ КАК НаименованиеДняНедели
Сколько осталось до Нового года?
ВЫБРАТЬ
&ТекущаяДата > ДАТАВРЕМЯ(2017, 1, 1) КАК НовыйГодНаступил,
ВЫБОР
КОГДА &ТекущаяДата > ДАТАВРЕМЯ(2017, 1, 1)
ТОГДА "Да, наступил"
ИНАЧЕ "Нет, не наступил"
КОНЕЦ КАК Ответ,
РАЗНОСТЬДАТ(&ТекущаяДата,ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2017, 1, 1),СЕКУНДА,-1),ДЕНЬ) как ОсталосьДней,
РАЗНОСТЬДАТ(&ТекущаяДата,КОНЕЦПЕРИОДА(&ТекущаяДата,ДЕНЬ),ЧАС) как ОсталосьЧасов,
РАЗНОСТЬДАТ(&ТекущаяДата,КОНЕЦПЕРИОДА(&ТекущаяДата,ЧАС),Минута) как ОсталосьМинут,
РАЗНОСТЬДАТ(&ТекущаяДата,КОНЕЦПЕРИОДА(&ТекущаяДата,Минута),Секунда) как ОсталосьСекунд
Что еще следует знать про дату в запросах?
Дата в запросах может фигурировать не только в полях выборки, и вычислениях, но также передаваться, как параметры виртуальных таблиц.
- для среза последних значений в регистре сведений в качестве момента на которое берется значение. Если периодичность регистра не совпадает с переданным параметром, система обрежет лишние (секунда, дни в зависимости от), округления не происходит
- для остатков регистра накопления в качестве дата остатка
- для оборотов регистров бухгалтерии или регистра накопления (НачалоПериода,КонецПериода)
- других виртуальных таблиц
Допустимо задание дат-констант и использование параметров, также обработка их выше приведенными функциями.
Но нельзя дату передать в параметры виртуальных таблиц из полученных ранее в этом запросе полей выборки.
Сортировка даты в запросе производится в рамках секунды.
Момент времени документа не является датой, он сортирует более глубже, чем дата документа, т.е. при наличии документов в одну секунду времени, сортировка по дате производится в недопустимом порядке: например в виде представления. Используйте для этого момент времени.
Внешнее представление даты определяется представлением операционной системы, управлять из запроса, а также приводить в строковое представление в классическом запросе невозможно в отличии от СКД, где возможна пост-обработка и условное оформление.
Допускается применение функции МАКСИМУМ(),МИНИМУМ() к дата в запросе, как в группировке так и в итогах запроса.
Преобразовать строку в дату в запросе
Специальных функций нет. но возможно преобразование через функцию ПОДСТРОКА и конструкцию ВЫБОР КОГДА
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Расчеты.Параметр,
Расчеты.ВерныйПараметр,
ВЫБОР
КОГДА Расчеты.символ1 = "2"
ТОГДА 2
КОГДА Расчеты.символ1 = "1"
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ * 1000 + ВЫБОР
КОГДА Расчеты.символ2 = "0"
ТОГДА 0
КОГДА Расчеты.символ2 = "1"
ТОГДА 1
КОГДА Расчеты.символ2 = "2"
ТОГДА 2
КОГДА Расчеты.символ2 = "3"
ТОГДА 3
КОГДА Расчеты.символ2 = "4"
ТОГДА 4
КОГДА Расчеты.символ2 = "5"
ТОГДА 5
КОГДА Расчеты.символ2 = "6"
ТОГДА 6
КОГДА Расчеты.символ2 = "7"
ТОГДА 7
КОГДА Расчеты.символ2 = "8"
ТОГДА 8
ИНАЧЕ 9
КОНЕЦ * 100 + ВЫБОР
КОГДА Расчеты.символ3 = "0"
ТОГДА 0
КОГДА Расчеты.символ3 = "1"
ТОГДА 1
КОГДА Расчеты.символ3 = "2"
ТОГДА 2
КОГДА Расчеты.символ3 = "3"
ТОГДА 3
КОГДА Расчеты.символ3 = "4"
ТОГДА 4
КОГДА Расчеты.символ3 = "5"
ТОГДА 5
КОГДА Расчеты.символ3 = "6"
ТОГДА 6
КОГДА Расчеты.символ3 = "7"
ТОГДА 7
КОГДА Расчеты.символ3 = "8"
ТОГДА 8
ИНАЧЕ 9
КОНЕЦ * 10 + ВЫБОР
КОГДА Расчеты.символ4 = "0"
ТОГДА 0
КОГДА Расчеты.символ4 = "1"
ТОГДА 1
КОГДА Расчеты.символ4 = "2"
ТОГДА 2
КОГДА Расчеты.символ4 = "3"
ТОГДА 3
КОГДА Расчеты.символ4 = "4"
ТОГДА 4
КОГДА Расчеты.символ4 = "5"
ТОГДА 5
КОГДА Расчеты.символ4 = "6"
ТОГДА 6
КОГДА Расчеты.символ4 = "7"
ТОГДА 7
КОГДА Расчеты.символ4 = "8"
ТОГДА 8
ИНАЧЕ 9
КОНЕЦ КАК НомерГода
ПОМЕСТИТЬ Цифры
ИЗ
Расчеты КАК Расчеты
;
Реклама – самая интересная и самая трудная форма литературы.
— Олдос Хаксли.
Данная конструкция в 1С используется в запросе для усечения длины строки,а также для приведения строки неограниченной длины к переменной строке с фиксированным ограничением.
Синтаксис функции
ВЫРАЗИТЬ ( КАК СТРОКА( )
- Если на входе строка больше указанной длины — она усекается.
- Если меньше — остается неизменной.
- При передаче строки неограниченной длины происходит тоже самое.
Никаких пробелов в конце короткой строки не добавляется.
Другие особенности использования ВЫРАЗИТЬ КАК СТРОКА
Передача NULL в качестве параметра не вызывает ошибки, но на выходе будет NULL (не строкой).
Передача для преобразования других типов вызывает ошибку «Несовместимые типы ВЫРАЗИТЬ».
Преобразовать число как строку в запросе или же ссылку как строку в данной функции (да и в любых других функциях запроса невозможно). Это отличает TSQL запрос select cast(‘321’ as numeric(10) от запроса в 1С.
Функция ПРЕДСТАВЛЕНИЕ(ЧИСЛО), может на выходе запроса выдать строку, но внутри запроса ее результат использовать невозможно даже в качестве параметра для ВЫРАЗИТЬ.
Конкантенация (сложение) строк допустима и с результатом ВЫРАЗИТЬ:
Идентификатор ссылочного объекта в запросе получить невозможно и ожидаемое многими начинающими программистами 1С в КАЧЕСТВЕ ВЫРАЗИТЬ(ССЫЛКА как СТРОКА()) не работает: ни наименования, ни кода, ни идентификатора не получится — будет ошибка несовместимости типов.
Вот такая простая функция без особых сюрпризов.
Возможно когда-нибудь в платформе 8.4 1С исправит ситуацию с преобразованиями типов в запрос, а может тут дело в поддержании совместимости всех баз данных.
Искусство пропаганды в том виде, как его понимают современные политики, напрямую связано с искусством рекламы. Психология как наука во многом обязана рекламодателям.
На помощь придут вот такие функции. Нашел их тут.
Использовать их так:
Функция Выразить() позволяет привести значение поля запроса 1С к определенному типу. Это может понадобиться в двух случаях:
1. Получить нужную разрядность числа или нужное количество символов строкового значения. Количество символов полей неограниченного типа приходится ограничить из-за определенных особенностей.
Получите 267 видеоуроков по 1С бесплатно:
ВЫРАЗИТЬ(Номенклатура.Комментарий КАК СТРОКА(300))
ВЫРАЗИТЬ(Номенклатура.Цена КАК ЧИСЛО(15, 2)) КАК Сумма
2. Преобразовать поле составного типа в поле с одним типом. Это может понадобиться в целях оптимизации запросов. Если в типизированное поле попадёт значение другого типа, то система вернёт NULL, поэтому всегда необходимо дополнительно устанавливать условие в секции «ГДЕ», ограничивая его оператором ССЫЛКА.
ВЫБРАТЬ
…
ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.Реализация)
…
ИЗ
…
ГДЕ Продажи.Регистратор ССЫЛКА Документ.Реализация
Как избежать ошибок
Ошибки типа «Несовместимые типы ВЫРАЗИТЬ …» могут возникать при неправильном использования синтаксиса.
К примеру, конструкция «ВЫРАЗИТЬ(«123″ КАК ЧИСЛО(5, 2)) КАК Сумма» считается ошибочной, так как в запросе нельзя штатными способами преобразовывать из одного типа в другой.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
Читайте также: