Имя: Пароль:
1C
1С v8
не могу найти ошибку в листинге по книге Радченко
0 mikkijon
 
06.10.19
18:01
Здравствуйте многоуважаемые форумчане!!!
Помогите пожалуйста новичку. Изучаю "1С Предприятия" версии "8.3". И застрял на 14 занятии. А именно оптимизации документа "Оказание услуги". Там нужно было составить запрос с временной таблицей, листинг ниже.

Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

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

        

    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Она мне постоянно пишет что поле "Сумма не найдено". Я уже не знаю куда смотреть и что еще можно проверить вроде у меня все правильно как сказано в Книге Радченко .....
Подскажите пожалуйста что я не правильно делаю
Заранее благодарю!!!
1 Mankubus
 
06.10.19
18:08

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


здесь создается таблица НоменклатураВДокументе с полями Номенклатура, ВидНоменклатуры, КоличествоВДокументе


ЫБРАТЬ
                    |    НоменклатураВДокументе.Номенклатура КАК Номенклатура,
                    |    НоменклатураВДокументе.ВидНоменклатуры КАК ВидНоменклатуры,
                    |    НоменклатураВДокументе.КоличествоВДокументе КАК КоличествоВДокументе,
                    |    ЕСТЬNULL(СтоимостьМатериаловОстатки.СтоимостьОстаток, 0) КАК Стоимость,
                    |    ЕСТЬNULL(ОстаткиМатериаловОстатки.КоличествоОстаток, 0) КАК Количество,
                    |    НоменклатураВДокументе.Сумма КАК Сумма
                    |ИЗ
                    |    НоменклатураВДокументе КАК НоменклатураВДокументе


здесь из таблицы НоменклатураВДокументе  выбираются поля  Номенклатура, ВидНоменклатуры, КоличествоВДокументе и Сумма

с чего вдруг выбирается поле Сумма если такое поля не помещалось в таблицу НоменклатураВДокументе ?
2 mikkijon
 
06.10.19
18:16
Не понял вашего вопроса
В смысле не помещалось?
3 ДенисЧ
 
06.10.19
18:19
(2) в запросе, создающем НоменклатураВДокументе - нет поля выбора суммы.
4 mikkijon
 
06.10.19
18:25
Опишите пожалуйста по подробнее.
Я просто не понимаю что значит "Нет поля Суммы"
Я все делал как указано в книге Радченко. Но только там было указано "СуммаВДокументе".
5 hhhh
 
06.10.19
18:32
(4) вот здесь у вас нет поля сумма.

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


а здесь

                  |    НоменклатураВДокументе.Сумма КАК Сумма


вы пишете Сумма. Поле которого нет.
6 shuhard
 
06.10.19
19:06
(2)[Я все делал как указано в книге Радченко]
у него есть свой форум для коллег по несчастью
http://devtrainingforum.v8.1c.ru/forum/
7 Надо работать
 
06.10.19
19:09
(0) ошибки в листинге - это хорошо, пока найдешь и исправишь - разберёшься как оно все работает

А так скопировал, компильнул и забыл сразу )