Проверка значения реквизита родительского документа
Здравствуйте!
УТП 8.3
В документах "Реализация товаров и услуг" меня есть реквизит вывезен ли товар(скрин1).
В ходе выполнения задания, у меня возник такой вопрос:
Возможно ли получить значение(булево) реквизита родительского документа? У меня есть ДокСсылка Расходного ордера на товары, а мне нужно узнать значение реквизита родительской реализации
УТП 8.3
В документах "Реализация товаров и услуг" меня есть реквизит вывезен ли товар(скрин1).
В ходе выполнения задания, у меня возник такой вопрос:
Возможно ли получить значение(булево) реквизита родительского документа? У меня есть ДокСсылка Расходного ордера на товары, а мне нужно узнать значение реквизита родительской реализации
Прикрепленные файлы:
По теме из базы знаний
- Обмен документами в формате CommerceML по схеме поставщик-покупатель между 1С 7.7 <=> 7.7 (конфигурация «Торговля + Склад», ред. 9.2) и 1С 7.7 <=> 8.x (конфигурация «Управление торговлей, ред. 10.3»)
- Определение подчиненного или родительского документа
- Три костыля. Сказ про фокусы в коде
- Обмен 1С с Честным Знаком для УТ11, УНФ, КА2, ERP, Розница: Расширение для работы с СУЗ, ГИС МТ, ЦРПТ
- Подсистема сопоставления
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Находясь в документе расходный ордер, узнать чему равен реквизит Документа Реализация товаров и услуг "Товар вывезен"?
в Документе расхода должен быть реквизит типо : Владелец, ну а дальше что-то типо такого:
в Документе расхода должен быть реквизит типо : Владелец, ну а дальше что-то типо такого:
Возврат Владелец.ТоварВывезен
(10) Ну тогда сделать а-ля
А в общем случае можно смотреть заполнение общей формы СтруктураПодчиненности
Функция НайтиРеализацию(ИсходныйДокумент)
Основание = ИсходныйДокумент.ДокументОснование;
Пока ЗначениеЗаполнено(Основание) И ТипЗнч(Основание) <> ТИП("ДокументСсылка.РеализацияТоваровУслуг") Цикл
Основание = Основание.ДокументОснование;
КонецЦикла;
Возврат Основание;
КонецФункции
ПоказатьА в общем случае можно смотреть заполнение общей формы СтруктураПодчиненности
(18) ну для пущей надежности можно добавить
Пока НЕ Основание = Неопределено И ЗначениеЗаполнено(Основание) И ТипЗнч(Основание) <> ТИП("ДокументСсылка.РеализацияТоваровУслуг") Цикл
Метаданные = Основание.Метаданные();
Если Метаданные.Реквизиты.Найти("ДокументОснование") <> Неопределено Тогда
Основание = Основание.ДокументОснование;
Иначе
Возврат Документы.РеализацияТоваровУслуг.ПустаяСсылка();
КонецЕсли;
КонецЦикла;
Показать
(20)
Вот это поворот)
Для любого документа, у которого в основании Реализация?
Это надо смотреть как дерево связанных документов строится, и раскручивать его, пока не наткнёмся на Реализацию, а дальше уже брать нужный реквизит.
а для любого
Вот это поворот)
Для любого документа, у которого в основании Реализация?
Это надо смотреть как дерево связанных документов строится, и раскручивать его, пока не наткнёмся на Реализацию, а дальше уже брать нужный реквизит.
(20) Итого:
//Что-то делаем
Ордер = ПолучилиОткудаТо;
Реализация = НайтиРеализациюВПодчиненности(Ордер)
Если ЗначениеЗаполнено(реализация) Тогда
//нашли
Иначе
//не нашли
КонецЕсли;
Функция НайтиРеализациюВПодчиненности(ИсходныйДокумент)
Метаданные = ИсходныйДокумент.Метаданные();
Если Метаданные.Реквизиты.Найти("ДокументОснование") <> Неопределено Тогда
Основание = ИсходныйДокумент.ДокументОснование;
Иначе
//реквизит у вас по-другому назван
Возврат Документы.РеализацияТоваровУслуг.ПустаяСсылка();
КонецЕсли;
Пока НЕ Основание = Неопределено И ЗначениеЗаполнено(Основание) И ТипЗнч(Основание) <> ТИП("ДокументСсылка.РеализацияТоваровУслуг") Цикл
Метаданные = Основание.Метаданные();
Если Метаданные.Реквизиты.Найти("ДокументОснование") <> Неопределено Тогда
Основание = Основание.ДокументОснование;
Иначе
Возврат Документы.РеализацияТоваровУслуг.ПустаяСсылка();
КонецЕсли;
КонецЦикла;
Основание = ?(Основание=Неопределено, Документы.РеализацияТоваровУслуг.ПустаяСсылка(), Основание);
Возврат Основание;
КонецФункции
Показать
Эх ребята, нужно значение одного реквизита, получаете данные всего объекта.... В конфах на основе БСП, в том или ином виде (в зависимости от древности) есть это: Под капотом, она формирует текст запроса в котором выбирает ТОЛЬКО нужное, выполняет его и возвращает вам значение. Это сейчас вы разницы не замечаете и думаете что её нет, а представьте что у объекта есть реквизит с типом "Хранилище значение" и в него засунут огромный объём данных...
ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Реквизит");
ТоварВывезен = Ложь;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СвязанныеДокументы.Ссылка.ТоварВывезен КАК ТоварВывезен
|ИЗ
| КритерийОтбора.СвязанныеДокументы(&РКО) КАК СвязанныеДокументы
|ГДЕ
| СвязанныеДокументы.Ссылка ССЫЛКА Документ.РеализацияТоваровУслуг";
Запрос.УстановитьПараметр("РКО", СсылкаНаРКО);
РезультатЗапроса = Запрос.Выполнить();
ДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ДетальныеЗаписи.Следующий() Цикл
ТоварВывезен = ДетальныеЗаписи.ТоварВывезен;
КонецЦикла;
Возврат ТоварВывезен;
Показать
(28) Согласен. Зависит от структуры критерия отбора. Судя по картинке (10), не получит родителя. Под рукой нет УТП.
Вот так должно работать
Вот так должно работать
&НаСервере
Процедура ПроверитьВывозТовара(СсылкаНаРасходныйОрдер)
Реализация = ПолучитьРодительскийДокументРеализации(СсылкаНаРасходныйОрдер);
Если ЗначениеЗаполнено(Реализация) Тогда
//Сообщить(Реализация.ТоварВывезен);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьРодительскийДокументРеализации(ДокументСсылка, РеализацияРодитель = Неопределено)
МетаданныеДокумента = ДокументСсылка.Метаданные();
СписокРеквизитов = Новый СписокЗначений;
Для Каждого Реквизит ИЗ МетаданныеДокумента.Реквизиты Цикл
ТипыРеквизита = Реквизит.Тип.Типы();
Для Каждого ТекущийТип ИЗ ТипыРеквизита Цикл
МетаданныеРеквизита = Метаданные.НайтиПоТипу(ТекущийТип);
Если НЕ МетаданныеРеквизита = Неопределено И ПравоДоступа("Чтение", МетаданныеРеквизита)
И Метаданные.Документы.Содержит(МетаданныеРеквизита) И ЗначениеЗаполнено(ДокументСсылка[Реквизит.Имя]) Тогда
ЕСли ТипЗнч(ДокументСсылка[Реквизит.Имя]) = ТекущийТип И СписокРеквизитов.НайтиПоЗначению(ДокументСсылка[Реквизит.Имя]) = Неопределено Тогда
СписокРеквизитов.Добавить(ДокументСсылка[Реквизит.Имя]);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Для Каждого тТабличнаяЧать Из МетаданныеДокумента.ТабличныеЧасти Цикл
СтрРеквизитов = "";
ДанныеТЧ = ДокументСсылка[тТабличнаяЧать.Имя].Выгрузить();
Если ДанныеТЧ.Количество() = 0 Тогда
Прервать
КонецЕсли;
Для Каждого Реквизит ИЗ тТабличнаяЧать.Реквизиты Цикл
ТипыРеквизита = Реквизит.Тип.Типы();
Для Каждого ТекущийТип ИЗ ТипыРеквизита Цикл
МетаданныеРеквизита = Метаданные.НайтиПоТипу(ТекущийТип);
Если НЕ МетаданныеРеквизита = Неопределено И ПравоДоступа("Чтение", МетаданныеРеквизита)
И Метаданные.Документы.Содержит(МетаданныеРеквизита) Тогда
СтрРеквизитов = СтрРеквизитов + ?(СтрРеквизитов = "", "", ", ") + Реквизит.Имя;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ДанныеТЧ.Свернуть(СтрРеквизитов);
Для Каждого тКолонка ИЗ ДанныеТЧ.Колонки Цикл
Для Каждого тСтрока ИЗ ДанныеТЧ Цикл
Если НЕ ЗначениеЗаполнено(тСтрока[тКолонка.Имя]) Тогда
Продолжить;
КонецЕсли;
МетаданныеЗначения = Метаданные.НайтиПоТипу(ТипЗнч(тСтрока[тКолонка.Имя]));
Если МетаданныеЗначения = Неопределено Тогда
Продолжить;
КонецЕсли;
ЕСли ПравоДоступа("Чтение", МетаданныеЗначения) И Метаданные.Документы.Содержит(МетаданныеЗначения) Тогда
Если СписокРеквизитов.НайтиПоЗначению(тСтрока[тКолонка.Имя]) = Неопределено Тогда
СписокРеквизитов.Добавить(тСтрока[тКолонка.Имя]);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Для Каждого СтрокаРеквизитов Из СписокРеквизитов Цикл
РеализацияРодитель = ПолучитьРодительскийДокументРеализации(СтрокаРеквизитов.Значение, РеализацияРодитель);
КонецЦикла;
Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Ссылка
|ИЗ Документ." + МетаданныеДокумента.Имя + "
|ГДЕ
| Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Если ТипЗнч(Выборка.Ссылка) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
РеализацияРодитель = Выборка.Ссылка;
КонецЕсли;
КонецЕсли;
Возврат РеализацияРодитель;
КонецФункции
Показать
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот