8.х ошибка при проведении

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем coolniks, 20 июн 2010.

  1. TopicStarter Overlay
    coolniks
    Offline

    coolniks

    Регистрация:
    20 июн 2010
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    при проведении документа ОказаниеУслуги,выдает такое сообщение:Ошибка при выполнении обработчика - '{Документ.ОказаниеУслуги(63)}: Поле объекта не обнаружено (КоличествоОстатокНаСкладе)'
    по причине:
    {Документ.ОказаниеУслуги(63)}: Поле объекта не обнаружено (КоличествоОстатокНаСкладе)



    Вот сам модуль.......


    Код:
    Процедура ОбработкаПроведения(Отказ,Режим)
    Запрос=Новый Запрос;
    Если Режим=РежимПроведенияДокумента.Оперативный Тогда
    Запрос.Текст="ВЫБРАТЬ
    |	ОказаниеУслугиПереченьНоменклатуры.Номенклатура,
    |	ОказаниеУслугиПереченьНоменклатуры.Количество,
    |	ОказаниеУслугиПереченьНоменклатуры.Сумма,
    |	ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
    |	СтоимостьМатериаловОстатки.СтоимостьОстаток,
    |	ОстаткиМатериаловОстатки.КоличествоОстаток,
    |	ОстаткиМатериаловОстаткиНаСкладе.КоличествоОстаток КАК КоличествоНаСкладе
    |ИЗ
    |	Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(&МоментВремени, Материал В (&СписокНоменклатурыДокумента)) КАК СтоимостьМатериаловОстатки
    |		ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура = СтоимостьМатериаловОстатки.Материал
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(&МоментВремени, Материал В (&СписокНоменклатурыДокумента)) КАК ОстаткиМатериаловОстатки
    |		ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура = ОстаткиМатериаловОстатки.Материал
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(
    |				&МоментВремени,
    |				Материал В (&СписокНоменклатурыДокумента)
    |					И Склад = &СкладВДокументе) КАК ОстаткиМатериаловОстаткиНаСкладе
    |		ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура = ОстаткиМатериаловОстаткиНаСкладе.Материал
    |ГДЕ
    |	ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка
    |
    |ДЛЯ ИЗМЕНЕНИЯ
    |	РегистрНакопления.ОстаткиМатериалов.Остатки,
    |	РегистрНакопления.СтоимостьМатериалов.Остатки";
    
    Запрос.УстановитьПараметр("СкладВДокументе",Склад);
    Иначе
    Запрос.Текст="ВЫБРАТЬ
    |	ОказаниеУслугиПереченьНоменклатуры.Номенклатура,
    |	ОказаниеУслугиПереченьНоменклатуры.Количество,
    |	ОказаниеУслугиПереченьНоменклатуры.Сумма,
    |	ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
    |	СтоимостьМатериаловОстатки.СтоимостьОстаток,
    |	ОстаткиМатериаловОстатки.КоличествоОстаток
    |ИЗ
    |	Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(&МоментВремени, Материал В (&СписокНоменклатурыДокумента)) КАК СтоимостьМатериаловОстатки
    |		ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура = СтоимостьМатериаловОстатки.Материал
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(&МоментВремени, Материал В (&СписокНоменклатурыДокумента)) КАК ОстаткиМатериаловОстатки
    |		ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура = ОстаткиМатериаловОстатки.Материал
    |ГДЕ
    |	ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка
    |
    |ДЛЯ ИЗМЕНЕНИЯ
    |	РегистрНакопления.ОстаткиМатериалов.Остатки,
    |	РегистрНакопления.СтоимостьМатериалов.Остатки";				  
    
    КонецЕсли;
    Запрос.УстановитьПараметр("МоментВремени",МоментВремени());
    Запрос.УстановитьПараметр("СписокНоменклатурыДокумента",ПереченьНоменклатуры.ВыгрузитьКолонку("Номенклатура"));
    Запрос.УстановитьПараметр("Ссылка",Ссылка);
    
    ВыборкаРезультатаЗапроса=Запрос.Выполнить().Выбрать();
    Пока ВыборкаРезультатаЗапроса.Следующий()Цикл
    //Проверить остаток при оперативном проведении
    Если Режим=РежимПроведенияДокумента.Оперативный Тогда
    Если ВыборкаРезультатаЗапроса.ВидНоменклатуры=Перечисления.ВидыНоменклатуры.Материал Тогда 
    Остаток=?(ВыборкаРезультатаЗапроса.КоличествоОстатокНаСкладе=Null,0,
    ВыборкаРезультатаЗапроса.КоличествоОстатокНаСкладе);
    Если Остаток<ВыборкаРезультатаЗапроса.Количество Тогда
    Сообщить("Материала"+СокрЛП(ВыборкаРезультатаЗапроса.Номенклатура)+"имеется только"+Остаток);
    Отказ=Истина;
    Возврат;
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    //СформироватьДвижения
    Если ВыборкаРезультатаЗапроса.ВидНоменклатуры=Перечисления.ВидыНоменклатуры.Материал Тогда
    //регистр ОстаткиМатериалов Расход
    Движение=Движения.ОстаткиМатериалов.Добавить();
    Движение.ВидДвижения=ВидДвиженияНакопления.Расход;
    Движение.Период=Дата;
    Движение.Материал=ВыборкаРезультатаЗапроса.Номенклатура;
    Движение.Склад=Склад;
    Движение.Количество=ВыборкаРезультатаЗапроса.Количество;
    //регистр СтоимостьМатериалов Расход
    Движение=Движения.СтоимостьМатериалов.Добавить();
    Движение.ВидДвижения=ВидДвиженияНакопления.Расход;
    Движение.Период=Дата;
    Движение.Материал=ВыборкаРезультатаЗапроса.Номенклатура;
    //расчитать стоимость материала
    СтоимостьМатериала=?(ВыборкаРезультатаЗапроса.КоличествоОстаток=Null,0,
    ВыборкаРезультатаЗапроса.СтоимостьОстаток/ВыборкаРезультатаЗапроса.КоличествоОстаток);
    Движение.Стоимость=СтоимостьМатериала*ВыборкаРезультатаЗапроса.Количество;
    //регистр Управленческий
    //первая проводка
    //Д б2(ДебиторскаяЗадолженность)-К 90(Капитал)-розничная сумма
    Движение=Движения.Управленческий.Добавить();
    Движение.СчетДт=ПланыСчетов.Основной.ДебиторскаяЗадолженность;
    Движение.СчетКт=ПланыСчетов.Основной.Капитал;
    Движение.Период=Дата;
    Движение.Сумма=ВыборкаРезультатаЗапроса.Сумма;
    Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Клиенты]=Клиент;
    //вторая проводка
    //Д 90(Капитал)-К 41(Товары)-себестоимость
    Движение=Движения.Управленческий.Добавить();
    Движение.СчетДт=ПланыСчетов.Основной.Капитал;
    Движение.СчетКт=ПланыСчетов.Основной.Товары;
    Движение.Период=Дата;
    Движение.Сумма=СтоимостьМатериала*ВыборкаРезультатаЗапроса.Количество;
    Движение.КоличествоКт=ВыборкаРезультатаЗапроса.Количество;
    Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Материалы]=
    ВыборкаРезультатаЗапроса.Номенклатура;
    КонецЕсли;
    //регистр Продажи
    Движение=Движения.Продажи.Добавить();
    Движение.Период=Дата;
    Движение.Номенклатуры=ВыборкаРезультатаЗапроса.Номенклатура;
    Движение.Клиент=Клиент;
    Движение.Мастер=Мастер;
    Движение.Количество=ВыборкаРезультатаЗапроса.Количество;
    Движение.Выручка=ВыборкаРезультатаЗапроса.Сумма;
    Если ВыборкаРезультатаЗапроса.ВидНоменклатуры=Перечисления.ВидыНоменклатуры.Материал Тогда
    Движение.Стоимость=СтоимостьМатериала*ВыборкаРезультатаЗапроса.Количество;
    Иначе
    Движение.Стоимость=0;
    КонецЕсли;
    КонецЦикла;
    //записать движения регистров
    Движения.ОстаткиМатериалов.Записать();
    Движения.СтоимостьМатериалов.Записать();
    Движения.Продажи.Записать();
    
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    1. В ветке ИНАЧЕ такого поля нет
    2. Если есть левое соединение - то надо делать проверку на NULL.
  3. TopicStarter Overlay
    coolniks
    Offline

    coolniks

    Регистрация:
    20 июн 2010
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    а вы сможете как-нить подсказать,я уже месяц пытаюсь исправить проблему,может базу скинуть?буду весьма благодарен
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    в общем так

    в первом запросе меняем строку

    | ОстаткиМатериаловОстаткиНаСкладе.КоличествоОстаток КАК КоличествоНаСкладе


    на

    | ЕстьNull(ОстаткиМатериаловОстаткиНаСкладе.КоличествоОстаток,0) КАК КоличествоНаСкладе

    Во втором


    | ОстаткиМатериаловОстатки.КоличествоОстаток


    на

    | ЕстьNull(ОстаткиМатериаловОстатки.КоличествоОстаток,0) КАК КоличествоНаСкладе
  5. TopicStarter Overlay
    coolniks
    Offline

    coolniks

    Регистрация:
    20 июн 2010
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Вся та же ошибка,никаких изменений
  6. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    А вы в можете выделить эту 63 строку в которой ошибка, что бы мы могли понять в запросе или где то еще ошибка
  7. TopicStarter Overlay
    coolniks
    Offline

    coolniks

    Регистрация:
    20 июн 2010
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Остаток=?(ВыборкаРезультатаЗапроса.КоличествоОстатокНаСкладе=Null,0,
  8. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Судя по всему что то в первом запросе. я бы после выполнения запроса выгрузил его в Таблицу значений и проанализировал колонку КоличествоОстатокНаСкладе.
Похожие темы
  1. Elenachka
    Ответов:
    7
    Просмотров:
    899
  2. Sheriff
    Ответов:
    18
    Просмотров:
    724
  3. andryscha92
    Ответов:
    0
    Просмотров:
    148
Загрузка...

Поделиться этой страницей