Заказать звонок

Запрос: Получение дат начала или окончания периодов в заданном интервале дат

18.04.2017

Рассмотрим случай, когда в запросе нужно получить таблицу дат, состоящую из дат начала или окончания периодов в заданном интервале дат.

 

 

 

 

 

 

 

 

На примере типовой функции

ЗапросВТПериоды() общего модуля ЗарплатаКадрыОбщиеНаборыДанных конфигурации ЗУП 3.1.

Подробнее на примере:

Часть 1. Использование типовой функции.

Нужно получить таблицу с датами начала месяцев в интервале с 01.01.16 по 01.09.16 (т.е. таблицу с датами 01.01.16, 01.02.16, 01.03.16, 01.04.16, 01.05.16, 01.06.16, 01.07.16, 01.08.16, 01.09.16):

НачалоИнтервала = Дата(2016, 1, 1);

ОкончаниеИнтервала = Дата(2016, 9, 1);

Периодичность = «МЕСЯЦ»; //может принимать значения "ГОД", "КВАРТАЛ", "МЕСЯЦ", "ДЕНЬ" – определяет дату начала какого периода хотим получить

ИмяПоляПериод = «Месяц»; //имя поля колонки таблицы, в которой будут полученные даты

ИмяВТ = «ВТ_Месяцы»; //имя временной таблицы, в которой будут храниться полученные даты

ИспользоватьКонецПериода = Ложь; //Ложь – т.к. хотим получить даты начала каждого месяца в интервале

Запрос = ЗапросВТПериоды(НачалоИнтервала, ОкончаниеИнтервала, Периодичность,           ИмяПоляПериод, ИмяВТ, ИспользоватьКонецПериода);

                Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;

                Запрос.Выполнить();

Часть 2. Запрос для получения дат.

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ

                               |              0 КАК Цифра

                               |ПОМЕСТИТЬ ВТЦифры

                               |

                               |ОБЪЕДИНИТЬ ВСЕ

                               |

                               |ВЫБРАТЬ

                               |              1

                               |

                               |ОБЪЕДИНИТЬ ВСЕ

                               |

                               |ВЫБРАТЬ

                               |              2

                               |

                               |ОБЪЕДИНИТЬ ВСЕ

                               |

                               |ВЫБРАТЬ

                               |              3

                               |

                               |ОБЪЕДИНИТЬ ВСЕ

                               |

                               |ВЫБРАТЬ

                               |              4

                               |

                               |ОБЪЕДИНИТЬ ВСЕ

                               |

                               |ВЫБРАТЬ

                               |              5

                               |

                               |ОБЪЕДИНИТЬ ВСЕ

                               |

                               |ВЫБРАТЬ

                               |              6

                               |

                               |ОБЪЕДИНИТЬ ВСЕ

                               |

                               |ВЫБРАТЬ

                               |              7

                               |

                               |ОБЪЕДИНИТЬ ВСЕ

                               |

                               |ВЫБРАТЬ

                               |              8

                               |

                               |ОБЪЕДИНИТЬ ВСЕ

                               |

                               |ВЫБРАТЬ

                               |              9

                               |;

                               |

                               |////////////////////////////////////////////////////////////////////////////////

                               |ВЫБРАТЬ

                               |              НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВЫБОР

                               |                                                                             КОГДА ДАТАВРЕМЯ(2016, 1, 1, 0, 0, 0) = ДАТАВРЕМЯ(1, 1, 1)

                               |                                                                                            ТОГДА ДАТАВРЕМЯ(1980, 1, 1)

                               |                                                                             ИНАЧЕ ДАТАВРЕМЯ(2016, 1, 1, 0, 0, 0)

                               |                                                             КОНЕЦ, МЕСЯЦ), МЕСЯЦ, Цифры.Цифра + ЕСТЬNULL(Цифры10.Цифра, 0) * 10 + ЕСТЬNULL(Цифры100.Цифра, 0) * 100 + ЕСТЬNULL(Цифры1000.Цифра, 0) * 1000 + ЕСТЬNULL(Цифры10000.Цифра, 0) * 10000 + ЕСТЬNULL(Цифры100000.Цифра, 0) * 100000), МЕСЯЦ) КАК Период

                               |ИЗ

                               |              ВТЦифры КАК Цифры

                               |                              ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры10

                               |                              ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ВЫБОР

                               |                                                                                            КОГДА ДАТАВРЕМЯ(2016, 1, 1, 0, 0, 0) = ДАТАВРЕМЯ(1, 1, 1)

                               |                                                                                                            ТОГДА ДАТАВРЕМЯ(1980, 1, 1)

                               |                                                                                            ИНАЧЕ ДАТАВРЕМЯ(2016, 1, 1, 0, 0, 0)

                               |                                                                             КОНЕЦ, МЕСЯЦ), НАЧАЛОПЕРИОДА(ВЫБОР

                               |                                                                                            КОГДА ДАТАВРЕМЯ(2016, 9, 1, 0, 0, 0) = КОНЕЦПЕРИОДА(ДАТАВРЕМЯ(1, 1, 1), МЕСЯЦ)

                               |                                                                                                            ТОГДА &ОкончаниеИнтервалаВТДатыПоМесяцам

                               |                                                                                            ИНАЧЕ ДАТАВРЕМЯ(2016, 9, 1, 0, 0, 0)

                               |                                                                             КОНЕЦ, МЕСЯЦ), МЕСЯЦ) > 9)

                               |                              ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры100

                               |                              ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ВЫБОР

                               |                                                                                            КОГДА ДАТАВРЕМЯ(2016, 1, 1, 0, 0, 0) = ДАТАВРЕМЯ(1, 1, 1)

                               |                                                                                                            ТОГДА ДАТАВРЕМЯ(1980, 1, 1)

                               |                                                                                            ИНАЧЕ ДАТАВРЕМЯ(2016, 1, 1, 0, 0, 0)

                               |                                                                             КОНЕЦ, МЕСЯЦ), НАЧАЛОПЕРИОДА(ВЫБОР

                               |                                                                                            КОГДА ДАТАВРЕМЯ(2016, 9, 1, 0, 0, 0) = КОНЕЦПЕРИОДА(ДАТАВРЕМЯ(1, 1, 1), МЕСЯЦ)

                               |                                                                                                            ТОГДА &ОкончаниеИнтервалаВТДатыПоМесяцам

                               |                                                                                            ИНАЧЕ ДАТАВРЕМЯ(2016, 9, 1, 0, 0, 0)

                               |                                                                             КОНЕЦ, МЕСЯЦ), МЕСЯЦ) > 99)

                               |                              ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры1000

                               |                              ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ВЫБОР

                               |                                                                                            КОГДА ДАТАВРЕМЯ(2016, 1, 1, 0, 0, 0) = ДАТАВРЕМЯ(1, 1, 1)

                               |                                                                                                            ТОГДА ДАТАВРЕМЯ(1980, 1, 1)

                               |                                                                                            ИНАЧЕ ДАТАВРЕМЯ(2016, 1, 1, 0, 0, 0)

                               |                                                                             КОНЕЦ, МЕСЯЦ), НАЧАЛОПЕРИОДА(ВЫБОР

                               |                                                                                            КОГДА ДАТАВРЕМЯ(2016, 9, 1, 0, 0, 0) = КОНЕЦПЕРИОДА(ДАТАВРЕМЯ(1, 1, 1), МЕСЯЦ)

                               |                                                                                                            ТОГДА &ОкончаниеИнтервалаВТДатыПоМесяцам

                               |                                                                                            ИНАЧЕ ДАТАВРЕМЯ(2016, 9, 1, 0, 0, 0)

                               |                                                                             КОНЕЦ, МЕСЯЦ), МЕСЯЦ) > 999)

                               |                              ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры10000

                               |                              ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ВЫБОР

                               |                                                                                            КОГДА ДАТАВРЕМЯ(2016, 1, 1, 0, 0, 0) = ДАТАВРЕМЯ(1, 1, 1)

                               |                                                                                                            ТОГДА ДАТАВРЕМЯ(1980, 1, 1)

                               |                                                                                            ИНАЧЕ ДАТАВРЕМЯ(2016, 1, 1, 0, 0, 0)

                               |                                                                             КОНЕЦ, МЕСЯЦ), НАЧАЛОПЕРИОДА(ВЫБОР

                               |                                                                                            КОГДА ДАТАВРЕМЯ(2016, 9, 1, 0, 0, 0) = КОНЕЦПЕРИОДА(ДАТАВРЕМЯ(1, 1, 1), МЕСЯЦ)

                               |                                                                                                            ТОГДА &ОкончаниеИнтервалаВТДатыПоМесяцам

                               |                                                                                            ИНАЧЕ ДАТАВРЕМЯ(2016, 9, 1, 0, 0, 0)

                               |                                                                             КОНЕЦ, МЕСЯЦ), МЕСЯЦ) > 9999)

                               |                              ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры КАК Цифры100000

                               |                              ПО (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ВЫБОР

                               |                                                                                            КОГДА ДАТАВРЕМЯ(2016, 1, 1, 0, 0, 0) = ДАТАВРЕМЯ(1, 1, 1)

                               |                                                                                                            ТОГДА ДАТАВРЕМЯ(1980, 1, 1)

                               |                                                                                            ИНАЧЕ ДАТАВРЕМЯ(2016, 1, 1, 0, 0, 0)

                               |                                                                            КОНЕЦ, МЕСЯЦ), НАЧАЛОПЕРИОДА(ВЫБОР

                               |                                                                                            КОГДА ДАТАВРЕМЯ(2016, 9, 1, 0, 0, 0) = КОНЕЦПЕРИОДА(ДАТАВРЕМЯ(1, 1, 1), МЕСЯЦ)

                               |                                                                                                            ТОГДА &ОкончаниеИнтервалаВТДатыПоМесяцам

                               |                                                                                            ИНАЧЕ ДАТАВРЕМЯ(2016, 9, 1, 0, 0, 0)

                               |                                                                             КОНЕЦ, МЕСЯЦ), МЕСЯЦ) > 99999)

                               |ГДЕ

                               |              НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВЫБОР

                               |                                                                                            КОГДА ДАТАВРЕМЯ(2016, 1, 1, 0, 0, 0) = ДАТАВРЕМЯ(1, 1, 1)

                               |                                                                                                            ТОГДА ДАТАВРЕМЯ(1980, 1, 1)

                               |                                                                                            ИНАЧЕ ДАТАВРЕМЯ(2016, 1, 1, 0, 0, 0)

                               |                                                                             КОНЕЦ, МЕСЯЦ), МЕСЯЦ, Цифры.Цифра + ЕСТЬNULL(Цифры10.Цифра, 0) * 10 + ЕСТЬNULL(Цифры100.Цифра, 0) * 100 + ЕСТЬNULL(Цифры1000.Цифра, 0) * 1000 + ЕСТЬNULL(Цифры10000.Цифра, 0) * 10000 + ЕСТЬNULL(Цифры100000.Цифра, 0) * 100000), МЕСЯЦ) МЕЖДУ ВЫБОР

                               |                                             КОГДА ДАТАВРЕМЯ(2016, 1, 1, 0, 0, 0) = ДАТАВРЕМЯ(1, 1, 1)

                               |                                                             ТОГДА ДАТАВРЕМЯ(1980, 1, 1)

                               |                                             ИНАЧЕ ДАТАВРЕМЯ(2016, 1, 1, 0, 0, 0)

                               |                              КОНЕЦ И ВЫБОР

                               |                                             КОГДА ДАТАВРЕМЯ(2016, 9, 1, 0, 0, 0) = КОНЕЦПЕРИОДА(ДАТАВРЕМЯ(1, 1, 1), МЕСЯЦ)

                               |                                                             ТОГДА &ОкончаниеИнтервалаВТДатыПоМесяцам

                               |                                             ИНАЧЕ ДАТАВРЕМЯ(2016, 9, 1, 0, 0, 0)

                               |                              КОНЕЦ";

                Запрос.УстановитьПараметр("ОкончаниеИнтервалаВТДатыПоМесяцам", Дата(2016, 9, 1, 0, 0, 0));

                ТаблицаДат = Запрос.Выполнить().Выгрузить();

 

Автор: Дина Королева.


Возврат к списку

Наши услуги и вакансии

Разработчики
на full-time
Программист 1С на 8 часов в день
от 1 600 руб/час
Позадачная
разработка 1С
Доработки и развитие любых решений на платформе 1С
Стоимость по оценке
Карьера в Neti

Вакансии разработчиков и консультантов 1С
З.П. от 100 000 рублей