Разделы сайта
Выбор редакции:
- Как Мелания Трамп на самом деле относится к Дональду и Иванке: пугающий вердикт экспертов по языку тела Иванка и мелания трамп
- Как заработать монеты в Покемон Го
- Спонсорские интеграции Faces&Laces
- Что такое криптовалюта и как на ней можно заработать?
- Разведение породистых собак и котов
- Бизнес-идея: няня на час
- Как лучше организовать малый бизнес с партнерами?
- Секреты успешной работы на бирже статей и копирайтинга Advego
- Как заработать на ведении блога
- Свой бизнес: досуговый центр для школьников и подростков
Реклама
Как сравнить даты в 1с 8.3 |
Средства определения пустых ссылок, дат или строк. Рассмотрим, как проверить на пустую ссылку, дату или строку в запросе 1С. Определить нулевые данные можно путем использования специальных операторов. Информацию из базы данных 1С запрашивают (а потом получают) с помощью такого инструмента, как язык запросов (Query, англ.). Они составляются на латинице и кириллице. А одним из ключевых слов-команд (операторов) при получении информации является слово-команда ВЫБРАТЬ (SELECT, англ.) в сочетании с некоторыми конструкциями. Приведём примеры построения интересующих нас по теме запрашиваемых заданий: Проверка на содержание NULLТакое задание выполняется оператором ВЫБРАТЬ в сочетании с конструкцией «ЕСТЬ NULL»:
Контроль датыПустая дата в запросе 1С вносится построением «ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)»:
Ссылочная проверкаПроверка несуществующих внутриссылочных значений (на планы счетов, справочники и пр.) производится с использованием конструкции «VALUE(Справочник.Имя…ПустаяСсылка)»: Проверка строкиПустота в строках обнаруживается с применением пробела в кавычках «»:
Ещё о битых и обычных линках«Битой» считается ссылка (Link, англ.), ведущая (указывающая) на несуществующий элемент. Под несуществующим понимают такой, которого нет в базе данных. Полезно о таких линках знать хотя бы для того, чтобы получать от системы уведомления в более понятной форме. Да и запись, удаление и открытие нереальных объектов не имеет смысла. Платформы 1С не обладают внутренними средствами чтобы их отсечь. Ещё нужно понимать, что вне «битых» в системе живут специальные «пустые линки», которые следует различать одни от других. В системе 1С-7.7Для «битой» - методом Link.Selected() и функцией ПустоеЗначение() возвращается ноль. Для «пустой» - в первом случае ноль, а во втором - единица. Для «нормальной» - единица и ноль. Получается, в 1С-7.7 «битая» - не является несуществующим значением, которое не считается выбранным. В системе 1С-8.xВсё по-другому - в обоих случаях (для «битых» и «обычных») метод возвращает Ложь, а функция - Истину. Решение такое: Для «битой» методом Ссылка.ПолучитьОбъект() возвращается функция «Неопределено». Для «пустой» - выбрасывается «Ошибка метода контекста». Для «нормальной» - возвращается значение согласно документации; Выходит, в 1С-8.х «битая» - не будет несуществующей функцией ссылочного типа, которая возвращает Неопределённое значение объекта. Откуда они берутсяПри переходе по несуществующему адресу битой линки пользователю в лучшем случае показано уведомление о том, что объект не найден, в худшем - изображение страницы сервера. Наихудшей их чертой является скрытость. Отсюда - сложность в проверке их корректности. Во время работы с конфигурацией она постоянно дорабатывается, обновляется. Какие-то объекты подлежат удалению, изменяется структура. А ссылка на удалённый элемент остаётся в конструкциях и алгоритмах. Таким образом, несуществующие адреса остаются в системе после удаления самого элемента (вместе с адресом). В сегодняшней публикации было рассмотрено специальное построение запросов. Приведены примеры конструкций. Это пригодится вам в работе при поиске пустых значений.
При работе с датами 1С, типовой порядок частей даты – год, месяц, день, час, минуты, секунды. При этом часы, минуты, секунды можно пропустить. При создании даты из строки («приведение к дате») можно указать в локализованном формате (день.месяц.год часы:минуты:секунды), но только полностью. Например: //Работа с датами 1С - преобразовать дату в 1С из строки, разные способы //Работа с датами 1С - указание значения даты без приведения, напрямую Работа с датами 1С — Пустая дата 1С Чтобы проверить дату 1С на заполненность – ее сравнивают с «пустой датой». При наличии в справочнике/документе реквизита с типом дата, если пользователь не заполнил это поле, то ее значение также будет – «пустая дата». «Пустая дата» — это 01.01.0001 00:00:00. Например: Работа с датами 1С — Дата в реквизитах (справочников, документов и т.п.) При указании типа реквизита можно указать использовать:
Получение даты Для получения даты и времени используется функция 1С ТекущаяДата(). Очень важно место – где вызывается эта функция – на клиенте или на сервере. Подробнее см. тему «Режим исполнения/Исполнение». Часто бывает, что на клиентских машинах время немного разное, поэтому стараются везде использовать серверное время – даже если оно установлено на сервере не верно, то хотя бы у всех клиентов будет одинаковое неверное время. Для того, чтобы получить серверную дату (дату, установленную в операционной системе компьютера сервера), обычно в конфигурации создают общий модуль с установленной галочкой «Сервер» в свойствах, и в нем создают функцию //вызов этой функции для использования из другого модуля выглядит так Также в тонком клиенте непосредственно у функций модулей указывается где она будет исполнена: Начало и конец дня Для даты «30.10.2012»:
Используется в отчетах и запросах, требующих получить данные за период – день, месяц, год. Так например период с «01.01.2012 00:00:00» по «31.01.2012 00:00:00» неверен, так как не включает в себя один день месяца (но включает в себя одну секунду последнего дня месяца). Работа с датами 1С — Сравнение дат Дата содержит дату и время. При сравнении дат (без учета времени) их обычно приводят к началу дня (месяца, года). Например: На всякий случай, пример сравнения даты в периоде: Работа с датами 1С - Изменение даты Дата является числом секунд. Если мы хотим не просто узнать – больше ли одна дата другой – но и на сколько больше, то получаем разницу в секундах. Например: Также мы можем изменить дату, при изменении мы добавляем или отнимаем количество секунд: НачалоПредыдущегоДня = НачалоДня(НачалоЭтогоДня – 1); //убираем секунду – делая «вчера» и берем начало дня у «вчера» НачалоПредыдущегоДня = НачалоЭтогоДня – 24*60*60; //другой способ – отнимаем 24 часа – 24(часа)*60(получились минуты)*60(секунды) Работа с датами 1С - Момент времени Момент времени – это расширенное представление даты, применимое к документам (и соответственно регистрам). Оно требуется для сравнения времени документов, если дата и время документов одно и то же. Соответственно его можно использовать при отборах в запросах. Момент времени можно получить у документа следующими способами: Также можно сравнить момент времени с датой/временем: Работа с датами 1С - Форматирование дат В этой статье будут рассмотрены способы проверки на пустое значение в зависимости от типа проверяемого реквизита в , в том числе пустой ссылки. Значение NULL возвращается в том случае, когда реквизита попросту нет. Тип в этом случае будет тоже NULL. Например, вы объединяете две таблицы через левое соединение. В том случае, когда для левой таблицы не будет найдено ни одного значения в правой, вернется NULL. Проверку на данное значение можно осуществить при помощи конструкции «ЕСТЬ NULL» и « ». В первом случае возвращается Истина или Ложь. Во втором случае можно сразу задать другое значение в том случае, когда возвращается NULL. В приведенном ниже запросе 1С 8.3 будут возвращен список контактных лиц тех партнеров, у кого не задан сегмент.
Пустая датаПроверка значения на пустую дату производится путем сравнения с конструкцией ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0). Пример использования приведен ниже: Пустая ссылка в запросе 1СВ случае, когда возвращаемый реквизит имеет ссылочный тип, например, это элемент какого-либо справочника, документа и т. п., используется следующая конструкция: ЗНАЧЕНИЕ(Справочник.ИмяСправочника.ПустаяСсылка). В приведенном ниже примере запрос выбирает всех партнеров, у которых не указан бизнес-регион. Чтобы проверить на «ЗначениеЗаполнено» нужно сделать обратное условие:
Пустая строкаДля проверки строковых типов производится сравнение с другим образцом. В данном случае – «». Приведенный ниже запрос отберет всех партнеров с незаполненным наименованием. У всех документов, существующих в конфигурациях 1С, а, следовательно, и практически у всех регистров обязательно должен быть хотя бы один реквизит с типом Дата, именно поэтому каждому разработчику необходимо знать и понимать:
Именно на эти вопросы мы и постараемся ответить в нашей статье. Что такое дата и как ее определитьТак как для принятия большинства управленческих решений и ведения учета не требуется точность времени, превышающая 1 секунду, разработчики платформы 1С решили, что именно эта величина будет предельным минимумом в формате даты. Таким образом, каждая реквизит, описывающий время события в программе должен содержать:
Необязательно указывать: час, минуту и секунду. Если эти три параметра опущены и нет дополнительных условий, программа автоматически устанавливает время на начало дня. Существующие в мире форматы даты имеют существенное различие:
Именно последний формат и использует платформа 1С. Преобразование к датеДля того чтобы из нескольких значений или из строки получить параметр с типом Дата необходимо использовать код, указанный на Рис. 1 Как видно из приведенного рисунка, определить дату можно как с помощью одной строки, так и с разбиением этой строки на составные части при помощи запятой, результат от этого не поменяется. Важно понимать, что год даты должен содержать четыре цифры, включая тысячелетие и век события, месяц, день, часы и секунды – должны иметь длину в два символа, включая лидирующие нули. Отсчет времени в программе идет от начала дня 1 января 0001 года. Для приведенного выше кода это значение можно определить одним из двух способов (Рис. 2). Рис. 2 Во второй строке мы опустили часы, минуты и секунды события, что нисколько не повлияло на работоспособность нашего кода. Особенности использования даты в запросах 1СДля большинства типов данных, используемых платформой 1С, существуют предопределенные значения пустоты. Для чисел – это 0, для ссылок можно определить значение ПустаяСсылка(), для даты пустым значением принято считать дату начала отсчета, именно с ней необходимо сравнивать реквизиты соответствующего типа при установке параметров запроса. Важно понять, что даже если в значении реквизита формы, имеющем рассматриваемый тип, не указано никаких цифр, то есть окно имеет вид (Рис. 3), это не означает что в нем ничего не указано, сравнение этого параметра с пустой строкой не пройдет. Рис. 3 Получив пустую дату, мы можем указать ее в качестве параметра к нашему запросу, то есть использовать конструкцию (Рис. 4) Однако, существуют моменты, когда проверку лучше проводить внутри текста запроса, не передавая пустую дату в качестве параметра. Для этого в коде запроса можно ввести соответствующее условие (Рис. 5) и использовать функцию запроса ДатаВремя(). Рис. 5 В приведенном тексте запроса мы опустили лидирующие нули у года, месяца и дня, а так же не указали часов, минут и секунд и программа, что называется, скушала это допущение. Дата и граница времениЕще один интересный факт, касающийся соотношения запросов и даты – это использование понятия «момент времени» при обращении к различным таблицам базы данных. Точность «до миллисекунды», указанная в технической документации при описании примитивного типа Дата ярче всего проявляется при выборке записей из виртуальных таблиц регистра накопления: если у регистра накопления помимо таблицы Обороты, существуют таблицы Остатки и ОстаткиИОбороты, то выборка по ним, осуществленная на определенное время, может дать различные результаты. Для того чтобы понять, как и почему это происходит, рассмотрим простой пример:
В чем же причина подобного поведения и как этого избежать?
Выходов из этой ситуации несколько:
Последний вариант можно представить кодом, указанном на Рис. 6. В первом параметре нашего объекта мы указываем дату, на которую необходимо сформировать отчет, второй параметр определяет тип границы. Так как для нас важно, чтобы движения на заданную дату вошли в выборку мы должны установить этот параметр в положение «Включая». |
Читайте: |
---|
Популярное:
Новое
- Как заработать монеты в Покемон Го
- Спонсорские интеграции Faces&Laces
- Что такое криптовалюта и как на ней можно заработать?
- Разведение породистых собак и котов
- Бизнес-идея: няня на час
- Как лучше организовать малый бизнес с партнерами?
- Секреты успешной работы на бирже статей и копирайтинга Advego
- Как заработать на ведении блога
- Свой бизнес: досуговый центр для школьников и подростков
- Бизнес идея: продажа мяса свинины - Магазины и продукты