Имя: Пароль:
1C
1C 7.7
v7: Реквизит типа "Документ" в таблицах SQL. Необходимо получить реквизиты по ссылке
0 Vladal
 
29.10.15
12:34
Есть семёрочная база на SQL, в которой всё написано на прямых запросах.
Есть некая программа для построения отчетов, в которой я читаю данные этой семёрочной базы из SQL.

Трудность возникла при получении представления вид документа, потому что в таблице только хранится внутренний ИдДокумента, а номер и дата где-то ещё. Но эту задачу я уже решил.
Всё вроде бы ничего, но у документа РасходнаяНакладная есть реквизит ДокументОснование с типом Документ и и в SQL это выглядит так:

|select top 1
|    РНшапка.ИдДокумента,
|    РНшапка.ВидОтгрузки,
|    РНшапка.ДокОсн,
|    РНшапка.Клиент,
|    --Клиент.Наименование as Клиент_Представление,
|    ЖурналРН.НомерДок,
|    --Сотрудник.Наименование as Сотрудник_Представление,
|    Соответствие.Представление + ' № ' + RTRIM(LTRIM(ЖурналРН.НомерДок)) + ' от ' + CONVERT(nchar(10), CAST(LEFT(ЖурналРН.Позиция, 8) AS DateTime), 104) AS Документ_Представление
|from
|    ДокументШ_РасходнаяНакладная as РНшапка (nolock)
|    left join Справочник_Клиенты as Клиент (nolock) on Клиент.ИдЭлемента = РнШапка.Клиент
|    left join Журнал as ЖурналРН (nolock) on ЖурналРН.ИдДокумента = РНшапка.ИдДокумента
|    left join Справочник_Сотрудники as Сотрудник (nolock) on Сотрудник.ИДЭлемента = ЖурналРН.Автор
|    left join СоответствияДокументов as соответствие (nolock) on ЖурналРН.ВидДокумента = Соответствие.ИдВидаДокумента

Результат:

|ИдДокумента ВидОтгрузки ДокОсн        Клиент    НомерДок       Документ_Представление
|----------- ----------- ------------- --------- -------------- ------------------------------------------
| M80GX         27E         M M7IEW     2PXM007  ХВ-1116371     Расх. накладная № ХВ-1116371 от 26.10.2015


Как получить видэтого ДокОсн чтобы сформировать по нему представление и доставть реквизиты этого документа-основания?
1 Vladal
 
29.10.15
12:36
Вот как по строке "   M M7IEW   " найти нужный а) вид документа и б) прочесть из соответствующей таблицы его реквизиты?
2 МихаилМ
 
29.10.15
15:12
36 ричный код перевести в 10-ный . узнаете номер таблицы.
3 ADirks
 
29.10.15
15:18
Например:

Функция стрВидДок(МетаДок)
    Имя = МетаДок.Идентификатор;
    Если Имя = "Заявка" Тогда
        Возврат "'Заказ'";
    ИначеЕсли Имя = "ЗаказНаПроизводство" Тогда
        Возврат "'Заказ АХО'";

    ИначеЕсли Имя = "Заказ" Тогда
        Возврат "CASE (SELECT $Док_Заказ.ВидЗаказа FROM $Документ.Заказ Док_Заказ WHERE Док_Заказ.IDDoc = жДок.IDDoc)
        |    WHEN 0 THEN 'Заказ поставщику'
        |    WHEN 1 THEN 'Заказ поставщику с\п'
        |    WHEN 2 THEN 'Заказ услуг стор. орг.'
        |    WHEN 3 THEN 'Заказ услуг произв. хар-ра'
        |    ELSE 'Заказ услуг (доп. расх.)'
        |END";
        
    ИначеЕсли Имя = "ЗаявкаСнабжению" Тогда
        Возврат "CASE (SELECT $Док_ЗаявкаСнабжению.ВидЗаявки FROM $Документ.ЗаявкаСнабжению Док_ЗаявкаСнабжению WHERE Док_ЗаявкаСнабжению.IDDoc = жДок.IDDoc)
        |    WHEN $Перечисление.ВидыЗаявокСнабжению.Информационная THEN 'Инф.'
        |    WHEN $Перечисление.ВидыЗаявокСнабжению.ИнформационнаяЦены THEN 'Инф. (цены)'
        |    WHEN $Перечисление.ВидыЗаявокСнабжению.ПриобретениеТМЦ THEN 'Приобретение ТМЦ'
        |    WHEN $Перечисление.ВидыЗаявокСнабжению.ПередачаВПереработку THEN 'Передача в переработку'
        |    ELSE 'Заявка снаб.'
        |END";
    КонецЕсли;
    
    Возврат "'"+МетаДок.Представление()+"'";
КонецФункции


    стрПредставлениеВида = "CASE IDDocDef";
    Для нДок = 1 По Метаданные.Документ() Цикл
        МетаДок = Метаданные.Документ(нДок);
        стрПредставлениеВида = стрПредставлениеВида + "
        |    WHEN $ВидДокумента."+МетаДок.Идентификатор+" THEN "+стрВидДок(МетаДок);
    КонецЦикла;
    стрПредставлениеВида = стрПредставлениеВида + "
    |END";
4 Vladal
 
29.10.15
15:42
(2) Ага. Спасибо. Что-то dbo.char36toint()
(3) Нет, я 7-ку никак не открываю. Метаданные в Конфигураторе подсматриваю, а так только читаю таблицы из её базы.