Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Документ неопределённого вида из регистра (число прочтений - 3874 )
jan
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 14
Зарегистрирован: 08. Апреля 2008
Документ неопределённого вида из регистра
15. Апреля 2008 :: 12:25
Печать  
[code]
SELECT ЗакупленныеТовары.IDDOC [Документ $Документ]
     , ЗакупленныеТовары.sp5973 [Товар $Справочник.Номенклатура]
     , ЗакупленныеТовары.sp5974 [Инвойс $Документ]
     , ЗакупленныеТовары.sp5977 Стоимость
     , Журнал.IDDOC [ЖурналДокумент $Документ]                      
     , Журнал.IDDOCDEF Документ_вид
FROM ra5972 AS ЗакупленныеТовары
     INNER JOIN _1SJOURN AS Журнал ON ЗакупленныеТовары.IDDOC = Журнал.IDDOC
[/code]

ТЗ=Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{C:\TEMPDOC\ERT\СТАРИКОВ\СЛ_ЗАПРОС.ERT(167)}: Для типизации поля "ЖурналДокумент", не найдено дополнительное типизирующее поле.

Как правильно написать запрос?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Документ неопределённого вида из регистра
Ответ #1 - 15. Апреля 2008 :: 12:26
Печать  
[quote author=jan link=1208262330/0#0 date=1208262330]
Как правильно написать запрос?[/quote]
В поиск по "не найдено дополнительное типизирующее поле" :)
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
mash
1c++ donor
Отсутствует


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Документ неопределённого вида из регистра
Ответ #2 - 15. Апреля 2008 :: 12:30
Печать  
[code]
SELECT ЗакупленныеТовары.IDDOC [Документ $Документ]
               ,j.iddocdef Документ_вид      
               , ЗакупленныеТовары.sp5973 [Товар $Справочник.Номенклатура]
     , ЗакупленныеТовары.sp5974 [Инвойс $Документ]
     , ЗакупленныеТовары.sp5977 Стоимость
     , Журнал.IDDOC [ЖурналДокумент $Документ]                      
     , Журнал.IDDOCDEF Документ_вид
FROM ra5972 AS ЗакупленныеТовары
     INNER JOIN _1SJOURN AS Журнал ON ЗакупленныеТовары.IDDOC = Журнал.IDDOC
[/code]

Поле iddoc - содержит id конкретного вида документов (9 символов), для указания какой именно тип документа нужно дополнительное поле iddocdef, которое хранится в таблице _1sjourn

Документ_вид и будет дополнительное типизирующее поле :-)
  

Поспешность наносит ущерб
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Документ неопределённого вида из регистра
Ответ #3 - 15. Апреля 2008 :: 21:20
Печать  
[quote author=jan link=1208262330/0#0 date=1208262330]Как правильно написать запрос?[/quote]
для чего?
  
Наверх
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Документ неопределённого вида из регистра
Ответ #4 - 19. Апреля 2008 :: 12:08
Печать  
Прямым текстом:

В селекте у тебя так:
, Журнал.IDDOC [ЖурналДокумент $Документ]                        
, Журнал.IDDOCDEF Документ_вид

а надо так:
, Журнал.IDDOC [ЖурналДокумент $Документ]                        
, Журнал.IDDOCDEF ЖурналДокумент_вид
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Документ неопределённого вида из регистра
Ответ #5 - 19. Апреля 2008 :: 17:28
Печать  
Читаем внимательно учебник из документации:
Глава 3: Работа с документами

Все документы 1С хранятся в таблице _1Sjourn(или 1Sjourn для DBF). Конечно, это не очень хорошо, особенно когда блокируется вся таблица при проведении 1 документа, но мы не можем изменять структуры БД, поэтому будем довольствоваться тем, что есть

Структура таблицы

F=ROW_ID                |Row ID                 |I   |0     |0 ß Это поле есть только в SQL версии       

F=IDJOURNAL            |ID of Journal          |I   |0     |0       

F=IDDOC                 |ID Document           |C   |9     |0       

F=IDDOCDEF              |ID Def Document       |I   |0     |0       

F=APPCODE               |App code              |S   |0     |0       

F=DATE_TIME_IDDOC       |Date+Time+IDDoc       |C   |23    |0  ß Это поле есть только в SQL версии       

В DBF его аналог выглядит так:

F=DATE      |date                |D   |8     |0

F=TIME      |Time                |C   |6     |0



F=DNPREFIX              |Prefix Document No    |C   |18    |0       

F=DOCNO                 |Document No           |C   |10    |0       

F=CLOSED                |Flag document is clo  |Y   |0     |0       

F=ISMARK                |Doc is Marked for De  |L   |0     |0       

F=ACTCNT                |Action counter        |I   |0     |0       

F=VERSTAMP              |Version stamp         |I   |0     |0       

F=RF32735               |Reg Action Flag       |L   |0     |0       

F=SP12955               |(P)Автор              |C   |9     |0       

F=SP31982               |(P)Фирма              |C   |9     |0       

F=DS13520               |Flag document in seq  |Y   |0     |0    



IDDoc – уникальный идентификатор документа

IDDocDef – вид

Date_Time_IDDoc – позиция документа, она же дата

Важно! Это поле в СКЛ версии – строка, тогда как в ДБФ – это дата. Это приводит к тому, что в СКЛ версии чтобы получить дату документа нужно выполнить преобразование CAST(LEFT(date_time_iddoc,8) as datetime) а в дбф этого делать не нужно. Однако на условия по дете это никак не сказывается.



Пример: Получить документы “Реализация” за период с НачДата по КонДата

 

ТекстЗапроса = "

|SELECT

|  Жур.IDDoc as [Док $Документ],

|  Жур.IDDocDef as Док_вид

|FROM

|  _1SJourn as Жур

|WHERE

|  Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND

|  Жур.IDDocDef = $ВидДокумента.Реализация";



Для DBF запрос будет таким:

|SELECT

|  Жур.IDDoc as [Док $Документ],

|  Жур.IDDocDef as Док_вид

|FROM

|  1SJourn as Жур

|WHERE

|  Жур.Date BETWEEN :НачДата~~ AND :КонДата~~ AND

|  Жур.IDDocDef = $ВидДокумента.Реализация";

как видно оба запроса идентичны, но отличаются именами полей, таблиц и модификаторами. Я стараюсь всегда делать универсальный запрос, который будет работать как на ДБФ так и на СКЛ, поэтому я добавляю проверку на версию 1С(СКЛ или ДЮФ) и дописываю недостающие переменные или поля в зависимости от этой версии. Т.е. предыдущий запрос выглядел бы так:

|SELECT

|  Жур.IDDoc as [Док $Документ],

|  Жур.IDDocDef as Док_вид

|FROM

|  "+?(ЭтоСКЛ=1,"_","")+"1SJourn as Жур

|WHERE

|  Жур.Date"+?(ЭтоСКЛ=1,"_Time_IdDoc","")+" BETWEEN :НачДата"+?(ЭтоСКЛ=1,"","~~")+" AND :КонДата~"+?(ЭтоСКЛ=1,"","~")+" AND

|  Жур.IDDocDef = $ВидДокумента.Реализация";





RS.УстановитьТекстовыйПараметр("НачДата", НачДата);

RS.УстановитьТекстовыйПараметр("КонДата", КонДата);





Здесь стоит обратить внимание на 2 вещи:

1)         Для типизации документа по полю IDDoc необходимо, чтобы в выборке присутствовало поле содержащее IDDocDef с именем <ИмяПоляIDDoc>_вид, в нашем случае это будет Док_вид. Для полей, которые содержат реквизит типа “Документ” конкретного вида вспомогательного поля не требуется.

2)         Модификатор параметра КонДата. Он необходим для того, чтобы в выборку попали документы за последний день.

Поле Date_Time_IDDoc, отвечающее за дату содержит значения вида ‘20030731767WS0  1O6P   ‘. Соответственно параметр НачДата будет выглядеть как ‘20030701’, а КонДата с модификатором - ‘20030731Z’, кроме того, в DBF версии модификатор должен быть ~~.

Он переведет дату из 01.01.2006 в {d '2006-01-01'}.



Посмотрим, как в запросе преобразовать поле Date_Time_IDDoc в дату документа

Для DBF такого перевода не требуется, т.е. можно написать просто Жур.Date

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать