Имя: Пароль:
1C
 
Проблема в 15 занятии. Радченко 1С
,
0 zane
 
13.02.23
16:52
Прошу помочь решить проблему. После редактирования кода в модулях объекта документов Приходная накладная и Оказание услуг, при проведении документа Оказание услуг появляется следующая ошибка:

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

[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
{(18, 5)}: Ожидается выражение "ВЫБРАТЬ"
<<?>>ОказаниеУслугиПереченьНоменклатуры.НаборСвойств

Код модуля объекта Оказание услуг:

Процедура ОбработкаПроведения(Отказ, Режим)
    
     Движения.ОстаткиМатериалов.Записывать = Истина;
     Движения.СтоимостьМатериалов.Записывать = Истина;
     Движения.Продажи.Записывать = Истина;
    
     // Создать менеджер временных таблиц
     МенеджерВТ = Новый МенеджерВременныхТаблиц;

     #Область НоменклатураДокумента
     Запрос = Новый Запрос;

     // Укажем, какой менеджер временных таблиц использует этот запрос
     Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

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

     Запрос.УстановитьПараметр("Ссылка", Ссылка);

     РезультатЗапроса = Запрос.Выполнить();
     #КонецОбласти

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

    // Установим необходимость блокировки данных в регистрах СтоимостьМатериалов
    // и ОстаткиМатериалов
    Движения.СтоимостьМатериалов.БлокироватьДляИзменения = Истина;
    Движения.ОстаткиМатериалов.БлокироватьДляИзменения = Истина;

    // Запишем пустые наборы записей, чтобы читать остатки без учета данных в документе
    Движения.СтоимостьМатериалов.Записать();
    Движения.ОстаткиМатериалов.Записать();

    РезультатЗапроса = Запрос2.Выполнить();

    // ТЗ = РезультатЗапроса.Выгрузить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
         Если ВыборкаДетальныеЗаписи.Количество = 0 Тогда
               СтоимостьМатериала = 0;
         Иначе
               СтоимостьМатериала = ВыборкаДетальныеЗаписи.Стоимость
                                            / ВыборкаДетальныеЗаписи.Количество;
         КонецЕсли;
                                        
         Если ВыборкаДетальныеЗаписи.ВидНоменклатуры =
                            Перечисления.ВидыНоменклатуры.Материал Тогда
                            
         // Регистр ОстаткиМатериалов Расход
         Движение = Движения.ОстаткиМатериалов.Добавить();
         Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
         Движение.Период = Дата;
         Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;
         Движение.НаборСвойств = ВыборкаДетальныеЗаписи.НаборСвойств;
         Движение.Склад = Склад;
         Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;
      
         // Регистр СтоимостьМатериалов Расход
         Движение = Движения.СтоимостьМатериалов.Добавить();
         Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
         Движение.Период = Дата;
         Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;
         Движение.Стоимость = ВыборкаДетальныеЗаписи.КоличествоВДокументе
                                                      * СтоимостьМатериала;
    КонецЕсли;
                                                  
    // Регистр Продажи
    Движение = Движения.Продажи.Добавить();
    Движение.Период = Дата;
    Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
    Движение.Клиент = Клиент;
    Движение.Мастер = Мастер;
    Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;
    Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе;
    Движение.Стоимость = СтоимостьМатериала *
                                 ВыборкаДетальныеЗаписи.КоличествоВДокументе;
КонецЦикла;
                            
Движения.Записать();
#КонецОбласти

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

КонецПроцедуры
1 Fedor-1971
 
13.02.23
16:58
(0) Тебе написали, что реквизита НаборСвойств там где ты его ищешь нет
Проверь конструктором запроса (сам сделай запрос, а не копируй из учебника)
2 Kassern
 
13.02.23
17:00
(0) В ТЧ ПереченьНоменклатуры есть у вас реквизит НаборСвойств? Какой тип реквизита?
3 zane
 
13.02.23
17:05
Есть, тип реквизита СправочникСсылка.ВариантыНоменклатуры
4 Kassern
 
13.02.23
17:12
(3) В конструктор запроса заходит?
5 zane
 
13.02.23
17:18
Нет
6 DrLekter
 
13.02.23
17:21
В 18 строке точка с запятой вместо запятой
7 vicof
 
13.02.23
17:22
(6) +1
8 zane
 
13.02.23
17:27
(6) Не помогло
9 Kassern
 
13.02.23
17:39
(8) Покажите как исправили
10 zane
 
13.02.23
17:40
(9)  Запрос.Текст =
          "ВЫБРАТЬ
          |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура;
          |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры
          |                                                    КАК ВидНоменклатуры,
          |    ОказаниеУслугиПереченьНоменклатуры.НаборСвойств,
          |    СУММА(ОказаниеУслугиПереченьНоменклатуры.Количество)
          |                                                    КАК КоличествоВДокументе,
          |    СУММА(ОказаниеУслугиПереченьНоменклатуры.Сумма) КАК СуммаВДокументе
          |ПОМЕСТИТЬ НоменклатураДокумента
          |ИЗ
          |    Документ.ОказаниеУслуги.ПереченьНоменклатуры
          |                                          КАК ОказаниеУслугиПереченьНоменклатуры
          |ГДЕ
          |    ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка
          |СГРУППИРОВАТЬ ПО
          |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура,
          |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры;
          |    ОказаниеУслугиПереченьНоменклатуры.НаборСвойств";
11 Kassern
 
13.02.23
17:40
(10) Ну и где вы ; убрали??
|    ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры;
          |    ОказаниеУслугиПереченьНоменклатуры.НаборСвойств";
12 Kassern
 
13.02.23
17:41
Вам же все разжевали в (6) , и 1ска вам даже ругнулась на 18 строчку в модуле, где ошибка. Жмякаете Ctrl+G и вбиваете номер строчки. Будет видно где косяк.
13 OldCondom
 
13.02.23
17:45
(12) а ты посмотри внимательнее. Неправильно разжевали!)) ТС все сделал согласно инструкции: в 18 строке МОДУЛЯ поменял запятую на точку с запятой.
14 zane
 
13.02.23
17:48
Помогло, спасибо. (12) я не знал, что 18 строка это имеется ввиду строка запроса
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.