Версия для печати темы (https://pro1c.org.ua/index.php?s=c822a23270092fb240ada6bc465b4b80&showtopic=62680)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Как можно получить значение реквизита?

Автор: Evgeniux 04.11.20, 13:07

Добрый день. Есть документ с комплектацией номенклатуры, при печати гарантийного талона из этого документа, в поле "срок гарантии" заносятся данные из константы (число 12). Срок гарантии зависит от целиСборки (реквизит документа).

ОбластьКомплектующие.Параметры.Гарантия = Константы.СрокГарантии.Получить();


Как можно получить значение реквизита ЦельСборки, чтобы на его основании выбирать срок гарантии?
Что-то наподобие:
Если значение реквизита ЦельСборки такое Тогда
берем данные из константы номер1
Иначе
берем данные из константы номер2

код процедуры привожу ниже

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

    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    Шапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьСобранныйПКШапка = Макет.ПолучитьОбласть("СобранныйПКШапка");
    ОбластьСПК = Макет.ПолучитьОбласть("СобранныйПК1");
    ОбластьСобранныйПК = Макет.ПолучитьОбласть("СобранныйПК");
    ОбластьКомплектующиеШапка = Макет.ПолучитьОбласть("КомплектующиеШапка");
    ОбластьКомплектующие = Макет.ПолучитьОбласть("Комплектующие");
    Подвал = Макет.ПолучитьОбласть("Подвал");

    ТабДок.Очистить();

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

        ТабДок.Вывести(ОбластьЗаголовок);

        Шапка.Параметры.Заполнить(Выборка);
        
        ТабДок.Вывести(Шапка, Выборка.Уровень());

        ТабДок.Вывести(ОбластьСобранныйПКШапка);
        ВыборкаСобранныйПК = Выборка.СобранныйПК.Выбрать();
    

        Пока ВыборкаСобранныйПК.Следующий() Цикл
            ОбластьСобранныйПК.Параметры.Заполнить(ВыборкаСобранныйПК);
            ОбластьСПК.Параметры.Заполнить(ВыборкаСобранныйПК);
            ТабДок.Вывести(ОбластьСобранныйПК, ВыборкаСобранныйПК.Уровень());
            ТабДок.Вывести(ОбластьСПК, ВыборкаСобранныйПК.Уровень());

        КонецЦикла;
        

        ТабДок.Вывести(ОбластьКомплектующиеШапка);
        ВыборкаКомплектующие = Выборка.Комплектующие.Выбрать();
        Пока ВыборкаКомплектующие.Следующий() Цикл
            ОбластьКомплектующие.Параметры.Заполнить(ВыборкаКомплектующие);
            
            
            // сюда добавить условие выбора константы со сроком гарантии
            
            
    ////        Если Выборка.НайтиСледующий("Тендер, ") Тогда
    ////                    ОбластьКомплектующие.Параметры.Гарантия = Константы.СрокГарантииТендер.Получить();
    ////                Иначе
    ////                 ОбластьКомплектующие.Параметры.Гарантия = Константы.СрокГарантии.Получить();
    ////
    ////            КонецЕсли;
    ОбластьКомплектующие.Параметры.Гарантия = Константы.СрокГарантии.Получить();
                         ТабДок.Вывести(ОбластьКомплектующие, ВыборкаКомплектующие.Уровень());
            
        КонецЦикла;

        Подвал.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(Подвал);

        ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;
    //}}
КонецПроцедуры


Автор: andreydv87 04.11.20, 13:31

Evgeniux @ Сегодня, 14:07 * ,
ЦельСборки это реквизит чего, документа Документ.СборкаПК?
Если да, то добавьте в запрос ЦельСборки.
Если это реквизит другого документа, то ещё один запрос надо делать.

Автор: Evgeniux 04.11.20, 16:17

andreydv87 @ Сегодня, 14:31 * ,
да, ЦельСборки это реквизит документа СборкаПК (Документ.СборкаПК).

andreydv87 @ Сегодня, 14:31 * ,

"ВЫБРАТЬ
    |    СборкаПК.Дата,
    |    СборкаПК.Номер,
    |    СборкаПК.ЦельСборки,

ЦельСборки уже есть в запросе.

Автор: denis84 04.11.20, 16:58

Evgeniux @ Сегодня, 16:17 * ,

Цитата
ОбластьКомплектующие.Параметры.Гарантия = Константы.СрокГарантии.Получить();

так Вы вот прописали, откуда получаете гарантию

Напишите сюда условие
Если СборкаПК.ЦельСборки = "некое значение" тогда
ОбластьКомплектующие.Параметры.Гарантия = Константы.СрокГарантии.Получить();
Иначе

конецесли;

Автор: volodya1122 05.11.20, 10:31

denis84 @ Вчера, 16:58 * ,

Поправка

Если Выборка.ЦельСборки = "некое значение" тогда

Автор: Evgeniux 06.11.20, 8:48

volodya1122 @ Вчера, 11:31 * ,

спасибо, разобрался. Но в таком виде не работает

Если Выборка.ЦельСборки = "некое значение" тогда

а работает в таком виде
Если ВРег (Выборка.ЦельСборки) = ВРег("некое значение") Тогда

Автор: volodya1122 06.11.20, 9:03

Цитата(Evgeniux @ 06.11.20, 8:48) *
а работает в таком виде

Если ВРег (Выборка.ЦельСборки) = ВРег("некое значение") Тогда


Значит несовпадение Типов. Например одно - это строка, а второе это Справочник, или Перечисление

Автор: andreydv87 06.11.20, 12:39

Evgeniux @ Сегодня, 9:48 * ,
Так какой тип данных у реквизита ЦельСборки?

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua