|
v7: Прямые запросы на 1С Предприятии 7.7 | ☑ | ||
---|---|---|---|---|
0
Alex2411
25.04.19
✎
11:10
|
Доброй день! Подскажите пожалуйста, осваиваю прямые запросы, сложность состоит в том что не могу получить доступ к документу в виртуальной таблице ОстаткиИОбороты
нашел пример, через правое соединение с ВТ Остатков ТекстЗапроса=" |SELECT | Рег.Товар as [Товар $Справочник.Товары], | RIGHT(Рег.ПозицияДокумента,9) as [Документ1 $Документ], | Рег.ОстатокТовараПриход as ДокКоличествоПриход |FROM | $Регистр.ОстаткиТоваров as РегП (nolock) |Inner Join | $РегистрОстаткиОбороты.ОстаткиТоваров(:НачДата, :КонДата~, Документ) as Рег On | РегП.IdDoc=RIGHT(Рег.ПозицияДокумента,9) | and $РегП.Товар=Рег.Товар |"; выдает ошибку "Для типизации поля "Документ1", не найдено дополнительное типизирующее поле. " |
|||
1
Salimbek
25.04.19
✎
11:27
|
(0) Дело в том, что документы в 1С-ке хранятся в виде ИД-шника из 9 символов и Идентификатора Вида - из 4-х символов.
Вот вы вытащили ИД-шник при помощи RIGHT(Рег.ПозицияДокумента,9) - но какой Вид документа 1С-ка не знает и потому ругается. И тут либо вы сами знаете - какой это вид документа и задаете его типизацию в виде RIGHT(Рег.ПозицияДокумента,9) as [Документ1 $Документ.ПКО] Либо вам надо добавить в запрос еще и предыдущие 4 символа из Рег.ПозицияДокумента. Обязательно имя у этого поля должно совпадать с именем поля у Ид-шника, с добавлением "_вид" <- тут обязательно маленькими буковками. Т.е. типа (точно не знаю и 7-ки под рукой нет) Mid(Рег.ПозицияДокумента,2,4) as Документ1_вид |
|||
2
Mikeware
25.04.19
✎
11:27
|
| Рег.ВидДокумента as [Документ1_вид],
|
|||
3
Mikeware
25.04.19
✎
11:28
|
(1) виртуальная таблица ОстаткиОбооты с Периодичностью Документ дает поле ВидДокумента
|
|||
4
Mikeware
25.04.19
✎
11:30
|
(1) в позиции документа нет вида документа. ибо позиция - это date_time_iddoc
|
|||
5
Alex2411
25.04.19
✎
11:35
|
переделал, запрос формируется без ошибок но пустой(((
ТекстЗапроса=" |SELECT | Рег.Товар as [Товар $Справочник.Товары], | Рег.ПозицияДокумента as [Документ1 $Документ], | Рег.ОстатокТовараПриход as ДокКоличествоПриход |FROM | $Регистр.ОстаткиТоваров as РегП (nolock) |Inner Join | $РегистрОстаткиОбороты.ОстаткиТоваров(:НачДата, :КонДата~, Документ) as Рег On | РегП.IdDoc=Рег.ПозицияДокумента | and $РегП.Товар=Рег.Товар |"; |
|||
6
Mikeware
25.04.19
✎
11:38
|
(5) а что ты вообще хочешь получить?
|
|||
7
Alex2411
25.04.19
✎
11:38
|
Вот этот вариант заработал!!!!
ТекстЗапроса=" |SELECT | Рег.Товар as [Товар $Справочник.Товары], | RIGHT(Рег.ПозицияДокумента,9) as [Документ1 $Документ], | Рег.ВидДокумента as [Документ1_вид], | Рег.ОстатокТовараПриход as ДокКоличествоПриход |FROM | $Регистр.ОстаткиТоваров as РегП (nolock) |Inner Join | $РегистрОстаткиОбороты.ОстаткиТоваров(:НачДата, :КонДата~, Документ) as Рег On | РегП.IdDoc=RIGHT(Рег.ПозицияДокумента,9) | and $РегП.Товар=Рег.Товар |"; |
|||
8
Alex2411
25.04.19
✎
11:39
|
в идеале хочу получить движение товара по склада в разрезе документов
|
|||
9
Mikeware
25.04.19
✎
11:40
|
(8) и чем тебе вирткальная таблица не угодила?
зачем тягаешь из регистра, а затем джойнишь виртуальную? |
|||
10
Mikeware
25.04.19
✎
11:41
|
ТекстЗапроса="
|SELECT | Рег.Товар as [Товар $Справочник.Товары], | RIGHT(Рег.ПозицияДокумента,9) as [Документ1 $Документ], | Рег.ВидДокумента as [Документ1_вид], | Рег.ОстатокТовараПриход as ДокКоличествоПриход |FROM | $РегистрОстаткиОбороты.ОстаткиТоваров(:НачДата, :КонДата~, Документ) as Рег On ? |
|||
11
Alex2411
25.04.19
✎
11:43
|
(10) я попробую, если так работать будет - то это СУПЕР!
|
|||
12
Mikeware
25.04.19
✎
11:44
|
(11) это не супер, это штатная виртуальная таблица. все как в документации
|
|||
13
Alex2411
26.04.19
✎
09:52
|
Подскажите пожалуйста в ВТ есть доступ к реквизитам регистра?
|SELECT | Рег.Товар as [Товар $Справочник.Товары], | RIGHT(Рег.ПозицияДокумента,9) as [Документ1 $Документ], | Рег.ВидДокумента as [Документ1_вид], | Рег.КодОперации as КодОперации, | Рег.ОстатокТовараНачальныйОстаток as КоличествоНачальныйОстаток, | Рег.БазоваяСтоимостьНачальныйОстаток as СтоимостьНачальныйОстаток, | | Рег.ОстатокТовараПриход as ДокКоличествоПриход, | Рег.БазоваяСтоимостьПриход as ДокСтоимостьПриход, | Рег.ОстатокТовараРасход as ДокКоличествоРасход, | Рег.БазоваяСтоимостьРасход as ДокСтоимостьРасход |FROM | $РегистрОстаткиОбороты.ОстаткиТоваров(:НачДата, :КонДата~, Документ) as Рег |"; Вылетает ошибка: Invalid column name 'КодОперации'. - Это реквизит регистра. |
|||
14
Alex2411
26.04.19
✎
09:55
|
(13) К стате из этого запроса не подтягивается документ - получается пустое поле, как я понял в виртуальной таблице есть только ссылка на документ
|
|||
15
Sserj
26.04.19
✎
10:00
|
(13) Так у тебя же ни измерения, ни ресурсы не указаны по которым виртуальная таблица должна строиться, т.е. по сути Рег на выходе пустой.
|
|||
16
Mikeware
26.04.19
✎
10:00
|
(13) к реквизитам - нет
|
|||
17
Sserj
26.04.19
✎
10:02
|
+(15) А наврал. Давно в документацию не смотрел, если не указано, то там по все.
Скрей всего КодОперации это не ресурс а Реквизит. Тогда его можно только он только в виртуальной таблице оборотов будет. |
|||
18
Mikeware
26.04.19
✎
10:08
|
(17) $РегистрОстаткиОбороты.<?>(<?>, <?>, <?>,
<?>, <?>, <?>, <?>, <?> ) Виртуальная таблица остатков и оборотов Синтаксис: $РегистрОстаткиОбороты.<ИмяРегистра>([<НачалоПериода>][, <КонецПериода>][, <Периодичность>][,<МетодДополнения>][, <Соединение>][,<Условие>] [,<Измерение>][,<Ресурс>]) [as <Алиас>] Используется для получения остатков и оборотов. Определена только для регистра остатков. Параметры: <НачалоПериода> Тип: значение. Строка, представляющая период или момент времени во внутреннем формате 1С. По умолчанию начало ведения учета. <КонецПериода> Тип: значение. Строка, представляющая период или момент времени во внутреннем формате 1С. Если передан период времени (дата, позиция документа), он в расчет не включается. Для того чтобы он включался в расчет нужно воспользоваться модификатором, или предварительно сформировать момент времени (См. СформироватьПозициюДокумента()). По умолчанию точка актуальности. <Периодичность> Тип: конструкция типа ключевое слово. Указывается дополнительный разворот итогов по периодичности. Задается один из следующих вариантов: Период (Period) - только за период (не разворачивать); Документ (Document) - разворачивать по документу; День (Day) - разворачивать по дням; Неделя (Week) - разворачивать по неделям; Месяц (Month) - разворачивать по месяцам; Квартал (Quarter) - разворачивать по кварталам; Год (Year) - разворачивать по годам. По умолчанию Период. <МетодДополнения> Тип: конструкция типа ключевое слово. Имеет смысл только когда используется разворот по периодам. Задается один из следующих вариантов: Движения (Actions) - в таблицу включаются обороты по каждому периоду движений, и текущие остатки, только по тем комбинациям измерений, по которым были движения в период расчета; ДвиженияИГраницыПериода (ActionsAndPeriodBoundaries) - в таблицу включаются обороты по каждому периоду движений, и текущие остатки; а также таблица дополняется записями о ненулевых остатках на начало и/или конец на границы периода расчета. <Соединение> Тип: конструкция типа join. На языке SQL можно описать дополнительные соединения с таблицами, которые могут быть необходимы для формирования условий в следующем параметре. Можно оперировать полями измерений регистра, обращаясь к ним по идентификатору 1С. По умолчанию отсутствует. <Условие> Тип: конструкция типа where. На языке SQL можно описать условие для ограничения выборки. Можно оперировать полями измерений регистра, обращаясь к ним по идентификатору 1С, а также полями таблиц, соединения с которыми были описаны в предыдущем параметре. По умолчанию отсутствует. <Измерение> Тип: конструкция типа список идентификаторов. Указывается список измерений по которым нужно рассчитать остатки и обороты. По умолчанию по всем. <Ресурс> Тип: конструкция типа список идентификаторов. Указывается список ресурсов которые нужно рассчитать. По умолчанию по всем. Поля: <ИмяИзмерения> имена измерений указанных к расчету; тип определяется типом измерения регистра; <ИмяРесурса>НачальныйОстаток имена ресурсов с добавлением слова НачальныйОстаток указанных к расчету; тип определяется типом ресурса регистра; <ИмяРесурса>Приход имена ресурсов с добавлением слова Приход указанных к расчету; тип определяется типом ресурса регистра; <ИмяРесурса>Расход имена ресурсов с добавлением слова Расход указанных к расчету; тип определяется типом ресурса регистра; <ИмяРесурса>КонечныйОстаток имена ресурсов с добавлением слова НачальныйОстаток указанных к расчету; тип определяется типом ресурса регистра; <Период> тип datetime; дата начала периода по которому происходит разворот оборотов; существует только в том случае если указана периодичность День, Неделя, Месяц, Квартал, Год; <ПозицияДокумента> тип char(23); строка в формате date_time_iddoc (8+6+9); существует только в том случае если указана периодичность Документ; <ВидДокумента> тип int; идентификатор вида документа; существует только в том случае если указана периодичность Документ. Оптимизация расчета: + по таблицам итогов и движений рассчитывается всегда только один из остатков, другой вычисляется из оборотов при агрегировании; + рассчитывается тот остаток (начальный конечный), который получить легче, исходя из оптимизации расчета остатков См. выше описание виртуальной таблицы |
|||
19
trad
26.04.19
✎
10:17
|
если нужны остатки и _движения_ (не обороты, ибо оборотами принято считать движения свернутые по измерениям) с реквизитами, то самая простая схема такая:
select from $РегистрОстатки.ОстаткиТоваров(:НачДата, ...) as НачОст union all select from $РегистрОстатки.ОстаткиТоваров(:КонДата~, ...) as КонОст union all select from $Регистр.ОстаткиТоваров as Движения group by Движения.Имерения, Движения.Реквизиты |
|||
20
Alex2411
29.04.19
✎
15:11
|
Так и не получается получить значение реквизта, последняя версия запроса
ТекстЗапроса=" |SELECT * | Рег.Товар as [Товар $Справочник.Товары], | RIGHT(Рег.ПозицияДокумента,9) as [Документ1 $Документ], | Рег.ВидДокумента as [Документ1_вид], | Рег.КодОперации as КодОперации, | Рег.ОстатокТовараНачальныйОстаток as КоличествоНачальныйОстаток, | Рег.БазоваяСтоимостьНачальныйОстаток as СтоимостьНачальныйОстаток, | | Рег.ОстатокТовараПриход as ДокКоличествоПриход, | Рег.БазоваяСтоимостьПриход as ДокСтоимостьПриход, | Рег.ОстатокТовараРасход as ДокКоличествоРасход, | Рег.БазоваяСтоимостьРасход as ДокСтоимостьРасход |FROM | $Регистр.ОстаткиТоваров as РегП (nolock) |Inner Join | $РегистрОстаткиОбороты.ОстаткиТоваров(:НачДата, :КонДата~, Документ) as Рег On | РегП.IdDoc=RIGHT(Рег.ПозицияДокумента,9) | and $РегП.Товар=Рег.Товар |"; ругается на "Рег.КодОперации as КодОперации,", я пробывал тянуть это поле из основной таблице та-же самая ошибка "РегП.КодОперации as КодОперации," подскажите кто сталкивался |
|||
21
Ёпрст
29.04.19
✎
15:14
|
(20) и не будет их там. В остатках нет реквизитов регистра и не будет. Смирись.
Остатки есть только в разрезе измерений. |
|||
22
trad
29.04.19
✎
15:15
|
$РегП.КодОперации
|
|||
23
trad
29.04.19
✎
15:16
|
+ но запрос - откровенная лажа
|
|||
24
Ёпрст
29.04.19
✎
15:21
|
а чорт, он к ra сперва запрос слепил, тогда будет работать, но долго
|
|||
25
Alex2411
29.04.19
✎
15:34
|
(22) Я ж писал что так тоже не работает, хотя по логике вещей должно
|
|||
26
Alex2411
29.04.19
✎
15:35
|
(24) Не дольше стандартного запроса в 1С 7.7
|
|||
27
trad
29.04.19
✎
21:35
|
(25) по символам читай
|
|||
28
Alex2411
30.04.19
✎
10:58
|
(22) Спасибо, очень помогло, но тема не закрыта.
|
|||
29
trad
30.04.19
✎
17:29
|
(28) тогда ответь на (9)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |