1С сұраныстары, сондай-ақ 1C: Enterprise платформасының ендірілген тілінде күндермен жұмыс істеу функциялары бар. Олар сұраулардағы күнді түрлендіруді жеңілдетуге және көптеген параметрлерді пайдаланудан аулақ болуға көмектеседі. Осы функцияларды қарастырайық.

1С сұрауларында күнді тұрақты мән ретінде қалай орнатуға болады

DATETIME (жыл, ай, күн, сағат, минут, секунд). Опциялар Жылы, айыЖәне Күнміндетті, басқалары міндетті емес. Уақытты көрсетпесеңіз, жүйе күннің басын белгілейді.

Сұраныс. Мәтін= «ТАҢДАУ
DATETIME (2016,09,28,12,22,00)"
; // Нәтижесі: 28 қыркүйек 2016 жыл 12:22:00

Бұған қоса, бұл функцияның параметрлері ретінде тек сандарды анық көрсетуге болады. Басқа функциялардың мәндерін параметр ретінде көрсете алмайсыз. Мысалы, бұл құрылыс жұмыс істемейді:

Сұраныс. Мәтін= «ТАҢДАУ
DATETIME (Жыл (Дереккөз.Күн),09,28,12,22,00)
Каталогтан. Source AS Source»
;

1С сұрауларында жыл, жарты жыл, тоқсан, ай, онкүндік, апта, күн, сағат, минуттың басын немесе аяғын қалай алуға болады

Ол үшін келесі функциялар қолданылады:

  • Басталу кезеңі(күні, кезеңі)
  • Соңғы кезең(күні, кезеңі)

Параметр ретінде күнітүрі бар мән беріледі күні.Параметр Кезең .

Сұраныс. Мәтін= «ТАҢДАУ
Басталу кезеңі(DATETIME (2016,09,28,12,22,00), DECADE)"
; // Нәтижесі: 21 қыркүйек 2016 жыл 0:00:00

Сұраныс. Мәтін= «ТАҢДАУ
EndPeriod(DATETIME (2016,09,28,12,22,00), QUARTER)"
; // Нәтижесі: 30 қыркүйек 2016 жыл 23:59:59

Мысалдардан көріп отырғаныңыздай, осы функцияларда басқа кірістірілген функцияларды пайдалануға болады.

1С сұрауларында күннен бастап жылды, жыл күнін, тоқсанды, айды, аптаны, апта күнін, күнді, сағатты, минутты, секундты қалай алуға болады

Ол үшін күнді параметр ретінде беру қажет сәйкес функциялар бар.

  • Функция ЖЫЛ (күні)— жыл нөмірін қайтарады;
  • Функция DAYYEAR (күні)— жылдағы күн санын көбейтеді;
  • Функция ТОҚСАН (күні)— тоқсандық санды қайтарады;
  • Функция АЙ (күні)— ай нөмірін қайтарады;
  • Функция АПТА (күні)— жылдағы апта санын қайтарады;
  • Функция АПТА КҮНІ (Күні)— аптадағы күннің санын қайтарады (дүйсенбі — 1, жексенбі — 7);
  • Функция КҮН (күні)— айдағы күннің нөмірін береді;
  • Функция САҒАТ (күні)— сағатты қайтарады;
  • Функция MINUTE (күн)— минуттарды қайтарады;
  • Функция ЕКІНШІ (Күні)— секундтарды қайтарады.

Сұраныс. Мәтін= «ТАҢДАУ
YEAR(DATETIME (2016,09,28,12,22,00))"
; // Нәтижесі: 2016 ж

Сұраныс. Мәтін= «ТАҢДАУ
АПТА(КҮН УАҚЫТЫ (2016,09,28,12,22,00))"
; // Нәтиже: 40

Сұраныс. Мәтін= «ТАҢДАУ
АПТА КҮНІ(КҮН УАҚЫТЫ (2016,09,28,12,22,00))"
; // Нәтиже: 3

Сұраныс. Мәтін= «ТАҢДАУ
DAYYEAR(КҮН УАҚЫТЫ (2016,09,28,12,22,00))"
; // Нәтиже: 272

Сұраныс. Мәтін= «ТАҢДАУ
КҮН(КҮН УАҚЫТЫ (2016,09,28,12,22,00))"
; // Нәтиже: 28

1С сұрауларында жыл, жарты жыл, тоқсан, ай, онжылдық, апта, күн, сағат, минут, секундты қалай қосуға немесе азайтуға болады

Мұны істеу үшін функцияны пайдаланыңыз AddToDate(Күн, кезең, мән).

Параметр ретінде күнітүрі бар мән беріледі күні.Параметр Кезеңкелесі мәндердің бірін қабылдай алады: ЕКІНШІ, МИНУТ, САҒАТ, КҮН, АПТА, ОНДЫҚ, АЙ, ТЕКСЕН, ЖАРТТЫ ЖЫЛ, ЖЫЛ.

Параметр Мағынасықосылатын кезеңдердің санын көрсетеді. Егер кезеңді алып тастау қажет болса, онда параметр Мағынасытеріс болуы керек.

Сұраныс. Мәтін= «ТАҢДАУ
AddToDate(DATETIME(2016, 9, 28, 12, 22, 0), ЖАРТЫ ЖЫЛ, 1)"
; // Нәтижесі: 28 наурыз 2017 жыл 12:22:00

Сұраныс. Мәтін= «ТАҢДАУ
AddKDate(DATETIME(2016, 9, 28, 12, 22, 0), ON DECADE, -1)"
; // Нәтижесі: 2016 жылғы 18 қыркүйек 12:22:00

1С сұрауларында күн айырмашылығын қалай есептеуге болады

Мұны істеу үшін функцияны пайдаланыңыз Айырмакүн(күн1, күн 2, кезең).

Параметр Күн1- шегерілетін күн.

Параметр Күн 2 -шегерілетін күн.

Параметр Кезеңкелесі мәндердің бірін қабылдай алады: ЕКІНШІ, МИНУТ, САҒАТ, КҮН, АЙ, ТЕКСЕН, ЖЫЛ. Ол қандай бірліктерде нәтиже алғымыз келетінін көрсетеді

Сұраныс. Мәтін= «ТАҢДАУ
DifferenceDate(DATETIME(2016, 9, 28, 12, 22, 0), DATETIME (2017, 9, 28, 12, 22, 0), QUARTER)"
; // Нәтиже: 4

Сұраныс. Мәтін= «ТАҢДАУ
Айырмакүн(DATETIME(2016, 9, 28, 12, 22, 0), DATETIME (2017, 9, 28, 12, 22, 0), Екінші)"
; // Нәтиже: 31 536 000

Функциядан басқа барлық функцияларда КҮН УАҚЫТ, параметр ретінде күнінақты күн мәні (тұрақты немесе сұрау параметрі) ғана емес, сонымен қатар бастапқы кесте өрістері болуы мүмкін.

Бұл мақалада біз сізбен бәрін талқылағымыз келеді 1С сұрау тілінің функциялары, және де сұрау тілінің конструкциялары. Функция мен дизайнның айырмашылығы неде? Функция жақша және олардың ішіндегі мүмкін параметрлер арқылы шақырылады, ал конструкция жақшасыз жазылады. Сөзсіз 1С сұраныс тілінің барлық құрылымдары мен функцияларыдеректерді алу процесін икемді және көп функциялы ету. Бұл функциялар мен құрылымдар сұрау өрістеріне қолданылады, ал кейбіреулері шарттарға да қолданылады.

1C Query тілінің функциялары

Өйткені нақты сипаттама 1С сұрау тілінің функцияларықұрылымдардың сипаттамаларына қарағанда әлдеқайда сирек кездеседі, біз функцияларды қарастыруды шештік. Енді әрқайсысын жеке қарастырайық, оның мақсатын, синтаксисін және қолдану мысалын сипаттайық, сондықтан:

1. Функция КҮН УАҚЫТ- бұл функция «Күн» типі бар тұрақты өрісті жасайды.

Синтаксис: КҮН УАҚЫТ(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

Қолдану мысалы:

2. КҮН АЙЫРМАСЫ функциясы- өлшемдердің біріндегі екі күн арасындағы айырмашылықты қайтарады (жыл, ай, күн, сағат, минут, секунд). Өлшеу параметр ретінде беріледі.

Синтаксис: DIFFERENCEDATE(<Дата1>, <Дата2>, <Тип>)

Қолдану мысалы:

Query.Text = "ТАҢДАУ | DIFFERENCEDATE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | Саны.Күндер ретінде";

3. VALUE функциясы- деректер қорынан алдын ала анықталған жазбасы бар тұрақты өрісті орнатады, сонымен қатар кез келген типтегі бос сілтемені алуға болады.

Синтаксис: VALUE(<Имя>)

Қолдану мысалы:

Request.Text = "ТАҢДАУ //алдын ала анықталған элемент | VALUE(Directory.Currencies.Dollar) AS Dollar, //бос сілтеме | VALUE(Document.Document.Receipt of Products and Services.EmptyLink) AS түбіртек, //Трансферт мәні | VALUE(Transfer) . Заңды жеке тұлға. Жеке тұлға) AS Жеке тұлға, //алдын ала анықталған шот | VALUE(Шот жоспары. Өзін-өзі қамтамасыз ететін. Материалдар) AS Account_10" ;

4. SELECT функциясы- біздің алдымызда кодта қолданылатын IF конструкциясының аналогы бар, тек бұл 1С сұраныстарында қолданылады.

Синтаксис: ТАҢДАУ ҚАШАН<Выражение>СОНДА<Выражение>Әйтпесе<Выражение>Соңы

Қолдану мысалы:

Request.Text = //егер сома 7500-ден асса, онда 300 рубль жеңілдік болуы керек, //сондықтан, егер шарт іске қосылса, функция //Сома қайтарады - 300 //әйтпесе сұрау жай ғана соманы қайтарады. "ТАҢДАҢЫЗ | ТАҢДАҢЫЗ | ҚАШАН TCCreceipts.Amount > 7500 | СОДАН TCReceipts.Amount - 300 | БАСҚА TCReceipts.Amount | AmountWithDiscount |ҚАЙДАН | Құжат. ТауарларҚызметтері.Тауарлар TCКілттері ретінде;"

5. EXPRESS функциясы- белгілі бір типпен тұрақты өрісті өрнектеуге мүмкіндік береді.

Синтаксис: EXPRESS(Өріс атауы Тип атауы)

Қолдану мысалы:

Query.Text = "ӘР ТҮРЛІ ТАҢДАҢЫЗ | Сату.Тіркеушісі.Нөмірі, | ТАҢДАҢЫЗ | Сатылымдар.Тіркеуші LINK құжаты.Шығын | ОДАН ЭКСПРЕСС (Сату.Тіркеушісі құжат.Шығын) | БАСҚА ТАҢДАҢЫЗ | Сату.Тіркеушісі LINK құжаты |.Imp. Содан кейін EXPRESS(Sales.Registrator AS Document.Implementation) | АЯҚТАУ | ... | Нөмір РЕТІНДЕ АЯҚТАЛУ | FROM | Жинақтауларды тіркеу. Сатып алуларды сатып алулар ретінде»;

EXPRESS функциясын аралас түрдегі өрістерде пайдаланудың басқа нұсқасы бар ма, олар қай жерде кездеседі? Ең қарапайым мысал - кез келген тізілімге арналған «Тіркеуші». Неліктен бізге тіркеушіде түрді анықтау қажет болуы мүмкін? Тіркеушіден «Нөмір» өрісін таңдаған кездегі жағдайды қарастырайық, нөмір қай кестеден таңдалады? Барлығына дұрыс жауап! Сондықтан, сұрауымыз жылдам жұмыс істеуі үшін EXPRESS функциясын пайдаланып, айқын түрді көрсетуіміз керек

Қолдану мысалы:

Query.Text = "ТАҢДАУ | EXPRESS(Nomenclature.Comment AS Line(300)) AS Comment, | EXPRESS(Nomenclature.Sum AS Number(15,2)) AS Sum |FROM | Directory.Nomenclature AS Номенклатура";

6. ISNULL функциясы(ISNULL балама емлесі) - егер өріс NULL типті болса, онда ол функцияның екінші параметрімен ауыстырылады.

Синтаксис: ISNULL(<Поле>, <ПодставляемоеЗначение>)

Қолдану мысалы:

Сондай-ақ, NULL түрін кейбір мәнмен ауыстырған жөн екенін ескеріңіз, себебі NULL түрімен салыстыру әрқашан NULL мен NULL мәнін салыстырсаңыз да, FALSE мәнін қайтарады. Көбінесе NULL мәндері кестелерді біріктіру нәтижесінде қалыптасады (ішкіден басқа біріктірулердің барлық түрлері).

Query.Text = //Бүкіл элементті және оның баланстарын таңдаңыз //кейбір элементте теңгерім болмаса, онда //NULL өрісі болады, ол 0 мәнімен ауыстырылады "SELECT | No. Link, | ISNULL (ProductsInStockRemains.InStockRemaining, 0) AS қалдығы | FROM | Анықтамалық.Номенклатура No.

7. ӨКІЛДІК функциясы- сұраныс өрісінің көрінісін алуға мүмкіндік береді.

Синтаксис: ОРЫНДАУ(<НаименованиеПоля>)

Қолдану мысалы:

Query.Text = "ТАҢДАУ | ӨКІЛДІК(ЕркінҚалған.Номенклатура) АС номенклатурасы, | ӨКІЛДІК(БосҚалған.Қойма) Қойма АС, | FreeRemainingRemaining.InStockRemaining |FROM |Жинақтау Тіркелу.Бос;Remaining.AS."

1С сұраныс тілінде құрастырады

Сізбен жоғарыда талқыладық 1С сұрау тілінің функциялары, енді қарастыратын кез келді 1С сұраныс тілінде құрастырады, олар маңызды және пайдалы емес, бастайық.

1. Құрылыс LINK- сілтеме түрін тексеруге арналған логикалық оператор. Көбінесе күрделі типті өрісті белгілі бір түрге қарсы тексеру кезінде кездеседі. Синтаксис: LINK<Имя таблицы>

Қолдану мысалы:

Request.Text = //егер жазу құрылғысының мән түрі құжат түбіртегі болса, //онда сұрау «Тауарларды қабылдау» деп қайтарады, әйтпесе «Тауарларды сату» «ТАҢДАУ | ТАҢДАУ | ҚАШАН қалды.Тіркеуші LINK Document.Receipt of GoodsServices | ОДАН СОҢ ""Түбіртек"" | БАСҚА ""Тұтыну"" | Қозғалыс түрі РЕТІНДЕ АЯҚТАЛАДЫ | Жинақтау тізілімінен. Қоймалардағы қалған өнімдер AS қалды" ;

2. АРАЛЫҚ дизайн- бұл оператор мәннің көрсетілген ауқымда екенін тексереді.

Синтаксис: АРАСЫНДА<Выражение>ЖӘНЕ<Выражение>

Қолдану мысалы:

Request.Text = //коды 1-ден 100-ге дейінгі аралықта жататын бүкіл номенклатураны алыңыз "ТАҢДАУ | Номенклатура.Сілтеме |FROM | Каталог.Номенклатура AS Номенклатура |ҚАЙДА | Номенклатура. 1 ЖӘНЕ 100 АРАСЫНДА КОД" ;

3. В және В құрылысы ИЕРАРХИЯСЫ- мәннің тасымалданатын тізімде бар-жоғын тексеру (массивтер, мәндер кестелері және т.б. тізім ретінде тасымалдануы мүмкін). IN HIERARCHY операторы иерархияны көруге мүмкіндік береді (Шоттар жоспарын пайдалану мысалы).

Синтаксис: IN(<СписокЗначений>), ИЕРАРХИЯДА(<СписокЗначений>)

Қолдану мысалы:

Сұраныс.Текст = //шоттың барлық қосалқы шоттарын таңдау "ТАҢДАУ | Өзін-өзі қамтамасыз ететін. Тіркелгі AS | Сілтемесі | БІРДЕН | Шоттар жоспары. Өзін-өзі қамтамасыз ететін AS Өзін-өзі қамтамасыз ететін | ҚАЙДА | Өзін-өзі қамтамасыз ететін. ИЕРАРХИЯЛЫҚ МӘНДЕГІ сілтеме (Диаграмма). Шоттар. өзін-өзі қамтамасыз ететін. Тауарлар)»;

4. Дизайн ҰҚСАҚ- Бұл функция жолды жол үлгісімен салыстыруға мүмкіндік береді.

Синтаксис: ЛАЙК"<ТекстШаблона>"

Жол үлгісінің опциялары:

% - ерікті таңбалардың кез келген санын қамтитын тізбек.

Бір ерікті кейіпкер.

[...] - төртбұрышты жақшаның ішінде тізімделген кез келген жалғыз таңба немесе таңбалар тізбегі. Тізім ауқымдарды көрсете алады, мысалы, a-z, бұл ауқымға енгізілген ерікті таңбаны, соның ішінде ауқымның соңын білдіреді.

[^...] - терістеу белгісінен кейін тізілгендерден басқа төртбұрышты жақшаның ішінде тізімделген кез келген жалғыз таңба немесе таңбалар тізбегі.

Қолдану мысалы:

Query.Text = //барлық номенклатураны табыңыз TABUR түбірі бар және //не кіші немесе бас әріптен t басталады "ТАҢДАУ | Номенклатура. Сілтеме | FROM | Анықтамалық. Номенклатура АС номенклатура | ҚАЙДА | Өнімдер. Аты LIKE "" [Tt ]abur%""" ;

5. Дизайнға РҰҚСАТ БЕРІЛДІ- бұл оператор дерекқордан қоңырау шалушы оқуға рұқсаты бар жазбаларды ғана таңдауға мүмкіндік береді. Бұл құқықтар жазба деңгейінде (RLS) конфигурацияланады.

Синтаксис: ALLOWED SELECT түйінді сөзінен кейін жазылады

Қолдану мысалы:

Request.Text = "РҰҚСАТ БЕРІЛДІ ТАҢДАУ | Қарсы тараптар. Сілтеме | КІТАП | Анықтамалық. Қарсы тараптар контрагенттер ретінде";

6. ТҮРЛІ дизайн- қайталанатын жазбалар жоқ жазбаларды таңдауға мүмкіндік береді.

Синтаксис: VARIOUS SELECT түйінді сөзінен кейін жазылады

Қолдану мысалы:

Request.Text = //оқырман құқықтары бар жазбаларды таңдайды "ТАҢДАУ ТҮРЛІ | Counterparties.Name |FROM | Анықтамалық. Қарсы тараптар контрагенттер ретінде" ;

Сондай-ақ, VARIIOUS конструкциясын РҰҚСАТ БЕРІЛГЕН оператормен және басқа операторлармен бірге пайдалануға болады.

Қолдану мысалы:

Request.Text = //оқырман құқығы бар әртүрлі жазбаларды таңдайды "ТАҢДАУ РҰҚСАТ БЕРІЛГЕН ТҮРЛІ | Counterparties.Name |FROM | Анықтамалық. Контрагенттер контрагенттер ретінде";

7. БІРІНШІ дизайн- сұрау нәтижесінен параметрде көрсетілген жазбалар санын таңдайды.

Синтаксис: FIRST<число>

Қолдану мысалы:

Request.Text = //"БІРІНШІ 4 | CCD нөмірлерін ТАҢДАҢЫЗ. Сілтеме | FROM | Анықтамалық. CCD нөмірлері AS CCD нөмірлері" каталогынан алғашқы 4 CCD нөмірін таңдаңыз;

8. ӨЗГЕРУ ҮШІН дизайн- кестені құлыптауға мүмкіндік береді, тек транзакцияларда жұмыс істейді (тек автоматты құлыптарға қатысты).

Синтаксис: ӨЗГЕРУ ҮШІН<НаименованиеТаблицы>

Қолдану мысалы:

Query.Text = "ТАҢДАУ | Бос қалдықтар қалдықтары. Номенклатура, | Бос қалдықтар қалдықтары. Қойма, | Бос қалдықтар. Қалғандар. Қоймадағы | ҚЫНАН | Жинақтаулар тізілімі. Бос қалдықтар. Қалғандар Тегін қалдық қалдықтары ретінде | Жинақтарды ӨЗГЕРТУ ҮШІН | Бос қалдықтар. Қалғандар»;

9. Дизайн ТАПСЫРЫС БОЙЫНША- белгілі бір өріс бойынша мәліметтерді жүйелейді. Егер өріс сілтеме болса, онда жалаушаны орнату кезінде АВТО ТАПСЫРЫССұрыптау сілтеме көрсету арқылы жүзеге асады; егер жалауша өшірілсе, сілтемелер жадтағы сілтеме мекенжайының жұмыс істеу мерзімі бойынша сұрыпталады.

Синтаксис: БОЙЫНША СҰРЫПТАУ<НаименованиеПоля>АВТО ТАПСЫРЫС

Қолдану мысалы:

Query.Text = "ТАҢДАУ | Бос қалдық қалдықтары. Номенклатура AS Номенклатура, | Бос қалдықтар қалдықтары. Қойма AS Қойма, | Бос қалдықтар қалдықтары. Қоймада қалды | ҚЫНАН | Жинақтарды тіркеу. Бос қалдықтар. Тегін қалғандар. ТЕГІН қалған | ТАПСЫРЫС | |номенклатурасы |АВТО ТАпсырыс VANIE»;

10. Дизайн GROUP BY- сұраныс жолдарын белгілі бір өрістер бойынша топтастыру үшін қолданылады. Сандық өрістер кез келген жиынтық функциямен бірге қолданылуы керек.

Синтаксис: ТОПТАУ<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Қолдану мысалы:

Query.Text = "ТАҢДАУ | Қоймалардағы заттар.Номенклатура AS Номенклатура, | Қоймалардағы заттар.Қойма, | СУМ(Қоймалардағы заттар.Қоймалардағы) |ҚАЙДАН менклатура, | ItemsAtWarehouse ah.Warehouse» ;

11. Дизайн БАР- WHERE құрылысына ұқсас деректерді таңдау шартына біріктіру функциясын қолдануға мүмкіндік береді.

Синтаксис: БАР<агрегатная функция с условием>

Қолдану мысалы:

Query.Text = //InStock өрісі 3 "ТАҢДАУ | ItemsInStocks.Nomenclature AS номенклатурасы, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) INSTOCK ретінде |FROM | RegisterAccsIckstock | ТОБЫ БОЙЫНША |Қоймалардағы өнімдер.Номенклатура, |Қоймалардағы өнімдер.Қоймалар | |ҚОЛЖЕТІМДІ | СОМА(Қоймалардағы өнімдер.InStock) > 3" ;

12. Құрылыс INDEX BY- сұрау өрісін индекстеу үшін қолданылады. Индекстелген сұрауды аяқтау ұзағырақ уақыт алады, бірақ индекстелген өрістер арқылы іздеуді жылдамдатады. Тек виртуалды кестелерде қолдануға болады.

Синтаксис: ИНДЕКС БОЙЫНША<Поле1, ... , ПолеN>

Қолдану мысалы:

Query.Text = "ТАҢДАУ | Ts.NameOS, | Ts.FolderNumber, | Ts.CodeOS, | Ts.Term, | Ts.Type | PLACE DataTs | FROM | &Ts AS Ts | | INDEX BY | Ts.NameOS, | Ts .CodeOS»;

13. Дизайн ҚАЙДА- кез келген таңдау өрістеріне шарт қоюға мүмкіндік береді. Нәтиже шартты қанағаттандыратын жазбаларды ғана қамтиды.

Синтаксис: ҚАЙДА<Условие1 ОператорЛогСоединения УсловиеN>

Қолдану мысалы:

Query.Text = //ComensationRemaining бар барлық жазбалар таңдалды<>0 және //AmountForCalcCompRemaining > 100 "SELECT | CompensationRPORemains.Counterparty, |CompensationRPORemains.Child, | CompensationRPORemains.CompensationRemaining, | CompensationRPORemains.AmountForCalcCompRemains |AmountForCalcCompRemains |AmountForCalcCompRemains |Place DataTz |ҚАЙДА |ӨтемақыRPORқалған.ӨтемдікҚалған<>0 | Және CompensationRPORemains.AmountForCalcCompRemaining> 100" ;

14. Жобалау НӘТИЖЕЛЕРІ... ЖАЛПЫ- қорытындыларды есептеу үшін пайдаланылады; дизайн қорытындылар есептелетін өрістерді және жиынтық өрістерге қолданылатын жиынтық функцияларды көрсетеді. TOTAL конструкциясынан кейін әрбір өріс үшін қорытындыларды пайдаланған кезде деректер топтастырылады. Қосымша ЖАЛПЫ құрылым бар; оны пайдалану қосымша топтауды да қамтамасыз етеді. Төменде сұрау нәтижесінің мысалын көресіз.

Синтаксис: НӘТИЖЕЛЕР<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>BY<ОБЩИЕ> <Поле1, ... , ПолеN>

Қолдану мысалы:

Request.Text = "ТАҢДАУ | Есептеулер. Қарсы тарап келісімі. Келісім түрі AS Келісім-шарт түрі, | Есептеулер. Контрагенттік келісім AS Келісім-шарт, | Есептеулер. Контрагент, | Есептеулер. Өзара есеп айырысу балансының сомасы AS Баланс | ФОМ | Жинақтау тізілімі. Mut. Контрагенттермен есеп айырысу. Баланс AS Есептеулер | БАРЛЫҒЫ |СОЛМА (баланс) |Бағдарламалық қамтамасыз ету | ЖАЛПЫ, |Келісім түрі»;

Суретте сұрауды орындау барысында қалыптасқан топтаулар көрсетілген, жоғарғысы ЖАЛПЫ бөліміне, екіншісі контрагенттік келісім шартының түрі өрісіне сілтеме жасайды.

Көбінесе «Күн» түріндегі айнымалылармен жұмыс істеу қажеттілігі туындайды. Бұл мақалада біз негізгі әдістерді қарастырамыз - ағымдағы күнді өту, бос мәнді тексеру, ерікті күн.

Сұрауларды жазу кезінде деректерді ағымдағы күнмен жиі салыстыру қажет. Кірістірілген 1С тілінде CurrentDate() функциясы бар. Ол компьютердегі ағымдағы уақыт пен күнді анықтауға мүмкіндік береді. Ағымдағы күнмен операцияларды орындау үшін осы функцияның мәнін сұрауға параметр ретінде беру керек.

Төменде қазірге дейін жасалған күні бар шығыс есептеріне тіркелген барлық файлдарды таңдайтын сұрау берілген:

ExampleRequest = Жаңа сұраныс;
Мысал сұрау.Мәтін = "
|ТАҢДАУ
| AdvanceReportAttachedFiles.Link
|FROM
| Directory.AdvanceReportAttachedFilesAS AdvanceReportAttachedFiles
|ҚАЙДА
| AdvanceReportAttachedFiles.Date< &ТекДата»;
Example Request.SetParameter("CurrentDate", CurrentDate());

Арнаулы күн

Жоғарыда қарастырылған функция салыстыруға және, демек, кез келген кезең үшін таңдау жасауға мүмкіндік береді. Бұл әдіс қосымша параметрлерді пайдаланбай сұрауда қатаң таңдауды көрсетуге мүмкіндік береді.

Жоғарыдағы мысалда бұл функцияны пайдаланған кезде біз тек үш санды (жыл, ай, күн) енгізу параметрлері ретінде бергенімізді ескеріңіз. Соңғы үшеуі (сағат, минут, секунд) міндетті емес және егер жоқ болса, «0» белгісімен ауыстырылады, яғни күннің басы.

Бұл мысал өткен 2016 жылдың соңына дейін шығыс есептеріне тіркелген барлық файлдарды шығарып алады. Осыған байланысты біз «2016 жылдың 31 желтоқсаны 23:59:59» уақыт нүктесін салыстыру үшін сағатты, минутты және секундты көрсетеміз.

ТАҢДАУ
AdvanceReportAttachedFiles.Link
FROM
Directory.AdvanceReportAttachedFiles AS AdvanceReportAttachedFiles
ҚАЙДА
AdvanceReportAttachedFiles.Date< ДАТАВРЕМЯ(2016, 12, 31, 23, 59, 59)

Бос күн

Айнымалы мәнде бос күн бар-жоғын тексерудің ең оңай жолы қарапайым салыстыруды пайдалану болып табылады. Бұл мысалда сұрауды пайдалана отырып, кіріс күні толтырылмаған шотқа барлық қолма-қол ақша түсімдерін таңдаймыз.

1С жүйесіндегі «Күн» түрі сан, жол және логикалық деректермен бірге 4 негізгі деректер түрінің бірі болып табылады. Конфигурацияларда күндер барлық жерде кездеседі — әзірлеу кезінде бұл деректер түрімен жұмыс істеуден аулақ болу мүмкін емес. Сондықтан күндерді қалай өңдеу керектігін, олармен жұмыс істеудің қандай нұсқалары бар екенін және олардың қалай сақталатынын түсінетін сұрауларды жазуды бастаған дұрыс. Әртүрлі күндермен сұрауларды жазудың барлық нюанстарының мысалдарын қарастырайық.

1С сұраныстарында күндермен жұмыс істеу мысалдары

Ең алдымен, сұраудағы күнді қажетті форматта алу керек - уақытпен немесе уақытсыз. Бұл тапсырманы орындаудың бірнеше жолы бар:

  1. Параметр арқылы өту. Осы әдісті пайдаланып тек ағымдағы сеанс күнін алуға болады;
  2. Таңдау өрісінен сұраудағы күнді алыңыз;
  3. DATETIME() функциясын пайдаланып сандық мәндерден түрлендіру.

Құжаттармен жұмыс істеудегі ең көп таралған тапсырма - 1С сұранысындағы бос күнді тексеру. Бұл жағдайда DATETIME(1,1,1) функциясы арқылы алынатын бос күні бар айнымалыны немесе өрісті салыстыру оңай:

DATETIME (1, 1, 1)

Ұқсас пәрменді пайдалану арқылы сұрауда ерікті күн мен уақытты алуға болады. Сонымен қатар, оларды параметр ретінде 6 санды көрсету арқылы секундына дейінгі дәлдікпен көрсетуге болады. Тек 3 сан пайдаланылса, сағаттар, минуттар және секундтар 0-ге (күннің басына) орнатылады. Мысалы, сұрауда 2018 жылдың қаңтар айының алғашқы 10 күніндегі құжаттарды таңдауымыз керек:

Түбіртекті Ағымдағы шотқа ТАҢДАҢЫЗ. Құжаттан сілтеме РЕТІНДЕ байланыстырыңыз. Ағымдағы шотқа түбіртек Ағымдағы шотқа түбіртек РЕТІНДЕГІ Ағымдағы шотқа түбіртек ЖЕРДЕ. Күні DATETIME (2018, 1, 1, 0, 0, 0) ЖӘНЕ КҮН УАҚЫТЫ (2018, 1,) 10, 23, 59, 59)

Кірістірілген 1С тіліндегі сұрауда сіз әртүрлі өрістерді таңдап, параметрлерді ала алмайсыз. Белгілі бір тапсырма үшін күндерді пішімдеуді жеңілдететін көптеген функциялар бар. Сұрауда күндермен жиі жұмыс жасасаңыз, мына пәрмендерді білуіңіз керек:

  • КЕЗЕҢ БАСЫ.Параметрлер контекстте күннің басын алу қажет күн мен уақыт кезеңін көрсетеді. Күнді мәңгілік пішімге түрлендіру үшін пайдаланылады. Ол үшін екінші параметрді орнату керек – «КҮН»;
КЕЗЕҢ БАСТАЛУ(,) КЕЗЕҢ БАСТАЛУ(&Күні, КҮН) кезең>күні>
  • КЕЗЕҢ СОҢЫ.Параметрлерде көрсетілген бірліктер бойынша соңғы күнді қайтаратын ұқсас команда;
  • ADDKDATE.Белгіленген уақыт бірліктерінің белгіленген санына көбірек күнді алуға мүмкіндік береді. Функция параметрлері күнді, уақыт бірлігін және нөмірді қамтиды;
ADDKDATE(,) ADDKDATE(&Күні, КҮН, 10) саны>түрі>күні>
  • DIFFERENCEDATE.Көрсетілген бірліктерде күндер арасындағы айырмашылықты алады;
DIFFERENCEDATE(,) DIFFERENCEDATE(&Date1, &Date2, DAY) түрі>күн2>күн1>
  • АПТА КҮНІ.Аптаның бір күнінің сериялық нөмірін береді.

Осы функцияларды дұрыс пайдалану арқылы әзірлеуші ​​тривиальды емес мәселелерді шеше алады. Мысалы, жол ретінде сұраудағы ағымдағы күннің апта күнінің атын алу:

АПТА КҮНІН ТАҢДАУ(&АғымдағыКүн) = 1 СОДАН СОҢ "Дүйсенбі" WHENDAYDAY(&CurrentDate) = 2 ОДАН "Сейсенбі" WHENDAYDAY(&АғымдағыКүн) = 3 ОНДА "Сәрсенбі" WHENDAYDAY(&АғымдағыКүн) = 4 СОДАН СОҢ "Дүйсенбі"КҮНДІКҮН(&АғымдағыКүні) = 5 ОДАН СОҢ «Жұма» АПТА КҮНІ(&АғымдағыКүні) = 6 СОСЫН «Сенбі» ҚАЛСЫ «Жексенбі» АЯҚТАУ

1С сұрауындағы түрлерді саннан немесе жолдан күнге түрлендіру - көп еңбекті қажет ететін тапсырма. DATETIME функциясын пайдаланып сандардан күнді алуға болады, жолдан - SUBSTRING функциясы мен SELECT WHEN THEN ELSE конструкциясын біріктіру арқылы. Осының негізінде әзірлеушілер модульдегі басқа түрлерден күнді алуды және оны параметр арқылы сұрауға беруді қалайды. Өкінішке орай, бұл әрқашан мүмкін емес, сондықтан сұраудағы күн пішімін өзгертуге тура келеді.

Виртуалды тіркелім кестелерінен деректерді алу параметрі ретінде 1С сұранысында күнді көрсетуге болады. Бұл рөл жоғарыдағы барлық функцияларды да пайдалана алады. Бірақ бұл жерде 1С сұрауындағы бос күннің кодты орындаудың соңғы нәтижесіне әсер етуіне жол бермеу маңызды, сондықтан тексеру қажет.

43
NULL – жоқ мәндер. Нөлдік мәнмен шатастырмау керек! NULL сан емес, бос орынға, бос сілтемеге немесе Анықталмағанға тең емес. NULL – типті құрайтын мән, яғни. NULL түрі және осы түрдің жалғыз мәні бар. NULL... 26
1С платформасында мәліметтер қоры кестелеріне сұраныстарды жасау және орындау үшін Query бағдарламалау тілінің арнайы объектісі қолданылады. Бұл нысан Жаңа сұраныс құрылымын шақыру арқылы жасалады. Ыңғайлы сұраныс... 18
Мақалада 1С v.8.2 сұрауларымен жұмыс істеудің пайдалы әдістері, сондай-ақ сұрау тілі туралы онша танымал емес ақпарат берілген. Мен сұрау тілінің толық сипаттамасын беруге тырыспаймын, бірақ тек... 13
LIKE - жолды үлгіге ұқсастығын тексеруге арналған оператор. SQL тіліндегі LIKE аналогы. SIMILAR операторы оның сол жағында көрсетілген өрнектің мәнін оң жағында көрсетілген үлгі жолымен салыстыруға мүмкіндік береді. Өрнектің мағынасы...