Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Прямые запросы на 1С Предприятии 7.7

v7: Прямые запросы на 1С Предприятии 7.7
Я
   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", не найдено дополнительное типизирующее поле. "
 
 
   Salimbek
 
1 - 25.04.19 - 11:27
(0) Дело в том, что документы в 1С-ке хранятся в виде ИД-шника из 9 символов и Идентификатора Вида - из 4-х символов.
Вот вы вытащили ИД-шник при помощи RIGHT(Рег.ПозицияДокумента,9) - но какой Вид документа 1С-ка не знает и потому ругается.
И тут либо вы сами знаете - какой это вид документа и задаете его типизацию в виде
RIGHT(Рег.ПозицияДокумента,9) as [Документ1 $Документ.ПКО]
Либо вам надо добавить в запрос еще и предыдущие 4 символа из Рег.ПозицияДокумента.
Обязательно имя у этого поля должно совпадать с именем поля у Ид-шника, с добавлением "_вид" <- тут обязательно маленькими буковками.
Т.е. типа (точно не знаю и 7-ки под рукой нет)
Mid(Рег.ПозицияДокумента,2,4) as Документ1_вид
   Mikeware
 
2 - 25.04.19 - 11:27
|  Рег.ВидДокумента as [Документ1_вид],
   Mikeware
 
3 - 25.04.19 - 11:28
(1) виртуальная таблица ОстаткиОбооты с Периодичностью Документ дает поле ВидДокумента
   Mikeware
 
4 - 25.04.19 - 11:30
(1) в позиции документа нет вида документа.  ибо позиция - это date_time_iddoc
   Alex2411
 
5 - 25.04.19 - 11:35
переделал, запрос формируется без ошибок но пустой(((
    ТекстЗапроса="
    |SELECT                     
    |  Рег.Товар as [Товар $Справочник.Товары],
    |  Рег.ПозицияДокумента as [Документ1 $Документ],
    |  Рег.ОстатокТовараПриход as ДокКоличествоПриход
    |FROM
    |  $Регистр.ОстаткиТоваров as РегП (nolock)  
    |Inner Join
    |  $РегистрОстаткиОбороты.ОстаткиТоваров(:НачДата, :КонДата~, Документ) as Рег On
    |        РегП.IdDoc=Рег.ПозицияДокумента 
    |        and $РегП.Товар=Рег.Товар 
    |";
   Mikeware
 
6 - 25.04.19 - 11:38
(5) а что ты вообще хочешь получить?
   Alex2411
 
7 - 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 $РегП.Товар=Рег.Товар 
    |";
   Alex2411
 
8 - 25.04.19 - 11:39
в идеале хочу получить движение товара по склада в разрезе документов
   Mikeware
 
9 - 25.04.19 - 11:40
(8) и чем тебе вирткальная таблица не угодила?
зачем тягаешь из регистра, а затем джойнишь виртуальную?
   Mikeware
 
10 - 25.04.19 - 11:41
ТекстЗапроса="
    |SELECT                     
    |  Рег.Товар as [Товар $Справочник.Товары],
    |  RIGHT(Рег.ПозицияДокумента,9) as [Документ1 $Документ], 
    |  Рег.ВидДокумента as [Документ1_вид],
    |  Рег.ОстатокТовараПриход as ДокКоличествоПриход
    |FROM
    |   $РегистрОстаткиОбороты.ОстаткиТоваров(:НачДата, :КонДата~, Документ) as Рег On
?
   Alex2411
 
11 - 25.04.19 - 11:43
(10) я попробую, если так работать будет - то это СУПЕР!
   Mikeware
 
12 - 25.04.19 - 11:44
(11) это не супер, это штатная виртуальная таблица. все как в документации
   Alex2411
 
13 - 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 'КодОперации'. - Это реквизит регистра.
   Alex2411
 
14 - 26.04.19 - 09:55
(13) К стате из этого запроса не подтягивается документ - получается пустое поле, как я понял в виртуальной таблице есть только ссылка на документ
   Sserj
 
15 - 26.04.19 - 10:00
(13) Так у тебя же ни измерения, ни ресурсы не указаны по которым виртуальная таблица должна строиться, т.е. по сути Рег на выходе пустой.
   Mikeware
 
16 - 26.04.19 - 10:00
(13) к реквизитам - нет
   Sserj
 
17 - 26.04.19 - 10:02
+(15) А наврал. Давно в документацию не смотрел, если не указано, то там по все.
Скрей всего КодОперации это не ресурс а Реквизит. Тогда его можно только он только в виртуальной таблице оборотов будет.
   Mikeware
 
18 - 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; идентификатор вида документа; существует только в том случае если указана 
периодичность Документ.

Оптимизация расчета:
+ по таблицам итогов и движений рассчитывается всегда только один из остатков, 
другой вычисляется из оборотов при агрегировании;
+ рассчитывается тот остаток (начальный конечный), который получить легче, 
исходя из оптимизации расчета остатков См. выше описание виртуальной таблицы
   trad
 
19 - 26.04.19 - 10:17
если нужны остатки и _движения_ (не обороты, ибо оборотами принято считать движения свернутые по измерениям) с реквизитами, то самая простая схема такая:

select
from $РегистрОстатки.ОстаткиТоваров(:НачДата, ...) as НачОст
union all
select
from $РегистрОстатки.ОстаткиТоваров(:КонДата~, ...) as КонОст

union all
select
from $Регистр.ОстаткиТоваров as Движения
group by Движения.Имерения, Движения.Реквизиты
   Alex2411
 
20 - 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) и не будет их там. В остатках нет реквизитов регистра и не будет. Смирись.
Остатки есть только в разрезе измерений.
   trad
 
22 - 29.04.19 - 15:15
$РегП.КодОперации
   trad
 
23 - 29.04.19 - 15:16
+ но запрос - откровенная лажа
   Ёпрст
 
24 - 29.04.19 - 15:21
а чорт, он к ra сперва запрос слепил, тогда будет работать, но долго
   Alex2411
 
25 - 29.04.19 - 15:34
(22) Я ж писал что так тоже не работает, хотя по логике вещей должно
   Alex2411
 
26 - 29.04.19 - 15:35
(24) Не дольше стандартного запроса в 1С 7.7
   trad
 
27 - 29.04.19 - 21:35
(25) по символам читай
   Alex2411
 
28 - 30.04.19 - 10:58
(22) Спасибо, очень помогло, но тема не закрыта.
   trad
 
29 - 30.04.19 - 17:29
(28) тогда ответь на (9)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.