Имя: Пароль:
1C
1С v8
Ошибка при проведении Документа
0 Pantagruel
 
11.06.15
15:12
При попытке проведения Документа выкидывает с ошибкой. Не удается понять в чем проблема. Пробовал выгрузить Результат запроса в Таблицу значений - все поля выгружаются корректно.


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


Процедура из МодуляОбъекта Документ.ОказаниеУслуги


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

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

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

    КонецЦикла;
    
КонецПроцедуры
1 Happy Bear
 
11.06.15
15:15
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
2 Happy Bear
 
11.06.15
15:16
РезультатЗапроса = Запрос.Выполнить();
3 Happy Bear
 
11.06.15
15:16
Запрос.Текст =...
4 Happy Bear
 
11.06.15
15:16
догадался?
5 samozvanec
 
11.06.15
15:19
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        
            Если ВыборкаДетальныеЗаписи.Количество = 0 Тогда
                СтоимостьМатериала = 0;

сильно... на .Количество без скобок не ругается?
6 Tatitutu
 
11.06.15
15:20
А тебя в Запрос1 нет Стоимость

А Запрос2 вообще не отрабатывается


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

замени на

ВыборкаДетальныеЗаписи = Результат.Выбрать();
7 samozvanec
 
11.06.15
15:22
(5) пардон муа, есть поле Количество)
8 Pantagruel
 
11.06.15
15:25
(4) неа :(
(5) не ругается
(6) Запрос1 обрабатывает Документ а Результат выгружает в временную таблицу. Запрос2 обрабатывает временную таблицу и делает выборку из Регистров накопления, и склеивает результаты
9 Pantagruel
 
11.06.15
15:27
(6) Запрос2 обрабатывается, т.к. Результат я пробовал выгрузить в Таблицу значений и там все поля заполнены корректно
10 Tatitutu
 
11.06.15
15:28
(9) замени как в (5) и попробуй
11 Одинесю
 
11.06.15
15:28
(8) И ВыборкаДетальныеЗаписи  ты получаешь из первого запроса.
12 Tatitutu
 
11.06.15
15:29
(9) Запрос2 выполняется - да, но его РЕЗУЛЬТАТ (результат запроса) у тебя не куда не поподает
13 Pantagruel
 
11.06.15
15:34
А слона то я и не заметил!))
(3) (12) Спасибо!
14 Pantagruel
 
11.06.15
15:36

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