|   |   | 
| 
 | Типизация ДокументОснование 1с++ | ☑ | ||
|---|---|---|---|---|
| 0
    
        Franchiser 13.11.23✎ 19:13 | 
        Есть запрос:
 SELECT distinct Журнал.docno , $ПартииРНПТСтроки.Артикул Артикул , SubString(Журнал.$ОбщийРеквизит.ДокументОснование,5,9) as [ДокументОснование $Документ] , Журнал.IDDOC as Партия ,IsNull(МПЗ.DESCR,'') as НаименованиеТовара FROM _1SJOURN AS Журнал With (NOLOCK) INNER JOIN $ДокументСтроки.ПартииРНПТ AS ПартииРНПТСтроки With (NOLOCK) ON Журнал.IDDOC = ПартииРНПТСтроки.IDDOC Left JOIN $Справочник.МПЗ as МПЗ (nolock) on $ПартииРНПТСтроки.Артикул = $МПЗ.КодСистемы WHERE Журнал.DATE_TIME_IDDOC Between :ДатаН and :ДатаК~ Нужно в результате запроса вывести типизированное поле ДокументОснование, которое может быть трех типов документа. Что написать в ДокументОснование_вид? | |||
| 1
    
        AAA 13.11.23✎ 18:59 | 
        Журнал.IdDocDef      AS [Документ_вид]
 Примерно так | |||
| 2
    
        FN 13.11.23✎ 19:06 | 
        В результатах должна быть колонка ДокументОснование_вид, в которой должен быть вид документа в виде числа.
 Получить его можно приджойнив еще раз журнал. Ну или попробуй просто SubString(Журнал.$ОбщийРеквизит.ДокументОснование,1,9) - тоже должно подойти. | |||
| 3
    
        FN 13.11.23✎ 19:14 | 
        опечатался, надо SubString(Журнал.$ОбщийРеквизит.ДокументОснование,1,13)     | |||
| 4
    
        Franchiser 13.11.23✎ 19:28 | 
        Пример документа основания:
 " 3X L2VEJ " Вид это " 3X", но его нужно как-то преобразовать в десятичный вид, ну или связывать еще раз с журналом через IDDOC и там уже получать IDDOCDEF из Журнала Основания, что не хотелось бы. | |||
| 5
    
        Franchiser 13.11.23✎ 19:32 | 
        Есть какая-то функция в 1с 7.7 которая получить из
 "3X" значение "141"? т.е. переведет из 36-чной системы счисления в 10-чную. | |||
| 6
    
        Franchiser 13.11.23✎ 19:33 | 
        (2) про дополнительный джойн журнала способ знаю.     | |||
| 7
    
        FN 13.11.23✎ 20:03 | 
        "  3X L2VEJ   " - такая строка 1срр прекрасно типизируется в  $Документ     | |||
| 8
    
        FN 13.11.23✎ 20:04 | 
        (5)_StrToId(строка) и _IdToStr(число)     | |||
| 9
    
        Franchiser 13.11.23✎ 20:08 | 
        (8) мне в запросе sql нужно     | |||
| 10
    
        FN 13.11.23✎ 20:19 | 
        (9) ну можно так
 create function [dbo].[StrToID](@Res36 char(9)) returns int as begin declare @j int declare @Deci int DECLARE @Arr36 char(36) select @Arr36 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' select @Deci = 0 select @j = 1 while @j <= len(ltrim(rtrim(@Res36))) begin if @j <> 1 select @Deci = @Deci*36 select @Deci = @Deci + charindex(substring(ltrim(rtrim(@Res36)), @j,1),@Arr36) -1 select @j = @j+1 end return(@Deci) end GO Но для типизации этого не нужно. У тебя все для типизации | |||
| 11
    
        AAA 13.11.23✎ 20:30 | 
        Написал ерунду, невнимательно прочел (0). Как вариант, если видов основания немного, то можно сделать служебный справочник с видами основания {Код36, Имя} и с ним связать вид основания (первые 4 символа из реквизита запроса)     | |||
| 12
    
        AAA 13.11.23✎ 20:45 | 
        а вообще разве LEFT((Журнал.$ОбщийРеквизит.ДокументОснование,4) это не то что надо? Давненько не писал запросы, но по моему это оно и есть. Им и типизируете     | |||
| 13
    
        ADirks 14.11.23✎ 07:01 | 
        (0) в данном случае можно написать
 Журнал.$ОбщийРеквизит.ДокументОснование as [ДокументОснование $Документ] ид13 нормально типизируется как $Документ и без доп.поля с IdDocDef | |||
| 14
    
        Franchiser 14.11.23✎ 10:23 | 
        (12) нет так не типизируется, т.к. там не десятичное значение получается
 (13) выдает ошибку, что нет типизирующего поля | |||
| 15
    
        Franchiser 14.11.23✎ 10:27 | 
        Если написать
 LEFT((Журнал.$ОбщийРеквизит.ДокументОснование,4) as ДокументОснование_вид то запрос зависает. | |||
| 16
    
        ADirks 14.11.23✎ 10:44 | 
        (14) занятно... а версия 1С++ какая?
 у меня 3.2.4.1 и уже даже не вспомню, когда (в каких версиях) последний раз видел ругачку про типизирующее поле. (15) ну так Журнал.IDDocDef as ДокументОснование_вид не надо никаких джойнов и преобразований | |||
| 17
    
        Franchiser 14.11.23✎ 11:44 | 
        Журнал.IDDocDef это вид не основания а текущего документа     | |||
| 18
    
        Franchiser 14.11.23✎ 11:47 | 
        у меня 3.2.4.0     | |||
| 19
    
        AAA 14.11.23✎ 12:05 | 
        Мне кажется, что надо писать не ДокументОснование_Вид. а документ_Вид
 но может и ошибаюсь, это вопрос к разработчикам. Но попробуйте | |||
| 20
    
        Salimbek 14.11.23✎ 12:07 | 
        А что выдаст?
 select ' 3X L2VEJ ' as [ДокументОснование $Документ] | |||
| 21
    
        Salimbek 14.11.23✎ 12:09 | 
        (19) Не, там должно быть так:
 {Документ|Document} Char(13); Char(9) - Идентификатор объекта, кроме того, в наборе данных должна находиться колонка с именем составленным из имени этой колонки и суффикса {_вид|_kind} (чувствительно к регистру), в которой должны содержаться идентификаторы видов документов. Тип колонки SQL: int, DBF: char(4). | |||
| 22
    
        Franchiser 14.11.23✎ 12:28 | 
        (20) ничего без типизирующего поля будет ошибка     | |||
| 23
    
        trad 14.11.23✎ 12:33 | 
        (14) substring убери
 ADirks написал как надо | |||
| 24
    
        Franchiser 14.11.23✎ 20:10 | 
        (23) да спасибо. так работает. Надо было сразу выводить ид13 в результат без типизирующего поля.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |