1с получитьпоследнее не работает
При использовании технологии хранения информации в базе данных, иногда требуется не только знать актуальную информацию на данный момент, но и то какое значение было актуальным в определенное время. Поэтому в данной статье мы поговорим о периодических регистрах сведений, которые обеспечивают именно эту возможность.
Для более предметного рассмотрения на примерах будет использоваться регистр “ЦеныНоменклатуры”, но это же применимо и к другим периодическим регистрам сведений. Прежде всего, необходимо понимать, что такое измерения, и что такое ресурсы.
Измерения – это то, в разрезе чего хранится информация. То есть в данном случае мы смотрим цены в разрезе номенклатуры и типов цен. Соответственно, номенклатура и тип цен являются измерениями.
Ресурсы непосредственно хранят интересующую нас информацию. Мы хотим знать цену для определенной номенклатуры. Следовательно, цена – это ресурс.
Помимо этого, надо понимать, что такое периодичность. Именно эта возможность регистра сведений позволяет хранить не только фактическую информацию на данный момент, но и узнавать интересующие нас значения в разрезе времени.
Получить срез последних на дату из регистра сведений можно двумя способами: с помощью метода менеджера регистра сведений и с помощью запроса регистра сведений.
1. Методы менеджера регистра сведений
Конец периода – Дата среза.
Отбор – отбор по измерениям регистра сведений (Структура).
Результат – Итог (Таблица значений)
Подобным образом работает метод:
2. Запрос регистра сведений
Так как мы работаем с периодическим регистром сведений, у нас появляется возможность работать с двумя виртуальными таблицами: “СрезПервых” и “СрезПоследних”.
Таблицы СрезПервых и СрезПоследних
Соответственно, работая с ними, можно получить необходимую Вам информацию. Нас интересует “СрезПоследних”. При выведении данной виртуальной таблицы регистра с помощью запроса в результате будет последнее значение ресурса, принадлежащее измерению. Но, к примеру, нам необходимо узнать, какая цена была в конкретный день. В случае получения среза на дату необходимо указать в запросе дату. Дату в запросе указываем в параметрах виртуальной таблицы.
Как указать дату в запросе?
Таким образом меняя этот параметр можно выводить срез на разные даты. В дальнейшем можно вносить дополнительные настройки для конкретизации выводимых данных, но это уже другая история.
Зная вышеперечисленные способы, можно подобрать именно тот, который подходит именно под Вашу задачу или Ваш конкретный случай.
Специалист компании «Кодерлайн»
Вас могут заинтересовать следующие статьи:
Такую ошибку выдал мне, при выборе номенклатуры в режиме предприятия. Понимаю, что вопрос неправильно задан, мало информации. <ОбщийМодуль.РаботаСоСправочниками.Модуль>: Ошибка при вызове метода контекста (ПолучитьПоследнее) ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор); по причине: Недопустимое значение параметра (параметр номер '2')ОбщийМодуль.РаботаСоСправочниками.Модуль>
Если ты программист, то смотри синтаксис по методу ПолучитьПоследнее и проверяй, соответственно, в отладчике что у тебя попадает в в параметр "Отбор".
мм. Ну вот код Вот ошибка из консоли, которую выдаёт, когда меняешь номенклатуру, должно подставить цену из регистра сведений, при выборе номенклатуры. Вроде. <ОбщийМодуль.РаботаСоСправочниками.Модуль>: Ошибка при вызове метода контекста (ПолучитьПоследнее) ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор); по причине: Недопустимое значение параметра (параметр номер '2') Недопустимое значение параметра (параметр номер '2')ОбщийМодуль.РаботаСоСправочниками.Модуль>
не знаю.. нету такой переменной в форме документа откуда запрашивает эту функцию. Эта функция в глоб.модулях. Конфигурация учебная, могу расшарить.
Традиционно: встань в конфигураторе на ошибку, запусти отладчик, посмотри, какое значение в ЭлементНоменклатуры
Все по книжке делал? Все галки там у модуля проставил? В модул формы при изменении номенклатуры так? // Получить текущую строку табличной части.
ЭлементНоменклатуры – ссылка на элемент справочника Номен- клатура, для которого мы хотим получить розничную цену. я не знаю каким образом эта ссылка задана, я не писал таокго в коде и в свойствах тоже нигде не прописывал. не понятно..
Я не дал название измерению Номенклатура в регистре сведений, забыл просто. Спасибо, исправил свою ошибку, всё заработало))
Могу посоветовать не использовать объектную модель для чтения данных воооооообще, а использовать запросы и особенно конструктор запросов - никаких таких проблем бы не возникло, сразу же бы увидели в конструкторе, что с таблицей регистра беда. Скорость работы запросов на уровне, а за счет более тонкой фильтрации данных часто удается отобрать лучше и в итоге работает намного быстрее. Это не говоря о запросах по нескольким таблицам.
Добрый вечер, встала такая задача, нужно чтобы заявки добавлялись определенное количество, вот создал Регистр сведений где определили количество заявок, написал код но почему то запрос не работаю, я могу добавить заявок сколько хочется, подскажите что не так
В консоли запросов в предприятии сначала проверяйте, как он работает, а потом уже помещайте в код.
И вообще, чтобы понимать, почему не работает запрос, - нужен пример таблицы с именами колонок и значениями
Сначала данные в Регистре нет, так как еще не было заявок. Что именно Вам показать?
Вы пишете, что не работает запрос: как вы поняли, что он не работает? работает ли запрос в режиме предприятия в консоли запросов? какие данные хранятся в вашем регистре? проверяли ли вы отладкой свой алгоритм?
Что то не понимаю, когда Параметры Дата убераю тогда все работает, а с ними нет
Значит РемонтныеЗаявки.Период не попадает в интервал МЕЖДУ ДатаНач И ДатаКон
При создании первого документа сначала в Регистре нет этого периода, по создание документ появляется с этим периодом, когда создаем второй документ запрос уже должен проверять и найти один документ, а он его не находит, почему?
Сделайте в предприятии скрин регистра сведений уже с записями первого документа и двух ваших документов
Я вроде понял в чем дело, можете подсказать как суммировать Ресурс если он имеет тип Перечисление? Или можно как сто суммировать Измерения
Количество(Ресурс) КАК Количество
Не тот использовал регистр. Переделал вот так, но почему то не срабатывает
Вам нужно отладчиком смотреть в вашей базе по шагам, только тогда вы поймете, почему не работает.
Сначала проверьте что возвращает запрос, потом - что возвращает функция по результату запроса, потом условие в обработке проведения, сами значения, которые в условии вы сравниваете, потом уже тело условия с движениями ну и т.д.
И "не срабатывает" что именно?
//Вот так попробуйте, должно сработать:Функция ПолучитьЗаявки(ЛицевойСчет,Статус) Запрос = Новый Запрос; Запрос.Текст ; Запрос.УстановитьПараметр("Маршрут",ЛицевойСчет.Участок);
Запрос.УстановитьПараметр("Маршрут",ЛицевойСчет.Участок);Запрос.УстановитьПараметр("ДатаНач",НачалоДня(Дата)); Запрос.УстановитьПараметр("ДатаКон",КонецДня(Дата));Возврат Запрос.Выполнить().Выгрузить(); КонецФункции
Пардон, забыл отформатировать Но вообще вижу 2 ошибки:1) в тексте запроса у параметров должен быть суффикс "&", например:
2) Функция НайтиСтроки(. ) возвращает массив, а не таблицу значений.
не имеет смысла.
Спасибо за помощь, я разобрался чтобы выводила Предупреждение("На этот день количество заявок закончились!"+Символы.ПС+"Выберите другую дату.");, но почему все равно добавляет?
Я заметил что он не записывает в регистр СтатусЗаявокНаРемонт и просто создает документ
Сделал так, не знаю правильно это или нет
1. Регистр сведений - это
2. Виды регистров сведений
3. Измерения, ресурсы, реквизиты регистра сведений
4. Периодический регистр сведений
5. Свойства регистра и измерений
6. Добавление записи в регистр сведений
7. Изменение значения ресурса записи регистра сведений
8. Удаление выбранных записей в регистре сведений
9. Очистка регистра сведений от записей
10. Получить значение ресурса регистра сведений на дату
1. Регистр сведений - это
Регистр сведений предназначен для хранения показателей состояния в разрезе измерений. В отличии от других регистров, ресурсы регистра сведений могут содержать не только числовые значения, в том числе может быть составным.
2. Виды регистров сведений
- Независимый регистр сведений - регистр не подчинен регистратору (документу).
- Зависимый регистр сведений - регистр подчинен регистратору (документу).
- Непериодический регистр сведений - информация в регистре храниться без привязки к дате.
- Периодический регистр сведений - информация в регистре развернута во времени, одним из измерений является дата, называемым Периодом.
Измерения – описывают разрезы, в которых хранится информация.
Ресурсы – содержат хранимую информацию в разрезе измерения.
Тип ресурса сведений может быть как примитивный (число, строка, дата, булево), так и ссылочный (СправочникСсылка, ПеречислениеСсылка и т.д.). В ресурсе можно хранить даже картинки и другие неструктурированные сведения, поскольку можно создать ресурс типа "ХранилищеЗначения". Ресурс может быть составным типом.
Реквизиты - несут дополнительную информацию (как комментарий), которую нельзя получить из виртуальных таблиц регистра в разрезе измерений.
Если узнаем цену Тяпки на любую дату с 1 августа 2021 года до 10 августа 2021, она будет равна 175 рублям.
Если узнаем цену Тяпки на любую дату с 10 августа 2021 года по текущую дату, она будет равна 192 рублям.
Внимание! Описанный выше пример несет образный характер и периоды в примере рассматривали приблизительно. Для точного определения даты и времени для вычисления цены необходимо использовать Дату, МоментВремени или Границу зависит от решаемой задачи. Об особенностях использования периодов и моментов времени поговорим в следующей статье.
4. Периодический регистр сведений
- Непериодический
- В пределах секунды
- В пределах дня
- В пределах месяца
- В пределах квартала
- В пределах года
- По позиции регистратора
Внимание! При выборе периодичности (кроме "По позиции регистратору"), платформа будет контролировать уникальность записей в пределах заданной периодичности, в таком случаи в регистратор нельзя записать две записи с одинаковым набором Измерений и Периодом. Последовательность состоящая из Измерений и Периода называется Ключом уникальности.
При выборе периодичности "По позиции регистратору" ключ уникальности будет содержать дополнительно ссылку на регистратор (документ), в таком случаи в регистратор нельзя записать две записи с одинаковым набором Измерений, Периодом и Регистратором.
При выборе периодичности в БД создаются виртуальные таблицы:
СрезПервых и СрезПоследних.
Что позволяет быстро получать значения ресурсов о последних (первых) установленных значений на определенную дату.
5. Свойства регистра и измерений
Основной отбор по периоду (для регистра) - если регистр периодический и не подчинен регистратору, то доступно это свойство. Если флажок установлен, то наряду с основными измерениями и реквизитами регистра, участвующими в отборе записей при регистрации изменений для плана обмена, можно указывать отбор по полю Период.
Ведущий (для измерения) - имеет смысл когда измерение имеет тим ссылка на объект. Записи в регистре будут существовать пока существует объект, ссылка на который выбрана в качестве значения этого измерения. При удалении объекта все записи в регистре по этому объекту будут автоматически удалены.
Основной отбор (для измерения) - устанавливает возможность измерения регистрировать изменения для плана обмена.
6. Добавление записи в регистр сведений
Добавление через МенеджерЗаписи, подойдет для добавления одной записи.
НоваяЗапись . Период = Дата ;
НоваяЗапись . Номенклатура = Номенклатура ;
НоваяЗапись . Цена = Цена ;
НоваяЗапись . Записать ();
Добавление через НаборЗаписей, подойдет для добавления одной или нескольких записей.
НовыйНаборЗаписей = РегистрыСведений . Цены . СоздатьНаборЗаписей ();
НовыйНаборЗаписей . Отбор . Период . Установить ( Дата ,Истина);
НовыйНаборЗаписей . Отбор.Номенклатура . Установить ( Номенклатура ,Истина);
НоваяЗапись = НовыйНаборЗаписей . Добавить ();
НоваяЗапись . Период = Дата ;
НоваяЗапись . Номенклатура = Номенклатура ;
НоваяЗапись . Цена = Цена ;
НовыйНаборЗаписей . Записать ();
7. Изменение значения ресурса записи регистра сведений
Изменение значение ресурса записи через НаборЗаписей, подойдет для изменения одной или нескольких записей.
НаборЗаписей = РегистрыСведений . Цены . СоздатьНаборЗаписей ();
НаборЗаписей . Отбор . Период . Установить ( Дата ,Истина);
НаборЗаписей . Отбор . Номенклатура . Установить ( Номенклатура ,Истина);
НаборЗаписей . Прочитать ();
Если Не НаборЗаписей . Количество () = 0 Тогда
СуществующаяЗапись = НаборЗаписей [ 0 ];
СуществующаяЗапись . Период = Дата ;
СуществующаяЗапись . Номенклатура = Номенклатура ;
СуществующаяЗапись . Цена = Цена ;
НаборЗаписей . Записать ();
КонецЕсли;
8. Удаление выбранных записей в регистре сведений
Удаление записей через НаборЗаписей, подойдет для удаления одной или нескольких записей.
НаборЗаписей = РегистрыСведений . Цены . СоздатьНаборЗаписей ();
НаборЗаписей . Отбор . Период . Установить ( Дата ,Истина);
НаборЗаписей . Отбор . Номенклатура . Установить ( Номенклатура ,Истина);
НаборЗаписей . Записать ();
9. Очистка регистра сведений от записей
Очистка регистра от записей через НаборЗаписей.
Получить значение ресурса регистра сведений на конкретную дату можно через метод Получить(). Если на эту дату в регистре нет записей, то возвращается структура с пустыми значениями.
Если в нашем примере указать дату 10.08.2021, то на эту дату имеются записи в регистре и метод вернет не пустую цену.
Если в нашем примере указать дату 110.08.2021, то на эту дату нет записей в регистре, тогда метод вернет пустую цену.
Получить ближайшее значение ресурса регистра сведений на дату можно через метод ПолучитьПервое() и ПолучитьПоследнее(). Эти методы возвращают структуру, содержащую ближайшие, указанной дате, значения ресурсов.
Первый параметр в методах может иметь тип "дата", МоментВремени или Граница. Его можно не указывать, тогда будут найдены первые или последние значения ресурсов в регистре сведений.
Так же получить ближайшее значение ресурса регистра сведений на дату можно через метод СрезПервых() и СрезПоследних(). Эти методы возвращают таблица значений, содержащую ближайшие, указанной дате, значения ресурсов. Если вам необходимо только значение ресурса все данные методами СрезПервых() и СрезПоследних() тянуть с сервера на клиент не разумно.
При использовании технологии хранения информации в базе данных, иногда требуется не только знать актуальную информацию на данный момент, но и то какое значение было актуальным в определенное время. Поэтому в данной статье мы поговорим о периодических регистрах сведений, которые обеспечивают именно эту возможность.
Для более предметного рассмотрения на примерах будет использоваться регистр “ЦеныНоменклатуры”, но это же применимо и к другим периодическим регистрам сведений. Прежде всего, необходимо понимать, что такое измерения, и что такое ресурсы.
Измерения – это то, в разрезе чего хранится информация. То есть в данном случае мы смотрим цены в разрезе номенклатуры и типов цен. Соответственно, номенклатура и тип цен являются измерениями.
Ресурсы непосредственно хранят интересующую нас информацию. Мы хотим знать цену для определенной номенклатуры. Следовательно, цена – это ресурс.
Помимо этого, надо понимать, что такое периодичность. Именно эта возможность регистра сведений позволяет хранить не только фактическую информацию на данный момент, но и узнавать интересующие нас значения в разрезе времени.
Получить срез последних на дату из регистра сведений можно двумя способами: с помощью метода менеджера регистра сведений и с помощью запроса регистра сведений.
1. Методы менеджера регистра сведений
Конец периода – Дата среза.
Отбор – отбор по измерениям регистра сведений (Структура).
Результат – Итог (Таблица значений)
Подобным образом работает метод:
2. Запрос регистра сведений
Так как мы работаем с периодическим регистром сведений, у нас появляется возможность работать с двумя виртуальными таблицами: “СрезПервых” и “СрезПоследних”.
Таблицы СрезПервых и СрезПоследних
Соответственно, работая с ними, можно получить необходимую Вам информацию. Нас интересует “СрезПоследних”. При выведении данной виртуальной таблицы регистра с помощью запроса в результате будет последнее значение ресурса, принадлежащее измерению. Но, к примеру, нам необходимо узнать, какая цена была в конкретный день. В случае получения среза на дату необходимо указать в запросе дату. Дату в запросе указываем в параметрах виртуальной таблицы.
Как указать дату в запросе?
Таким образом меняя этот параметр можно выводить срез на разные даты. В дальнейшем можно вносить дополнительные настройки для конкретизации выводимых данных, но это уже другая история.
Зная вышеперечисленные способы, можно подобрать именно тот, который подходит именно под Вашу задачу или Ваш конкретный случай.
Специалист компании «Кодерлайн»
Вас могут заинтересовать следующие статьи:
Читайте также: