Версия для печати темы (https://pro1c.org.ua/index.php?s=9df33a62c6fec480db3abe796bc0fb13&showtopic=31977)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Не могу получить из запроса значение

Автор: sanytch 24.09.16, 12:22

Доброго времени всем. Буду признателен за любую помощь и подсказку.
Проблема собственно в следующем. В СКД запрос работает и выдаёт все необходимые данные, но если этот же запрос выполнять в модуле то выдаёт ошибку "Поле объекта не обнаружено (Сумма). Стр.Зарплаты = Результат.ПараметрыОплаты.Сумма;"
Думается мне что это от того что Сумма находится в ПараметрыОплаты

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

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

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

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


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

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

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


 ! 

http://pro1c.org.ua/index.php?act=announce&id=2: 3
 

Автор: logist 24.09.16, 14:40

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

Если нужен итог по всей колонке таблицы то

|ЗарплатаКВыплатеОрганизаций.ПараметрыОплаты.(Сумма(Сумма) КАК Сумма)

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

Автор: sanytch 24.09.16, 14:51

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

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



Автор: logist 24.09.16, 14:57

Цитата(sanytch @ 24.09.16, 15:51) *
все равно выдает туже ошибку...

Вы бы отладчиком посмотрели результирующую таблицу, что бы понять что там вообще, а так занимаетесь тыканьем в никуда. В данном случае ваша сумма (в том примере который я привел) находится в поле "ПараметрыОплаты", т.е.
Стр.Сумма = Результат.ПараметрыОплаты;

Автор: sanytch 24.09.16, 17:18

logist @ Сегодня, 15:57 * ,
Попробовал

Стр.Сумма = Результат.ПараметрыОплаты;
- ничего.
В таблице пусто!
попробовал даже
Стр.Зарплаты = Результат.Получить(4)
- пусто... Странно...

Автор: logist 24.09.16, 18:25

Цитата(sanytch @ 24.09.16, 18:18) *
В таблице пусто!

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

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

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

УПОРЯДОЧИТЬ ПО
    Дата

Автор: sanytch 24.09.16, 22:24

logist @ Сегодня, 19:25 * ,
Огромнейшее спасибо за помощь, получилось с небольшими допиливанием. Спасибо что поморочились и наставили на путь истинный)

п.с. кстати

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

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

Ну да ладно, ещё раз спасибо за помощь, премного благодарствую)

Автор: Vofka 26.09.16, 7:54

Цитата(logist @ 24.09.16, 15:40) *
|ЗарплатаКВыплатеОрганизаций.ПараметрыОплаты.(Сумма(Сумма) КАК Сумма)

Что это за конструкция?

Автор: logist 26.09.16, 12:13

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

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

Цитата(Vofka @ 26.09.16, 8:54) *
Что это за конструкция?

Получает сумму указанной колонки внутренней табличной части.

Автор: Acid 26.09.16, 13:26

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

Автор: logist 26.09.16, 13:40

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

Регистратору? Это запрос из документа, нужно выбирать табличную часть и всё, выше уже решили.

Автор: sava1 26.09.16, 14:25

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

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


Автор: sanytch 27.09.16, 9:06

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

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

Acid @ Вчера, 14:26 * ,
была и такая мысль но нашлось решение и поиски истины прекратил, хотя и Вам спасибо, на досуге попробую и такой способ, уверен он также правильный

Автор: sanytch 27.09.16, 21:17

logist @ 24.09.16, 19:25 * ,
Доброго времени суток. В процессе борьбы с СКД столкнулся с похожей на прошлую проблемой - запрос снова работая в СКД в модуле ничего не выдает, точнее пустые значения.

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

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

Что здесь не так?
П.С. Ну в регистре сведений естесственно данные есть...

Автор: sanytch 27.09.16, 22:22

sanytch @ Сегодня, 22:17 * ,
Вопрос снят. После

ЗапросКода = Запрос.Выполнить().Выбрать();
добавил
ЗапросКода.Следующий();
и заработало. Чёт завтыкал...

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua