Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
13 фев 2025, 19:12

Радченко Практическое пособие разработчика занятие 14

Автор sayateezy, 05 фев 2025, 03:42

0 Пользователей и 1 гость просматривают эту тему.

sayateezy

Добрый день, занимаюсь по книге Радченко и застопорился на 14 занятии при проведении документа выдает ошибку. Вроде делал все по книге, потом даже в ютубе посмотрел видео как человек выполнял это же занятие. И все равно ошибка:
<<<

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

[ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка]

>>>

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

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

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

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

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

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


bsn-chita

Стоимость у вас есть в Запрос2, а выборку вы обходите по Запрос.
Ставьте точку останова или остановку по ошибке (флаг) и вычисляйте выражения (что хотим видеть, что есть по факту).

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск