Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 01:38

Ошибка "Поле объекта не обнаружено (Материал)

Автор Danonya, 04 мар 2015, 11:05

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

Danonya

Здравствуйте. При выполнении оптимизации процедуры проведения документа "Оказание услуги" (по книге Радченко), написав код в модуле документа (он находится ниже) в режиме откладка при проведении документов выходит ошибка "Поле объекта не обнаружено (Материал)". Уже все перерыла,2 дня парюсь незнаю что делать. Кто может помогите:(
Базу тоже подкрепила.
Процедура ОбработкаПроведения(Отказ, Режим)

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

   Пока ВыборкаРезультатаЗапроса.Следующий() Цикл

   // Проверить остаток при оперативном проведении.
   Если Режим = РежимПроведенияДокумента.Оперативный Тогда
  Если ВыборкаРезультатаЗапроса.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда
  Остаток = ?(ВыборкаРезультатаЗапроса.КоличествоОстатокНаСкладе = Null, 0, ВыборкаРезультатаЗапроса.КоличествоОстатокНаСкладе);
Если Остаток < ВыборкаРезультатаЗапроса.Количество
Тогда
Сообщить("Материала " + СокрЛП(ВыборкаРезультатаЗапроса.Номенклатура)
+ " имеется только " + Остаток);
Отказ = Истина;
Возврат;
КонецЕсли;
  КонецЕсли;
   КонецЕсли;

       // Сформировать движения.
       Если ВыборкаРезультатаЗапроса.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда

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

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

   // Первая проводка: Д 62(ДебиторскаяЗадолженность) - К 90 (Капитал) - розничная сумма.
   Движение        = Движения.Управленческий.Добавить();
   Движение.СчетДт =  ПланыСчетов.Основной.ДебиторскаяЗадолженность;
   Движение.СчетКт = ПланыСчетов.Основной.Капитал;
   Движение.Период = Дата;
   Движение.Сумма  = ВыборкаРезультатаЗапроса.Сумма;
   Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Клиенты] = Клиент;

   // Вторая проводка: Д 90 (Капитал) - К 41 (Товары) - себестоимость.
   Движение = Движения.Управленческий.Добавить();
   Движение.СчетДт       = ПланыСчетов.Основной.Капитал;
   Движение.СчетКт       = ПланыСчетов.Основной.Товары;
   Движение.Период       = Дата;
   Движение.Сумма        = СтоимостьМатериала * ВыборкаРезультатаЗапроса.Количество;
   Движение.КоличествоКт = ВыборкаРезультатаЗапроса.Количество;
   Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Материалы] =
   ВыборкаРезультатаЗапроса.Номенклатура;


КонецЕсли;

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

// Записать движения регистров
Движения.ОстаткиМатериалов.Записать();
Движения.СтоимостьМатериалов.Записать();
Движения.Продажи.Записать();

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

SitnovaMarina

На какую строчку кода ругается?

Скиньте скин всей ошибки (или перепишите), нажав на Подробно..
Народная мудрость: Программу встречают по интерфейсу

cska-fanat-kz

Замените по всему тексту "Материал" на "Метериал" - как у вас задано значение перечисления - и будет вам счастье ))

Оффтоп: А чего это вы под 8.1 программите?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Дмитрий@

Проверьте перечисление "Виды номенклатуры", есть ли элемент "материал".
Проверьте регистр накопление на присутствие поля "материал".
И если можно скиньте незаархивированную базу

Danonya

Цитата: SitnovaMarina от 04 мар 2015, 11:20
На какую строчку кода ругается?

Скиньте скин всей ошибки (или перепишите), нажав на Подробно..

Добавлено: 04 мар 2015, 11:44


Всем спасибо! Ошибка найдена!

Теги:

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

Рейтинг@Mail.ru

Поиск