Имя: Пароль:
1C
 
Как получить список ссылок на родительские документы
0 Блондинистая Ромашка
 
17.05.11
13:09
мне в итоге нужно что-то вроде структуры подчиненности.
есть ссылка на текущий документ.
так можно достать подчиненные
ТаблицаПодчиненных = ПолныеПрава.ПолучитьСписокДокументовПоКритериюОтбора("СвязанныеДокументы", ДокументСсылка);

а как с родительскими?
1 u2006
 
17.05.11
13:26
Реквизит ДокументОснование имеется?
2 Блондинистая Ромашка
 
17.05.11
13:27
(1) нет.
УТ 10.3 В доке РеализацияТоваровУслуг нет такого реквизита
3 aleks-id
 
17.05.11
13:28
фота где???
4 FIXXXL
 
17.05.11
13:28
(2) куда дела?
5 Jstunner
 
17.05.11
13:29
(2) в УТ есть типовая структура подчиненности
6 u2006
 
17.05.11
13:29
(2) странно, ну может просто Основание
7 Ненавижу 1С
 
гуру
17.05.11
13:30
(2) есть другие, но можно критерий отбора, например, юзать

и посмотри общую форму ФормаСтруктурыПодчиненности
8 FIXXXL
 
17.05.11
13:33
(6) Сделка это называется в УТ10
9 Reset
 
17.05.11
13:39
(0) Перебрать все реквизиты и табличные части документа с данными - ссылками на документы. Заполненные значения будут значениями родителей.

Если это конкретный документ, то просто посмотреть названия реквизитов в конфигураторе.
10 Блондинистая Ромашка
 
17.05.11
13:47
видимо я здесь одна такая дура...

(9) я не знаю как это сделать
11 hhhh
 
17.05.11
13:49
(10) ну из типовой скопипасть. Ведь там в структуре подчиненности вытаскиваются родительские документы. Зачем ты велосипед начинаешь изобретать?
12 Блондинистая Ромашка
 
17.05.11
13:53
(11)
       МетаданныеДокумента = ДокументСсылка.Метаданные();
       СписокРеквизитов = Новый СписокЗначений;
       
       Для Каждого Реквизит ИЗ МетаданныеДокумента.Реквизиты Цикл
           ТипыРеквизита = Реквизит.Тип.Типы();
           Для Каждого ТекущийТип ИЗ ТипыРеквизита Цикл
               МетаданныеРеквизита = Метаданные.НайтиПоТипу(ТекущийТип);
               
               Если МетаданныеРеквизита<>Неопределено И Метаданные.Документы.Содержит(МетаданныеРеквизита)
                   И ПравоДоступа("Чтение", МетаданныеРеквизита) Тогда
                   Попытка
                       ЗначениеРеквизита = ДокументСсылка[Реквизит.Имя];
                   Исключение
                       Прервать;
                   КонецПопытки;
                   ЕСли ЗначениеРеквизита<>Неопределено И НЕ ЗначениеРеквизита.Пустая() И ТипЗнч(ЗначениеРеквизита) = ТекущийТип
                       И мУжеВСписке[ЗначениеРеквизита] = Неопределено И СписокРеквизитов.НайтиПоЗначению(ДокументСсылка[Реквизит.Имя]) = Неопределено Тогда
                       Попытка
                           СписокРеквизитов.Добавить(ЗначениеРеквизита,Формат(ЗначениеРеквизита.Дата,"ДФ=yyyyMMddЧЧММсс"));
                       Исключение
                           ОтладкаТекстОшибки = ОписаниеОшибки();
                       КонецПопытки;    
                   КонецЕсли;
               КонецЕсли;            
               
           КонецЦикла;
       КонецЦикла;
       
       Для Каждого ТЧ Из МетаданныеДокумента.ТабличныеЧасти Цикл
           СтрРеквизитов = "";
           
           Попытка
               СодержимоеТЧ = ДокументСсылка[ТЧ.Имя].Выгрузить();
           Исключение
               Прервать;
           КонецПопытки;
           
           Для Каждого Реквизит ИЗ ТЧ.Реквизиты Цикл
               ТипыРеквизита = Реквизит.Тип.Типы();
               Для Каждого ТекущийТип ИЗ ТипыРеквизита Цикл
                   МетаданныеРеквизита = Метаданные.НайтиПоТипу(ТекущийТип);                
                   Если МетаданныеРеквизита<>Неопределено И Метаданные.Документы.Содержит(МетаданныеРеквизита)
                       И ПравоДоступа("Чтение", МетаданныеРеквизита) Тогда
                       СтрРеквизитов = СтрРеквизитов + ?(СтрРеквизитов = "", "", ", ") + Реквизит.Имя;
                       Прервать;
                   КонецЕсли;                        
               КонецЦикла;
           КонецЦикла;
           
           СодержимоеТЧ.Свернуть(СтрРеквизитов);
           Для Каждого КолонкаТЧ ИЗ СодержимоеТЧ.Колонки Цикл
               Для Каждого СтрокаТЧ ИЗ СодержимоеТЧ Цикл
                   Попытка
                       ЗначениеРеквизита = СтрокаТЧ[КолонкаТЧ.Имя];
                   Исключение
                       Продолжить;
                   КонецПопытки;
                   МетаданныеЗначения = Метаданные.НайтиПоТипу(ТипЗнч(ЗначениеРеквизита));
                   Если МетаданныеЗначения = Неопределено Тогда
                       // базовый тип
                       Продолжить;
                   КонецЕсли;
                   
                   ЕСли ЗначениеРеквизита<>Неопределено И НЕ ЗначениеРеквизита.Пустая()
                       И Метаданные.Документы.Содержит(МетаданныеЗначения)
                       И мУжеВСписке[ЗначениеРеквизита] = Неопределено Тогда
                       Если СписокРеквизитов.НайтиПоЗначению(ЗначениеРеквизита) = Неопределено Тогда
                           Попытка
                               СписокРеквизитов.Добавить(ЗначениеРеквизита,Формат(ЗначениеРеквизита.Дата,"ДФ=yyyyMMddЧЧММсс"));
                           Исключение
                               ОтладкаТекстОшибки = ОписаниеОшибки();
                           КонецПопытки;
                       КонецЕсли;
                   КонецЕсли;
               КонецЦикла;
           КонецЦикла;        
       КонецЦикла;
       СписокРеквизитов.СортироватьПоПредставлению();
       мУжеВСписке.Вставить(ДокументСсылка, Истина);
       
       //Если СписокРеквизитов.Количество() = 1 Тогда
       //    ВывестиРодительскиеДокументы(СписокРеквизитов[0].Значение);
       //ИначеЕсли СписокРеквизитов.Количество() > 1 Тогда
       //    ВывестиБезРодителей(СписокРеквизитов);        
       //КонецЕсли;
       
       
       //СтрокаДерева = мДерево.Строки.Добавить();
       Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ Ссылка, Проведен, ПометкаУдаления, #Сумма, #Валюта, Представление, """ + МетаданныеДокумента.Имя + """ КАК Метаданные
       | ИЗ Документ."+МетаданныеДокумента.Имя + " ГДЕ Ссылка = &Ссылка");
       
       Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
       Если МетаданныеДокумента.Реквизиты.Найти("СуммаДокумента") <> Неопределено Тогда
           Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "СуммаДокумента КАК СуммаДокумента");
       Иначе
           Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "NULL КАК СуммаДокумента");
       КонецЕсли;
       
       Если МетаданныеДокумента.Реквизиты.Найти("ВалютаДокумента") <> Неопределено Тогда
           Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Валюта", "ВалютаДокумента КАК ВалютаДокумента");
       Иначе
           Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Валюта", "NULL КАК ВалютаДокумента");
       КонецЕсли;
       
       Выборка  = Запрос.Выполнить().Выбрать();
                   
       ЕСли Выборка.Следующий() Тогда        
           Сообщить(Выборка.Ссылка);  
           Сообщить("******************************************");
           //СтрокаДерева.Ссылка= Выборка.Ссылка;
           //СтрокаДерева.Проведен = Выборка.Проведен;
           //СтрокаДерева.ПометкаУдаления = Выборка.ПометкаУдаления;
           //СтрокаДерева.ДокументПредставление = Выборка.Представление;
           //СтрокаДерева.СуммаДокумента = Выборка.СуммаДокумента;
           //СтрокаДерева.ВалютаДокумента = Выборка.ВалютаДокумента;
           //СтрокаДерева.ВидДокумента = Выборка.Метаданные;                
       Иначе
           Сообщить(Выборка.Ссылка);
           Сообщить("******************************************");
           //СтрокаДерева.Ссылка= ДокументСсылка;
           //СтрокаДерева.ДокументПредставление = Строка(ДокументСсылка);
           //СтрокаДерева.СуммаДокумента = ДокументСсылка.СуммаДокумента;
       КонецЕсли;
       
       //мДерево = СтрокаДерева;



