Имя: Пароль:
1C
1C 7.7
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)