Вывести на форму сумму из регистра накопления

1. 6 14.01.21 13:38 Сейчас в теме
Здравствуйте!
В рамках обучения решил написать калькулятор кассы, с задачей суммирования банкнот и монет из полей справился, теперь хочу вывести на форму данные Кассы из регистра, что бы в дальнейшем сравнить фактические наличные деньги с "теоретическими".

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

    Пока Записи.Следующий() Цикл
        Сообщить(Записи.Сумма);
    КонецЦикла;
	Сообщить (Записи.Сумма);
Показать


В примерах везде запросы вытаскивают из регистров несколько ресурсов, поэтому по образцу сделал с циклом, хотя он тут скорее всего не нужен :)
не понятно, нужно ли выставлять в параметрах организацию, если она всего одна.

Результат - пустое сообщение. ткните пожалуйста дошкольника в ошибку
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. FatPanzer 9 14.01.21 13:47 Сейчас в теме
Значит не найдена Касса или Организация, соответственно результат запроса пустой.

Кстати, условия по Кассе и Организации надо засовывать в условия виртуальной таблицы, и не использовать их в секции "ГДЕ..."
4. gtrr34 6 14.01.21 13:57 Сейчас в теме
(2) а возможно "сообщить" этот параметр что бы проверить, нашел он или нет...

типа Сообщить(Записи.Запрос.Параметр("Касса"))

кстати, может это из-за расширения, потому что в него не добавлены справочники... хотя он же их позволяет в коде и не ругается что нет таких
5. user868505 14.01.21 14:01 Сейчас в теме
(4)можно так:
НайденнаяКасса = Справочники.Кассы.НайтиПоНаименованию("Касса физическая");
Если НайденнаяКасса = Справочники.Кассы.ПустаяСсылка() Тогда
  Сообщить("Кассу не нашли")
Иначе
  Сообщить(НайденнаяКасса)
КонецЕсли;


Или просто посмотреть в отладчике.
3. user868505 14.01.21 13:52 Сейчас в теме
(1)Циклом обходятся элементы выборки, а не "вытащенные" ресурсы, поэтому в этом смысле цикл не нужен.
Цикл нужен, если у вас результат запроса - более, чем одна запись, чтобы вывести все записи.

Далее, если Касса и Организация - это измерения регистра, то условия нужно накладывать не в ГДЕ, а в параметры виртуальной таблицы.

И по сути вопроса, почему пустое сообщение.
Запрос выбирает какие-то данные вообще? Записи.Количество() - чему равно?
И если оно больше 0, то второй вопрос. На этом этапе
Сообщить (Записи.СуммаОстаток)
чему равно значение Записи.СуммаОстаток?
6. gtrr34 6 14.01.21 15:06 Сейчас в теме
Эврика! получилось!
1) вытащил каим то чудом сумму и офигел от количества записей :) Понял свой косяк, Исправил и взял СуммаОстаток
2) Организацию не смог найти ни по названию, ни по ИНН, ну да бог с ней, без нее работает только по кассе.
3) по поводу того что в "где" не надо пихать параметр а делать это в виртуальной таблице не понял, но вроде и так работает.
4) Без цикла не работает, не смотря, на то что один результат должен быть.
т.е. если закомментировать цикл и вставить просто Сообщить(Записи.СуммаОстаток); то почему то не работает...

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

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

    Пока Записи.Следующий() Цикл
        Сообщить(Записи.СуммаОстаток);
    КонецЦикла;
Показать

Чувствую что вырос, хотя зря, сделал без понимания, методом тыка.
СПАСИБО! вам большое что потратили на меня время!
7. FatPanzer 9 14.01.21 15:37 Сейчас в теме
(6) Все-таки параметры виртуальной таблицы лучше использовать с самого начала обучения...
8. user868505 14.01.21 16:10 Сейчас в теме
(6)без цикла у вас не работает, потому что вы не переходите на первую запись выборки.
Метод Выборка.Следующий() делает "шаг" на следующую запись.
Можно использовать в цикле, как в вашем примере, для обхода всех записей. Но если, например, в выборке всего 1 запись, или если вам в любом случае нужна только первая, можно делать так:
Выборка.Следующий();
Сообщить(Выборка.СуммаОстаток)


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