Выразить число как строку и дату как строку в запросе

Публикация № 331805

Разработка - Практика программирования

запрос преобразование в строку

Предлагается новый и более компактный метод преобразования даты и числа в строку в запросе

В языке запросов отсутствуют встроенные функции преобразования одних типов данных в другие, например, строк в числа или даты и наоборот. В работе «Выразить строку как число и строку как дату в запросе» были предложены достаточно  компактные способы преобразований «из строки». Теперь дошла очередь до обратных к ним преобразований «в строку».

Основной проблемой рассматриваемого преобразования в строку является выделение каждого конкретного разряда исходного числа. Например, число 123 состоит из трех разрядов. Пусть разряды нумеруются справа налево, начиная с нуля. Разряды отличаются весом: нулевой разряд в десятичной позиционной системе счисления имеет вес 1, первый – 10, второй – 100 и так далее. Для выделения каждого разряда требуется найти целое от деления числа на вес разряда, а затем – остаток от деления полученного целого на 10. Первый (второй слева) разряд, таким образом, получится так: 123 разделим на 10, получим 12,3. Затем возьмем целое, получим  12. Затем найдем остаток от деления на 10, получим 2 – искомый первый (второй слева) разряд. Буквальная запись этих выражений в запросе получается очень и очень громоздкой, но существует другой путь.

Этот путь заключается в использовании для нахождения остатка от деления пары функций: СЕКУНДА и ДОБАВИТЬКДАТЕ. Дело в том, что функция СЕКУНДА фактически является функцией остатка от деления на 60 числа секунд, прошедшего с начала времен. Чтобы превратить ее в функцию расчета остатка от деления на 10 достаточно считать секунды шестерками. То есть требуемая функция будет записываться так:

СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, Икс * 6) ) / 6

Эта функция выделяет самый правый (нулевой) разряд числа Икс. Чтобы выделить первый разряд, нужно использовать функцию

СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, Икс * 0.6) ) / 6

А чтобы выделить второй – функцию

СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, Икс * 0.06) ) / 6

И так далее. Множитель 60 позволяет выделить разряд десятых долей, 600 – сотых и так далее.

Ограничением рассмотренного подхода является максимальное число секунд при работе с датами. Оно таково, что мы можем выделить не более 10-ти десятичных знаков в числе. Если число значащих знаков больше, исходное число потребуется предварительно разделить на две части «обычным» способом с использованием операции ВЫРАЗИТЬ КАК.

Приведем пример запроса для случая ЧИСЛО(10, 2)

ВЫБРАТЬ
	ПОДСТРОКА("0123456789", &Число / 10000000 + 1, 1) 
	+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 0.000006)) / 6 + 1, 1)
	+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 0.00006)) / 6 + 1, 1)
	+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 0.0006)) / 6 + 1, 1)
	+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 0.006)) / 6 + 1, 1)
	+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 0.06)) / 6 + 1, 1)
	+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 0.6)) / 6 + 1, 1)
	+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 6)) / 6 + 1, 1)
	+ "." 
	+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 60)) / 6 + 1, 1) 
	+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 600)) / 6 + 1, 1) КАК Строка

Чтобы сделать запись чуть более короткой, две постоянные - цепочку цифр «0123456789» и начало времен можно вынести во вложенный запрос

ВЫБРАТЬ
	ПОДСТРОКА(Ц, &Число / 10000000 + 1, 1) 
	+ ПОДСТРОКА(Ц, СЕКУНДА(ДОБАВИТЬКДАТЕ(О, СЕКУНДА, &Число * 0.000006)) / 6 + 1, 1)
	+ ПОДСТРОКА(Ц, СЕКУНДА(ДОБАВИТЬКДАТЕ(О, СЕКУНДА, &Число * 0.00006)) / 6 + 1, 1)
	+ ПОДСТРОКА(Ц, СЕКУНДА(ДОБАВИТЬКДАТЕ(О, СЕКУНДА, &Число * 0.0006)) / 6 + 1, 1)
	+ ПОДСТРОКА(Ц, СЕКУНДА(ДОБАВИТЬКДАТЕ(О, СЕКУНДА, &Число * 0.006)) / 6 + 1, 1)
	+ ПОДСТРОКА(Ц, СЕКУНДА(ДОБАВИТЬКДАТЕ(О, СЕКУНДА, &Число * 0.06)) / 6 + 1, 1)
	+ ПОДСТРОКА(Ц, СЕКУНДА(ДОБАВИТЬКДАТЕ(О, СЕКУНДА, &Число * 0.6)) / 6 + 1, 1)
	+ ПОДСТРОКА(Ц, СЕКУНДА(ДОБАВИТЬКДАТЕ(О, СЕКУНДА, &Число * 6)) / 6 + 1, 1)
	+ "." 
	+ ПОДСТРОКА(Ц, СЕКУНДА(ДОБАВИТЬКДАТЕ(О, СЕКУНДА, &Число * 60)) / 6 + 1, 1) 
	+ ПОДСТРОКА(Ц, СЕКУНДА(ДОБАВИТЬКДАТЕ(О, СЕКУНДА, &Число * 600)) / 6 + 1, 1) КАК Строка
ИЗ (ВЫБРАТЬ "0123456789" Ц, ДАТАВРЕМЯ(1, 1, 1) О) КАК Константы

Аналогичным образом можно преобразовать число в строку в двоичной системе счисления. Вот запрос для записи в виде строки восьми младших двоичных разрядов заданного числа:

ВЫБРАТЬ
	  ПОДСТРОКА("01", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 30 / 128)) / 30 + 1, 1)
	+ ПОДСТРОКА("01", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 30 / 64)) / 30 + 1, 1)
	+ ПОДСТРОКА("01", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 30 / 32)) / 30 + 1, 1)
	+ ПОДСТРОКА("01", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 30 / 16)) / 30 + 1, 1)
	+ ПОДСТРОКА("01", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 30 / 8)) / 30 + 1, 1)
	+ ПОДСТРОКА("01", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 30 / 4)) / 30 + 1, 1)
	+ ПОДСТРОКА("01", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 30 / 2)) / 30 + 1, 1)
	+ ПОДСТРОКА("01", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 30)) / 30 + 1, 1) КАК Строка

 

Побочным следствием использованных закономерностей является то, что выражение

СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, Икс * 30) ) = 0

можно использовать в запросе для проверки четности числа Икс.

Для перевода даты в строку достаточно перевести в строку по отдельности число дней, месяцев и лет исходной даты. В итоге получается следующий запрос

ВЫБРАТЬ
	ПОДСТРОКА("0123456789", ДЕНЬ(&Дата) / 10 + 1, 1) 
	+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * ДЕНЬ(&Дата))) / 6 + 1, 1) 
	+ "/" 
	+ ПОДСТРОКА("0123456789", МЕСЯЦ(&Дата) / 10 + 1, 1) 
	+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * МЕСЯЦ(&Дата))) / 6 + 1, 1) 
	+ "/" 
	+ ПОДСТРОКА("0123456789", ГОД(&Дата) / 1000 + 1, 1) 
	+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата) * 0.06)) / 6 + 1, 1) 
	+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата) * 0.6)) / 6 + 1, 1) 
	+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата) * 6)) / 6 + 1, 1) КАК Строка

Как видно, используемые для преобразования в строку выражения довольно просты и компактны, особенно если сравнить их с тем, что приходилось использовать до сих пор.

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. spetzpozh 23.02.15 00:42 Сейчас в теме
Моя обычная реакция на публикации Маэстро - посмотрел, почесал репу, плюсанул и пошел дальше )))
Irwin; Kinestetik; Krio2; Famza; Cerberus1; denis_aka_wolf; Glebis; strange2007; acanta; manlak; ZLENKO; Somebody1; ZOMI; jif; magvay_k; DJDUH; xomaq; ice-net; 1cWin; kolessov_a; sstas007; sergio199; rpgshnik; Mails79; Anchoret; корум; veretennikoff; h00k; swimdog; flagma; NazarovV; orfos; hornet_X; Ananas_Zar; trumanl; MaxDavid; xCorsair; DrAku1a; _also; bds22; smit1c; Йожкин Кот; necropunk; lidersoft2; monkbest; Evil Beaver; slavap; Поручик; bulpi; Nuobu; Dmirily; DoctorRoza; iov; Tavalik; Uncore; pavlov_dv; w-divin; Makushimo; spezc; dj_serega; +60 Ответить
2. ololoanonim 3 23.02.15 11:20 Сейчас в теме
Выглядит весьма круто =)
rpgshnik; +1 Ответить
3. GROOVY 2537 23.02.15 13:41 Сейчас в теме
Фундаментально выглядит. Но нафига? Никогда не понимал, зачем это нужно.
Запрос оперирует данными, нужно красивое представление - для этого есть другие механизмы.
Ildar13; Gureev; ZeroSumGame; kadild; sanek050388; SP2000; nk25; tsmult; h00k; sergey512; monkbest; Nuobu; DoctorRoza; Dmitryiv; +14 4 Ответить
4. ildarovich 6990 23.02.15 15:53 Сейчас в теме
(3) GROOVY, вот небольшой перечень ссылок, который показывает, насколько часто встречается этот вопрос:
Преобразование строки в число/числа в строку в запросе
Как уже в запросе объединить число и строку?
Сложение строк в запросе
Дата в строку в запросе..
Как преобразовать дату в строку в запросе ?
v8: Операции преобразования Число в Строку и обратно в запросах
Вычисление строки в запросе.
Другие можно получит поиском "1С запрос дата число в строку"
Возможно, в половине случаев здесь действительно неправильно поставлена задача и лучше производить преобразование вне запроса.
Но, думаю, есть и случаи обоснованной необходимости таких преобразований.

Немного пофантазировав, можно привести такие примеры:
1) Проверить контрольные соотношения в разрядах ИНН, SSC, EAN (потребуется преобразование строки в число, выделение и сложение разрядов числа, расчет остатка);
2) Сформировать номера договоров, включающие даты;
3) Сформировать номера накладных, включающих даты;
4) Сформировать артикулы, включающие размер, вес или другие числовые характеристики товара;
5) Проверить набор признаков, закодированных в одном числе;
6) Найти пропущенные номера документов запросом;
7) Выделить (внести) вес из (в) штрих-кода весового товара.

Разумеется, здесь имеется ввиду, что формирование и проверка делаются не для вывода, а для последующего использования внутри пакетного запроса: поиска, сравнения, вычисления, группировки.

Я, в общем-то, понимаю ваши сомнения. Но мне интереснее не убеждать людей, что их вопрос неправильный, а искать решение непростой задачи, рассуждая, что был бы метод, а задача найдется.

Кроме того, здесь должен быть отдельно интересен прием компактной записи расчета остатка. Разложив 60 на множители, получим 2х2х3х5. Это значит, что через СЕКУНДА можно рассчитать остаток от деления на 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60. А через функцию ЧАС (24 = 2х2х2х3) еще на 8 и 24.
Dmitri93; Kinestetik; monday14; Krio2; Gendelf; AliceLight; HitGroove; user1019590; rinik88; ZeroSumGame; Dementor; manlak; sm.artem; WizaXxX; Kabal; ViteG; rpgshnik; ABudnikov; sergio199; sss_russian; CratosX; iov; AlmazBur01; ugroblin; Dolly_EV; Оля_; BalyunovVV; Gesperid; +28 Ответить
51. ser6702 72 23.07.18 10:15 Сейчас в теме
(4) плюсую... как гимнастике ума не более. Инога этим сам страдаю. Но на самом деле вредная статья. Поясню:

Приведен перечень ссылок на вопросы, но вопросы эти ползут от ... непонимания - не так ли?
Сам на первых этапах при переходе от скуля и ора (с,паскаль) задавал сначала такие. На самом деле есть два мощных серврера СУБД и 1С, которые надо полномасштабно использовать. Не передавая на СУБД те задачи, которые ей не предназначены.

Пример:
В одной из конфигураций ( разработка внутренняя ) для ведения административно хозяйственной деятельности банка весь расчет амортизации ОС перенесли на запрос. А зачем спрашиваю? СУБД для 1С в основном служит для быстрого поиска... хранения данных и т.д. Все расширения типа pl/sql по сути реализованы в языке ... сервера приложений 1С. Кластер СУБД , им рулят его админы, и кластер 1С - оба мощные вычислительные комплексы. Сервер приложений 1С это тоже мощная машина с огромными ресурсами, которые надо использовать. Оптимизация состоит в том, чтобы с клиента один раз обратиться к серверу приложений 1С, с него за раз получить данные из субд и вернуть обратно через сервер приложений 1С на клиента. Опустил пока вопрос записи - объектная модель конечно по сравнению с табличной проигрывает, но зато взаимное поведение объектов относительно друг друга всегда предсказуемо.

Не надо кластер СУБД нагружать ему не предназначенными задачами - надо их верно перераспределять между кластерами СУБД и 1С.

Вы согласны с тем, что все эти переводы из строки туда обратно грамотно реализовать на сервере приложений 1С?
33. nk25 09.06.17 06:40 Сейчас в теме
(3) ну вот увлекается он этим :)
если бы в 1с-ком языке появился pl/sql с хранимыми процедурами то наверно все было по другому
41. sanek050388 16.10.17 13:01 Сейчас в теме
42. ildarovich 6990 16.10.17 14:27 Сейчас в теме
(41)
Сказали мне, что эта дорога меня приведёт к океану смерти,
И я с полпути повернула вспять.
С тех пор все тянутся предо мною кривые, глухие окольные тропы…
5. break 30 24.02.15 10:35 Сейчас в теме
а без значащихся нулей перед числами можно соорудить?
Maximysis; rpgshnik; +2 Ответить
6. ildarovich 6990 24.02.15 11:17 Сейчас в теме
(5) break, можно, если интерес не праздный. Приведите пример практической задачи - сделаю.
53. FilatovRA 151 15.10.18 18:32 Сейчас в теме
(6) Практический пример: Есть данные о неких внутренних идентификаторах номенклатуры, приведенных в справочнике с реквизитами "Номенклатура"(Справочник-номенклатура) и "Идентификатор"(Число).
Пример записи:
Маршрутизатор 12345678

Есть запись справочника "Номенклатура" введенная вручную, вида:

"Маршрутизатор 12345678 ПонятияНеИмеюЗачемЭтиЦифры".
Задача: заполнить некий регистр, хранящий записи о соответствиях этих 2х записей.
44. IVANTHESPACEBIKER 11.12.17 16:12 Сейчас в теме
(5)

ВЫБРАТЬ
	ВЫБОР
		КОГДА &Число / 10000000 > 1
			ТОГДА ПОДСТРОКА("0123456789", &Число / 10000000 + 1, 1)
		ИНАЧЕ ""
	КОНЕЦ + ВЫБОР
		КОГДА &Число / 1000000 > 1
			ТОГДА ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 0.000006)) / 6 + 1, 1)
		ИНАЧЕ ""
	КОНЕЦ + ВЫБОР
		КОГДА &Число / 100000 > 1
			ТОГДА ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 0.00006)) / 6 + 1, 1)
		ИНАЧЕ ""
	КОНЕЦ + ВЫБОР
		КОГДА &Число / 10000 > 1
			ТОГДА ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 0.0006)) / 6 + 1, 1)
		ИНАЧЕ ""
	КОНЕЦ + ВЫБОР
		КОГДА &Число / 1000 > 1
			ТОГДА ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 0.006)) / 6 + 1, 1)
		ИНАЧЕ ""
	КОНЕЦ + ВЫБОР
		КОГДА &Число / 100 > 1
			ТОГДА ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 0.06)) / 6 + 1, 1)
		ИНАЧЕ ""
	КОНЕЦ + ВЫБОР
		КОГДА &Число / 10 > 1
			ТОГДА ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 0.6)) / 6 + 1, 1)
		ИНАЧЕ ""
	КОНЕЦ + ВЫБОР
		КОГДА &Число / 1 > 1
			ТОГДА ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 6)) / 6 + 1, 1)
		ИНАЧЕ ""
	КОНЕЦ + "." + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 60)) / 6 + 1, 1) + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 600)) / 6 + 1, 1) КАК Строка
Показать
7. chmv 26.02.15 12:55 Сейчас в теме
А попроще. Может быть когда-нибудь и 1с это реализует
8. gaglo 27.02.15 09:58 Сейчас в теме
Большое спасибо за идею использования функции СЕКУНДА для получения остатка от деления. (Кажется мне, что простая проверка четности и другой кратности в запросе надобна чаще, чем перевод числа в строку.)
9. chmv 27.02.15 10:07 Сейчас в теме
8 Как раз Вы не правы, чаще перевод даты в строку
10. Поручик 4394 08.03.15 21:26 Сейчас в теме
На статьи автора у меня тоже реакция одна - почитал, плюс, порадовался, что есть люди с фундаментальным образованием. Сам бы ни за что не написал.
Kinestetik; xpess; POLGA; h00k; Evil Beaver; +5 Ответить
11. monkbest 105 17.03.15 11:04 Сейчас в теме
Я правильно понимаю, что строки полученные Вашим методом, потом можно складывать?

Потому что такой вот запрос вернет число как строку неограниченной длины
ВЫБРАТЬ
	ВзаиморасчетыССотрудниками.СуммаВзаиморасчетов,
	ПРЕДСТАВЛЕНИЕ(ВзаиморасчетыССотрудниками.СуммаВзаиморасчетов) КАК СуммаВзаиморасчетов1
ИЗ
	РегистрНакопления.ВзаиморасчетыССотрудниками КАК ВзаиморасчетыССотрудниками
ГДЕ
	ВзаиморасчетыССотрудниками.Сотрудник = &Сотрудник
12. ildarovich 6990 17.03.15 13:13 Сейчас в теме
(11) monkbest, да, можно складывать.
В вашем запросе "представление" это строка, которая формируется не в СУБД, а платформой в процессе постобработки запроса. Также как "итоги", например. Поэтому "представление" вы никак в самом запросе далее использовать не можете.
А строки, полученные в приведенных выражениях, можно использовать в запросе дальше. По ним можно группировать, соединять и прочее. Это обычное выражение языка запросов, хотя и несколько громоздкое.
13. sanfoto 497 23.03.15 07:04 Сейчас в теме
(12)
В вашем запросе "представление" это строка, которая формируется не в СУБД, а платформой в процессе постобработки запроса.


так то в принципе и 1С запросы - не чисто SQL запросы, а реляционно-подобные "объектные запросы к ВИРТУАЛЬНОЙ объектной модели"...
т.е. в процессе выполнения такого "объектного запроса" - генирится много дополнительного SQL кода для получения этих объектов..
К чему я это пишу - к тому что повальное увлечение переноса абсолютно всего кода в "1С запрос" - совсем не всегда оправдано на платформе "1С". На практике часто бывает быстрей отрабатывает(и пишется..) код с циклами с использованием 1С объектов "ТаблицаЗначений" и т.д.
14. ildarovich 6990 23.03.15 16:48 Сейчас в теме
(13) sanfoto, я противник крайностей. "Повальным увлечениям" стараюсь не поддаваться. Всегда нужно сравнивать время решения задачи запросом и кодом. Но, чтобы сравнивать решения, нужно их иметь. Вот тут и приведено возможное решение в запросе. Не чтобы безусловно использовать, а чтобы сравнить и выбрать. Таким образом у нас расширяется пространство возможностей, а уж выбор каждый делает сам в зависимости от конкретной задачи.
Kinestetik; Krio2; ser6702; Sapiens_bru; user747571; Designer1C; Kabal; fishca; mikele_bes; ABudnikov; premierex; realsevere; UniversaLL; sanfoto; +14 Ответить
15. alex_4x 81 25.08.15 13:01 Сейчас в теме
mszsuz; 02RUSlan; vvp117; bohdan-k; Krio2; snood; Valet; xpess; user774630; Gureev; user988634; purgin; FesenkoA; lunjio; Shurgent; manlak; 1cNike; Артано; evakuzmina; brr; Alex_grem; Kabal; DomenER; xomaq; Leoway; rabota.v8.1c; ice-net; the1; Yakud3a; NeLenin; sergio199; SergeyTerentyev; корум; IlyaSR; slawanix; AfroditaS; smaximaa; madonov; CratosX; NeviD; Cruciann; Winstoncuk; Nelli_A86; SavR11; sanfoto; Dementor; fvadim; Ali1976; hotey; Sergey_1c; ditp; tarassov; +52 Ответить
16. ildarovich 6990 26.08.15 13:08 Сейчас в теме
(15) alex_4x, картинку сами рисовали (редактировали) или взяли откуда?
17. alex_4x 81 26.08.15 13:34 Сейчас в теме
(16) Это Дилберт! Они очень наслышаны о нашей 1С :-)
18. Serj1C 479 13.01.16 13:18 Сейчас в теме
Связываться с датами для усечения дробной части? не накладно?
Может попробовать функцию Выразить(&Число-0.49 как Число(15,0)) ?
19. ildarovich 6990 13.01.16 14:46 Сейчас в теме
(18) Serj1C, в этом случае у меня получалось более громоздкое выражение. Поскольку для выделения одной цифры целое нужно было находить дважды. А по затратам времени, думаю, результаты должны быть примерно одинаковыми. То есть при примерно равных затратах времени выбираем меньшую громоздкость. Такое обоснование.
20. Sgeor 14.01.16 11:24 Сейчас в теме
Пригодился этот метод для таблиц из внешней БД.
Заметил один момент: в десятках выводились значения на единицу больше (например, вместо значения "10307" выводилось "10317").
Проблема решилась после того, как убрал "+1" из "/ 6 + 1" в вычислении десятков. Вот фрагмент:
ПО (customfieldvalue.STRINGVALUE = "10" 
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ВЫРАЗИТЬ(customfieldoption.ID * 0.06 КАК ЧИСЛО(18, 0)))) / 6 + 1, 1) 
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ВЫРАЗИТЬ(customfieldoption.ID * 0.6 КАК ЧИСЛО(18, 0)))) / 6, 1) 
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, customfieldoption.ID * 6)) / 6 + 1, 1))

Так что лучше перепроверить перед использованием этого метода.
Но мне все-равно очень пригодилось, спасибо.
21. ildarovich 6990 14.01.16 15:12 Сейчас в теме
(20) Sgeor, в тексте метода, приведенном в статье, никакого ВЫРАЗИТЬ нет. Этот оператор в этом случае не нужен, он лишний. То, что написано в (20) у меня совсем никак не работает.
Если же записать в точности так, как написано в статье:
ВЫБРАТЬ
	10307 КАК Id
ПОМЕСТИТЬ customfieldoption
;
ВЫБРАТЬ
	ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, Id * 0.0006)) / 6 + 1, 1)
+ 	ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, Id * 0.006)) / 6 + 1, 1)
+ 	ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, Id * 0.06)) / 6 + 1, 1)
+ 	ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, Id * 0.6)) / 6 + 1, 1)
+ 	ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, Id * 6)) / 6 + 1, 1)
ИЗ
	customfieldoption КАК customfieldoption
Показать

то результат будет совершенно верный: "10307"
22. Sgeor 14.01.16 21:16 Сейчас в теме
(21) не при чем тут вообще "ВЫРАЗИТЬ" - это кусок давнишнего изврата и мракобесия=)
Тем не менее, я залез уже в консоль перепроверить и на сей раз вбил все чисто:
ВЫБРАТЬ
    customfieldoption.ID КАК До,
    "10" + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, customfieldoption.ID * 0.06)) / 6 + 1, 1)
    + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, customfieldoption.ID * 0.6 )) / 6 + 1, 1)
    + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, customfieldoption.ID * 6)) / 6 + 1, 1) КАК После
ИЗ
    ВнешнийИсточникДанных.JiraBasina.Таблица.customfieldoption КАК customfieldoption


Результат:
До----|--После
10300 | 10300
10301 | 10301
10302 | 10302
10303 | 10303
10304 | 10304
10305 | 10315
10306 | 10316
10307 | 10317
10308 | 10318
10309 | 10319

В итоге, если число в предыдущем разряде > 4, то прибавляется ненужная 1. Когда избавился от "+1" в вычислении десятков, все встало на свои места. Когда избавился от "+1" во всех разрядах, снова получил бред. А по твоему коду в (21) все в порядке. Магия.
Думается, что с ID-шниками в базе что-то странное? Нет - число как число.
23. ildarovich 6990 15.01.16 12:47 Сейчас в теме
(22) Sgeor, я, кажется, понял в чем дело. Есть правило определение точности результатов арифметических операций в запросе в зависимости от точности операндов. Они описаны в статье: Разрядность результатов выражений и агрегатных функций в языке запросов. Видимо, срабатывание этого правила приводит к необходимости привести результат customfieldoption.ID * 0.6 к целому типу! В результате производится не отбрасывание дробной части (как задумано в данном в статье выражении), а округление. Поэтому, видимо, нужно предварительно привести операнд к нужному типу, например, ВЫРАЗИТЬ(Id КАК Число(15, 1)).
Kabal; Sgeor; +2 Ответить
36. kasper076 53 15.06.17 14:05 Сейчас в теме
(35) В (23) Вы уже объясняли этот момент, но я не понял. В (35) гораздо понятнее. Мож еще кому понятнее будет. Спасибо.
24. selenat 01.02.16 12:02 Сейчас в теме
Добрый день. В базах на sql этот запрос нормально отрабатывает, а в базе на постгри - вылетает с ошибкой. Причем даже если делаю ПОДСТРОКА(""0123456789"", ВЫРАЗИТЬ(СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, &Число * 0.06)) / 6 + 0.5 КАК ЧИСЛО(1, 0)), 1) (+0.5 использую, так как ВЫРАЗИТЬ округляет число, а не отбрасывает дробную часть)
как этому можно помочь?
25. ildarovich 6990 01.02.16 12:33 Сейчас в теме
(24) selenat, а платформа какая? Вообще с Postgre проблемы могут быть, буду разбираться, но быстро не обещаю.
26. selenat 01.02.16 13:33 Сейчас в теме
27. olbu 21.10.16 16:46 Сейчас в теме
Не могу сообразить, как имея таблицу дат в запросе и вот этот запрос
ВЫБРАТЬ
    ПОДСТРОКА("0123456789", ДЕНЬ(&Дата) / 10 + 1, 1) 
    + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * ДЕНЬ(&Дата))) / 6 + 1, 1) 
    + "/" 
    + ПОДСТРОКА("0123456789", МЕСЯЦ(&Дата) / 10 + 1, 1) 
    + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * МЕСЯЦ(&Дата))) / 6 + 1, 1) 
    + "/" 
    + ПОДСТРОКА("0123456789", ГОД(&Дата) / 1000 + 1, 1) 
    + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата) * 0.06)) / 6 + 1, 1) 
    + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата) * 0.6)) / 6 + 1, 1) 
    + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата) * 6)) / 6 + 1, 1) КАК Строка
Показать


получить таблицу дат в строковом выражении?
28. ildarovich 6990 24.10.16 13:36 Сейчас в теме
(27) olbu, вам нужно написать запрос примерно такого вида:
ВЫБРАТЬ <СложноеВыражениеИзСтатьиГДЕПараметр&ДатаЗамененНаНужноеИмяПоляТаблицыДат> КАК ДатаВСтроковомВыражении ИЗ ТаблицаДатВЗапросе

Другими словами, в том поле, где требуется строковое представление даты, требуется записать сложное выражение из статьи, где вместо параметра &Дата указать имя поля таблицы, из которой выбираются даты.
29. user633312_i_vi 01.11.16 20:34 Сейчас в теме
ПОДСТРОКА("01020304050607080910111213141516171819202122232425262728293­031",ДЕНЬ(&Дата)*2-1,2)+"."
+ПОДСТРОКА("010203040506070809101112",МЕСЯЦ(&Дата)*2-1,2)+".201"
+ПОДСТРОКА("0123456789",ГОД(&Дата)-2010+1,1) КАК СтрДата
// Тоже не ахти но ...
DarkAn; jmi; +2 Ответить
30. ildarovich 6990 02.11.16 11:02 Сейчас в теме
(29) user633312_i_vi, хороший вариант. С месяцами вообще все хорошо, с годом - плохо.Дни - зависит от вкуса. Лично мне нравится. Возможно, стоит комбинировать в одном выражении оба этих подхода.
39. =Kollega= 1 10.10.17 09:47 Сейчас в теме
Расширив вариант (29) можно прийти к следующему:
ВЫБРАТЬ
	"00010203040506070809" + "10111213141516171819" + "20212223242526272829" + "30313233343536373839" + "40414243444546474849" + "50515253545556575859" + "60616263646566676869" + "70717273747576777879" + "80818283848586878889" + "90919293949596979899" КАК Ц
ПОМЕСТИТЬ Константа
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	0 КАК Число
ПОМЕСТИТЬ Числа_0_9

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

ВЫБРАТЬ
	1

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

ВЫБРАТЬ
	2

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

ВЫБРАТЬ
	3

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

ВЫБРАТЬ
	4

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

ВЫБРАТЬ
	5

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

ВЫБРАТЬ
	6

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

ВЫБРАТЬ
	7

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

ВЫБРАТЬ
	8

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

ВЫБРАТЬ
	9

ИНДЕКСИРОВАТЬ ПО
	Число
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Старший.Число * 10 + Младший.Число КАК Число,
	ПОДСТРОКА(Константа.Ц, (Старший.Число * 10 + Младший.Число) * 2 + 1, 2) КАК Строка
ПОМЕСТИТЬ Числа_0_99
ИЗ
	Числа_0_9 КАК Младший,
	Числа_0_9 КАК Старший,
	Константа КАК Константа
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВЫБОР
		КОГДА Числа_0_99.Число < 50
			ТОГДА 2000 + Числа_0_99.Число
		ИНАЧЕ 1900 + Числа_0_99.Число
	КОНЕЦ КАК Год,
	ВЫБОР
		КОГДА Числа_0_99.Число < 50
			ТОГДА "20" + ПОДСТРОКА(Константа.Ц, Числа_0_99.Число * 2 + 1, 2)
		ИНАЧЕ "19" + ПОДСТРОКА(Константа.Ц, Числа_0_99.Число * 2 + 1, 2)
	КОНЕЦ КАК ГодСтрокой
ПОМЕСТИТЬ Годы
ИЗ
	Числа_0_99 КАК Числа_0_99,
	Константа КАК Константа
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Числа_0_99.Число КАК Число,
	Числа_0_99.Строка КАК Строка
ИЗ
	Числа_0_99 КАК Числа_0_99

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

ВЫБРАТЬ
	Годы.Год,
	Годы.ГодСтрокой
ИЗ
	Годы КАК Годы

УПОРЯДОЧИТЬ ПО
	Число
Показать

Используя одну констатнту можно переводить годы в интервале 100 лет (в примере с 1950 по 2049), месяцы, дни, часы, минуты и секунды.
31. Amur_MVS 125 22.05.17 13:12 Сейчас в теме
32. rpgshnik 2153 09.06.17 04:32 Сейчас в теме
34. kasper076 53 15.06.17 12:30 Сейчас в теме
При разрядности числа 10 знаков, 3 после запятой
ПОДСТРОКА(Ц, СЕКУНДА(ДОБАВИТЬКДАТЕ(О, СЕКУНДА, &Число * 6000)) / 6 + 1, 1)

выдает пустую строку.
Из-за того, что получается слишком большое число &Число * 6000.
Этот момент уже разбирался, но я не смог найти где.
35. ildarovich 6990 15.06.17 13:57 Сейчас в теме
(34) Конечно, у "добавить к дате" есть ограничения на величину параметров. И &Число * 6000 не может быть слишком большим. Можно проверить, ограничение порядка 2^32, то есть четырехбайтовое целое.

Это ограничение приведенного приема.

В этом случае предлагается выделять младшую и старшую часть числа и переводить их по отдельности.

СтаршаяЧасть = ВЫРАЗИТЬ(&Число / 10000000, КАК Число(15, 0));
МладшаяЧасть = &Число - СтаршаяЧасть * 10000000.

Об этом написано в самой статье
Ограничением рассмотренного подхода является максимальное число секунд при работе с датами. Оно таково, что мы можем выделить не более 10-ти десятичных знаков в числе. Если число значащих знаков больше, исходное число потребуется предварительно разделить на две части «обычным» способом с использованием операции ВЫРАЗИТЬ КАК.
rpgshnik; +1 Ответить
37. trumanl 11 09.10.17 16:48 Сейчас в теме
Добрый день,
если не ошибаюсь ЧИСЛО(8, 2) это 123456.78,
а не 12345678,90
предложение
Приведем пример запроса для случая ЧИСЛО(8, 2)
"" надо исправить на ЧИСЛО(10,2)
38. ildarovich 6990 09.10.17 17:22 Сейчас в теме
(37) Спасибо за уточнение, поправил.
40. puzakov 16.10.17 06:48 Сейчас в теме
Идея интересная, но... Не дай бог встретить подобное в промышленной БД *представил, перекрестился и плюнул три раза через плечо*
43. AlexanderKai 19.10.17 09:57 Сейчас в теме
Вот как приходится изголяться 1Сникам, только потому что 1С не включила поддержку CAST.
48. RotaninV 10 09.04.18 04:57 Сейчас в теме
(43) что самое интересное, на 8.0, до 2-3 релиза он был и вполне себе работал.
45. redfox64 7 22.03.18 12:26 Сейчас в теме
Интересно что в Postgre получаю неверный год. Вместо 2018 - 2028.
46. ildarovich 6990 22.03.18 13:27 Сейчас в теме
(45) А что получается, если просто
ВЫБРАТЬ Год(&Дата)
47. redfox64 7 22.03.18 16:38 Сейчас в теме
49. IvanVL 13 05.06.18 09:10 Сейчас в теме
Ага, дошло, долго понять не мог "что функция СЕКУНДА фактически является функцией остатка от деления на 60 числа секунд",
как понял, все стало понятно.
50. bajiepka 06.07.18 16:02 Сейчас в теме
Попробовал последний запрос на PostgreSql (linux). Как и писалось выше работает некорректно, видимо из-за округления или характерного для этой субд механизма получения дат. Это ни в коем случае не попытка "обхаить". Будьте бдительны с PostgreSQL.
52. taasha25 13 26.09.18 13:45 Сейчас в теме
Спасибо! Мне пригодилось.
54. starik-2005 2140 21.01.19 12:08 Сейчас в теме
А вот возник вопрос: а как теперь из получившейся строки убрать лидирующие нули? Мне, например, нужен диапазон какой-то, который я вычислил. В итоге он может быть от какого-нить нуля до какого-нить миллиона, но выводить "00000001-1000000" - как-то некошерно, однако. Есть мысли на эту тему? Первое, что приходит в голову - это поиск минимального "ненуля" и подстрока от позиции ненуля до конца строки. Остается придумать, как оптимально найти первый ненуль.
55. golod 01.02.19 13:16 Сейчас в теме
Спасибо автору поста, очень помогли
56. falexru 4 07.02.19 12:08 Сейчас в теме
ВЫБРАТЬ
ВЫБОР
КОГДА Не ПОДСТРОКА(&Номер, 1, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 1, 10)
КОГДА Не ПОДСТРОКА(&Номер, 2, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 2, 9)
КОГДА Не ПОДСТРОКА(&Номер, 3, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 3, 8)
КОГДА Не ПОДСТРОКА(&Номер, 4, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 4, 7)
КОГДА Не ПОДСТРОКА(&Номер, 5, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 5, 6)
КОГДА Не ПОДСТРОКА(&Номер, 6, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 6, 5)
КОГДА Не ПОДСТРОКА(&Номер, 7, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 7, 4)
КОГДА Не ПОДСТРОКА(&Номер, 8, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 8, 3)
КОГДА Не ПОДСТРОКА(&Номер, 9, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 9, 2)
Иначе ПОДСТРОКА(&Номер, 10, 1)
КОНЕЦ КАК СтрокаБезЛидирующихНулей
starik-2005; +1 Ответить
57. antonkms88 27.05.19 02:10 Сейчас в теме
Запрос 1С округляет по математическим правилам. Поэтому, представленный перевод из даты в строку не всегда отрабатывает корректно. Пример: 29.08.1995
Добавил немного, чтобы округления возвращали необходимые значения.
ПОДСТРОКА(«0123456789», ДЕНЬ(&Дата) / 10 + 0.5, 1),
ПОДСТРОКА(«0123456789», СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * ДЕНЬ(&Дата))) / 6 + 0.5, 1),
«/»,
ПОДСТРОКА(«0123456789», МЕСЯЦ(&Дата) / 10 + 0.5, 1),
ПОДСТРОКА(«0123456789», СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * МЕСЯЦ(&Дата))) / 6 + 0.5, 1),
«/»,
ПОДСТРОКА(«0123456789», ГОД(&Дата) / 1000 + 0.5, 1),
ПОДСТРОКА(«0123456789», СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата) * 0.06 — 0.5)) / 6 + 0.5, 1),
ПОДСТРОКА(«0123456789», СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата) * 0.6 — 0.5)) / 6 + 0.5, 1),
ПОДСТРОКА(«0123456789», СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата) * 6 — 0.5)) / 6 + 0.5, 1)
60. ildarovich 6990 29.08.19 14:59 Сейчас в теме
(57) Не могу подтвердить.
У меня, наоборот, мой код из статьи дает на примере 29.08.1995 совершенно верный результат, а ваш код дает 28/07/1984 на этих данных.
Нужно разобраться. Принцип округления при составлении запроса учитывался. И запрос тестировался. Правда, не на Постгри.
63. antonkms88 30.08.19 15:22 Сейчас в теме
(60)
Да, от СУБД, судя по всему, зависит.
В приложении 2 картинки. Одна картинка - серверная база с СУБД Postg, другая картинка - файловая база.
Результаты полностью противоположные.
Прикрепленные файлы:
58. OksDallas 22 11.06.19 07:33 Сейчас в теме
Внесу свои пять копеек по преобразованию даты в строку
Запрос = Новый Запрос;

Запрос.Текст = 
"ВЫБРАТЬ
|	ОтзывыИзОтпуска.Сотрудник КАК Сотрудник,
|	ОтзывыИзОтпуска.ПриказОбОтзыве,
|	ДЕНЬ(ОтзывыИзОтпуска.Период) КАК День,
|	МЕСЯЦ(ОтзывыИзОтпуска.Период) КАК Месяц,
|	ГОД(ОтзывыИзОтпуска.Период) - 2000 КАК Год
|ПОМЕСТИТЬ ВТ_ОтпускСОтзывами
|ИЗ
|	РегистрСведений.ОтзывыИзОтпуска КАК ОтзывыИзОтпуска
|ГДЕ
|	ОтзывыИзОтпуска.Сотрудник В(&Сотрудник)
|
|ИНДЕКСИРОВАТЬ ПО
|	Сотрудник
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
|	ВТ_ОтпускСОтзывами.Сотрудник,
|	""Пр.№ "" + ВТ_ОтпускСОтзывами.ПриказОбОтзыве + "" от "" + ВЫБОР
|		КОГДА ВТ_ОтпускСОтзывами.День < 10
|			ТОГДА ""0"" + ПОДСТРОКА(&Циферки, ВТ_ОтпускСОтзывами.День + 1, 1)
|		КОГДА ВТ_ОтпускСОтзывами.День < 20
|			ТОГДА ""1"" + ПОДСТРОКА(&Циферки, ВТ_ОтпускСОтзывами.День - 9, 1)
|		КОГДА ВТ_ОтпускСОтзывами.День < 30
|			ТОГДА ""2"" + ПОДСТРОКА(&Циферки, ВТ_ОтпускСОтзывами.День - 19, 1)
|		ИНАЧЕ ""3"" + ПОДСТРОКА(&Циферки, ВТ_ОтпускСОтзывами.День - 29, 1)
|	КОНЕЦ + ""."" + ВЫБОР
|		КОГДА ВТ_ОтпускСОтзывами.Месяц < 10
|			ТОГДА ""0"" + ПОДСТРОКА(&Циферки, ВТ_ОтпускСОтзывами.Месяц + 1, 1)
|		ИНАЧЕ ""1"" + ПОДСТРОКА(&Циферки, ВТ_ОтпускСОтзывами.Месяц - 9, 1)
|	КОНЕЦ + "".20"" + ВЫБОР
|		КОГДА ВТ_ОтпускСОтзывами.Год < 10
|			ТОГДА ""0"" + ПОДСТРОКА(&Циферки, ВТ_ОтпускСОтзывами.Год + 1, 1)
|		КОГДА ВТ_ОтпускСОтзывами.Год < 20
|			ТОГДА ""1"" + ПОДСТРОКА(&Циферки, ВТ_ОтпускСОтзывами.Год - 9, 1)
|		КОГДА ВТ_ОтпускСОтзывами.Год < 30
|			ТОГДА ""2"" + ПОДСТРОКА(&Циферки, ВТ_ОтпускСОтзывами.Год - 19, 1)
|		КОГДА ВТ_ОтпускСОтзывами.Год < 40
|			ТОГДА ""3"" + ПОДСТРОКА(&Циферки, ВТ_ОтпускСОтзывами.Год - 29, 1)
|		КОГДА ВТ_ОтпускСОтзывами.Год < 50
|			ТОГДА ""4"" + ПОДСТРОКА(&Циферки, ВТ_ОтпускСОтзывами.Год - 39, 1)
|		ИНАЧЕ ""5"" + ПОДСТРОКА(&Циферки, ВТ_ОтпускСОтзывами.День - 49, 1)
|	КОНЕЦ + "" г."" КАК Приказ
|ИЗ
|	ВТ_ОтпускСОтзывами КАК ВТ_ОтпускСОтзывами";

Запрос.УстановитьПараметр("Циферки", "0123456789");
Показать
acanta; jura_b; ildarovich; +3 Ответить
59. YalanchidiO 20 28.08.19 14:04 Сейчас в теме
Передо мной стояла задача вывести время двух документов через "-". Должно было получиться, например, "15:08 - 16:05". Выводить необходимо было данные в динамический список, поэтому делать нужно было вычисление этого выражения в запросе. Спасибо большое за идею, но столкнулась с тем, что число в запросе в любом случае округляется по арифметическим правилам, то есть 1,8 = 2 , как ни крути)

Возможно, мой код оказался громоздким, но он работает)

ВЫБОР
	КОГДА ЧАС(ЗаказКлиента.Дата) <= 4
		ТОГДА ПОДСТРОКА("0123456789", ЧАС(ЗаказКлиента.Дата) / 10 + 1, 1)
	ИНАЧЕ ВЫБОР
			КОГДА ЧАС(ЗаказКлиента.Дата) <= 9
				ТОГДА ПОДСТРОКА("0123456789", ЧАС(ЗаказКлиента.Дата) / 10, 1)
			ИНАЧЕ ВЫБОР
					КОГДА ЧАС(ЗаказКлиента.Дата) <= 14
						ТОГДА ПОДСТРОКА("0123456789", ЧАС(ЗаказКлиента.Дата) / 10 + 1, 1)
					ИНАЧЕ ВЫБОР
							КОГДА ЧАС(ЗаказКлиента.Дата) <= 19
								ТОГДА ПОДСТРОКА("0123456789", ЧАС(ЗаказКлиента.Дата) / 10, 1)
							ИНАЧЕ ВЫБОР
									КОГДА ЧАС(ЗаказКлиента.Дата) <= 24
										ТОГДА ПОДСТРОКА("0123456789", ЧАС(ЗаказКлиента.Дата) / 10 + 1, 1)
								КОНЕЦ
						КОНЕЦ
				КОНЕЦ
		КОНЕЦ
КОНЕЦ + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * ЧАС(ЗаказКлиента.Дата))) / 6 + 1, 1) + ":" + ВЫБОР
	КОГДА МИНУТА(ЗаказКлиента.Дата) <= 4
		ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ЗаказКлиента.Дата) / 10 + 1, 1)
	ИНАЧЕ ВЫБОР
			КОГДА МИНУТА(ЗаказКлиента.Дата) <= 9
				ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ЗаказКлиента.Дата) / 10, 1)
			ИНАЧЕ ВЫБОР
					КОГДА МИНУТА(ЗаказКлиента.Дата) <= 14
						ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ЗаказКлиента.Дата) / 10 + 1, 1)
					ИНАЧЕ ВЫБОР
							КОГДА МИНУТА(ЗаказКлиента.Дата) <= 19
								ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ЗаказКлиента.Дата) / 10, 1)
							ИНАЧЕ ВЫБОР
									КОГДА МИНУТА(ЗаказКлиента.Дата) <= 24
										ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ЗаказКлиента.Дата) / 10 + 1, 1)
									ИНАЧЕ ВЫБОР
											КОГДА МИНУТА(ЗаказКлиента.Дата) <= 29
												ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ЗаказКлиента.Дата) / 10, 1)
											ИНАЧЕ ВЫБОР
													КОГДА МИНУТА(ЗаказКлиента.Дата) <= 34
														ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ЗаказКлиента.Дата) / 10 + 1, 1)
													ИНАЧЕ ВЫБОР
															КОГДА МИНУТА(ЗаказКлиента.Дата) <= 39
																ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ЗаказКлиента.Дата) / 10, 1)
															ИНАЧЕ ВЫБОР
																	КОГДА МИНУТА(ЗаказКлиента.Дата) <= 44
																		ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ЗаказКлиента.Дата) / 10 + 1, 1)
																	ИНАЧЕ ВЫБОР
																			КОГДА МИНУТА(ЗаказКлиента.Дата) <= 49
																				ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ЗаказКлиента.Дата) / 10, 1)
																			ИНАЧЕ ВЫБОР
																					КОГДА МИНУТА(ЗаказКлиента.Дата) <= 54
																						ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ЗаказКлиента.Дата) / 10 + 1, 1)
																					ИНАЧЕ ПОДСТРОКА("0123456789", МИНУТА(ЗаказКлиента.Дата) / 10, 1)
																				КОНЕЦ
																		КОНЕЦ
																КОНЕЦ
														КОНЕЦ
												КОНЕЦ
										КОНЕЦ
								КОНЕЦ
						КОНЕЦ
				КОНЕЦ
		КОНЕЦ
КОНЕЦ + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * МИНУТА(ЗаказКлиента.Дата))) / 6 + 1, 1) + " - " + ВЫБОР
	КОГДА ЧАС(ВложенныйЗапрос2.Дата) <= 4
		ТОГДА ПОДСТРОКА("0123456789", ЧАС(ВложенныйЗапрос2.Дата) / 10 + 1, 1)
	ИНАЧЕ ВЫБОР
			КОГДА ЧАС(ВложенныйЗапрос2.Дата) <= 9
				ТОГДА ПОДСТРОКА("0123456789", ЧАС(ВложенныйЗапрос2.Дата) / 10, 1)
			ИНАЧЕ ВЫБОР
					КОГДА ЧАС(ВложенныйЗапрос2.Дата) <= 14
						ТОГДА ПОДСТРОКА("0123456789", ЧАС(ВложенныйЗапрос2.Дата) / 10 + 1, 1)
					ИНАЧЕ ВЫБОР
							КОГДА ЧАС(ВложенныйЗапрос2.Дата) <= 19
								ТОГДА ПОДСТРОКА("0123456789", ЧАС(ВложенныйЗапрос2.Дата) / 10, 1)
							ИНАЧЕ ВЫБОР
									КОГДА ЧАС(ВложенныйЗапрос2.Дата) <= 24
										ТОГДА ПОДСТРОКА("0123456789", ЧАС(ВложенныйЗапрос2.Дата) / 10 + 1, 1)
								КОНЕЦ
						КОНЕЦ
				КОНЕЦ
		КОНЕЦ
КОНЕЦ + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * ЧАС(ВложенныйЗапрос2.Дата))) / 6 + 1, 1) + ":" + ВЫБОР
	КОГДА МИНУТА(ВложенныйЗапрос2.Дата) <= 4
		ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ВложенныйЗапрос2.Дата) / 10 + 1, 1)
	ИНАЧЕ ВЫБОР
			КОГДА МИНУТА(ВложенныйЗапрос2.Дата) <= 9
				ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ВложенныйЗапрос2.Дата) / 10, 1)
			ИНАЧЕ ВЫБОР
					КОГДА МИНУТА(ВложенныйЗапрос2.Дата) <= 14
						ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ВложенныйЗапрос2.Дата) / 10 + 1, 1)
					ИНАЧЕ ВЫБОР
							КОГДА МИНУТА(ВложенныйЗапрос2.Дата) <= 19
								ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ВложенныйЗапрос2.Дата) / 10, 1)
							ИНАЧЕ ВЫБОР
									КОГДА МИНУТА(ВложенныйЗапрос2.Дата) <= 24
										ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ВложенныйЗапрос2.Дата) / 10 + 1, 1)
									ИНАЧЕ ВЫБОР
											КОГДА МИНУТА(ВложенныйЗапрос2.Дата) <= 29
												ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ВложенныйЗапрос2.Дата) / 10, 1)
											ИНАЧЕ ВЫБОР
													КОГДА МИНУТА(ВложенныйЗапрос2.Дата) <= 34
														ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ВложенныйЗапрос2.Дата) / 10 + 1, 1)
													ИНАЧЕ ВЫБОР
															КОГДА МИНУТА(ВложенныйЗапрос2.Дата) <= 39
																ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ВложенныйЗапрос2.Дата) / 10, 1)
															ИНАЧЕ ВЫБОР
																	КОГДА МИНУТА(ВложенныйЗапрос2.Дата) <= 44
																		ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ВложенныйЗапрос2.Дата) / 10 + 1, 1)
																	ИНАЧЕ ВЫБОР
																			КОГДА МИНУТА(ВложенныйЗапрос2.Дата) <= 49
																				ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ВложенныйЗапрос2.Дата) / 10, 1)
																			ИНАЧЕ ВЫБОР
																					КОГДА МИНУТА(ВложенныйЗапрос2.Дата) <= 54
																						ТОГДА ПОДСТРОКА("0123456789", МИНУТА(ВложенныйЗапрос2.Дата) / 10 + 1, 1)
																					ИНАЧЕ ПОДСТРОКА("0123456789", МИНУТА(ВложенныйЗапрос2.Дата) / 10, 1)
																				КОНЕЦ
																		КОНЕЦ
																КОНЕЦ
														КОНЕЦ
												КОНЕЦ
										КОНЕЦ
								КОНЕЦ
						КОНЕЦ
				КОНЕЦ
		КОНЕЦ
КОНЕЦ + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * МИНУТА(ВложенныйЗапрос2.Дата))) / 6 + 1, 1)
Показать
Прикрепленные файлы:
61. ildarovich 6990 29.08.19 15:05 Сейчас в теме
(59) Хочу разобраться: чем не устроил запрос из статьи? Способ округления я учитывал, когда составлял запрос и тестировал подход, но все может быть...
Какая у вас СУБД? Давайте я протестирую свой подход на ваших данных (нужно немного времени). Вообще я против такой громоздкости, даже если она работает.
62. ildarovich 6990 29.08.19 15:59 Сейчас в теме
(59) + (61) Вот запрос с вашими данными
ВЫБРАТЬ ДАТАВРЕМЯ(1, 1, 1, 13, 44, 0) КАК Дата1, ДАТАВРЕМЯ(1, 1, 1, 14, 44, 0) КАК Дата2 ПОМЕСТИТЬ ВТ
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(1, 1, 1, 11, 46, 0) КАК Дата1, ДАТАВРЕМЯ(1, 1, 1, 13, 47, 0) КАК Дата2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(1, 1, 1, 11, 20, 0) КАК Дата1, ДАТАВРЕМЯ(1, 1, 1, 11, 21, 0) КАК Дата2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(1, 1, 1, 09, 25, 0) КАК Дата1, ДАТАВРЕМЯ(1, 1, 1, 11, 57, 0) КАК Дата2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(1, 1, 1, 09, 23, 0) КАК Дата1, ДАТАВРЕМЯ(1, 1, 1, 10, 53, 0) КАК Дата2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(1, 1, 1, 09, 23, 0) КАК Дата1, ДАТАВРЕМЯ(1, 1, 1, 10, 53, 0) КАК Дата2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(1, 1, 1, 18, 09, 0) КАК Дата1, ДАТАВРЕМЯ(1, 1, 1, 18, 13, 0) КАК Дата2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(1, 1, 1, 09, 23, 0) КАК Дата1, ДАТАВРЕМЯ(1, 1, 1, 10, 53, 0) КАК Дата2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(1, 1, 1, 15, 59, 0) КАК Дата1, ДАТАВРЕМЯ(1, 1, 1, 16, 29, 0) КАК Дата2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(1, 1, 1, 15, 51, 0) КАК Дата1, ДАТАВРЕМЯ(1, 1, 1, 15, 58, 0) КАК Дата2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(1, 1, 1, 15, 59, 0) КАК Дата1, ДАТАВРЕМЯ(1, 1, 1, 16, 29, 0) КАК Дата2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(1, 1, 1, 15, 00, 0) КАК Дата1, ДАТАВРЕМЯ(1, 1, 1, 15, 37, 0) КАК Дата2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(1, 1, 1, 14, 44, 0) КАК Дата1, ДАТАВРЕМЯ(1, 1, 1, 14, 59, 0) КАК Дата2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(1, 1, 1, 14, 36, 0) КАК Дата1, ДАТАВРЕМЯ(1, 1, 1, 14, 42, 0) КАК Дата2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(1, 1, 1, 14, 21, 0) КАК Дата1, ДАТАВРЕМЯ(1, 1, 1, 16, 53, 0) КАК Дата2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(1, 1, 1, 13, 40, 0) КАК Дата1, ДАТАВРЕМЯ(1, 1, 1, 13, 41, 0) КАК Дата2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(1, 1, 1, 13, 18, 0) КАК Дата1, ДАТАВРЕМЯ(1, 1, 1, 13, 42, 0) КАК Дата2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(1, 1, 1, 11, 53, 0) КАК Дата1, ДАТАВРЕМЯ(1, 1, 1, 13, 01, 0) КАК Дата2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДАТАВРЕМЯ(1, 1, 1, 11, 07, 0) КАК Дата1, ДАТАВРЕМЯ(1, 1, 1, 11, 31, 0) КАК Дата2
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПОДСТРОКА("0123456789", ЧАС(ВТ.Дата1) / 10 + 1, 1) 
	+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * ЧАС(ВТ.Дата1))) / 6 + 1, 1) 
	+ ":" + ПОДСТРОКА("0123456789", МИНУТА(ВТ.Дата1) / 10 + 1, 1) 
	+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * МИНУТА(ВТ.Дата1))) / 6 + 1, 1) 
	+ "-" 
	+ ПОДСТРОКА("0123456789", ЧАС(ВТ.Дата2) / 10 + 1, 1) 
	+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * ЧАС(ВТ.Дата2))) / 6 + 1, 1) 
	+ ":" + ПОДСТРОКА("0123456789", МИНУТА(ВТ.Дата2) / 10 + 1, 1) 
	+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * МИНУТА(ВТ.Дата2))) / 6 + 1, 1) КАК Строка
ИЗ
	ВТ КАК ВТ
Показать
Прикрепленные файлы:
64. Aleks9111 29.10.19 19:26 Сейчас в теме
Публикация скоро 5-и летний юбилей будет праздновать.. а мы до сих пор обкладываемся костылями чтобы преобразовать число или дату в строку. Отстаем, лет на 20
65. _Sedoy 25.11.19 17:19 Сейчас в теме
Может я что-то не понимаю, но...
Функция ПРЕДСТАВЛЕНИЕ
Данная функция предназначена для получения строкового представления значения произвольного типа.

Параметр функции – выражение любого типа.

Возвращаемое значение – представление значения, тип СТРОКА.

Результат работы функции не может быть использован внутри других функций, за исключением функции ПРЕДСТАВЛЕНИЕ.

Пример:
ВЫБРАТЬ
   ПРЕДСТАВЛЕНИЕ(РасхНакл.Получатель) КАК ПолучательСтрокой,
   ПРЕДСТАВЛЕНИЕ(РасхНакл.Дата) КАК ДатаСтрокой
ИЗ
   Документ.РасхНакл КАК РасхНакл
66. PolSerg 11.02.20 12:03 Сейчас в теме
Промучавшись с этим решением понял что проблемы математического округления возникают при делении получившегося числа на 6, вот код который верно отрабатывает:

ВЫБРАТЬ
    ПОДСТРОКА(Ц, &Число / 10000000 + 1, 1) 
    + ПОДСТРОКА(Ц, выразить(СЕКУНДА(ДОБАВИТЬКДАТЕ(О, СЕКУНДА, &Число * 0.000006)) / 6-0.4999999999 + 1 как число(1,0)), 1)
    + ПОДСТРОКА(Ц, выразить(СЕКУНДА(ДОБАВИТЬКДАТЕ(О, СЕКУНДА, &Число * 0.00006)) / 6-0.4999999999 + 1 как число(1,0)), 1)
    + ПОДСТРОКА(Ц, выразить(СЕКУНДА(ДОБАВИТЬКДАТЕ(О, СЕКУНДА, &Число * 0.0006)) / 6-0.4999999999 + 1 как число(1,0)), 1)
    + ПОДСТРОКА(Ц, выразить(СЕКУНДА(ДОБАВИТЬКДАТЕ(О, СЕКУНДА, &Число * 0.006)) / 6-0.4999999999 + 1 как число(1,0)), 1)
    + ПОДСТРОКА(Ц, выразить(СЕКУНДА(ДОБАВИТЬКДАТЕ(О, СЕКУНДА, &Число * 0.06)) / 6-0.4999999999 + 1 как число(1,0)), 1)
    + ПОДСТРОКА(Ц, выразить(СЕКУНДА(ДОБАВИТЬКДАТЕ(О, СЕКУНДА, &Число * 0.6)) / 6-0.4999999999 + 1 как число(1,0)), 1)
    + ПОДСТРОКА(Ц, выразить(СЕКУНДА(ДОБАВИТЬКДАТЕ(О, СЕКУНДА, &Число * 6)) / 6-0.4999999999 + 1 как число(1,0)), 1)
    + "." 
    + ПОДСТРОКА(Ц, выразить(СЕКУНДА(ДОБАВИТЬКДАТЕ(О, СЕКУНДА, &Число * 60)) / 6-0.4999999999 + 1 как число(1,0)), 1)
    + ПОДСТРОКА(Ц, выразить(СЕКУНДА(ДОБАВИТЬКДАТЕ(О, СЕКУНДА, &Число * 600)) / 6-0.4999999999 + 1 как число(1,0)), 1)
ИЗ (ВЫБРАТЬ "0123456789" Ц, ДАТАВРЕМЯ(1, 1, 1) О) КАК Константы
Показать
67. mark_oilbass 25.03.20 08:58 Сейчас в теме
Есть у кого нибудь пример текста запроса в случаи если число используется с 14 цифрами?
68. Rusel 26.03.20 14:29 Сейчас в теме
Запрос выдаёт разные результаты в зависимости от используемой СУБД.

На файловой и MSSQL результат всегда правильный.
На PostgreSQL иногда правильный, иногда неправильный.
Создал обработку для проверки правильности — см. прикреплена.

Например, в PostgreSQL дата 25.08.2019 выводится как "35.18.2029", а 03.01.2020 выводится правильно как "03.01.2020".
Версия PostgreSQL 9.4.2-1.1C(x64)
Возможно, в новой версии PostgreSQL поведение другое, не проверял.

Пример запроса:

ВЫБРАТЬ
    Т.Дата КАК Дата,
    ПОДСТРОКА("0123456789", Т.ДД / 10 + 1, 1) 
        + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * Т.ДД)) / 6 + 1, 1) 
        + "." 
        + ПОДСТРОКА("0123456789", Т.ММ / 10 + 1, 1) 
        + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * Т.ММ)) / 6 + 1, 1) 
        + "." 
        + ПОДСТРОКА("0123456789", Т.ГГ / 1000 + 1, 1) 
        + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, Т.ГГ * 0.06)) / 6 + 1, 1) 
        + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, Т.ГГ * 0.6)) / 6 + 1, 1) 
        + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, Т.ГГ * 6)) / 6 + 1, 1) КАК ДатаСтрокой
ИЗ
    (ВЫБРАТЬ ДАТАВРЕМЯ(2019, 8, 1) КАК Дата, 2019 КАК ГГ, 8 КАК ММ, 1 КАК ДД
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8,  2), 2019,  8,  2
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8,  3), 2019,  8,  3
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8,  4), 2019,  8,  4
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8,  5), 2019,  8,  5
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8,  6), 2019,  8,  6
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8,  7), 2019,  8,  7
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8,  8), 2019,  8,  8
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8,  9), 2019,  8,  9
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 10), 2019,  8, 10
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 11), 2019,  8, 11
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 12), 2019,  8, 12
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 13), 2019,  8, 13
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 14), 2019,  8, 14
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 15), 2019,  8, 15
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 16), 2019,  8, 16
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 17), 2019,  8, 17
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 18), 2019,  8, 18
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 19), 2019,  8, 19
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 20), 2019,  8, 20
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 21), 2019,  8, 21
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 22), 2019,  8, 22
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 23), 2019,  8, 23
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 24), 2019,  8, 24
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 25), 2019,  8, 25
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 26), 2019,  8, 26
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 27), 2019,  8, 27
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 28), 2019,  8, 28
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 29), 2019,  8, 29
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 30), 2019,  8, 30
    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2019,  8, 31), 2019,  8, 31) КАК Т
Показать
Прикрепленные файлы:
ПроверкаПреобразованияДатыВСтрокуВЗапросе.epf
Оставьте свое сообщение

См. также

3 онлайн-курса по 1С-программированию: обмен данными, расчетные задачи и бухгалтерские задачи с 12 мая по 8 июля 2020 г. Промо

Практика программирования v8 Бесплатно (free)

Пакет из 3-х курсов по 1С-программированию. Основная цель - сформировать у слушателей практические навыки, связанные с реализацией задач обмена для прикладных решений, работающих на платформе “1С:Предприятие”, а также с разработкой прикладных решений, предназначенных для автоматизации расчета заработной платы и задач бухгалтерского учета.

15300 руб.

22.04.2020    2915    23    2    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    14276    0    ids79    26    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    14991    0    John_d    22    

Последовательности событий. Шпаргалка

Практика программирования v8 Россия Бесплатно (free)

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    10237    0    kuzyara    33    

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    33944    0    unichkin    45    

30 задач. Странных и не очень

Практика программирования v8 Бесплатно (free)

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    12539    0    YPermitin    72    

Таблица значений. Нюансы

Практика программирования v8 Бесплатно (free)

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019    24770    0    Yashazz    44    

[Шпаргалка] Программное создание элементов формы

Практика программирования Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Программное создание практически всех популярных элементов формы.

06.09.2019    33960    0    rpgshnik    59    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    25885    0    tormozit    100    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    36149    0    ids79    52    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    21122    0    YPermitin    24    

Три костыля. Сказ про фокусы в коде

Практика программирования v8 Бесплатно (free)

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    21581    0    YPermitin    80    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.

20.09.2012    73425    0    tormozit    129    

Отслеживание выполнения фонового задания

Практика программирования Универсальные функции Разработка v8 1cv8.cf Бесплатно (free)

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    25273    0    ids79    16    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    54350    0    ids79    36    

Фоновое выполнение кода в 1С - это просто

Практика программирования v8 1cv8.cf Бесплатно (free)

Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.

02.08.2019    25911    0    avalakh    21    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    44556    0    tormozit    38    

Разбираемся с параметрами редактирования СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Связь по типу, Параметры выбора, Связи параметров выбора

31.07.2019    16681    0    json    12    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    41225    0    ids79    11    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    27989    0    ids79    27    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    40261    0    tormozit    72    

Регистры сведений. За кулисами

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    21136    0    YPermitin    13    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования Разработка v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    16343    0    SeiOkami    50    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    41568    0    ids79    17    

Выгрузка документа по условию Промо

Практика программирования Разработка v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    13983    0    m-rv    2    

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Практика программирования Производительность и оптимизация (HighLoad) v8 v8::Запросы Бесплатно (free)

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    21188    0    dmurk    144    

Регистры накопления. Структура хранения в базе данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    34909    0    YPermitin    30    

Выполнение внешней обработки в фоновом задании

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    23876    0    Eret1k    23    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

... и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.

16.04.2019    17567    0    m-rv    17    

О расширениях замолвите слово...

Практика программирования Разработка v8 Бесплатно (free)

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    28844    0    ellavs    126    

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

Практика программирования Разработка v8 Бесплатно (free)

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    22787    0    ellavs    86    

Трюки с внешними источниками данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    25929    0    YPermitin    53    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    27248    0    m-rv    21    

Разработка и сценарное тестирование с Vanessa-ADD. Отчетность Allure. Автоматизация запуска сценариев

Практика программирования Разработка v8 Россия Бесплатно (free)

Формируем отчетность о результатах выполнения сценариев. Автоматизируем запуск.

26.02.2019    18015    0    Vladimir Litvinenko    27    

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

Практика программирования БСП (Библиотека стандартных подсистем) Роли и права v8 v8::Права Бесплатно (free)

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    30837    0    ids79    9    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Вариант решения задач с проведением по типовым регистрам нетиповыми регистраторами. Зачем - чтобы при сравнении конфигурации не обращать внимание на свойства регистров и исключить вероятность допущения горькой оплошности при обновлении информационных баз, заменив типы регистраторов основной конфигурации типами конфигурации поставщика. Для программных продуктов, имеющих в своем составе метаданных документ "Корректировка регистров"("Корректировка записей регистров").

05.12.2017    25545    0    itriot11    34    

EnterpriseData – часть 2. Процесс выгрузки данных

Практика программирования Обмен через XML v8 v8::УФ Россия Бесплатно (free)

Основные этапы выгрузки данных через ED, обработчики событий выгрузки, правила обработки данных, правила конвертации объектов, конвертация свойств первого и второго этапов, процедуры БСП, используемые при выгрузке данных, структура «КомпонентыОбмена».

26.12.2018    22530    0    ids79    31    

Новый подход к обмену данными EnterpriseData

Практика программирования Обмен через XML v8 v8::УФ Россия Бесплатно (free)

Хочу предложить Вашему вниманию цикл статей, посвященных обмену данными через универсальный формат (EnterpriseData или ED).

14.12.2018    34554    0    ids79    72    

EnterpriseData - пример доработки правил конвертации без использования КД 3.0 в расширении конфигурации

Практика программирования Обмен через XML v8 v8::УФ БП3.0 УТ11 Россия Бесплатно (free)

В статье подробно описан реальный пример доработки обмена данными через EnterpriseData (универсальный формат обмена) между конфигурациями УТ 11.4 и Бухгалтерия 3.0

16.11.2018    31284    0    ids79    32    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    70574    0    Serginio    108    

Программное заполнение пользовательских параметров и отборов СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Публикация представляет из себя краткие примеры того, как можно заполнять параметры СКД программно так, чтобы все параметры и отборы были доступны в быстрых настройках и в обычных (типовых) настройках параметров и отборов СКД.

13.11.2018    36689    0    Unk92    19    

Как я делал таймер обратного отсчета в динамическом списке на старой платформе

Практика программирования v8 1cv8.cf Бесплатно (free)

В данной статье пойдет речь о том, как на практике я реализовал колонку с обратным отсчетом времени без использования обработчика "ПриПолученииДанныхНаСервере". Платформа в режиме совместимости 8.3.1, управляемые формы (не Такси).

07.11.2018    5470    0    axelerleo    3    

Произвольный код в фоновом режиме

Практика программирования v8 1cv8.cf Бесплатно (free)

Задача: реализовать выполнение произвольного кода в фоновом режиме без изменения конфигурации, т.е. во внешней обработке.

03.09.2018    23580    0    nikita0832    42    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    30263    0    ids79    40    

Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C

Математика и алгоритмы Практика программирования v8 Россия Бесплатно (free)

У многих начинающих 1С программистов часто возникают вопросы про клиент-серверное взаимодействие в 1С и чтобы разобраться в непростых механизмах платформы, необходимо понять, что же такое контекст, для чего предназначены директивы компиляции, что представляют собой контекстные/внеконтекстные вызовы и как наиболее оптимально описывать прикладные задачи в модулях управляемых форм.

23.08.2018    34504    0    Rain88    46    

Работаем с дополнительными реквизитами на форме

Практика программирования v8 Бесплатно (free)

Пара полезных процедур для работы с дополнительными реквизитами на форме. Далее в статье: 1. Как называются дополнительные реквизиты на форме и в какой момент они появляются на форме? 2. Как проверить до записи корректность заполнения пользователем дополнительного реквизита? 3. Как заполнить значение дополнительного реквизита по другому событию и обновить данные на форме? 4. Как расположить дополнительный реквизит в указанном месте на форме?

15.07.2018    28866    0    papche    37    

Повышаем эффективность разработки правил обмена

Практика программирования Перенос данных из 1C8 в 1C8 v8 КД Бесплатно (free)

Как повысить скорость и качество разработки правил обмена? Как вести групповую разработку правил обмена? Как облегчить сопровождение правил обмена после передачи в эксплуатацию? Об этом и многом другом вы можете узнать из этой статьи.

25.06.2018    25940    0    olegtymko    47    

Тестер: частые вопросы Промо

Практика программирования v8 Бесплатно (free)

Ошибкам бой - тесты норма жизни!

25.07.2018    26098    0    grumagargler    26    

Введение в механизм представлений в ЗУП ред. 3

Практика программирования v8 v8::СПР ЗУП3.x Бесплатно (free)

В нашей организации на первом же телефонном собеседовании на должность разработчика по ЗУП ред. 3 вас обязательно спросят о том, что такое "Представления".

04.06.2018    33739    0    xrrg    82    

Строим графы средствами 1С (без GraphViz)

Практика программирования v8 Бесплатно (free)

Множество статей на Инфостарте описывают, как работать с компонентой GraphViz, чтобы построить ориентированный граф. Но практически нет материалов, как работать с такими графами средствами 1С. Сегодня я расскажу, как красиво строить графы с минимальным пересечением. Нам этот метод пригодился для отрисовки алгоритмов в БИТ.Финансе, т.к. типовой механизм не устраивал. Еще это может быть полезно для визуализации различных зависимостей: расчета себестоимости, графы аффилированности компаний и т.д. Надеюсь, эта статья поможет сделать мир 1С красивее и гармоничней:) Итак, поехали...

23.05.2018    22777    0    slozhenikin_com    20    

Распределение расходов пропорционально продажам

Финансовый учет и бюджетирование (FRP) Учет доходов и расходов Практика программирования Финансовый учет и бюджетирование (FRP) Учет доходов и расходов v8 v8::ОУ УТ10 УУ Бесплатно (free)

Финансовая модель. Распределение административных расходов по подразделениям пропорционально продажам за месяц. Дополнительные реквизиты против бизнес-процессов!

13.05.2018    16897    0    Rustig    9    

Просмотр временных таблиц запроса в отладчике без изменения кода

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

Данный способ можно использовать для просмотра содержимого временных таблиц запросов (менеджеров временных таблиц) без внесения изменений в код.

24.04.2018    42122    0    avfed@rambler.ru    26