Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Обратиться в запросе к реквизиту справочника

Обратиться в запросе к реквизиту справочника
Я
   ivangrant
 
26.03.19 - 08:01
Как обратиться в запросе к реквизиту справочника, где реквизит справочника - это перечисления?
Должен получится процесс записи в регистр бухглатерии в зависимости от вариант реквизита справочника.
Учсловно: если это комплект, значит запись будет по одной проводке на счет "Товары", если это деталь, то запись должна пойти по другой проводке на счёт "Материалы",
Чего я "наколдовал" (документ РасходнаяНакладная):
_______

Процедура ОбработкаПроведения(Отказ, Режим)

    Движения.Управленческий.Записывать = Истина;
    Движения.Управленческий.Записать();
    
    //Блокировка = Новый БлокировкаДанных;
    //ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ТоварыНаСкладах");
    //ЭлементБлокировки.УстановитьЗначение("Качество", Справочники.Качество.НайтиПоКоду("1"));
    //ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
    //ЭлементБлокировки.ИсточникДанных = ДокументОбъект.ВозвратнаяТара;
    //ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
    //ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Склад", "Склад");
    //Блокировка.Заблокировать();

         //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
        |    РасходнаяНакладнаяСписокНоменклатуры.Свойство КАК Свойство,
        |    РасходнаяНакладная.Склад,
        |    СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК КоличествоДок,
        |    СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК СуммаДок,
        |    РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры
        |ПОМЕСТИТЬ Документ_ТЧ
        |ИЗ
        |    Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК РасходнаяНакладная
        |        ПО РасходнаяНакладнаяСписокНоменклатуры.Ссылка = РасходнаяНакладная.Ссылка
        |ГДЕ
        |    РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
        |
        |СГРУППИРОВАТЬ ПО
        |    РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
        |    РасходнаяНакладнаяСписокНоменклатуры.Свойство,
        |    РасходнаяНакладная.Склад,
        |    РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры
        |
        |ИНДЕКСИРОВАТЬ ПО
        |    Номенклатура,
        |    Свойство
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    Документ_ТЧ.Номенклатура,
        |    Документ_ТЧ.Свойство,
        |    Документ_ТЧ.Склад,
        |    Документ_ТЧ.КоличествоДок,
        |    Документ_ТЧ.СуммаДок,
        |    УправленческийОборотыТовары.СуммаОборотДт КАК СуммаОборотДтТовары,
        |    УправленческийОборотыТовары.КоличествоОборотДт КАК КоличествоОборотДтТовары,
        |    ВЫБОР
        |        КОГДА УправленческийОборотыТовары.КоличествоОборотДт = 0
        |            ТОГДА 0
        |        ИНАЧЕ УправленческийОборотыТовары.СуммаОборотДт / УправленческийОборотыТовары.КоличествоОборотДт * УправленческийОборотыТовары.КоличествоОборотКт
        |    КОНЕЦ КАК СуммаОборотКтФормула,
        |    УправленческийОборотыМатериалы.СуммаОборотДт КАК СуммаОборотДтМатериалы,
        |    УправленческийОборотыМатериалы.КоличествоОборотДт КАК КоличествоОборотДтматериалы,
        |    ВЫБОР
        |        КОГДА Документ_ТЧ.Номенклатура.ВидНоменклатуры = ""Товары""
        |            ТОГДА УправленческийОборотыТовары.СуммаОборотДт
        |        ИНАЧЕ УправленческийОборотыМатериалы.СуммаОборотДт
        |    КОНЕЦ КАК СуммаОборотДтФормула,
        |    ВЫБОР
        |        КОГДА Документ_ТЧ.Номенклатура.ВидНоменклатуры = ""Товары""
        |            ТОГДА УправленческийОборотыТовары.КоличествоОборотДт
        |        ИНАЧЕ УправленческийОборотыМатериалы.КоличествоОборотДт
        |    КОНЕЦ КАК КоличествоОборотДтФормула
        |ИЗ
        |    Документ_ТЧ КАК Документ_ТЧ
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.Обороты(
        |                ,
        |                ,
        |                ,
        |                Счет = &Товары,
        |                &ВидыСубконто,
        |                (Субконто1, Субконто2) В
        |                    (ВЫБРАТЬ
        |                        Документ_ТЧ.Номенклатура,
        |                        Документ_ТЧ.Свойство
        |                    ИЗ
        |                        Документ_ТЧ КАК Документ_ТЧ),
        |                ,
        |                ) КАК УправленческийОборотыТовары
        |        ПО Документ_ТЧ.Номенклатура = УправленческийОборотыТовары.Субконто1
        |            И Документ_ТЧ.Свойство = УправленческийОборотыТовары.Субконто2,
        |    РегистрБухгалтерии.Управленческий.Обороты(
        |            ,
        |            ,
        |            ,
        |            Счет = &Материалы,
        |            &ВидыСубконто,
        |            (Субконто1, Субконто2) В
        |                (ВЫБРАТЬ
        |                    Документ_ТЧ.Номенклатура,
        |                    Документ_ТЧ.Свойство
        |                ИЗ
        |                    Документ_ТЧ КАК Документ_ТЧ),
        |            ,
        |            ) КАК УправленческийОборотыМатериалы";
    
    ВидыСубконто = Новый     Массив;
    ВидыСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконто.Номенклатура);
    ВидыСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконто.СвойствоТовара);
    ВидыСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконто.Склад);
    
    Запрос.УстановитьПараметр("ВидыСубконто", ВидыСубконто);
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.УстановитьПараметр("Товары", ПланыСчетов.Управленческий.Товары);
    Запрос.УстановитьПараметр("Материалы", ПланыСчетов.Управленческий.Материалы);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        
        Нехватка = ВыборкаДетальныеЗаписи.КоличествоДок - ВыборкаДетальныеЗаписи.КоличествоОборотДт;
        Если Нехватка > 0 Тогда
            Отказ = Истина;
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Недостаточно  " +ВыборкаДетальныеЗаписи.НоменклатураПред+" в количестве "+Нехватка;
            Сообщение.Сообщить();
        КонецЕсли;
        
        Если НЕ Отказ Тогда
            
        // регистр Управленческий
        Движение = Движения.Управленческий.Добавить();
        Движение.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки;
        
        ЗначениеПеречисления = Перечисления.ВидыНоменклатуры.Комплектующие;
        
        Если ВыборкаДетальныеЗаписи.Номенклатура.ВидНоменклатуры = ЗначениеПеречисления Тогда
        Движение.СчетКт = ПланыСчетов.Управленческий.Материалы;
        Иначе
        Движение.СчетКт = ПланыСчетов.Управленческий.Товары;
        КонецЕсли;
        Движение.Период = Дата;
        
        Движение.КоличествоКт = ВыборкаДетальныеЗаписи.КоличествоДок;
            
        Себестоимость = ?(Движение.КоличествоКт = ВыборкаДетальныеЗаписи.КоличествоОборотДт, ВыборкаДетальныеЗаписи.СуммаОборотДт, ВыборкаДетальныеЗаписи.СуммаОборотДт / ВыборкаДетальныеЗаписи.КоличествоОборотДт*Движение.КоличествоКт);
            
        Движение.Сумма = Себестоимость;
        Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ВыборкаДетальныеЗаписи.Субконто1;
        Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ВыборкаДетальныеЗаписи.Субконто1;
        Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.СвойствоТовара] = ВыборкаДетальныеЗаписи.Субконто2;
        Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Склад] = ВыборкаДетальныеЗаписи.Субконто3;

        
    // регистр Управленческий
        Движение = Движения.Управленческий.Добавить();
        Движение.СчетДт = ПланыСчетов.Управленческий.Покупатели;
        Движение.СчетКт = ПланыСчетов.Управленческий.ПрибылиУбытки;
        Движение.Период = Дата;
        Движение.Сумма = ВыборкаДетальныеЗаписи.СуммаДок;
        Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ВыборкаДетальныеЗаписи.Субконто1;

КонецЕсли;
            
    КонецЦикла;
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    
    
    
    
    
        //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
_________
Не могу в запросе получить значение реквизита. Как это можно сделать?
 
 
   catena
 
1 - 26.03.19 - 08:34
КОГДА Документ_ТЧ.Номенклатура.ВидНоменклатуры = Значение(Перечисление.ВидыНоменклатуры.Товары)

Список тем форума
Рекламное место пустует  Рекламное место пустует
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.