Ошибка чтения значения в результате запроса
Здравствуйте!
При отладке при вычислении выражения в переменной "Результат" у всех свойств в значении написано "Ошибка чтения значения":
Общий модуль:
Модуль формы:
Программирую на 1С всего неделю, поэтому еще мало чего знаю.
Задача состоит в следующем:
- Ежемесячно какого-то числа у меня списывается какая-то сумма денег. Нужно, чтобы при открытии документа данного числа сумма автоматически вписывалась в поле. Сумму в документе можно изменять, но раз в месяц.
- Поэтому создал регистр сведений с периодичностью в пределах месяца. Все проведенные документы записываю туда, но как сравнить текущую дату с датой документа из регистра, если период всегда заполняется значением первого числа месяца (измерения регистра: Кошелек, получатель; ресурс - сумма). Подскажите, как это можно реализовать.
- И почему в запросе "ошибка чтения значения"?
На всякий случай прикрепляю базу
При отладке при вычислении выражения в переменной "Результат" у всех свойств в значении написано "Ошибка чтения значения":
Общий модуль:
Функция Заполнение (ТекДата) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПериодическийРасход.Период КАК Период,
| ПериодическийРасход.Кошелек КАК Кошелек,
| ПериодическийРасход.Получатель КАК Получатель,
| ПериодическийРасход.Сумма КАК Сумма
|ИЗ
| РегистрСведений.ПериодическийРасход КАК ПериодическийРасход
|ГДЕ
| ПериодическийРасход.Период = &Дата";
Запрос.УстановитьПараметр("Дата", ТекДата);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Если Результат.Период = ТекДата Тогда
Возврат (Результат.Сумма);
КонецЕсли;
КонецЦикла;
КонецФункции
ПоказатьМодуль формы:
Процедура ДатаПриИзменении(Элемент)
Объект.Сумма = Периодический.Заполнение(ЭтаФорма.Объект.Дата);
КонецПроцедуры
Программирую на 1С всего неделю, поэтому еще мало чего знаю.
Задача состоит в следующем:
- Ежемесячно какого-то числа у меня списывается какая-то сумма денег. Нужно, чтобы при открытии документа данного числа сумма автоматически вписывалась в поле. Сумму в документе можно изменять, но раз в месяц.
- Поэтому создал регистр сведений с периодичностью в пределах месяца. Все проведенные документы записываю туда, но как сравнить текущую дату с датой документа из регистра, если период всегда заполняется значением первого числа месяца (измерения регистра: Кошелек, получатель; ресурс - сумма). Подскажите, как это можно реализовать.
- И почему в запросе "ошибка чтения значения"?
На всякий случай прикрепляю базу
Прикрепленные файлы:
1Cv8.dt
По теме из базы знаний
- Выгрузка результата запроса в XML, структура которого берется из XML файла - образца.
- Интеграция между Atlassian Jira и 1С:Предприятие 8.3 используя Jira REST API (выборка, создание и изменение запросов, чтение, создание и удаление записей о работах, чтение комментариев и другие возможности)
- Зачем и как читать чужой код? Какой результат ожидаем получить? Основные подходы
- Консоль кода с поддержкой объявления процедур и функций, с дополнительными функциями отслеживания и вывода значений
- Нормализуем Excel средствами Python для Построителя запросов 1С
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
Пока работает правильно, только вот теперь у меня возник вопрос.
Поскольку регистр в пределах месяца, в поле период указывается первое число месяца. Т.е. сумма будет заполняться только при изменении даты документа на первое число. Как мне сделать, чтоб это можно было делать для любого числа (может быть, в запросе сделать соединение с таблицей документа и брать дату оттуда)?
Поскольку регистр в пределах месяца, в поле период указывается первое число месяца. Т.е. сумма будет заполняться только при изменении даты документа на первое число. Как мне сделать, чтоб это можно было делать для любого числа (может быть, в запросе сделать соединение с таблицей документа и брать дату оттуда)?
Условие только по периоду было неправильно, подходило несколько записей. Поэтому добавил условие отбора по кошельку и получателю.
Но все еще не пойму, как мне сделать, чтоб это можно было делать для любого числа. Соединением таблицы регистра с таблицей документа в запросе или записывать еще в регистр накопления и брать дату оттуда?
Или может быть есть способ попроще и поумнее?
Но все еще не пойму, как мне сделать, чтоб это можно было делать для любого числа. Соединением таблицы регистра с таблицей документа в запросе или записывать еще в регистр накопления и брать дату оттуда?
Или может быть есть способ попроще и поумнее?
А зачем вообще период регистрации месяц, если детализация по конкретной дате нужна? Да и вообще, почему регистр сведений? Делай регистр накопления с измерениями "Кошелек" и "Получатель", ресурс "Сумма". Подозреваю, что у тебя уже даже есть подходящий:
А при открытии документа делай запрос к оборотной таблице этого регистра за период с НачалоДня(ДобавитьМесяц(Дата, -1)) по КонецДня(ДобавитьМесяц(Дата, -1))
Все проведенные документы
А при открытии документа делай запрос к оборотной таблице этого регистра за период с НачалоДня(ДобавитьМесяц(Дата, -1)) по КонецДня(ДобавитьМесяц(Дата, -1))
(11)
Периодичность регистра - месяц потому что, мне надо, чтобы сумму можно было изменить, но с периодом изменения - 1 месяц. Например, если я изменю сумму в следующем месяце , то при выборе даты мне надо будет выводить актуальное на то время значение, поэтому регистр сведений. Я подозреваю, что я неправильно начал делать.
Уточню условие задачи:
При создании документа, когда я укажу кошелек и получателя, сумма должна ввестись автоматически исходя из прошлых записей (если есть полное совпадение даты, кошелька и получателя). При изменении параметров документа сумма также вставляется автоматически, но изменить сумму можно с периодичностью 1 месяц.
Периодичность регистра - месяц потому что, мне надо, чтобы сумму можно было изменить, но с периодом изменения - 1 месяц. Например, если я изменю сумму в следующем месяце , то при выборе даты мне надо будет выводить актуальное на то время значение, поэтому регистр сведений. Я подозреваю, что я неправильно начал делать.
Уточню условие задачи:
При создании документа, когда я укажу кошелек и получателя, сумма должна ввестись автоматически исходя из прошлых записей (если есть полное совпадение даты, кошелька и получателя). При изменении параметров документа сумма также вставляется автоматически, но изменить сумму можно с периодичностью 1 месяц.
(13)Так нельзя делать, я про идею с числом.
Вот почему. есть запись с измерениями кошелек1, получатель1, 13, ресурс 100 периодом 01/01/2000
и запись с измерением кошелек1 получатель1, 20, ресурс 2500 периодом 13/02/2017
И делаете запрос на текущую дату, с измерениями кошелек1, получатель1, тек дата 19/05/2017 день месяца 19 по срезу последних.
Получате НОЛЬ. т.к. записи с такой комбинацией измерений нет.
Это пол беды а захотите постомреть что было 13 апреля получите вместо ожидаемых 2500 - 100.
или периодичность как минимум сутки, или если регистр подчинен регистратору периодичность документ регистратор.
Вот почему. есть запись с измерениями кошелек1, получатель1, 13, ресурс 100 периодом 01/01/2000
и запись с измерением кошелек1 получатель1, 20, ресурс 2500 периодом 13/02/2017
И делаете запрос на текущую дату, с измерениями кошелек1, получатель1, тек дата 19/05/2017 день месяца 19 по срезу последних.
Получате НОЛЬ. т.к. записи с такой комбинацией измерений нет.
Это пол беды а захотите постомреть что было 13 апреля получите вместо ожидаемых 2500 - 100.
или периодичность как минимум сутки, или если регистр подчинен регистратору периодичность документ регистратор.
(16)
А ему, вроде, так и нужно
Т.е. 19 числа ничего не списывается, поэтому ничего и не выдает. а 13го апреля 100 и должно выдавать, потому что в январе он установил, что 13го числа у него списывают 100
змерениями кошелек1, получатель1, тек дата 19/05/2017 день месяца 19 по срезу последних
А ему, вроде, так и нужно
Ежемесячно какого-то числа у меня списывается какая-то сумма денег. Нужно, чтобы при открытии документа данного числа сумма автоматически вписывалась в поле
Т.е. 19 числа ничего не списывается, поэтому ничего и не выдает. а 13го апреля 100 и должно выдавать, потому что в январе он установил, что 13го числа у него списывают 100
(13)
Сделал через число месяца, потом когда дошел до следующей задачи подумал, что в запросе можно было бы использовать дату регистратора, чтоб не добавлять дополнительное измерение. Исправил, вроде бы работает.
Общий модуль:
Модуль формы:
Сделал через число месяца, потом когда дошел до следующей задачи подумал, что в запросе можно было бы использовать дату регистратора, чтоб не добавлять дополнительное измерение. Исправил, вроде бы работает.
Общий модуль:
Функция Заполнение (ТекДата,ТекКошелек, ТекПолучатель) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПериодическийРасходСрезПоследних.Период КАК Период,
| ПериодическийРасходСрезПоследних.Кошелек КАК Кошелек,
| ПериодическийРасходСрезПоследних.Получатель КАК Получатель,
| ПериодическийРасходСрезПоследних.Сумма КАК Сумма,
| ПериодическийРасходСрезПоследних.Регистратор.Дата КАК РегистраторДата
|ИЗ
| РегистрСведений.ПериодическийРасход.СрезПоследних(
| &Дата,
| Кошелек = &Кошелек
| И Получатель = &Получатель) КАК ПериодическийРасходСрезПоследних";
Запрос.УстановитьПараметр("Дата", ТекДата);
Запрос.УстановитьПараметр("Кошелек", ТекКошелек);
Запрос.УстановитьПараметр("Получатель", ТекПолучатель);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Если День(Результат.РегистраторДата) = День(ТекДата) Тогда
Возврат (Результат.Сумма);
КонецЕсли;
КонецЦикла;
КонецФункции
ПоказатьМодуль формы:
Процедура ДатаПриИзменении(Элемент)
Объект.Сумма = ПериодическийРасход.Заполнение(Объект.Дата,Объект.КошелекОтправления, Объект.Получатель);
КонецПроцедуры
(18)И все же думаю для этой задачи лучше использовать регистр накопления:
1. Что будет если у вас два документа на разные суммы за один день? Если я например добавил себе в том месяце на 30 число расход 500р а в это месяце хочу добавить еще 500р. Мне придется искать тот документ и редактировать? Мне будет проще завести новый с новой суммой или например когда я хочу убавить свой расход мне придется искать тот документ редактировать его или удалять, когда я могу просто ввести документ (сторно) с отрицательной суммой.
2. Из п.1 выходит, что в результате запроса к регистру сведений у меня будет не одна строка и ваш цикл выборки записей запроса не подойдет, т.к. нужно суммировать расходы за день. Придется в цикле перебирать записи регистра и складывать.
3.Но зачем изобретать велосипед, если это уже есть в регистрах накопления.
-Записываете в него документы
-получаете обороты за период (нужный день)
-Он сам все складывает выдает одну цифру
Можно даже без запроса обойтись функцией "Обороты"
Если конечно я понял суть задания
1. Что будет если у вас два документа на разные суммы за один день? Если я например добавил себе в том месяце на 30 число расход 500р а в это месяце хочу добавить еще 500р. Мне придется искать тот документ и редактировать? Мне будет проще завести новый с новой суммой или например когда я хочу убавить свой расход мне придется искать тот документ редактировать его или удалять, когда я могу просто ввести документ (сторно) с отрицательной суммой.
2. Из п.1 выходит, что в результате запроса к регистру сведений у меня будет не одна строка и ваш цикл выборки записей запроса не подойдет, т.к. нужно суммировать расходы за день. Придется в цикле перебирать записи регистра и складывать.
3.Но зачем изобретать велосипед, если это уже есть в регистрах накопления.
-Записываете в него документы
-получаете обороты за период (нужный день)
-Он сам все складывает выдает одну цифру
Можно даже без запроса обойтись функцией "Обороты"
Если конечно я понял суть задания
(18) Не уверен, что у тебя срез последних в таком случае корректно отрабатывает. Если у тебя будет несколько подходящих записей, то фактически выберется первая попавшаяся. Я бы не сказал, что метод оптимизировал, скорее наоборот. Механизм среза последних работает не по назначению и последующая выборка из результата запроса вместо однозначного определения
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)