Имя: Пароль:
1C
 
Радченко урок 14 (практическое пособие разработчика 8,2)
0 Ruslan1303
 
18.12.23
14:20
Добрый день!
Просматривал код опечаток не вижу все по книге делал, не получается разобраться в данной ошибке. скачал пустую тестовую конфу (1С:Предприятие 8.3, учебная версия (8.3.13.1644)).
Подскажите где ошибаюсь сдвинуться дальше не могу.
Ниже указал запрос ошибка при проведении документа (оказаниеуслуги) выводит ошибку:
/////////////
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.ОказаниеУслуги.МодульОбъекта(87)}: Поле объекта не обнаружено (Стоимость)
            СтоимостьМатериала = ВыборкаДетальныеЗаписи.Стоимость / ВыборкаДетальныеЗаписи.Количество;

///////////////

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

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

        //РегистрПродажи
        Движение = Движения.Продажи.Добавить();
        Движение.Период = Дата;
        Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
        Движение.Клиент = Клиент;
        Движение.Мастер = Мастер;
        Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;
        Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе;
        Движение.Стоимость = ВыборкаДетальныеЗаписи.СтоимостьМатериала * ВыборкаДетальныеЗаписи.КоличествоВДокументе;

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

    
        
    КонецПроцедуры

///////////////////////////////////////////////////////////
1 Ruslan1303
 
18.12.23
14:24
по учебнику на пред страницах "стоимость" надо было удалить на форме документа "оказаниеУслуги" и на форме документа
2 Волшебник
 
18.12.23
14:31
У Вас ошибка:
"Поле объекта не обнаружено (Стоимость)"
в переменной "ВыборкаДетальныеЗаписи" нет поля "Стоимость"
3 Волшебник
 
18.12.23
14:33
стр 195 "Анализ кода с помощью отладчика"
4 MMB
 
18.12.23
15:14
ВыборкаДетальныеЗаписи = Результат.Выбрать();
    
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Вот тут ошибка видимо. Результат - это из Запрос2, там стоимость есть. А РезультатЗапроса это из Запрос, там стоимости нет
5 MMB
 
18.12.23
15:15
(4) Вторую строку из этих двух соответственно закомментировать