Имя: Пароль:
1C
 
Помогите с ошибкой в 1с Практическое пособие разработчика ☑
0 Belfox
 
21.05.22
✎
16:05
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.ОказаниеУслуги.МодульОбъекта(68)}: Ошибка при вызове метода контекста (Выполнить)
    РезультатЗапроса = Запрос2.Выполнить();
по причине:
{(9, 2)}: Таблица не найдена "НоменклатураДокумента"
<<?>>НоменклатураДокумента КАК НоменклатураДокумен




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

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


    КонецЦикла;
    

    
КонецПроцедуры
1 Lexandr
 
21.05.22
✎
16:08
А где выполнение первого запроса?
2 Belfox
 
21.05.22
✎
16:13
Lexandr . Спасибо огромное!!!!
3 Belfox
 
21.05.22
✎
16:13
(1) Спасибо огромное!!!