Проверка значения реквизита родительского документа

1. Tailor_Made 18.09.18 16:20 Сейчас в теме
Здравствуйте!
УТП 8.3

В документах "Реализация товаров и услуг" меня есть реквизит вывезен ли товар(скрин1).


В ходе выполнения задания, у меня возник такой вопрос:
Возможно ли получить значение(булево) реквизита родительского документа? У меня есть ДокСсылка Расходного ордера на товары, а мне нужно узнать значение реквизита родительской реализации
Прикрепленные файлы:
+
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. login1020 133 18.09.18 16:51 Сейчас в теме
(1) Находясь в документе расходный ордер, узнать чему равен реквизит Документа Реализация товаров и услуг "Товар вывезен"?

в Документе расхода должен быть реквизит типо : Владелец, ну а дальше что-то типо такого:
Возврат Владелец.ТоварВывезен
+
4. Tailor_Made 18.09.18 17:14 Сейчас в теме
(2)не понимаю как это реализовать
+
3. RocKeR_13 1321 18.09.18 17:06 Сейчас в теме
(1) Если вводите все на основании, то

Реализация = РасходныйОрдер.ДокументОснование;
+
10. Tailor_Made 18.09.18 17:22 Сейчас в теме
(3)а в таком случае что попадет в ДокументОснование?
Прикрепленные файлы:
+
17. RocKeR_13 1321 18.09.18 17:29 Сейчас в теме
(10) Ну тогда сделать а-ля

Функция НайтиРеализацию(ИсходныйДокумент)
       Основание = ИсходныйДокумент.ДокументОснование; 
       Пока ЗначениеЗаполнено(Основание) И ТипЗнч(Основание) <> ТИП("ДокументСсылка.РеализацияТоваровУслуг")  Цикл
                  Основание = Основание.ДокументОснование;
       КонецЦикла;
       Возврат Основание;
КонецФункции
Показать


А в общем случае можно смотреть заполнение общей формы СтруктураПодчиненности
+
18. Fox-trot 158 18.09.18 17:32 Сейчас в теме
(17) прервать бы цикл еще не помешало
CratosX; +1
19. RocKeR_13 1321 18.09.18 17:34 Сейчас в теме
(18) ну для пущей надежности можно добавить

Пока НЕ Основание = Неопределено И ЗначениеЗаполнено(Основание) И ТипЗнч(Основание) <> ТИП("ДокументСсылка.РеализацияТоваровУслуг")  Цикл

      Метаданные = Основание.Метаданные();
      Если Метаданные.Реквизиты.Найти("ДокументОснование") <> Неопределено Тогда
            Основание = Основание.ДокументОснование;
      Иначе
            Возврат Документы.РеализацияТоваровУслуг.ПустаяСсылка();
      КонецЕсли;
КонецЦикла;

Показать
+
30. buganov 200 19.09.18 19:32 Сейчас в теме
(17) там основание скорее всего заказ
+
5. Boneman 298 18.09.18 17:16 Сейчас в теме
(1) конфигурация то какая ?
Просто в современных конфигурациях, там не документ основание, а табличная часть расшифровка платежа в ней заказ.
И родительских документов может быть много.
+
6. login1020 133 18.09.18 17:17 Сейчас в теме
(5) Управление торговым предприятием
+
8. Boneman 298 18.09.18 17:19 Сейчас в теме
(6) в конфигураторе посмотри, есть там табличная часть расшифровка платежа ?
+
9. login1020 133 18.09.18 17:21 Сейчас в теме
(8) у меня нет такой конфигурации)
+
12. Boneman 298 18.09.18 17:24 Сейчас в теме
(9)
(8) у меня нет такой конфигурации)

чего нет ? Ты же сам сказал УТП и все такое.

Покажи нам структуру метаданных, РКО своей конфигурации.
+
15. login1020 133 18.09.18 17:25 Сейчас в теме
(12)
Здравствуйте!
УТП 8.3

Это не моя тема)
+
11. Tailor_Made 18.09.18 17:23 Сейчас в теме
(5)УТП 8.3 Я писал вроде
+
14. RocKeR_13 1321 18.09.18 17:25 Сейчас в теме
(5) там приходный ордер на товары, а не ПКО)
+
31. buganov 200 19.09.18 19:33 Сейчас в теме
(5) это расходный ордер, какие расшифровки платежа?
+
7. Fox-trot 158 18.09.18 17:19 Сейчас в теме
(1)
Функция ТоварВывезен(ДокСсылка) Экспорт
	Возврат ?(ТипЗнч(ДокСсылка)=Тип("ДокументСсылка.РеализацияТоваровУслуг"), ДокСсылка.ТоварВывезен, Неопределено);
КонецФункции
13. Tailor_Made 18.09.18 17:24 Сейчас в теме
(7)протестирую сейчас - отпишу
+
16. login1020 133 18.09.18 17:27 Сейчас в теме
(13) лучше бы скрин структуры документа Расходного ордера выложили, чтобы тут никто не гадал.
+
20. Tailor_Made 18.09.18 17:36 Сейчас в теме
(16)скажи где это найти - сразу скину
Только это нужно не для одного конкретного документа, а для любого
+
21. login1020 133 18.09.18 17:38 Сейчас в теме
(20)
а для любого

Вот это поворот)
Для любого документа, у которого в основании Реализация?
Это надо смотреть как дерево связанных документов строится, и раскручивать его, пока не наткнёмся на Реализацию, а дальше уже брать нужный реквизит.
+
22. Tailor_Made 18.09.18 17:42 Сейчас в теме
(21)
Для любого документа, у которого в основании Реализация?


Впринципе для любого Расходного Ордера, даже если в основании не Реализация.
+
23. RocKeR_13 1321 18.09.18 17:48 Сейчас в теме
(20) Итого:

//Что-то делаем
Ордер = ПолучилиОткудаТо;
Реализация = НайтиРеализациюВПодчиненности(Ордер)
Если ЗначениеЗаполнено(реализация) Тогда
//нашли
Иначе
//не нашли
КонецЕсли;

Функция НайтиРеализациюВПодчиненности(ИсходныйДокумент)

      Метаданные = ИсходныйДокумент.Метаданные();
      Если Метаданные.Реквизиты.Найти("ДокументОснование") <> Неопределено Тогда
            Основание = ИсходныйДокумент.ДокументОснование;
      Иначе
            //реквизит у вас по-другому назван
            Возврат Документы.РеализацияТоваровУслуг.ПустаяСсылка();
      КонецЕсли;


Пока НЕ Основание = Неопределено И ЗначениеЗаполнено(Основание) И ТипЗнч(Основание) <> ТИП("ДокументСсылка.РеализацияТоваровУслуг")  Цикл

      Метаданные = Основание.Метаданные();
      Если Метаданные.Реквизиты.Найти("ДокументОснование") <> Неопределено Тогда
            Основание = Основание.ДокументОснование;
      Иначе
            Возврат Документы.РеализацияТоваровУслуг.ПустаяСсылка();
      КонецЕсли;
КонецЦикла;

Основание = ?(Основание=Неопределено, Документы.РеализацияТоваровУслуг.ПустаяСсылка(), Основание);

Возврат Основание;

КонецФункции
Показать
+
24. Tailor_Made 18.09.18 17:51 Сейчас в теме
Как испытаю все варианты - отпишусь сразу и отмечу верный
+
25. markers 274 19.09.18 06:36 Сейчас в теме
Эх ребята, нужно значение одного реквизита, получаете данные всего объекта.... В конфах на основе БСП, в том или ином виде (в зависимости от древности) есть это:
ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Реквизит");
Под капотом, она формирует текст запроса в котором выбирает ТОЛЬКО нужное, выполняет его и возвращает вам значение. Это сейчас вы разницы не замечаете и думаете что её нет, а представьте что у объекта есть реквизит с типом "Хранилище значение" и в него засунут огромный объём данных...
Tailor_Made; CratosX; Serg O.; login1020; RocKeR_13; Ditron; +6
26. RocKeR_13 1321 19.09.18 11:34 Сейчас в теме
(25) Точно, спасибо за замечание)
+
27. asg.aleks 66 19.09.18 15:09 Сейчас в теме

	ТоварВывезен = Ложь;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	СвязанныеДокументы.Ссылка.ТоварВывезен КАК ТоварВывезен
		|ИЗ
		|	КритерийОтбора.СвязанныеДокументы(&РКО) КАК СвязанныеДокументы
		|ГДЕ
		|	СвязанныеДокументы.Ссылка ССЫЛКА Документ.РеализацияТоваровУслуг";
	
	Запрос.УстановитьПараметр("РКО", СсылкаНаРКО);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ДетальныеЗаписи.Следующий() Цикл
		ТоварВывезен = ДетальныеЗаписи.ТоварВывезен;
	КонецЦикла;
	
	Возврат ТоварВывезен;


Показать
login1020; +1
28. RocKeR_13 1321 19.09.18 15:40 Сейчас в теме
(27) Вот только родительские документы так не получить)
Прикрепленные файлы:
asg.aleks; +1
29. asg.aleks 66 19.09.18 17:10 Сейчас в теме +1.04 $m
(28) Согласен. Зависит от структуры критерия отбора. Судя по картинке (10), не получит родителя. Под рукой нет УТП.

Вот так должно работать

&НаСервере
Процедура ПроверитьВывозТовара(СсылкаНаРасходныйОрдер)
	
	Реализация = ПолучитьРодительскийДокументРеализации(СсылкаНаРасходныйОрдер);
	Если ЗначениеЗаполнено(Реализация) Тогда
		//Сообщить(Реализация.ТоварВывезен);
	КонецЕсли; 
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьРодительскийДокументРеализации(ДокументСсылка, РеализацияРодитель = Неопределено) 
	
	МетаданныеДокумента = ДокументСсылка.Метаданные();
	СписокРеквизитов = Новый СписокЗначений;
	
	Для Каждого Реквизит ИЗ МетаданныеДокумента.Реквизиты Цикл
		
		ТипыРеквизита = Реквизит.Тип.Типы();
		
		Для Каждого ТекущийТип ИЗ ТипыРеквизита Цикл
			
			МетаданныеРеквизита = Метаданные.НайтиПоТипу(ТекущийТип);
			
			Если НЕ МетаданныеРеквизита = Неопределено И ПравоДоступа("Чтение", МетаданныеРеквизита)
				И Метаданные.Документы.Содержит(МетаданныеРеквизита) И ЗначениеЗаполнено(ДокументСсылка[Реквизит.Имя]) Тогда
				
				ЕСли ТипЗнч(ДокументСсылка[Реквизит.Имя]) = ТекущийТип И СписокРеквизитов.НайтиПоЗначению(ДокументСсылка[Реквизит.Имя]) = Неопределено Тогда
					СписокРеквизитов.Добавить(ДокументСсылка[Реквизит.Имя]);
				КонецЕсли;
				
			КонецЕсли;            
			
		КонецЦикла;
		
	КонецЦикла;
	
	Для Каждого тТабличнаяЧать Из МетаданныеДокумента.ТабличныеЧасти Цикл
		
		СтрРеквизитов = "";
		
		ДанныеТЧ = ДокументСсылка[тТабличнаяЧать.Имя].Выгрузить();
		Если ДанныеТЧ.Количество() = 0 Тогда
			Прервать
		КонецЕсли; 
		
		Для Каждого Реквизит ИЗ тТабличнаяЧать.Реквизиты Цикл
			
			ТипыРеквизита = Реквизит.Тип.Типы();
			
			Для Каждого ТекущийТип ИЗ ТипыРеквизита Цикл
				
				МетаданныеРеквизита = Метаданные.НайтиПоТипу(ТекущийТип);                
				
				Если НЕ МетаданныеРеквизита = Неопределено И ПравоДоступа("Чтение", МетаданныеРеквизита)
					И Метаданные.Документы.Содержит(МетаданныеРеквизита) Тогда
					
					СтрРеквизитов = СтрРеквизитов + ?(СтрРеквизитов = "", "", ", ") + Реквизит.Имя;
					Прервать;
					
				КонецЕсли;
				
			КонецЦикла;
			
		КонецЦикла;
		
		ДанныеТЧ.Свернуть(СтрРеквизитов);
		
		Для Каждого тКолонка ИЗ ДанныеТЧ.Колонки Цикл
			
			Для Каждого тСтрока ИЗ ДанныеТЧ Цикл
				
				Если НЕ ЗначениеЗаполнено(тСтрока[тКолонка.Имя]) Тогда
					Продолжить;
				КонецЕсли; 

				МетаданныеЗначения = Метаданные.НайтиПоТипу(ТипЗнч(тСтрока[тКолонка.Имя]));
				Если МетаданныеЗначения = Неопределено Тогда
					Продолжить;
				КонецЕсли;
				
				ЕСли ПравоДоступа("Чтение", МетаданныеЗначения) И Метаданные.Документы.Содержит(МетаданныеЗначения) Тогда
					
					Если СписокРеквизитов.НайтиПоЗначению(тСтрока[тКолонка.Имя]) = Неопределено Тогда
						СписокРеквизитов.Добавить(тСтрока[тКолонка.Имя]);
					КонецЕсли;
					
				КонецЕсли;
				
			КонецЦикла;
			
		КонецЦикла;        
		
	КонецЦикла;
	
	Для Каждого СтрокаРеквизитов Из СписокРеквизитов Цикл 
		РеализацияРодитель = ПолучитьРодительскийДокументРеализации(СтрокаРеквизитов.Значение, РеализацияРодитель);
	КонецЦикла;
	
	Запрос = Новый Запрос();
	Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
					|	Ссылка
					|ИЗ Документ." + МетаданныеДокумента.Имя + "
					|ГДЕ
					|	Ссылка = &Ссылка";
	
	Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
	
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		Если ТипЗнч(Выборка.Ссылка) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
			РеализацияРодитель = Выборка.Ссылка;
		КонецЕсли; 
	КонецЕсли;
	
	Возврат РеализацияРодитель;
	
КонецФункции

Показать
Tailor_Made; +1
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот