Имя: Пароль:
1C
1С v8
Нужна помощь (ошибка при проведении) 1С:Предприятие 8.3, учебная версия (8.3.8.1933)
0 TooKTooK
 
11.11.23
18:47
Делаяю по книге (пару дней, не судите строго
М.Г. Радченко, Е.Ю. Хрусталева
1С:Предприятие 8.3.22
Практическое пособие разработчика
Примеры и типовые приемы

стр. в книге 518

Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.ОказаниеУслуги.МодульОбъекта(124)}: Поле объекта не обнаружено (НаборСвойств)
        Движение.НаборСвойств = ВыборкаДетальныеЗаписи.НаборСвойств;

Вот весь мой запрос (Помагите пожалуйста. P.S Я пока полный ноль т.ч можно поподробнее. БОЛЬШОЕ СПАСИБО!)

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

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

//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
Запрос.Текст ="ВЫБРАТЬ
2 TooKTooK
 
11.11.23
18:53
//Регистр ОстаткиМатериалов Расход
        Движение = Движения.ОстаткиМатериалов.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;
        Движение.НаборСвойств = ВыборкаДетальныеЗаписи.НаборСвойств;  ОШИБКУ ВЫДАЁТ НА ЭТОЙ СТРОКЕ
        Движение.Склад = Склад;
        Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;
3 Волшебник
 
11.11.23
18:54
(2) Гляньте отладчиком, какие поля есть в ВыборкаДетальныеЗаписи, и Вы не найдёте там НаборСвойств
4 TooKTooK
 
11.11.23
19:08
Волшебник, Большое тебе СПАСИБО!
5 TooKTooK
 
11.11.23
19:20
СПАСИБО! Я разобрался. У меня там ещё были 2 ошибки

ДЛЯ ТЕХ У КОГО ТОЖЕ ПРОБЛЕМЫ ИНФОРМАЦИЯ В ПОМОЩЬ


//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
Запрос.Текст ="ВЫБРАТЬ
               |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура,
               |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
               |    ОказаниеУслугиПереченьНоменклатуры.НаборСвойств,                          1 ОШИБКА БЫЛА (СТРОЧКИ НЕ БЫЛО)
               |    ОказаниеУслугиПереченьНоменклатуры.Количество КАК КоличествоВДокументе,   2 ОШИБКА БЫЛА (ПСЕВДОНИМА НЕ БЫЛО)
               |    ОказаниеУслугиПереченьНоменклатуры.Сумма КАК СуммаВДокументе              3 ОШИБКА БЫЛА (ПСЕВДОНИМА НЕ БЫЛО)
               |ИЗ
               |    Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры
               |ГДЕ
               |    ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка
               |
               |СГРУППИРОВАТЬ ПО
               |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура,
               |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры,
               |    ОказаниеУслугиПереченьНоменклатуры.НаборСвойств,
               |    ОказаниеУслугиПереченьНоменклатуры.Количество,
               |    ОказаниеУслугиПереченьНоменклатуры.Сумма";
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
         Если ВыборкаДетальныеЗаписи.ВидНоменклатуры=Перечисления.ВидыНоменклатуры.Материал Тогда
            
        //Регистр ОстаткиМатериалов Расход
        Движение = Движения.ОстаткиМатериалов.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;
        Движение.НаборСвойств = ВыборкаДетальныеЗаписи.НаборСвойств;
        Движение.Склад = Склад;
        Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;
6 TooKTooK
 
11.11.23
19:34
Волшебник, как глянуть отладчиком что-либо? Спасибо!
7 Волшебник
 
11.11.23
20:11
(6) А может в Радченко написано?
8 Волшебник
 
11.11.23
20:27
стр 195 "Анализ кода с помощью отладчика"
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс