Як отримати поточну дату у запиті 1с. Як у запиті вказати пусту дату? Перетворення до дати
У цій статті ми хочемо обговорити з Вами всі функції мови запитів 1с, а також конструкції мови запитів. Чим відрізняється функція від конструкції? Функція викликається з дужками та можливими параметрами у них, а конструкція пишеться без дужок. Безумовно всі конструкції та функції мови запитів 1сроблять процес отримання даних гнучким та багатофункціональним. Дані функції та конструкції застосовні до полів запиту, а деякі також застосовні за умов.
Функції мови запитів 1с
Оскільки зрозумілий опис функцій мови запитів 1страпляється набагато рідше, ніж опис конструкцій, ми вирішили почати розглядати саме функції. Тепер давайте розберемо кожну окремо, описавши її призначення, синтаксис та приклад використання, отже:
1. Функція ДАТА ЧАС- Ця функція створює константне поле з типом "Дата".
Синтаксис: ДАТА ЧАС(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)
Приклад використання:
2. Функція Різноманітність- Повертає різницю двох дат в одному з вимірювань (рік, місяць, день, година, хвилина, секунда). Вимірювання передається у параметрі.
Синтаксис: РІЗНІСТЬДАТ(<Дата1>, <Дата2>, <Тип>)
Приклад використання:
Запит.Текст = "ВИБРАТИ | РІЗНЕСТЬДАТ(ДАТАВРЕМЯ(2015, 4, 17), ДАТАВРЕМЯ(2015, 2, 1), ДЕНЬ) | ЯК Колводнів";
3. Функція ЗНАЧЕННЯ- задає константне поле з наперед визначеним записом з бази даних, також можна отримати порожнє посилання будь-якого типу.
Синтаксис: ЗНАЧЕННЯ(<Имя>)
Приклад використання:
Запит.Текст = "ВИБРАТИ //зумовлений елемент | ЗНАЧЕННЯ(Довідник.Валюти.Долар) ЯК Долар, //порожнє посилання | ФізОсоба) ЯК ФізОбличчя, / / зумовлений рахунок |
4. Функція ВИБІР- Перед нами аналог конструкції ЯКЩО який використовується в коді, тільки ця використовується в запитах 1С.
Синтаксис: ВИБІР КОЛИ<Выражение>ТОДІ<Выражение>Інакше<Выражение>КІНЕЦЬ
Приклад використання:
Запрос.Текст = //якщо сума більше 7500, тоді має бути знижка 300 рублів, //тому якщо умова спрацьовує то функція //повертає Сума - 300 //інакше запит поверне просто Сума "ВИБРАТИ | ВИБІР | КОЛИ ТЧ Надходження.Сума > 7500 | ТОДІ ТЧНадходження. Сума - ІНШЕ ТЧ Надходження. Сума |
5. Функція ВИРАЗИТИ- дозволяє виразити константне поле певним типом.
Синтаксис: ВИРАЗИТИ(НазваПоля ЯК НазваТипу)
Приклад використання:
Запит.Текст = "ВИБРАТИ РІЗНІ | Продажі.Реєстратор.Номер, | ВИБІР | КОЛИ Продажі.Реєстратор ПОСИЛАННЯ Документ.Видаткова | еалізація | ТОДИ ВИРАЗИТИ(Продажи.Регістратор ЯК Документ.Реалізація) |
Є ще варіант використання функції ВИРАЗИТИ в полях змішаних типах, де такі зустрічаються? Найпростіший приклад це "Реєстратор" у будь-якого регістру. То навіщо нам може знадобитися уточнювати тип у реєстраторі? Давайте розглянемо ситуацію, коли ми з реєстратора вибираємо поле "Номер", з якої таблиці буде обраний номер? Правильна відповідь із усіх! Тому щоб наш запит працював швидко, слід вказувати явний тип за допомогою функції ВИРАЗИТИ
Приклад використання:
Запит.Текст = "ВИБРАТИ | ВИРАЗИТИ(Номенклатура.Коментар ЯК Рядок(300)) ЯК Коментар, | ВИРАЗИТИ(Номенклатура.Сума ЯК Число(15,2)) ЯК Сума |З | Довідник.Номенклатура ЯК
6. Функція ISNULL(альтернативне написання Є NULL) - якщо поле має тип NULL, воно замінюється на другий параметр функції.
Синтаксис: Є NULL (<Поле>, <ПодставляемоеЗначение>)
Приклад використання:
Також відзначимо що тип NULL бажано ЗАВЖДИ замінювати якесь значення, т.к. порівняння з типом NULL завжди дає брехня навіть якщо ви порівнюєте NULL з NULL. Найчастіше значення NULL утворюються внаслідок з'єднання таблиць (всі види з'єднань крім внутрішнього).
Запит.Текст = //Вибираємо всю номенклатуру і залишки по ній //якщо залишокв але якоїсь номенклатури немає то буде поле //NULL яке заміниться значенням 0 "ВИБРАТИ | Ном.Посилання, | Залишок |З |Довідник.Номенклатура ЯК Ном |
7. Функція ПРЕДСТАВЛЕННЯ- дозволяє одержати подання поля запиту.
Синтаксис: ПРЕДСТАВЛЕННЯ(<НаименованиеПоля>)
Приклад використання:
Запит.Текст = "ВИБРАТИ | ПРЕДСТАВЛЕННЯ(ВільніЗалишкиЗалишки.Номенклатура) ЯК Номенклатура, | ПРЕДСТАВЛЕННЯ(ВільніЗалишкиЗалишки.Склад) ЯК Склад, |
Конструкції у мові запитів 1с
Вище ми розглянули з Вами функції мови запитів 1с, тепер настав час розглянути конструкції у мові запитів 1с, вони не менш важливі та корисні, приступаємо.
1. Конструкція ПОСИЛАННЯ- являє собою логічний оператор перевірки типу посилання. Найчастіше зустрічається під час перевірки поля складеного типу на конкретний тип. Синтаксис: ПОСИЛАННЯ<Имя таблицы>
Приклад використання:
Запит.Текст = //якщо тип значення реєстратора документ Прибуткова, //тоді запит поверне "Надходження товарів", інакше "Реалізація товарів" "ВИБРАТИ | ВИБІР | КОЛИ Залишки.Реєстратор ПОСИЛАННЯ Документ. " "Витрата" | КІНЕЦЬ ЯК Вид |РегістрНакопичення.
2. Конструкція МІЖ- Цей оператор перевіряє чи входить значення у вказаний діапазон.
Синтаксис: МІЖ<Выражение>І<Выражение>
Приклад використання:
Запрос.Текст = //отримаємо всю номенклатуру код якої лежить в діапазоні від 1 до 100 "ВИБРАТИ | Номенклатура. Посилання | З | Довідник. Номенклатура ЯК Номенклатура | ДЕ | Номенклатура.
3. Конструкція В та В ІЄРАРХІЇ- перевіряють чи знаходиться значення в списку, що передається (як списку можуть передаватися масиви, таблиці значень і т.д.). Оператор В ІЄРАРХІЇ дозволяє переглядати ієрархію (приклад використання План Рахунків).
Синтаксис: В(<СписокЗначений>), В ІЄРАРХІЇ(<СписокЗначений>)
Приклад використання:
Запрос.Текст = // вибираємо всі субрахунки рахунку "ВИБРАТИ | Госпрозрахунковий. Посилання ЯК Рахунок | З | План Рахунок.Госпрозрахунковий ЯК Хозрозрахунковий | ДЕ | Госпрозрахунковий.
4. Конструкція ПОДІБНО- Ця функція дозволяє нам порівнювати рядок із шаблоном рядка.
Синтаксис: ПОДІБНО "<ТекстШаблона>"
Варіанти шаблону рядка:
% - Послідовність, що містить будь-яку кількість довільних символів.
Один символ довільний.
[...] - будь-який одиночний символ, або послідовність символів із перелічених усередині квадратних дужок. У перерахуванні можуть задаватися діапазони, наприклад a-z, що означають довільний символ, що входить до діапазону, включаючи кінці діапазону.
[^...] - будь-який одиночний символ, або послідовність символів з перелічених усередині квадратних дужок крім тих, які перелічені за значком заперечення.
Приклад використання:
Запрос.Текст = //знайдемо всю номенклатуру яка містить корінь ТАБУР і починається //або з маленької або з великої літери т "ВИБРАТИ | Номенклатура.Посилання |З | Довідник.Номенклатура ЯК Номенклатура |ДЕ | Товари.Найменування ПОДІБНО ""[Тт ]абур%""";
5. Конструкція ДОЗВОЛЕНІ- цей оператор дозволяє вибрати лише записи з БД, куди викликає має право читання. Ці права налаштовуються лише на рівні записів (RLS).
Синтаксис: ДОЗВОЛЕНІ пишеться після ключового слова ВИБРАТИ
Приклад використання:
Запит.Текст = "ВИБРАТИ ДОЗВОЛЕНІ | Контрагенти.Посилання |З | Довідник.Контрагенти ЯК Контрагенти";
6. Конструкція РІЗНІ- дозволяє вибрати записи, у яких відсутні повторні записи.
Синтаксис: РІЗНІ пишеться після ключового слова ВИБРАТИ
Приклад використання:
Запрос.Текст = // вибирає записи на які є права у читача "ВИБРАТИ РІЗНІ | Контрагенти. Найменування | З | Довідник. Контрагенти ЯК Контрагенти";
Також Конструкція РІЗНІ може використовуватися з оператором ДОЗВОЛЕНІ та іншими операторами.
Приклад використання:
Запрос.Текст = // вибирає різні записи на які є права у читача "ВИБРАТИ ДОЗВОЛЕНІ РІЗНІ | Контрагенти. Найменування | З | Довідник. Контрагенти ЯК Контрагенти";
7. Конструкція ПЕРШІ- вибирає вказану в параметрі кількість записів із результату запиту.
Синтаксис: ПЕРШІ<число>
Приклад використання:
Запит. Текст = // Вибирають перші 4 номери ВМД з довідника "ВИБРАТИ ПЕРШІ 4 | Номери ВМД. Посилання | З | Довідник.
8. Конструкція ДЛЯ ЗМІНИ- дозволяє заблокувати таблицю, працює лише у транзакціях (актуально лише автоматичних блокувань).
Синтаксис: ДЛЯ ЗМІНИ<НаименованиеТаблицы>
Приклад використання:
Запит.Текст = "ОБРАТИ |
9. Конструкція ПОРЯДОЧИТИ ПО- впорядковує дані щодо певного поля. Якщо полем є посилання, то при установці прапора Автоупорядкуваннябуде відбуватися сортування за поданням посилання, якщо прапор вимкнено, то посилання сортуються за старшинством адреси посилання в пам'яті.
Синтаксис: ВПОРЯДКУВАТИ ЗА<НаименованиеПоля>Автоупорядкування
Приклад використання:
Запит.Текст = "ВИБРАТИ | Вільні Залишки. Залишки. Залишки. Залишки. ДОЧУВАННЯ";
10. Конструкція ЗГРУПУВАТИ ПО- використовується для угрупування рядків запиту за певними полями. Числові поля повинні використовуватись із будь-якою агрегатною функцією.
Синтаксис: ЗГРУПУВАТИ ПО<НаименованиеПоля1>, .... , <НаименованиеПоляN>
Приклад використання:
Запит.Текст = "ВИБРАТИ | ТовариНа Складах.Номенклатура ЯК Номенклатура, | ТовариНаСкладах.Склад, | складах.
11. Конструкція МАЮЧІ- дозволяє застосувати агрегатну функцію умови вибірки даних, схожа на конструкцію ДДЕ.
Синтаксис: МАЮЧІ<агрегатная функция с условием>
Приклад використання:
Запрос.Текст = // вибирає згруповані записи де поле В наявності більше 3 "Вибрати | Товари на складах. Номенклатура ЯК Номенклатура, | Товари на складах. склад, | ПЗ | ТовариНа Складах.Номенклатура, |ТовариНаСкладах.Склад |
12. Конструкція ІНДЕКСУВАТИ ПО- Використовується для індексації поле запиту. Запит з індексацією довше виконується, але прискорює пошук індексованих полів. Можна використовувати лише у віртуальних таблицях.
Синтаксис: ІНДЕКСУВАТИ ПО<Поле1, ... , ПолеN>
Приклад використання:
Запрос.Текст = " ВИБРАТИ | Тз. Найменування ОС, | Тз. Номер Папки, | Тз. КодОС, | Тз. Термін, | Тз. Тип | ПОМІСТИТИ Дані Тз | .КодОС";
13. Конструкція ДЕ- дозволяє накласти умову будь-які поля вибірки. У результат потраплять записи, що тільки задовольняють умові.
Синтаксис: ДЕ<Условие1 ОператорЛогСоединения УсловиеN>
Приклад використання:
Запит.Текст = //вибираються всі записи у яких КомпенсаціяЗалишок<>0 і //СуммаДляРозчКомпОстаток > 100 " ВИБРАТИ | КомпенсаціяРПОстатки.Контрагент, | КомпенсаціяРпостати.Дитина, | Залишки ЯК КомпенсаціяРПОстатки |ДЕ |<>0 | І КомпенсаціяРПОстатки.
14. Конструкція ПІДСУМКИ... ЗА ЗАГАЛЬНІ- застосовується для підрахунку результатів, у конструкції вказуються поля якими вважатимуться підсумки і агрегатні функції які застосовуються до підсумковим полям. При використанні підсумків на кожне поле наступне після конструкції ПІДСУМКИ проводиться групування даних. Є необов'язкова конструкція ЗАГАЛЬНІ, її використання також забезпечує додаткове угруповання. Приклад результату запиту ви побачите нижче.
Синтаксис: ПІДСУМКИ<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>ПЗ<ОБЩИЕ> <Поле1, ... , ПолеN>
Приклад використання:
Запит.Текст = "ВИБРАТИ | Розрахунки.ДоговірКонтрагенту.ВидДоговіру ЯК ВидДоговіру, | Розрахунки.ДоговірКонтрагенту ЯК Договір, | Розрахунки.Контрагент, | І | СУМА (Залишок) |ПО | ЗАГАЛЬНІ, | ВидДоговору";
На малюнку обведені угруповання які утворилися в ході виконання запиту, найвище відноситься до секції ЗАГАЛЬНІ, а друге до поля ДоговірКонтрагентуВідДоговіру.
43
NULL – відсутні значення. Чи не плутати з нульовим значенням! NULL - це не число, не дорівнює пробілу, порожньому засланні, Невизначено. NULL – типообразующее значення, тобто. Існує тип NULL і єдине значення цього типу. NULL...
26
Для формування та виконання запитів до таблиць бази даних у платформі 1С використовується спеціальний об'єкт мови програмування. Створюється об'єкт викликом конструкції Новий Запит. Запит зручно...
18
У статті наведено корисні прийоми при роботі з запитами 1С v.8.2, а також відомості, які не так добре відомі мовою запитів. Я не прагну дати повний описмови запитів, а хочу зупинитися лише на...
13
ПОДІБНО - Оператор перевірки рядка на зразок шаблону. Аналог LIKE у SQL. Оператор подібно дозволяє порівняти значення виразу, вказаного зліва від нього, з рядком шаблону, вказаним праворуч. Значення виразу...
У всіх документів, що існують у конфігураціях 1С, а, отже, і практично у всіх регістрів обов'язково має бути хоча б один реквізит з типом Дата, саме тому кожному розробнику необхідно знати та розуміти:
- Як виконувати перетворення параметрів інших типів до розглянутого типу;
- Як визначити порожню дату у запиті 1С;
- Чим відрізняється дата та межа часу.
Саме на ці запитання ми й намагатимемося відповісти у нашій статті.
Що таке дата та як її визначити
Так як для прийняття більшості управлінських рішень та ведення обліку не потрібна точність часу, що перевищує 1 секунду, розробники платформи 1С вирішили, що ця величина буде граничним мінімумом у форматі дати. Таким чином, кожна реквізит, що описує час події у програмі, має містити:
- Рік, коли сталася подія;
- Місяць цієї події;
- День.
Необов'язково вказувати: годину, хвилину та секунду. Якщо ці три параметри опущені і немає додаткових умов, програма автоматично встановлює час початку дня.
Існуючі у світі формати дати мають суттєву відмінність:
- У Росії ми звикли перше місце ставити день, потім йде місяць події, наприкінці – рік;
- Жителі США розпочинають дату з місяця;
- Чехи, поляки та словенці записують період у форматі «Рік – Місяць – День».
Саме останній формат і використовує платформа 1С.
Перетворення до дати
Для того щоб з кількох значень або рядка отримати параметр з типом Дата необхідно використовувати код, вказаний на Мал. 1
Як видно з наведеного малюнка, визначити дату можна як за допомогою одного рядка, так і з розбиттям цього рядка на складові за допомогою коми, результат від цього не зміниться.
Важливо розуміти, що рік дати повинен містити чотири цифри, включаючи тисячоліття та вік події, місяць, день, години та секунди – повинні мати довжину у два символи, включаючи лідируючі нулі.
Відлік часу у програмі триває з початку дня 1 січня 0001 року. Для наведеного вище коду це значення можна визначити одним із двох способів (Рис. 2).
Мал. 2
У другому рядку ми опустили години, хвилини та секунди події, що не вплинуло на працездатність нашого коду.
Особливості використання дати у запитах 1С
Більшість типів даних, використовуваних платформою 1С, існують зумовлені значення порожнечі. Для чисел – це 0, для посилань можна визначити значення ПустаПосилання(), для дати порожнім значенням прийнято вважати дату початку відліку, саме з нею необхідно порівнювати відповідні реквізити типу при установці параметрів запиту.
Важливо зрозуміти, що навіть якщо у значенні реквізиту форми, що має аналізований тип, не зазначено жодних цифр, тобто вікно має вигляд (Рис. 3), це не означає, що в ньому нічого не вказано, порівняння цього параметра з порожнім рядкомне пройде.
Мал. 3
Отримавши порожню дату, ми можемо вказати її як параметр нашого запиту, тобто використовувати конструкцію (Рис. 4)
Однак, існують моменти, коли перевірку краще проводити всередині тексту запиту, не передаючи порожню дату як параметр. Для цього в коді запиту можна ввести відповідну умову (Мал. 5) та використовувати функцію запиту Дата Час().
Мал. 5
У наведеному тексті запиту ми опустили лідируючі нулі в рік, місяць і день, а також не вказали годин, хвилин і секунд і програма, що називається, з'їла це припущення.
Дата та межа часу
Ще один цікавий факт, Що стосується співвідношення запитів та дати – це використання поняття «момент часу» при зверненні до різних таблиць бази даних.
Точність «до мілісекунди», вказана в технічній документації при описі примітивного типу Дата найяскравіше виявляється при вибірці записів з віртуальних таблиць регістру накопичення: якщо у регістра накопичення крім таблиці Обороти, існують таблиці Залишки та ЗалишкиІОбороти, то вибірка за ними, здійснена на може дати різні результати.
Щоб зрозуміти, як і чому це відбувається, розглянемо простий приклад:
- До проведення о 12 годині 31 хвилині 36 секунд документа реалізації залишки за номенклатурою Цукор становили 30 кг;
- Документом у вказаний час було списано 10 кг;
- Звіт, який формується на дату документа на 12 годин 31 хвилину 36 секунд за таблицею Залишки, покаже залишок 30кг;
- Той самий звіт по таблиці ЗалишкиІОбороти на той самий час покаже залишок 20 кг.
У чому причина такої поведінки і як цього уникнути?
Проблема у цьому, що у таблиці Залишки період задається відкритим відрізком, тобто, руху, здійснені на час формування звіту не беруться до уваги, тобто час береться початку зазначеної у параметрі секунди. У той самий час, для таблиці Оборотів й у таблиці ЗалишкиІОбороти межі часу беруться до уваги тобто час береться наприкінці зазначеної секунди.
Виходів із цієї ситуації кілька:
- При використанні таблиці Залишки, вказувати час на 1 секунду більший, ніж заданий;
- Використовувати лише таблицю ЗалишкиІОбороти (не найоптимальніший з погляду продуктивності варіант);
- Використовувати концепцію кордону.
Останній варіант можна надати кодом, вказаним на Мал. 6.
У першому параметрі нашого об'єкта ми вказуємо дату, яку необхідно сформувати звіт, другий параметр визначає тип кордону. Тому що для нас важливо, щоб рухи на задану дату увійшли до вибірки, ми повинні встановити цей параметр у положення «Включаючи».
У запитах 1С, як і у вбудованому мові платформи 1С:Підприємство, є функції роботи з датами. Вони допомагають спростити перетворення дат у запитах, уникнути використання великої кількостіпараметрів. Розглянемо ці функції.
Як задати дату у запитах 1С у вигляді константи
ДАТАВРЕМЯ (Рік, Місяць, День, Година, Хвилина, Секунда). Параметри Рік, Місяцьі Деньє обов'язковими, решта — ні. Якщо не вказати час, то системою буде встановлено початок дня.
Запит. Текст = "ВИБРАТИ
ДАТАВРЕМЯ (2016,09,28,12,22,00)";
// Результат: 28 вересня 2016 12:22:00
Крім того, як параметри цієї функції можуть бути вказані тільки числа в явному вигляді. Не можна як параметри вказувати значення інших функцій. Наприклад, така конструкція не працюватиме:
Запит. Текст = "ВИБРАТИ
ДАТАВРЕМЯ (Рік (Джерело.Дата),09,28,12,22,00)
З Довідник.Джерело ЯК Джерело";
Як отримати початок або кінець року, півріччя, кварталу, місяця, декади, тижня, дня, години, хвилини у запитах 1С
Для цього використовуються відповідно функції:
- ПочатокПеріоду (Дата, Період)
- КінецьПеріоду (Дата, Період)
Як параметр Датапередається значення з типом Дата.Параметр Період .
Запит. Текст = "ВИБРАТИ
ПочатокПеріоду(ДАТАЧАС (2016,09,28,12,22,00), ДЕКАДА)";
// Результат: 21 вересня 2016 0:00:00
Запит. Текст = "ВИБРАТИ
КінецьПеріоду (ДАТАЧАС (2016,09,28,12,22,00), КВАРТАЛ)";
// Результат: 30 вересня 2016 23:59:59
Як видно з прикладів, у цих функціях можна використовувати інші вкладені функції.
Як отримати у запитах 1С рік, день року, квартал, місяць, тиждень, день тижня, день, годину, хвилину, секунду з дати
Для цього існують відповідні функції, які потрібно передати дату як параметр.
- Функція РІК (Дата)- Повертає номер року;
- Функція ДЕНЬКУ (Дата)- повертає номер дня на рік;
- Функція КВАРТАЛ (Дата)- Повертає номер кварталу;
- Функція МІСЯЦЬ (Дата)- Повертає номер місяця;
- Функція ТИЖДЕНЬ (Дата)- Повертає номер тижня на рік;
- Функція ДЕНЬТИЖНЯ (Дата)- Повертає номер дня в тижні (понеділок - 1, неділя - 7);
- Функція ДЕНЬ (Дата)- Повертає номер дня в місяці;
- Функція ЧАС (Дата)- Повертає годину;
- Функція ХВИЛИНА (Дата)- Повертає хвилини;
- Функція СЕКУНДА (Дата)- Повертає секунди.
Запит. Текст = "ВИБРАТИ
РІК(ДАТОЧАС (2016,09,28,12,22,00))"; // Результат: 2016
Запит. Текст = "ВИБРАТИ
ТИЖДЕНЬ(ДАТАЧАС (2016,09,28,12,22,00))"; // Результат: 40
Запит. Текст = "ВИБРАТИ
ДЕНЬТИЖНЯ(ДАТАЧАС (2016,09,28,12,22,00))"; // Результат: 3
Запит. Текст = "ВИБРАТИ
ДЕНЬ РОКУ(ДАТАЧАС (2016,09,28,12,22,00))"; // Результат: 272
Запит. Текст = "ВИБРАТИ
ДЕНЬ(ДАТАЧАС (2016,09,28,12,22,00))"; // Результат: 28
Як додати до дати або відібрати від дати рік, півріччя, квартал, місяць, декаду, тиждень, день, годину, хвилину, секунду в запитах 1С
Для цього використовується функція ДодатиКДате (Дата, Період, Значення).
Як параметр Датапередається значення з типом Дата.Параметр Періодможе приймати одне з наступних значень: СЕКУНДА, ХВИЛИНА, ЧАС, ДЕНЬ, ТИЖДЕНЬ, ДЕКАДА, МІСЯЦЬ, КВАРТАЛ, ПІВРІЧЧЯ, РІК.
Параметр Значенняпоказує кількість періодів, що додаються. Якщо період потрібно відняти, то параметр Значеннямає бути негативним.
Запит. Текст = "ВИБРАТИ
ДодатиКДате(ДАТАЧАС(2016, 9, 28, 12, 22, 0), ПІВРІЧЧЯ, 1)";
// Результат: 28 березня 2017 12:22:00
Запит. Текст = "ВИБРАТИ
ДодатиКДате(ДАТАЧАС(2016, 9, 28, 12, 22, 0), ДЕКАДА, -1)";
// Результат: 18 вересня 2016 12:22:00
Як обчислити різницю дат у запитах 1С
Для цього використовується функція РізницяДат (Дата1, Дата2, Період).
Параметр Дата1- Дата, яку віднімають.
Параметр Дата2 -дата, з якої віднімають.
Параметр Періодможе приймати одне з наступних значень: СЕКУНДА, ХВИЛИНА, ЧАС, ДЕНЬ, МІСЯЦЬ, КВАРТАЛ, РІК. Він показує, у яких одиницях хочемо отримати результат
Запит. Текст = "ВИБРАТИ
РізницяДат(ДАТАВРЕМЯ(2016, 9, 28, 12, 22, 0), ДАТАВРЕМЯ(2017, 9, 28, 12, 22, 0), КВАРТАЛ)"; // Результат: 4
Запит. Текст = "ВИБРАТИ
РізницяДат(ДАТАЧАС(2016, 9, 28, 12, 22, 0), ДАТАВРЕМЯ(2017, 9, 28, 12, 22, 0), Секунда)";
// Результат: 31 536 000
В усіх функціях, крім функції ДАТА ЧАС, як параметр Датаможе виступати як конкретне значення дати (константа чи параметр запиту), а й поля таблиці джерела.
Найчастіше у запитах 1С доводиться працювати з датами. Особливо, коли запит будується до об'єктів метаданих, в яких міститься періодична інформація. Зазвичай це регістри (відомостей, накопичення, розрахунку, бухгалтерії). Розглянемо найчастіше використовувані функції мови запитів 1С роботи з датами. Приклади будуватимемо на основі регістру відомостей Працівники ОрганізаційЗміни ЗУП редакція 2.5.
ДАТА ЧАС
Дозволяє отримати у запиті дату (з часом або без) шляхом вказівки року, місяця, дня, години, хвилини, секунди.
Синтаксис:
ДАТАВРЕМЯ(Рік, Місяць, День, Година, Хвилина, Секунда)
Зазвичай годину, хвилину та секунду не вказуються. Давайте наведемо міні-приклад. Введіть у консолі запитів наступний текст:ВИБРАТИ ДАТАВРЕМЯ(2016, 1, 1)
В результаті виконання запиту отримуємо дату - 01.01.2016
Насправді важко уявити ситуацію, в якій у запиті дата вказуватиметься таким чином. Адже коли треба зазначити період використовуються параметри. Але є випадок, коли ця функція становить особливу цінність. Це коли нам треба в полях або за умов запиту вказати порожню дату. Нагадаю, що для мови 1С порожня датамає вигляд – 0001.01.01. Таким чином, щоб отримати порожню дату в запиті, достатньо вказати ДАТАВРЕМЯ(1, 1, 1). Як приклад виберемо з регістру відомостей Працівники Організаційзаписи у яких не заповнено ПеріодЗавершення:ОБРАТИ Працівники Організацій. Період, Працівники Організацій. Співробітник, Працівники Організацій. Посада, Працівники Організацій. (1, 1, 1)
ПОЧАТОК ПЕРІОДУ
Для зазначеної дати повертає початок періоду, в який вона входить.
Синтаксис:
ПОЧАТОК ПЕРІОДУ (Дата, Тип Періоду)
ТипПеріоду може приймати такі значення: ХВИЛИНА, ЧАС, ДЕНЬ, ТИЖДЕНЬ, МІСЯЦЬ, КВАРТАЛ, РІК, ДЕКАДА, ПІВРІЧЧЯ
У консолі запитів введіть:ВИБРАТИ ПОЧАТОК ПЕРІОДУ (ДАТАЧАС(2016, 1, 15), МІСЯЦЬ)
Запит поверне – 01.01.2016
Нині ж приклад. Як відомо періодичність у регістру Працівники Організаційодин день. Складемо запит, у якому замість дійсного періоду записів буде відображатися дата початку місяця.ОБРАТИ ПОЧАТОК ПЕРІОДУ (Працівники Організацій. Період, МІСЯЦЬ) ЯК Початок Місяця, Працівники Організацій. Співробітник, Працівники Організацій. Посада, Працівники Організацій.
КОНЕЦПЕРІОДУ
Синтаксис такий самий як і в початку періоду. І як ясно з назви повертає кінець періоду за датою та типом періоду. Докладно не розглядатимемо. Обмежимося міні прикладом.
Запит:ВИБРАТИ КОНЕЦПЕРІОДУ(ДАТАЧАС(2016, 1, 15), МІСЯЦЬ)
Повертає 31.01.2016 23:59:59
Як бачимо, значення повертається з точністю до секунди.ДОДАТИ КДАТИ
Додає до дати вказану кількість часових інтервалів.
Синтаксис:
ДОДАТИКДАТЕ(Дата, ТипПеріоду, Кількість)
ТипПеріоду приймає ті ж значення, що й для функції ПОЧАТОК ПЕРІОДУ
Наприклад виберемо лютневу дату:ВИБРАТИ ДОДАТИКДАТЕ(ДАТАВРЕМЯ(2016, 2, 15), МІСЯЦЬ, 2)
Отримуємо дату 15.04.2016 0:00:00 Незважаючи на те, що лютий короткий місяць, день отриманої дати той самий, що й у вихідної. Дуже зручно, що не доводиться думати про кількість днів на місяцях.
Кількість може бути негативним. Тоді відлік інтервалу проводиться у зворотний бік.РІЗНІСТЬДАТ
Розраховують різницю між двома датами у зазначених одиницях виміру.
Синтаксис:
РІЗНІСТЬДАТ(ДатаПочатку, ДатаЗакінчення, ТипПеріоду)
Тип періоду може набувати значення: СЕКУНДА, ХВИЛИНА, ЧАС, ДЕНЬ, МІСЯЦЬ, КВАРТАЛ, РІК
Наприклад:ВИБРАТИ РІЗНЕСТЬДАТ(ДАТАВРЕМЯ(2016, 2, 15), ДАТАВРЕМЯ(2016, 3, 1), ДЕНЬ)
повертає 15
Тут було розглянуто найчастіше вживані функції мови запитів 1С. Інші застосовуються досить рідко. При необхідності приклади роботи з ними можна переглянути у довідці, вбудованій у платформу 1С.
- Московський успенський собор
- Чи може екстрасенс передбачити майбутнє чи чим шкодить ворожіння?
- Поневіряння душі після смерті: що відбувається після смерті З точки зору науки
- Октих. Октоїх, Тріодь та Мінея. Октоїх та Седмічний коло богослужіння. Загальний порядок використання за богослужіннями протягом року Октоїха, Тріоді та Мінеї Що таке октоїх у православ'ї