Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не могу получить из запроса значение
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
sanytch
Доброго времени всем. Буду признателен за любую помощь и подсказку.
Проблема собственно в следующем. В СКД запрос работает и выдаёт все необходимые данные, но если этот же запрос выполнять в модуле то выдаёт ошибку "Поле объекта не обнаружено (Сумма). Стр.Зарплаты = Результат.ПараметрыОплаты.Сумма;"
Думается мне что это от того что Сумма находится в ПараметрыОплаты

и если СКД воспринимает это нормально, выдавая результат

то модуль ругается.
Перепробовал варианты как и в тексте запроса:
- ЗарплатаКВыплатеОрганизаций.ПараметрыОплаты.(Сумма КАК СуммаЗП)
- ЗарплатаКВыплатеОрганизаций.ПараметрыОплаты.(Сумма) КАК СуммаЗП
так и в модуле:
- Стр.Сумма = Результат.ПараметрыОплаты.СуммаЗП;
- Стр.Сумма = Результат.ПараметрыОплаты.(СуммаЗП);
и кучу других, но...
Пробовал и способом вот таким:
    Выборка = Документы.ЗарплатаКВыплатеОрганизаций.Выбрать(НачалоПериода,КонецПериода);
    Пока Выборка.Следующий() Цикл
        Стр.Дата = Выборка.Дата;
        Стр.Документ = Выборка.Номер;
        Стр.Зарплаты = Выборка.ПараметрыОплаты.Сумма;
    КонецЦикла;

но когда дело доходит до Суммы то и Суммы то нет...


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

    Пока Результат.Следующий() Цикл
        Стр = Таб.Добавить();
        Стр.Дата = Результат.Дата;
        Стр.Документ = Результат.Номер;
        Стр.Сумма = Результат.ПараметрыОплаты.Сумма;
        Сообщить("Док №: "+Стр.Документ+" от "+Стр.Дата+" на сумму "+Стр.Зарплаты);
    КонецЦикла;

Подскажите как правильно обратится к Сумме из запроса?


 ! 

необходимо зарегистрироваться для просмотра ссылки: 3
 
logist
СКД в данном случае делает работу программиста за вас, она понимает, что это табличная часть и берет всю работу на себя. В обычном запросе так не получится, т.к. "ПараметрыОплаты" - Табличная часть, и разумеется у нее нет реквизита Сумма, он есть у Строки табличной части (а вы пытаетесь обратиться к ТЧ как к Строке табличной части).

Если нужен итог по всей колонке таблицы то
|ЗарплатаКВыплатеОрганизаций.ПараметрыОплаты.(Сумма(Сумма) КАК Сумма)

Если нужна каждая строка, то тогда надо использовать в запросе саму табличную часть, а не док.
sanytch
Цитата(logist @ 24.09.16, 15:40) необходимо зарегистрироваться для просмотра ссылки
Если нужен итог по всей колонке таблицы то
|ЗарплатаКВыплатеОрганизаций.ПараметрыОплаты.(Сумма(Сумма) КАК Сумма)

пробовал и так(мне как раз итог и нужен, я сворачиваю таблицу по дате и Зарплата это только один из немногих запросов которые формируют таблицу), но
Стр.Сумма = Результат.ПараметрыОплаты.Сумма;
все равно выдает туже ошибку...
Благодарен за отзыв, Попоробую
Цитата(logist @ 24.09.16, 15:40) необходимо зарегистрироваться для просмотра ссылки
использовать в запросе саму табличную часть, а не док.


logist
Цитата(sanytch @ 24.09.16, 15:51) необходимо зарегистрироваться для просмотра ссылки
все равно выдает туже ошибку...

Вы бы отладчиком посмотрели результирующую таблицу, что бы понять что там вообще, а так занимаетесь тыканьем в никуда. В данном случае ваша сумма (в том примере который я привел) находится в поле "ПараметрыОплаты", т.е.
Стр.Сумма = Результат.ПараметрыОплаты;
sanytch
logist @ Сегодня, 15:57 необходимо зарегистрироваться для просмотра ссылки ,
Попробовал
Стр.Сумма = Результат.ПараметрыОплаты;
- ничего.
В таблице пусто!
попробовал даже
Стр.Зарплаты = Результат.Получить(4)
- пусто... Странно...
logist
Цитата(sanytch @ 24.09.16, 18:18) необходимо зарегистрироваться для просмотра ссылки
В таблице пусто!

Если бы в таблице было пусто, ваша выборка бы не выполнялась (пустой результат запроса) и ошибка бы не возникала.
"Результат.Получить(4)" это что? Это бред smile.gif

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

СГРУППИРОВАТЬ ПО
    ЗарплатаКВыплатеОрганизацийПараметрыОплаты.Ссылка.Номер,
    ЗарплатаКВыплатеОрганизацийПараметрыОплаты.Ссылка.Дата,
    ЗарплатаКВыплатеОрганизацийПараметрыОплаты.Ссылка.Проведен,
    ЗарплатаКВыплатеОрганизацийПараметрыОплаты.Ссылка.Организация

УПОРЯДОЧИТЬ ПО
    Дата
sanytch
logist @ Сегодня, 19:25 необходимо зарегистрироваться для просмотра ссылки ,
Огромнейшее спасибо за помощь, получилось с небольшими допиливанием. Спасибо что поморочились и наставили на путь истинный)

п.с. кстати
Результат.Получить(5)
выводит по индексу результат запроса (формулировка метода моя и может не совпадать с истинной:), обнаружена методом научного тыка), возвращает отбираемые запросом данные по порядку их выбора, ну т.е. в случае
ВЫБРАТЬ
    ЗарплатаКВыплатеОрганизаций.Организация,
    НАЧАЛОПЕРИОДА(ЗарплатаКВыплатеОрганизаций.Дата, ДЕНЬ) КАК Дата,
    ЗарплатаКВыплатеОрганизаций.Номер,
    ЗарплатаКВыплатеОрганизаций.Проведен,
    ЗарплатаКВыплатеОрганизаций.ПараметрыОплаты.(Сумма)

Индекс 0 соответствует Организации, а 4 признаку Проведен, я выходит опечатался, нужно 5, но это ничего не меняло, все равно было пусто...

Ну да ладно, ещё раз спасибо за помощь, премного благодарствую)
Vofka
Цитата(logist @ 24.09.16, 15:40) необходимо зарегистрироваться для просмотра ссылки
|ЗарплатаКВыплатеОрганизаций.ПараметрыОплаты.(Сумма(Сумма) КАК Сумма)

Что это за конструкция?
logist
Цитата(sanytch @ 24.09.16, 23:24) необходимо зарегистрироваться для просмотра ссылки
выводит по индексу результат запроса (формулировка метода моя и может не совпадать с истинной:), обнаружена методом научного тыка), возвращает отбираемые запросом данные по порядку их выбора, ну т.е. в случае

В поле "Результат" находится таблица значений, число индекса это номер строки таблицы, а не поля в ней.

Цитата(Vofka @ 26.09.16, 8:54) необходимо зарегистрироваться для просмотра ссылки
Что это за конструкция?

Получает сумму указанной колонки внутренней табличной части.
Acid
Нужно делать второй запрос к табличной части, и связать по регистратору.
logist
Цитата(Acid @ 26.09.16, 14:26) необходимо зарегистрироваться для просмотра ссылки
Нужно делать второй запрос к табличной части, и связать по регистратору.

Регистратору? Это запрос из документа, нужно выбирать табличную часть и всё, выше уже решили.
sava1
Цитата(Acid @ 26.09.16, 14:26) необходимо зарегистрироваться для просмотра ссылки
Нужно делать второй запрос к табличной части, и связать по регистратору.

Первый ! + внутренне соединение по ИД документа.
Но так, как 1С сама прицепит недостающеее, то -
Цитата(logist @ 26.09.16, 14:40) необходимо зарегистрироваться для просмотра ссылки
нужно выбирать табличную часть и всё,

sanytch
Цитата(logist @ 26.09.16, 13:13) необходимо зарегистрироваться для просмотра ссылки
В поле "Результат" находится таблица значений, число индекса это номер строки таблицы, а не поля в ней.

Согласен, просто не совсем правильно представлял сам результат - отсюда и не правильная формулировка

Acid @ Вчера, 14:26 необходимо зарегистрироваться для просмотра ссылки ,
была и такая мысль но нашлось решение и поиски истины прекратил, хотя и Вам спасибо, на досуге попробую и такой способ, уверен он также правильный
sanytch
logist @ 24.09.16, 19:25 необходимо зарегистрироваться для просмотра ссылки ,
Доброго времени суток. В процессе борьбы с СКД столкнулся с похожей на прошлую проблемой - запрос снова работая в СКД в модуле ничего не выдает, точнее пустые значения.
Процедура Кнопка1Нажатие(Элемент)
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    КодыОрганизации.Организация.Наименование,
    |    КодыОрганизации.КодПоЕДРПОУ
    |ИЗ
    |    РегистрСведений.КодыОрганизации КАК КодыОрганизации";
    КодЗапрос = Запрос.Выполнить().Выбрать();
    Код = КодЗапрос.КодПоЕДРПОУ;
    Предупреждение(Код);
КонецПроцедуры

ну и получаю вот такое

Что здесь не так?
П.С. Ну в регистре сведений естесственно данные есть...
sanytch
sanytch @ Сегодня, 22:17 необходимо зарегистрироваться для просмотра ссылки ,
Вопрос снят. После
ЗапросКода = Запрос.Выполнить().Выбрать();
добавил
ЗапросКода.Следующий();
и заработало. Чёт завтыкал...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.