скопипастила. выводит только текущий док, но не родителей.
13 FIXXXL
 
17.05.11
13:55
(11) разве родительские вытаскиваются? вроде бы только подчиненные?

(12)там еще посмотри Связанные документы, это ближе
14 FIXXXL
 
17.05.11
13:57
(11) хотя нет, и родительские тянет
но там связка непростая, к реализации могут оплаты приязаться, которые в авансах...
надо ли это в (0)?
15 Блондинистая Ромашка
 
17.05.11
14:09
(14) надо.
16 Reset
 
17.05.11
15:02
// В Ссылка - ссылка на текущий документ
ТаблицаРодителей=Новый ТаблицаЗначений;
ТаблицаРодителей.Колонки.Добавить("Родитель");
Объект=Ссылка.ПолучитьОбъект();
Для каждого Реквизит из Ссылка.Метаданные().Реквизиты цикл
   МетаданныеРеквизита=Метаданные.НайтиПоТипу(ТипЗнч(Объект[Реквизит.Имя]));
   Если МетаданныеРеквизита<>Неопределено И Метаданные.Документы.Содержит(МетаданныеРеквизита) тогда
       Если ЗначениеЗаполнено(Объект[Реквизит.Имя]) тогда
           ТаблицаРодителей.Добавить().Родитель=Объект[Реквизит.Имя];
       КонецЕсли;
   КонецЕсли;
КонецЦикла;
Для каждого ТабличнаяЧасть из Ссылка.Метаданные().ТабличныеЧасти цикл
   Для каждого Строка из Объект[ТабличнаяЧасть.Имя] цикл
       Для каждого Реквизит из ТабличнаяЧасть.Реквизиты цикл
           МетаданныеРеквизита=Метаданные.НайтиПоТипу(ТипЗнч(Строка[Реквизит.Имя]));
           Если МетаданныеРеквизита<>Неопределено И Метаданные.Документы.Содержит(МетаданныеРеквизита) тогда
               Если ЗначениеЗаполнено(Строка[Реквизит.Имя]) тогда
                   ТаблицаРодителей.Добавить().Родитель=Строка[Реквизит.Имя];
               КонецЕсли;
           КонецЕсли;
       КонецЦикла;
   КонецЦикла;
КонецЦикла;
ТаблицаРодителей.Свернуть("Родитель");
//
17 Reset
 
17.05.11
15:04
(16) к (10) и (9)

Это если рассматривать термин "родительский документ" так же, как его рассматривает "СтруктураПодчиненности".
18 Блондинистая Ромашка
 
17.05.11
15:15
ГОСПОДИ! Спасибо, что есть такие люди как Reset!!!!!!

(17) Спасибо!!! Огромное!!!


//а то у меня уже истерика началась...
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс