Имя: Пароль:
1C
1C 7.7
v7: Как счет с субконто заджойнить? (вьюхи на 1С++)
,
0 Новенький_2009
 
01.08.12
14:09
Взгляните на запрос ниже:

Select
Справочник_Контрагенты.Наименование Контрагент
   
From ДокументСтроки_Выписка

Inner Join dbo._1saccs ПланСчетов
On ПланСчетов.ID = ДокументСтроки_Выписка.КоррСчет

Left Join Справочник_Контрагенты Справочник_Контрагенты
On Справочник_Контрагенты.ID = SUBSTRING(Субконто1 ,7, 9)

WHERE ПланСчетов.SCHKOD = ' 60. 1.    '

В этом запросе, я заджойнился со справочником контрагентов по данным из субконто1, т.к. точно знаю что это субконто1 именно этого типа.

А как узнать с чем джойниться, если условие счета убрать.

Из описалова прочитал что в план счетов (_1saccs), в его полях SC(n) хранятся Ид Субконто.

Не могу понять, что дальше с айдишниками делать, чтобы узнать к какому справочнику джойниться - чтоб значения субконт вытащить? Некоторые люди писали, что нужно из md'шника получать это соответствие, строить таблицу по ней и уже через нее джойнить.

Кто-нибудь может примером поделиться? :)
1 Ёпрст
 
01.08.12
14:19
А нафига тебе вообще с чем-то джойнится ?
Наименования захотелось ?
Просто ссылка на справочник не кошерно ужо ?
2 Новенький_2009
 
01.08.12
14:21
Да, нужно как минимум вытащить наименование.
3 dk
 
01.08.12
14:31

ИДСправочника(<?>)
Синтаксис:
ИДСправочника(<НомИмяСпр>)
Назначение:
возвращает внутренний номер справочника по его идентификатору или порядковому номеру.
Возвращаемое значение:
(Число)  внутренний ид справочника.
Параметры:
<НомИмяСпр> - (строка/число)  идентификатор справочника или порядковый номер, определяется от 1 до Метаданные.Справочник();
4 Новенький_2009
 
01.08.12
15:06
(3) а как это использовать?
5 dk
 
01.08.12
15:13
в теории через многоходовую процедуру
1. определить Ид всех справочников
2. определить все нужные субконто
3. подставить в запрос джойны к субконто через связку ид справочника -> вид справочника
на практике не пробовал
6 Новенький_2009
 
01.08.12
15:18
(5) спасибо :)
7 viktor_vv
 
01.08.12
15:27
Только непонятно откуда в _1saccs возьмутся ИД элементов справочника контрагенты. Ты наверное хотел из проводок данные тянуть ?
8 viktor_vv
 
01.08.12
15:28
(7)+ А сорри, ты субконто из выписки тянешь.
9 Новенький_2009
 
01.08.12
16:10
(8) ты правильно понял - из выписки. Я на 7.7 не программирую. Я показал - кусок портянке на скуле, которую я дергаю при обмене. Конечно, мне в самом запросе нужно как-то разрулиться. Ну видимо, универсально не получится. Заджойнюсь по тем счетам, которые участвуют в обмене со всеми возможными для этих счетов субконтами и через case видимо уже разрулюсь.

Просто хотелось какого-то более красивого и простого кода :)
10 viktor_vv
 
01.08.12
16:16
А универсально и не получится, так как джойнить надо разные таблицы справочников или документов. Ну разве что динамически формировать запрос. И то как-то слабо представляю.
На вот, может пригодится всякие ИД справочников, видов субконто.

Процедура Сформировать()

глМетадата = СоздатьОбъект("MetaDataWork");
   ласСчет = СоздатьОбъект("Счет");
   
   ласСчет.ВыбратьСчета();
   Пока ласСчет.ПолучитьСчет() = 1 Цикл
       лТекСчет = ласСчет.ТекущийСчет() ;
       Для i = 1 по  лТекСчет.КоличествоСубконто() Цикл
           лВидСубконто = лТекСчет.ВидСубконто(i);
           лМетаВидСубконто = Метаданные.ВидСубконто(лВидСубконто.Идентификатор()) ;
           лИДВидаСубконто = глМетадата.ИДОбъекта(лМетаВидСубконто) ;
           лТИпЗначенияСубк = лМетаВидСубконто.Тип ;
           
           лсВидЗначения = "";
           лИдВидЗначения = 0;
           
           Если (лТИпЗначенияСубк = "Справочник") Тогда
               лсВидЗначения = лМетаВидСубконто.Вид ;
               лИдВидЗначения = глМетадата.ИДСправочника(лсВидЗначения);
           ИначеЕсли (лТИпЗначенияСубк = "Документ") Тогда
               лсВидЗначения = лМетаВидСубконто.Вид ;
               лИдВидЗначения = глМетадата.ИДДокумента(лсВидЗначения);
           КонецЕсли ;    
           
           
           Сообщить(""+лТекСчет + " : "+ лВидСубконто + " : "+лИДВидаСубконто + " : "+лТИпЗначенияСубк +
                   "  : "+лсВидЗначения + " : "+лИдВидЗначения);
       КонецЦикла;
       
   КонецЦикла;
11 Новенький_2009
 
01.08.12
16:23
спасибо!
AdBlock убивает бесплатный контент. 1Сергей