|
v7: 1с++ Получение документа из регистра, недопустимое имя столбца "IDDoc". | ☑ | ||
---|---|---|---|---|
0
palpetrovich
21.03.16
✎
10:49
|
код:
Select Рег.IDDoc as [Докм $Документ], Товар [Товар $Справочник.Товары], Склад [Склад $Справочник.Склады], СтоимостьРасход FROM $РегистрОстаткиОбороты.ОстаткиТоваров( :ВыбНачПериода, :ВыбКонПериода~,,,,, (Товар, Склад), Стоимость ) Рег подскажите, что ему надо? |
|||
67
Mikeware
21.03.16
✎
12:44
|
(66) восемь, восемь.. тарапился
|
|||
68
Mikeware
21.03.16
✎
12:46
|
(66) если надо годмесяц - бери из даты первые 6 символов. Если до дня - первые 8.
а дэйтпарт - нужно для номера недели, или для дня недели, или номера квартала |
|||
69
ЧеловекДуши
21.03.16
✎
12:50
|
(42) У регистра должна быть галочка "Быстрые движения"
|
|||
70
ЧеловекДуши
21.03.16
✎
12:50
|
+ Или типо того
|
|||
71
ЧеловекДуши
21.03.16
✎
12:51
|
(48) Да лучше, но писать немного дольше :)
|
|||
72
Mikeware
21.03.16
✎
12:52
|
(69) "не тормози. сникерсни"©
|
|||
73
Serginio1
21.03.16
✎
12:52
|
||||
74
palpetrovich
21.03.16
✎
13:04
|
(73) спасибо
|
|||
75
Mikeware
21.03.16
✎
13:16
|
(73) а зачем?
если собирать по неделям, то знать дату начала недели совершенно необязательно. если уж нужно будет это отобразить (в шапке, например) - можно получить период недели по ее номеру на этапе вывода |
|||
76
palpetrovich
21.03.16
✎
14:29
|
(75) да, нужно именно для вывода, просто боюсь при запросе за период с "переходящим" годом - получу бардак...
12.2015; 01.2016 при периодичности "месяц" отсортируется как 1, 12 |
|||
77
palpetrovich
21.03.16
✎
14:34
|
+ (76) а в этом коде, я не могу из "2132016" получить "21032016"
| (cast(DATEPART(day, cast(left(Рег.ПозицияДокумента,8) as datetime)) as varchar) + | cast(DATEPART(month, cast(left(Рег.ПозицияДокумента,8) as datetime)) as varchar) + | cast(DATEPART(year, cast(left(Рег.ПозицияДокумента,8) as datetime)) as varchar) ) as Период, |
|||
78
palpetrovich
21.03.16
✎
14:38
|
+(77) впрочем получилось :) ...уж не знаю насколько это оптимально
| (left( '0' + cast(DATEPART(day, cast(left(Рег.ПозицияДокумента,8) as datetime)) as varchar) , 2) + | left( '0' + cast(DATEPART(month, cast(left(Рег.ПозицияДокумента,8) as datetime)) as varchar) , 2) + | cast(DATEPART(year, cast(left(Рег.ПозицияДокумента,8) as datetime)) as varchar) ) as Период, |
|||
79
palpetrovich
21.03.16
✎
14:41
|
+ (78) мдя, что-то меня не туда занесло, пока решал "строковую" задачку, потерял главное :)
|
|||
80
palpetrovich
21.03.16
✎
14:49
|
о, такая конструкция возвращает первый день в месяце
| DATEADD(day,-DAY( cast(left(Рег.ПозицияДокумента,8) as datetime)) +1, cast(left(Рег.ПозицияДокумента,8) as datetime) ) as Период, осталось такое сделать для первого дня недели |
|||
81
Mikeware
21.03.16
✎
14:50
|
(76) так отрезай первые 6 символов: 201512,201601,201602...
|
|||
82
Mikeware
21.03.16
✎
14:51
|
(80) за каким нахреном?
|
|||
83
Serginio1
21.03.16
✎
14:53
|
||||
84
Aleksey
21.03.16
✎
14:55
|
(5) как раз ларёк с типовой без проблем сваливает на 8-ку.
|
|||
85
palpetrovich
21.03.16
✎
15:01
|
(82) ну вообще-то да, (81) решает ту-же задачу :)
а вот как с неделями быть надеюсь в (83) найду :) |
|||
86
Mikeware
21.03.16
✎
15:06
|
(85) какя разница, написано оно на t-sql или на 1с? Если тебе нужно "начало недели" в запросе - это одно, а если только при выводе - нахрена грузить сервер излишними вычислениями?
|
|||
87
palpetrovich
21.03.16
✎
15:07
|
(83) да, для 1-го дня недели работает, спасибо
|DATEADD(DD, DATEDIFF(DD, 0, cast(left(Рег.ПозицияДокумента,8) as datetime))/7*7, 0) as Период, |
|||
88
ADirks
22.03.16
✎
07:00
|
всякие началы
Функция стрНачалоПериода(ПолеДаты, ВидПериода) Экспорт Если ВидПериода = "Месяц" Тогда стрНачалоПериода = "DateAdd(d, 1 - DatePart(d, "+ПолеДаты+"), "+ПолеДаты+")"; ИначеЕсли ВидПериода = "Неделя" Тогда стрНачалоПериода = "DateAdd(dd, -DatePart(dw, "+ПолеДаты+")+1, "+ПолеДаты+")"; ИначеЕсли ВидПериода = "Квартал" Тогда стрНачалоПериода = "DateAdd(M, -(Month(" + ПолеДаты + ") - 1)%3, " + стрНачалоПериода(ПолеДаты, "Месяц") + ")"; ИначеЕсли ВидПериода = "Год" Тогда стрНачалоПериода = "DateAdd(M, 1 - Month(" + ПолеДаты + "), " + стрНачалоПериода(ПолеДаты, "Месяц") + ")"; КонецЕсли; Возврат стрНачалоПериода; КонецФункции |
|||
89
palpetrovich
22.03.16
✎
10:52
|
(88) спасибо
|
|||
90
ADirks
22.03.16
✎
10:54
|
блин... с неделей то у меня косяк :)
у буржуев начало недели - воскресенье почему-то более правильно так: ИначеЕсли ВидПериода = "Неделя" Тогда стрНачалоПериода = "DateAdd(dd, -DatePart(dw, "+ПолеДаты+") + 2 - (@@DATEFIRST%7), "+ПолеДаты+")"; |
|||
91
Mikeware
22.03.16
✎
10:55
|
(90) ну, давно известно, что они начинают неделю с отдыха....
|
|||
92
palpetrovich
22.03.16
✎
11:10
|
(90) странно, у меня с кодом в (88) все нормально
22.02.16, 29.02.16, 07.03.16 может от системных установок зависит? |
|||
93
palpetrovich
22.03.16
✎
11:11
|
+(92) впрочем с кодом из (90) тоже :)
|
|||
94
Serginio1
22.03.16
✎
11:13
|
||||
95
Serginio1
22.03.16
✎
11:21
|
||||
96
ADirks
22.03.16
✎
11:39
|
(92) это потому что у тебя в настройках сервера указано, что первый день понедельник. Был бы аглицкий дистрибутив - было бы воскресенье первым днём
(94) а я знаю, и поэтому не хочу от этого зависеть |
|||
97
palpetrovich
22.03.16
✎
11:40
|
подскажите, а почему так получается?
кусок кода: Select cast(left(Рег.ПозицияДокумента,8) as datetime) as День, Рег.Товар [Товар $Справочник.Товары], СпрТ.Descr + cast(cast(left(Рег.ПозицияДокумента,8) as datetime) as varchar) as Ключ1 FROM $РегистрОстаткиОбороты.ОстаткиТоваров( :ВыбНачПериода, :ВыбКонПериода~, Документ,,,, (Товар),Стоимость) Рег INNER JOIN $Справочник.Товары as СпрТ (nolock) on СпрТ.id = Рег.Товар // колонка День - "22.02.16" // колонка Ключ1 - "Товар1 фев 28 2016 12:00 AM" |
|||
98
palpetrovich
22.03.16
✎
11:42
|
+(97) а я почемуто ожидал
// колонка Ключ1 "Товар1 22.02.16" |
|||
99
Ёпрст
22.03.16
✎
11:43
|
(97) дата и строка, что не ясного ?
|
|||
100
Ёпрст
22.03.16
✎
11:44
|
(98) кастани к дате (если скуль >=2005)? ,без времени
|
|||
101
ADirks
22.03.16
✎
11:49
|
лучше использовать Convert() с явным указанием формата
типа: Convert(DateTime, Left(Date_Time_IDDoc, 8), 112) и в обратку CONVERT(char(12), GetDate(), 104) |
|||
102
palpetrovich
22.03.16
✎
11:50
|
(100) скуль 2005
(99) как что неясно cast(left(Рег.ПозицияДокумента,8) as datetime) - дает 22.02.16 а cast(cast(left(Рег.ПозицияДокумента,8) as datetime) as varchar) - дает фев 28 2016 12:00 AM |
|||
103
Mikeware
22.03.16
✎
11:52
|
(102) в первом случае у бебя возвращайется дэйттайм, которую 1с неявно конвертит в дату
а воо-втором ты конвертишь дэйттайм с пустым временем в варчар, и получаешь строку. которую тебе 1с так и оставляет. |
|||
104
palpetrovich
22.03.16
✎
11:52
|
(101) я пробовал вначале, но при использовании "CONVERT" сортировка "ORDER BY Период" отрабатывает как "по строке", т.е.
03.03.16 28.02.16 ... мне это как-то не нра :) |
|||
105
ADirks
22.03.16
✎
11:53
|
(104) так укажи для сортировки формат 112, а не какой попало
|
|||
106
Ёпрст
22.03.16
✎
11:54
|
(102)
cast(left(Рег.ПозицияДокумента,8) as date) |
|||
107
ADirks
22.03.16
✎
11:54
|
всякие неявные преобразования - злейшее зло.
на сервере с другими настройками всё сломается |
|||
108
Mikeware
22.03.16
✎
11:55
|
(104) формат даты укажи, в какой конывертить
|
|||
109
Ёпрст
22.03.16
✎
11:55
|
А для сортировки, делай
order by Рег.ПозицияДокумента и усё |
|||
110
palpetrovich
22.03.16
✎
11:56
|
(105) я 1с++ начал заниматься 5 дней назад, для меня тут сплошной темный лес :)
|
|||
111
Mikeware
22.03.16
✎
11:57
|
(110) чем дальше в лес, тем толще партизаны...
|
|||
112
palpetrovich
22.03.16
✎
12:02
|
(106) тТип date не является определенным системным типом. (109) спасибо
|
|||
113
ЧеловекДуши
22.03.16
✎
12:05
|
(112) Чет какие-то у вас странные трудности :)
Вы поймите, что вы должны рассматривать, в прямом запросе, только те типы, которые может прожевать платформа 1С :) |
|||
114
trad
22.03.16
✎
12:10
|
(96) 1cv7 при старте выполняет SET DATEFIRST 1
так что при работе в этом сеансе у нас первый день понедельник |
|||
115
ADirks
22.03.16
✎
12:10
|
(110) ну вообще-то, это не про 1С++, а про T-SQL
про convert, к примеру: https://msdn.microsoft.com/ru-ru/library/ms187928(v=sql.120).aspx (112) чё это вдруг? вернуть в 1С не всё получится, а в самом запросе могу вертеть как хочу |
|||
116
palpetrovich
22.03.16
✎
12:11
|
(113) ну как трудности, я могу конечно это дополнительное поле добавить в ТЗ и после, просто подумал что на этапе запроса быстрее получится
|
|||
117
palpetrovich
22.03.16
✎
12:13
|
(115) о, оказывается я еще и T-SQL изучаю :)
"чё это вдруг" - если это на "тТип date не является определенным системным типом" - так это не я сказал, это цитата :) |
|||
118
palpetrovich
22.03.16
✎
12:14
|
Select cast(left(Рег.ПозицияДокумента,8) as date) as День,
... State 42000, native 243, message [Microsoft][ODBC SQL Server Driver][SQL Server]Тип date не является определенным системным типом. |
|||
119
ADirks
22.03.16
✎
12:14
|
(117) ошибочка вышла, это было к (113)
|
|||
120
trad
22.03.16
✎
12:14
|
в sql 2k нет типа date
|
|||
121
palpetrovich
22.03.16
✎
12:19
|
(120) спасибо
так что, есть возможность получить "Товар1 22.02.16" ...вот почему-то уверен, что есть :) |
|||
122
Ёпрст
22.03.16
✎
12:19
|
(118) Не помню ужо, возможно, date и time появились только с 2008 sql
|
|||
123
Ёпрст
22.03.16
✎
12:19
|
(121) substr
|
|||
124
ДенисЧ
22.03.16
✎
12:19
|
(121) Есть
|
|||
125
Ёпрст
22.03.16
✎
12:20
|
точнее, substring, или left
|
|||
126
Mikeware
22.03.16
✎
12:20
|
(121) datepart, или просто отрезать левые 8
|
|||
127
ДенисЧ
22.03.16
✎
12:20
|
(125) А зачем?
Что, конверт не даст нужного формата? |
|||
128
trad
22.03.16
✎
12:22
|
(121) значение типа datetime или smalldatetime при помощи convert можно преобразовать в строку со всевозможным форматированием
|
|||
129
ADirks
22.03.16
✎
12:22
|
(128) тока MSDN сначала надо прочитать :)
|
|||
130
trad
22.03.16
✎
12:24
|
(129) при таком количестве помогателей - некогда
|
|||
131
Ёпрст
22.03.16
✎
12:25
|
(130) конечна, ускоренное прочтение буконлайн, это ж читать надо
|
|||
132
ДенисЧ
22.03.16
✎
12:25
|
(129) Да ты издеваешься... Ещё и документацию читать... Некогда, работать надо...
|
|||
133
Ёпрст
22.03.16
✎
12:27
|
Да и задач, в которых нужно из даты делать строки а из ссылки на товар - наименования, как то не встречались
:) |
|||
134
Ёпрст
22.03.16
✎
12:27
|
в запросах
|
|||
135
palpetrovich
22.03.16
✎
12:35
|
(126) "20160228"
(127) "28-02-2016" ...хотя скорее всего я "конверт"ом не умею пользоваться |
|||
136
palpetrovich
22.03.16
✎
12:36
|
+(135) повторюсь, так хочется "Наименование28.02.2016"
|
|||
137
ДенисЧ
22.03.16
✎
12:40
|
(135) Ну ты BOL-то уже открыл на статье о конверте? И его параметрах?
|
|||
138
Mikeware
22.03.16
✎
12:41
|
(137) давай, я ему BOL продам? :-)
|
|||
139
palpetrovich
22.03.16
✎
12:43
|
+(135) да, таки не умею,
"CONVERT(VARCHAR(11), cast(left(Рег.ПозицияДокумента,8) as datetime), 104)" - дает 28.02.2016 |
|||
140
Ёпрст
22.03.16
✎
12:44
|
(139) а че 11 ?
|
|||
141
Ёпрст
22.03.16
✎
12:44
|
а не 10, хотя, размерность мог бы и не указывать
|
|||
142
Mikeware
22.03.16
✎
12:45
|
(141) а вдруг в каком-то месяце больше 99 дней?
|
|||
143
palpetrovich
22.03.16
✎
12:47
|
(137) (138) понятния не имею что такое BOL
(140) с какого-то примера скопипастил |
|||
144
palpetrovich
22.03.16
✎
12:49
|
+ (143) да, 10 хватает вроде
|
|||
145
trad
22.03.16
✎
12:52
|
(136) а для чего такая конкатенация?
|
|||
146
Ёпрст
22.03.16
✎
12:54
|
(145) чтоб выяснить потом, что оказывается, в справочнике есть куча элементов с одинаковым наименованием, поэтому отчет криво работает
:) Как ты сам не догадался ?! |
|||
147
trad
22.03.16
✎
13:05
|
(146) ты протелепатировал "ключ" в (97) ?
|
|||
148
Ёпрст
22.03.16
✎
13:14
|
(147) а то!
Ну, я бы понял, если бы он в этот ключ писал id, потом, например спец символ или пробел и потом строковое представление даты.. а так, наименование, это же бубль гум! |
|||
149
palpetrovich
22.03.16
✎
14:41
|
(145) тренируюсь я ваще-т :)
Ну и да, ИД понадежней будет. Правда допполе нужно будет для решения задачки: Рег.Товар as IDтов, Рег.Товар [Товар $Справочник.Товары], ... Rtrim(Рег.Товар) + CONVERT(VARCHAR(10), cast(left(Рег.ПозицияДокумента,8) as datetime), 104) as Ключ1 |
|||
150
trad
22.03.16
✎
14:57
|
а просто так нет?
Рег.Товар + left(Рег.ПозицияДокумента,8) as Ключ1 |
|||
151
Mikeware
22.03.16
✎
14:58
|
(150) слишком просто...
|
|||
152
Mikeware
22.03.16
✎
14:58
|
+(151) ни лыж тебе, ни гамака...
|
|||
153
palpetrovich
22.03.16
✎
15:09
|
(150) мне надо для дальнейших действий, упрощенно:
цикл по основной ТЗ ТекКлюч = СокрЛП(ТЗ.IDтов)+СокрЛП(ТЗ.День) Если ТЗ_свернуаяПоКлюч1.найтиЗначене(ТекКлюч,стр,"Ключ1")... |
|||
154
Mikeware
22.03.16
✎
15:12
|
(153) что ты этим хочешь сделать?
используй индексированную таблицу... |
|||
155
Ёпрст
22.03.16
✎
15:18
|
(154) Это слишком просто
|
|||
156
Mikeware
22.03.16
✎
15:20
|
(155) ну да. тоже ни лыж, ни гамака...
|
|||
157
Mikeware
22.03.16
✎
15:21
|
(155) интересный эффект в РВиджет - если грузить его не в глобальнике, то в меню названия обрезаются до 6 символов...
|
|||
158
ДенисЧ
22.03.16
✎
15:24
|
А если
Rtrim(Рег.Товар) + CONVERT(VARCHAR(10), cast(left(Рег.ПозицияДокумента,8) as datetime), 4) as Ключ1 |
|||
159
Ёпрст
22.03.16
✎
15:24
|
(157) еще и от версии зависит
|
|||
160
Ёпрст
22.03.16
✎
15:25
|
вообще, то нужна только позиция (или дата) и товар, выгрузить в ИТЗ, налепить индексов и любой вывод
|
|||
161
palpetrovich
22.03.16
✎
15:49
|
(160) Народ, я реально занимаюсь этим 5 дней, какая еще ИТЗ? :)
что, раельно любой вывод? любые группировки + вывод "периодики" по горизонтали со всеми итогами (горизонтальными и вертикальными)? |
|||
162
Mikeware
22.03.16
✎
16:08
|
а чоб и нет? :-)
|
|||
163
palpetrovich
22.03.16
✎
16:15
|
(162) может и так, я-ж не в курсе...
|
|||
164
Serginio1
22.03.16
✎
16:16
|
||||
165
palpetrovich
22.03.16
✎
16:22
|
(164) спасибо конечно, но там как-бы для 8-ки все, а скачать архив - не могу... "Получите файл бесплатно, если ваша компания у нас еще не зарегистрирована." :)
|
|||
166
Serginio1
22.03.16
✎
16:29
|
(165) По второй ссылке скачай
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |