Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: {Документ.ИмяДокумента(73)}: Поле объекта не обнаружено (Количество)
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
kasya
Помогите, пожалуйста, разобраться с ошибкой: {Документ.ИмяДокумента(73)}: Поле объекта не обнаружено (Количество)

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

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


также Количество есть в регистре, куда записываются движения - еще там можно проверить.

Могли еще ошибку допустить, когда называли реквизит Количество. ошибка в имени поля
kasya
Цитата(Домовик @ 23.01.12, 19:12) необходимо зарегистрироваться для просмотра ссылки
реквизит количество в табличной части документа отсутствует - первое, что в голову приходит


также Количество есть в регистре, куда записываются движения - еще там можно проверить.

Могли еще ошибку допустить, когда называли реквизит Количество. ошибка в имени поля
Да вроде проверила, в норме все... Голова кругом.

[тут что-то было]
Домовик
тз=Запрос.Выполнить().Выгрузить(); и точку останова. В отладчике посмотрите поля таблицы тз.


Запрос.выполнить().Выбрать(). тоже можно посмотреть в отладчике, что ж вы получаете
kasya
Цитата(Домовик @ 23.01.12, 19:36) необходимо зарегистрироваться для просмотра ссылки
тз=Запрос.Выполнить().Выгрузить(); и точку останова. В отладчике посмотрите поля таблицы тз.


Запрос.выполнить().Выбрать(). тоже можно посмотреть в отладчике, что ж вы получаете

а куда это вставлять нужно?
Домовик
Цитата(kasya @ 23.01.12, 16:43) необходимо зарегистрироваться для просмотра ссылки
а куда это вставлять нужно?


туда, где запрос выполняете. чтобы в отладчике посмотреть структуру и содержимое таблицы.


по поводу запроса. почему вы в качестве первой таблицы взяли документ, а в поле отнесли табличную часть?
можно сразу взять табличную часть -таблицу, а из нее реквизиты - поля. или так надо?
поле количество не определено поэтому, похоже.

еще циклы по строкам внутри цикла по выборке из запроса - почему?





Да! потому-что табличную часть в качестве поля делаете. Оказывается можно и так. ))Но тип поля ТАблицаЗначений. И с ним нужно вести как с таблицей значений. индексы строк выборки и таблзнач совпадают.
alex040269
Цитата(kasya @ 23.01.12, 17:55) необходимо зарегистрироваться для просмотра ссылки
Помогите, пожалуйста, разобраться с ошибкой: {Документ.ИмяДокумента(73)}: Поле объекта не обнаружено (Количество)

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


Вопрос знаками отмечено - там КоличествоОстаток наварное
Домовик
Цитата(alex040269 @ 24.01.12, 5:43) необходимо зарегистрироваться для просмотра ссылки
Вопрос знаками отмечено - там КоличествоОстаток наварное


нет. Количество в табличной части , тут обращение как к обычному полю. а нужно обращаться через таблицу значений. Либо в запросе определять полем.


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



ТОЧТОИщем - аж вот так к значению реквизита Количество можно добраться
kasya
УРА! Работает! Спасибо за помощь! ^^
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.