|
Почему в запросах следует использовать Границу вместо Даты? | ☑ | ||
---|---|---|---|---|
0
ivanovnm
11.11.13
✎
12:05
|
В одной из организаций местный РП меня отчитал: "Мы в запросах используем только границы, почему вы в запросе используете даты?". Запрос был в СКД.
Заказчики у организации именитые, соответственно кодеры должны быть знающие опытные. Оттуда я уже ушел, но этот вопрос до сих пор не дает покоя. В яндексах-гуглах ничего похожего нет. Может кто-то в курсе, объяснит причину отказа от использования тип "Дата" в запросах? |
|||
1
mikecool
11.11.13
✎
12:06
|
с таким стажем и не читаем доки?
|
|||
2
Ненавижу 1С
гуру
11.11.13
✎
12:07
|
потому что 1С выдумала столько дивных велосипедов с квадратными колесами
серьезно: движок 1С не умеет правильно определять остатки на момент времени документа в пределах одной секунды по дате |
|||
3
ivanovnm
11.11.13
✎
12:07
|
(1) Читаем, но видимо пропускаем. Ткните носом.
|
|||
4
ivanovnm
11.11.13
✎
12:08
|
Отчет был в СКД, получались остатки за месяц.
|
|||
5
Никола_
Питерский 11.11.13
✎
12:09
|
Включите кто ни будь вентилятор, хороший вброс (2) )))
|
|||
6
H A D G E H O G s
11.11.13
✎
12:09
|
Потому что 1С дает инструменты на все случаи жизни.
|
|||
7
H A D G E H O G s
11.11.13
✎
12:09
|
(5) Он просто издалека.
|
|||
8
Зойч
11.11.13
✎
12:11
|
Вопрос из серии: нужно ли подставлять в процедуру значения параметров, если мы хотим использовать значения по умолчанию
|
|||
9
Aleksey
11.11.13
✎
12:11
|
(0) Потому что в 7-ке было рассчитать итоги НА и ПО, здесь такого нет, и чтобы 1С смогла понять включать ли остатки (по) или не включать (на) и юзают границы
|
|||
10
Aleksey
11.11.13
✎
12:12
|
(8) Почему? Ответ не очиведен
|
|||
11
ivanovnm
11.11.13
✎
12:13
|
(9) Если я хочу получить остатки на 01.01.2013 00:00:00, я указываю дату 01.01.2013 00:00:00, если по - 01.01.2013 00:00:01. Можно прекрасно обходиться типом Дата.
|
|||
12
Classic
11.11.13
✎
12:13
|
(0)
Не представляю себе, зачем в СКД нужны границы. При проведении/заполнении документа они нужны. В отчете... |
|||
14
ivanovnm
11.11.13
✎
12:14
|
(12) Вот вот
|
|||
15
Classic
11.11.13
✎
12:15
|
(9)
Так в семерке все доки в одной таблице валялись - можно спокойно было определить порядок документов. В восьмерке это уже проблематичней |
|||
16
Fish
11.11.13
✎
12:16
|
(13) Потому что надо читать СП: "Для значений типа Булево всегда возвращается Истина." :)
|
|||
17
Maxus43
11.11.13
✎
12:17
|
(0) >>местный РП меня отчитал
как РП может и ничего, а так наслушался кодеров и думает что умный. Никто никогда не говорил что следует использовать её... она используется когда надо, а не везде. Если они тыкают везде границу - то контора быдлокодеров это, только и всего |
|||
18
Classic
11.11.13
✎
12:18
|
(13)
И хорошо :) |
|||
19
skunk
11.11.13
✎
12:18
|
(12)привычка хуже пистолета ... показали одиэснику про границы ... вот он и шлет эти границы туда куда надо и не надо
|
|||
20
ivanovnm
11.11.13
✎
12:19
|
(6) Микроскоп - не для забивания гвоздей
|
|||
21
Classic
11.11.13
✎
12:19
|
(17)
Угу. Наверняка просто раз столкнулся с необходимостью использования границы (в документе скорее всего) - и все, он обладает тайным знанием про то, что даты - это фигня. Границы - наше фсьо |
|||
22
Зойч
11.11.13
✎
12:19
|
(17) У конторы есть стандарты и они их придерживаются. А тут пришел х@р с горы и заявляет что будет писать как он хочет
|
|||
23
Classic
11.11.13
✎
12:21
|
(22)
РП? :) |
|||
24
Тролль главный
11.11.13
✎
12:21
|
(16) странный ответ
|
|||
25
Maxus43
11.11.13
✎
12:22
|
(22) стандарты это хорошо, но пихать границу в каждую щель - хреновый стандарт.
Дак слова то ещё умные, "Мы в запросах используем только границы" :) клиентам же по ушам этим ездит, а проги ржут после этого, и над РП, и над заказчиком, и над проами с такими стандартами |
|||
26
Бледно Золотистый
11.11.13
✎
12:22
|
(24) Чего странного?
|
|||
27
Зойч
11.11.13
✎
12:26
|
(23) Что РП? кто то же должен проверять. Для маленьких команд вполне может и рп
|
|||
28
Тролль главный
11.11.13
✎
12:26
|
(26)было бы странно, если бы в СП было написано по-другому
это все равно, что: "почему Земля притягивает предметы?" "так в книжке написано" |
|||
29
ИсчадиеADO
11.11.13
✎
12:27
|
(27) палишься :)
|
|||
30
ИсчадиеADO
11.11.13
✎
12:28
|
а чо, рп разве может быть не прогом?
|
|||
31
Classic
11.11.13
✎
12:29
|
(28)
Скажем так. Хорошо, что ЗначениеЗаполнено(Ложь) = Истина. Хотя с точки зрения хранения данных это странно |
|||
32
Classic
11.11.13
✎
12:29
|
(30)
Конечно. Правда чаще РП - просто паршивый прог, но и непрогом он тоже может быть |
|||
33
Зойч
11.11.13
✎
12:30
|
(30) чтоб следить за стандартами особой квалификации не надо
|
|||
34
Нуф-Нуф
11.11.13
✎
12:32
|
ну когда нужен остаток на конец месяца - нужно использовать границу
|
|||
35
ИсчадиеADO
11.11.13
✎
12:32
|
(32) жесть какая...
а тут еще Рому Печенкина ругают... (34) обычно в скд пишут ДобавитьКДате(&КонМесяца, Секунда,1) |
|||
36
Нуф-Нуф
11.11.13
✎
12:34
|
(35) чет гамнокодом попахивает
|
|||
37
Зойч
11.11.13
✎
12:34
|
(35) быдлокод
|
|||
38
Джинн
11.11.13
✎
12:34
|
(35) Обычно в СКД применяют стандартный период и не занимаются извращениями
|
|||
39
Classic
11.11.13
✎
12:36
|
(36)(37)
Слет РПшников-стандартистов? |
|||
40
ИсчадиеADO
11.11.13
✎
12:41
|
(38) стандартный период - это отлично, но в некоторых задачах сам период может быть расчетным
|
|||
41
Пол Ньюман
11.11.13
✎
12:45
|
Прочитал 40 ответов, так и не понял в каких случаях нужно применять границу, а в каких достаточно даты. Например для регистра накопления, таблицы ОстаткиОбороты
|
|||
42
Zifgif
11.11.13
✎
12:47
|
(0)Граница была актуальна 8.1 и кодеры которые ее любят явно воспитывались до версии 8.2. В Версии 8.2 В СКД понятия границы нету вообще (Закладка "параметры"), поэтмоу я вообще отказлся от использования границы. Если нужны остатки на 23:59:59 Берешь на секунду раньше, то есть начало следующего дня. и все! НО! ПОМНИ , ЧТО В Оборотных регистрах секунда уже включает все записи. т.е. в оборотном дата с 23:59:59 - возьмет все записи
|
|||
43
Тролль главный
11.11.13
✎
12:48
|
ИМХО в СКД для остаков и/или оборотов достаточно КОНЕЦПЕРИОДА()
|
|||
44
Classic
11.11.13
✎
12:49
|
(41)
Да все просто. В ВТшках действуют такие правила Остатки() - по умолчанию вид границы Исключая Обороты, ОстаткиИОбороты - вид границы Включая Вариантов когда данные принципы не совпадают с требованиями в отчетах не очень часты. Остатки на конец месяца как правило без оборотов не нужны, в таких случая обычно оперирут понятиям остатки на начало месяца Остатки на начало конца периода оборотов нужны еще реже. Обычно подобные траболы возникают когда начинаешь делать объединения/соединения разных типов ВТ. Тогда надо аккуратно смотреть. Но и в таком случае ДОБАВИТЬКДАТЕ куда читабельней, чем два разных параметра |
|||
45
skunk
11.11.13
✎
12:50
|
(41)надо не для регистров смотреть ... а по ситуации .. в отчетах границу использовать моветон, там лучшее дата ... в модулях проведения документов скорее наоборот
|
|||
46
педальный трактор
11.11.13
✎
12:50
|
(43) Не работает если документы записаны на 23:59:59
|
|||
47
Аденэсниг
11.11.13
✎
12:50
|
>= не равно >
|
|||
48
ИсчадиеADO
11.11.13
✎
12:51
|
(43) нет, для остатков нет, для оборотов да
|
|||
49
Нуф-Нуф
11.11.13
✎
12:53
|
Внимание. Результаты тестов.
Запрос: ВЫБРАТЬ ТоварыНаСкладахОстатки.Склад КАК Склад1, ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура1, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры1, ТоварыНаСкладахОстатки.СерияНоменклатуры КАК СерияНоменклатуры1, ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток1 {ВЫБРАТЬ Склад1.*, Номенклатура1.*, ХарактеристикаНоменклатуры1.*, СерияНоменклатуры1.*, КоличествоОстаток1} ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&ВотТутБудутРазныеПериоды, ) КАК ТоварыНаСкладахОстатки ГДЕ ТоварыНаСкладахОстатки.Склад = &Склад И ТоварыНаСкладахОстатки.Номенклатура = &Номенклатура Запрос был выполнен 4 раза, где в качестве параметра ВотТутБудутРазные передавались следующие значения: 1. Дата 10.11.2013 23:59:59 2. КонецПериода(10.11.2013 23:59:59) 3. СтандартныйПериод.ДатаОкончания, где дата окончания = 10.11.2013 4. ГраницаВключая на основе даты 10.11.2013 23:59:59 В базе есть движение регистра сделанное с периодом 10.11.2013 23:59:59 Так вот. Верные остатки будут только в варианте 4 |
|||
50
Нуф-Нуф
11.11.13
✎
12:57
|
лично у меня функция общего модуля, которая возвращает границе по дате. в выражения параметров удобно использовать следующее ОбщийМодульСКД.КонецПериода(&ПериодОтчета, "День")
|
|||
51
Поросенок Петр
11.11.13
✎
12:58
|
Ба! Сколько капитанов очевидности в ветке! Целый офицерский корпус.
|
|||
52
azernot
11.11.13
✎
12:58
|
Виртуальная таблица Остатки выдаёт данные на дату не включительно. Т.е. Остатки на 10.11.2013 23:59:59 не будут включать движения за 10.11.2013 23:59:59.
Виртуальная таблица ОстаткиИОбороты выдаёт даные по дату включительно, те конечный остаток на 10.11.2013 23:59:59 будет включать движения за 10.11.2013 23:59:59. |
|||
53
ivanovnm
11.11.13
✎
12:59
|
(49) А вариант 11.11.2013 00:00:00 чем не нравится?
|
|||
54
Тролль главный
11.11.13
✎
13:00
|
(46)(48) в СКД? значит книжка врёт
|
|||
55
Нуф-Нуф
11.11.13
✎
13:00
|
держите. бесплатно.
Функция КонецПериода(Дата, Период) Экспорт Период = ВРег(Период); Если Период = "МИНУТА" Тогда Возврат Новый Граница(КонецМинуты(Дата), ВидГраницы.Включая); ИначеЕсли Период = "ЧАС" Тогда Возврат Новый Граница(КонецЧаса(Дата), ВидГраницы.Включая); ИначеЕсли Период = "ДЕНЬ" Тогда Возврат Новый Граница(КонецДня(Дата), ВидГраницы.Включая); ИначеЕсли Период = "НЕДЕЛЯ" Тогда Возврат Новый Граница(КонецНедели(Дата), ВидГраницы.Включая); ИначеЕсли Период = "МЕСЯЦ" Тогда Возврат Новый Граница(КонецМесяца(Дата), ВидГраницы.Включая); ИначеЕсли Период = "КВАРТАЛ" Тогда Возврат Новый Граница(КонецКвартала(Дата), ВидГраницы.Включая); ИначеЕсли Период = "ГОД" Тогда Возврат Новый Граница(КонецГода(Дата), ВидГраницы.Включая); Иначе Возврат Дата; КонецЕсли; КонецФункции |
|||
56
Нуф-Нуф
11.11.13
✎
13:01
|
(53) просто не гуд
|
|||
57
ivanovnm
11.11.13
✎
13:02
|
(56) почему?
|
|||
58
Нуф-Нуф
11.11.13
✎
13:03
|
(57) потому что (с)
|
|||
59
ivanovnm
11.11.13
✎
13:04
|
(58) тут и не поспоришь
|
|||
60
Нуф-Нуф
11.11.13
✎
13:04
|
(60) ато! ))))
|
|||
61
Поросенок Петр
11.11.13
✎
13:05
|
(55) Функция, возвращающая разные типы. Фу.
|
|||
62
ivanovnm
11.11.13
✎
13:05
|
(60) как будто в ту контору вернулся :)
|
|||
63
Нуф-Нуф
11.11.13
✎
13:08
|
используйте границы, будьте мужиками, блеать!
|
|||
64
Romich1981
11.11.13
✎
13:09
|
(49) +1
|
|||
65
Тролль главный
11.11.13
✎
13:09
|
(63) убедил, даешь единоообразие!
|
|||
66
Поросенок Петр
11.11.13
✎
13:13
|
Ну и собственно, как обычно. Три стадии специалиста:
1. Не знает про функционал/подход и не использует его где нужно. 2. Узнал про функционал/подход и теперь суёт его куда надо и куда не надо. В особо запущенных случаях везде его пропагандирует. 3. Использует функционал/подход именно там, где он нужен. В любой срачевой ветке про кодинг прослеживается эта закономерность. Про СКД, БСП, временные таблицы и т.п. |
|||
67
Нууф-Нууф
11.11.13
✎
13:21
|
(66) намек понятен )))
тогда как спец 3го уровня скажи, когда нужно использовать границу, а когда ДобавитьВремя? |
|||
68
Classic
11.11.13
✎
13:28
|
(67)
При правильно рассчитанных остатках граница без момента времени не нужна вообще. |
|||
69
Поросенок Петр
11.11.13
✎
13:28
|
(67) Тыща раз тут уже озвучили. Вирт таблица оборотов второй параметр типа Дата по-умолчанию приводит к границе включая. А добавлять секунду это, от незнания границ вообще такое можно придумать.
|
|||
70
Нууф-Нууф
11.11.13
✎
13:32
|
(69) про обороты в курсе. я про виртуальную таблицу остатки говорил
|
|||
71
Нууф-Нууф
11.11.13
✎
13:33
|
(68) а что есть правильно рассчитанные остатки?
|
|||
72
Пол Ньюман
11.11.13
✎
13:36
|
Правильно я понимаю? Для остатков и оборотов лучше указывать Границу ключая, иначе не попадут записи последней секунды?
|
|||
73
Classic
11.11.13
✎
13:36
|
(71)
? Они обычно правильно рассчитаны. При неправильно рассчитанных остатках остаток на конец периода не совпадает с остатком на начало следующего. Иногда для нахождения подобного бага ГРАНИЦА в запросе не помешает. В остальных случаях - граница избыточное зло. |
|||
74
Classic
11.11.13
✎
13:37
|
(72)
для оборотов и так по-умолчанию ВКЛЮЧАЯ Для остатков надо определиться, вы остатки на начало хотите или на конец |
|||
75
Тролль главный
11.11.13
✎
13:38
|
(69) а зачем помнить тут так, а тут этак, надо единообразно
|
|||
76
Пол Ньюман
11.11.13
✎
13:39
|
(74) Например в ОстаткиОбороты получаю остатки по периодам на начало и конец.
|
|||
77
Classic
11.11.13
✎
13:40
|
В ОстаткиИОбороты по умолчанию граница ВКЛЮЧАЯ
|
|||
78
Classic
11.11.13
✎
13:40
|
(77)
Начальный исключая, конечный - включая. В общем все с логикой совпадает :) |
|||
79
Нууф-Нууф
11.11.13
✎
13:48
|
(73) т.е. ты за "ДобавитьКДате"?
|
|||
80
Нууф-Нууф
11.11.13
✎
13:49
|
и где же специалист 3го уровня...
|
|||
81
Поросенок Петр
11.11.13
✎
13:51
|
Ужо разжовано всё сто раз.
|
|||
82
Classic
11.11.13
✎
13:54
|
(79)
Да. В отчетах конечно. Когда одним из периодов становится документ - здесь рисуется совсем другая история. А в отчетах - ДОБАВИТЬКДАТЕ. Нефиг устраивать зоопарк параметров, для каждого из которых надо помнить, а что за граница у него. |
|||
83
Поросенок Петр
11.11.13
✎
13:55
|
+(81)
Непосредственное указание границы чаще всего необходимо в тех случаях, когда мы получаем остатки на конец периода через ВТ "Остатки". Всё. Остальное использование границ оправдано при использовании вместе с моментом времени документа. (82) А тут не соглашусь. |
|||
84
ivanovnm
11.11.13
✎
14:02
|
(83) А тут не соглашусь. Чем Граница.Включая на 01.01.2013 23:59:59 лучше чем Дата 02.01.2013 00:00:00?
|
|||
85
Нуф-Нуф
11.11.13
✎
14:07
|
(84) потому что если в скд у тебя несколько разных запросов, и остатки и остаткиИобороты, то ты будет конфуз
|
|||
86
Classic
11.11.13
✎
14:14
|
(85)
С ДОБАВИТЬКДАТЕ не будет, а с границами - вполне возможно. поскольку логика сразу разлетается по разным местам |
|||
87
ivanovnm
11.11.13
✎
14:14
|
(85) Конфуз будет если будет граница - ее нельзя перевести в дату, а с датой наоборот никакого конфуза не возникнет
|
|||
88
Зойч
11.11.13
✎
14:15
|
(87) зачем границу в дату переводить?
|
|||
89
Classic
11.11.13
✎
14:17
|
(88)
Простейший пример - в Оборотах с периодичностью ДЕНЬ считать количество дней с начала периода. Для этих целей еще один параметр заводить? |
|||
90
ivanovnm
11.11.13
✎
14:23
|
(88) Допустим нужны обороты за период из регистра остатков и состояние на окончание периода из регистра состояния. Если конец периода задать как границу, то ни правильного состояния не получить, ни рассчитать не получится.
|
|||
91
sanja26
11.11.13
✎
14:28
|
Кто получает в отчетах остатки на границу??
Я за добавить к дате |
|||
92
Classic
11.11.13
✎
14:29
|
Давайте голосовалку
|
|||
93
ivanovnm
11.11.13
✎
14:32
|
(92) В этой теме можно сделать?
|
|||
94
Нуф-Нуф
11.11.13
✎
14:33
|
(86) наоборот. объявил границу в параметрах и юзай ее во всех запросах СКД (остатках и остаткиИоборотах), а если использовать просто дату, то в одном месте придется использовать дату, а в другом добавлять секунду
|
|||
95
Нуф-Нуф
11.11.13
✎
14:33
|
(93) добавь голосовалку, будь мужиком, блеать!
|
|||
96
milan
11.11.13
✎
14:38
|
Может РП имел ввиду то, что периоды отчета надо вводить через реквизит с типом "стандартный период" и выставлять параметры ВТ через значения его границ ?
|
|||
97
Classic
11.11.13
✎
14:38
|
(94)
Во всех? В одном тебе надо ВКЛЮЧАЯ, в другом - ИСКЛЮЧАЯ и каждый раз надо смотреть, как какой параметр заполнили в где-то в модуле отчета. А так знаешь, что Остатки - всегда исключая и не паришься - анализируешь только текст запроса. С одной переменной/параметром, которая означает ОкончаниеПериода |
|||
98
ivanovnm
11.11.13
✎
14:40
|
(96) через значения его реквизитов, а при чем тут границы?
|
|||
99
sanja26
11.11.13
✎
14:46
|
хотя если параметр выводить в шапку отчета, то при ДобавитьКДате() будет не та дата на виду у пользователя. в такой ситуации можно и границу
|
|||
100
milan
11.11.13
✎
14:46
|
(98) при том что если 2 параметра датаначала и датаокончания
то остатки и обороты получишь с 01.01.12 по 31.12.12 а если брать из периода получишь с 01.01.12 по конец дня 31.12.12 |
|||
101
Classic
11.11.13
✎
14:47
|
(99)
Почему это? Как раз параметр у нас один |
|||
102
Classic
11.11.13
✎
14:47
|
(99)
Почему это? Как раз параметр у нас один и правильный |
|||
103
sanja26
11.11.13
✎
14:49
|
(102) точно, тогда нафиг вообще границу в отчетах
|
|||
104
badboychik
11.11.13
✎
15:54
|
еще в курсах по СКД вроде видел такое:
ДОБАВИТЬКДАТЕ(ДатаОкончания(&Период),"СЕКУНДА",1) |
|||
105
ivanovnm
11.11.13
✎
16:05
|
(104) может ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(&Период, День), СЕКУНДА, 1)
|
|||
106
badboychik
11.11.13
✎
16:12
|
это если прямо в запросе. А если в выражениях на СКД, то точнее так: ДОБАВИТЬКДАТЕ(&Период.ДатаОкончания,"СЕКУНДА",1)
|
|||
107
capitanjack1
11.11.13
✎
16:48
|
а почему нормально работают запросы
в которые параметр &КонДата передаются параметры типа КонецМесяца(ТекущаяДата()). ведь например расчеты себестоимости проводятся на 23:59:59 последней даты месяца и всё обороты нормально попадают в запросы ? (границами я тоже не пользуюсь) |
|||
108
Classic
11.11.13
✎
17:11
|
(107)
Потому что Обороты - это ВКЛЮЧАЯ по умолчанию |
|||
109
jk3
11.11.13
✎
18:26
|
(0) Такие выражения только от незнания тонкостей работы виртуальных таблиц 1С.
Тот же типовой отчет бухии КарточкаСчета на СКД: РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
РегистрБухгалтерии.Хозрасчетный.Остатки(
При этом: &КонецПериодаОстатки = ДобавитьКДате(&КонецПериода, "Секунда", 1) Имхо, в СКД граница не нужна, для таблицы Остатки делается именно таким типовым образом. А остальные таблицы по-умолчанию включают конец периода. А вот в коде для таблицы Остатков юзать границу -- хорошая практика, чтобы самому же не наступить на грабли. |
|||
110
Сияющий Асинхраль
11.11.13
✎
19:00
|
(104) Кстати да, смотришь на это и ругаться хочется, ну почему 1С не может по-человечески, однообразно определять везде нормальные граничные даты. В разных дырках получается свой изврат :-(
|
|||
111
Classic
11.11.13
✎
19:15
|
(110)
Так 1С нормально и определяет. Откуда 1С знать, тебе на начало надо или на конец? Ну могли бы две вьюшки по остаткам нарисовать - так лучше бы было? |
|||
112
ProgAL
11.11.13
✎
20:58
|
(109) В этом отчете КонецПериода как реквизит отчета тип Дата, состав Дата. Т. е. в СКД передается как начало дня. Почему срабатывает Добавить секунду так что включается и 23.59.59 ?
|
|||
113
jk3
12.11.13
✎
10:36
|
(112) Нажми три точки -- там тип "Дата и время" у &КонецПериода и &КонецПериодаОстатки
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |