Как Очистить Набор Записей Регистра Сведений с Отбором • Добавление записей
Периодичность регистра сведений 1С
Одной из возможностей регистра сведений является хранение данных не только в разрезе указанных измерений, но и в разрезе времени.
Данное свойство позволяет добавить к списку измерений регистра дополнительное измерение — «Период».
Использование периодичности регистра сведений позволяет не просто хранить статические данные, но и отслеживать их актуальность на определенную дату или изменение во времени.
Разработчик может указать минимальную периодичность, с которой записи будут заноситься в регистр:
В этом случае к каждой записи регистра будет добавляться поле «Период», хранящее дату, которой были внесены записи в регистр.
При выборе периодичности, отличной от варианта «Непериодический», система будет контролировать уникальность записей в пределах заданного промежутка времени. Если запись не уникальна, система 1C выдаст сообщение » Запись с такими ключевыми полями существует !» и не даст произвести запись в базу данных.
Например, периодический регистр сведений «Цены товаров» может не только хранить информацию о том, какова цена на определенную номенклатуру сейчас, но и о том, как она изменялась в прошлом (или будет изменяться в будущем).
Заметки по 1С: Предприятие 8.2, 8.3: Регистры сведений
- создание, изменение и удаление записей;
- выбор записей в заданном интервале по заданным критериям;
- выбор записей по регистратору;
- получение значений ресурсов записей, соответствующих указанному периоду и значениям измерений;
- получение значений ресурсов наиболее ранних и наиболее поздних записей регистра, соответствующих указанному периоду и значениям измерений.
Для того что бы понять и изучить, принципы программной с регистрами сведений, сделаем небольшую задачу на тестовой конфигурации «Управляемое приложение 1С». Создадим обработку, которая будет менять цены определенного вида у всех товаров на определенную дату.
Второй вариант открытия — с использованием серверного вызова
КлючЗаписиРегистра = ПолучитьКлючЗаписи(Новый Структура(«ГрафикРаботы,Дата,НачалоИнтервала», Расшифровка.ГрафикРаботы,НачалоДня(Расшифровка.Дата),Расшифровка.Дата));
ОткрытьФорму(«РегистрСведений.ТабельРаботы.Форма.ФормаНазначенияПериода», Новый Структура(«Ключ», КлючЗаписиРегистра));
В случае отсутствия записи, когда указаны не действительные измерения регистра, выйдет ошибка «Объект не найден»:
Запись = РегистрыСведений.ТабельРаботы.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(Запись,Структура);
Запись.Прочитать();
Если Запись.Выбран() = Ложь
Возврат Неопределено;
КонецЕсли;
Отбор записей регистра сведений по ресурсу
Для удаления всех записей в независимом регистре сведений достаточно записать набор записей этого регистра без установки отборов:
Изменение записей
Изменять существующие записи регистров сведений возможно при помощи объектов НаборЗаписей и МенеджерЗаписи . Ограничения объекта МенеджерЗаписи были описаны выше.
Чтение информации из базы данных рекомендуется выполнять при помощи запросов. Данный способ обеспечивает гибкое применение отборов и группировок, а также возможность выбора записей из нескольких таблиц.
Кроме чтения запросом возможно использование методов объектной модели.
- Выбрать(НачалоИнтервала, КонецИнтервала, Отбор, Порядок) — выбирает записи с указанным отбором, у которых период находится между НачалоИнтервала и КонецИнтервала ;
- ВыбратьПоРегистратору(Регистратор) — выбирает все записи указанного регистратора;
- Получить(Период, Отбор) — получает ресурсы записи с отбором по всем измерениям и периоду;
- ПолучитьПервое(НачалоПериода, Отбор) — получает ресурсы наиболее ранней записи, соответствующей указанным периоду и отбору;
- ПолучитьПоследнее(КонецПериода, Отбор) — получает ресурсы наиболее поздней записи, соответствующей указанным периоду и отбору;
- СрезПервых(НачалоПериода, Отбор) — получает таблицу наиболее ранних записей, соответствующую указанным периоду и отбору;
- СрезПоследних(КонецПериода, Отбор) — получает таблицу наиболее поздних записей, соответствующую указанным периоду и отбору.
Записи регистра сведений стали неуникальными при обновлении 1С
- измерения — описывают разрезы, в которых хранится информация;
- период — поле, используемое для разворота данных по времени. Поле добавляется автоматически при указании свойства «Периодичность», отличного от «Непериодический»;
- регистратор — поле, используемое для хранения документа, с которым связана запись. Поле добавляется автоматически при указании свойства «Режим записи» в значение «Подчинение регистратору»;
- ресурсы — непосредственно хранят информацию для комбинации измерений;
- реквизиты — дополнительная произвольная информация, относящаяся к конкретной записи регистра.
При возникновении ошибки будет выдано предупреждение о возникшей ситуации с регистром, которое не позволит продолжить обновление, пока не будет исправлена ошибка.
Заметки по 1С:Предприятие 8.2, 8.3
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования (Linus Torvalds).
Регистры сведений
На следующей схеме изображено взаимодействие объектов встроенного языка для работы с регистрами сведений.
РегистрСведенийМенеджерЗаписи.. Позволяет читать, записывать и удалять отдельную запись регистра сведений. Используется только для регистров сведений, не изменяемых регистраторами, т.е. для которых в конфигураторе установлен режим записи Независимый.
РегистрСведенийЗапись.. Предоставляет доступ к записи регистра сведений. Объект не создается непосредственно, а предоставляется другими объектами, связанными с регистром сведений. Например, данный объект предоставляет записи регистра в наборе записей.
РегистрСведенийКлючЗаписи.. Представляет собой набор значений, однозначно идентифицирующих запись регистра. Объект используется в тех случаях, когда необходимо сослаться на определенную запись. Например, он выступает в качестве значения свойства ТекущаяСтрока табличного поля, отображающего список записей регистра.
// Пример: получить текущую цену из периодического регистра сведений «Цены».
Элемент = Справочники . Номенклатура . НайтиПоКоду ( 4 );
Отбор = Новый Структура ( «Номенклатура» , Элемент );
ЗначенияРесурсов = РегистрыСведений . Цены . ПолучитьПоследнее ( ТекущаяДата (), Отбор );
Цена = ЗначенияРесурсов . Цена ;
// 2. объект РегистрыСведенийМенеджер
// .
// []
// Для Каждого . Из . Цикл . КонецЦикла;
// Пример: получить начальную цену из периодического регистра сведений «Цены».
ИмяРегистра = «Цены» ;
Услуга = Справочники . Номенклатура . НайтиПоНаименованию ( «Диагностика» );
Отбор = Новый Структура ;
Отбор . Вставить ( «Номенклатура» , Услуга );
Цена = РегистрыСведений [ ИмяРегистра ]. ПолучитьПервое ( ТекущаяДата (), Отбор ). Цена ;
// Пример: активизировать требуемую строку списка регистра сведений.
СтруктураКлючевыхПолей = Новый Структура ;
СтруктураКлючевыхПолей . Вставить ( «Период» , Дата ( «20040331000000» ));
СтруктураКлючевыхПолей . Вставить ( «Номенклатура» , Справочники . Номенклатура . НайтиПоКоду ( «0000006» ));
Элементы . Материалы . ТекущаяСтрока = РегистрыСведений . Цены . СоздатьКлючЗаписи ( СтруктураКлючевыхПолей );
// Пример: показать номенклатуру, цена на которую была установлена в заданную дату и время.
Набор = РегистрыСведений . Цены . СоздатьНаборЗаписей ();
Набор . Отбор . Период . Установить ( ЗаданнаяДата , Истина);
Набор . Прочитать ();
Для Каждого ОчереднаяЗапись Из Набор Цикл
Сообщить ( «Номенклатура color: red;»>+ ОчереднаяЗапись . Номенклатура + «, цена color: red;»>+ ОчереднаяЗапись . Цена );
КонецЦикла;
Изменение записей
В примере происходит выборка цен с отбором по номенклатуре и по типу цен на текущую дату.
Сравнение конфигураций
В самых сложных случаях придется сравнить основную конфигурацию с конфигурацией базы данных, анализ данных последней и приводит к ошибке.
Основная конфигурация – это обновляемая конфигурация программы. В типовых, не измененных программах 1С она совпадает с конфигурацией поставщика. После обновления конфигурации, запускается процесс обновления Конфигурации базы данных, в которой еще содержатся старые данные до тех пор, пока процесс обновления не завершится полностью.
В момент появления ошибки основная конфигурация и конфигурация базы данных отличаются. Именно появление ошибки и мешает завершению обновления конфигурации базы данных. Поэтому нужно разобраться, что происходит и какие данные в базе мешают ее обновлению.
Пошаговая инструкция сравнения основной конфигурации и конфигурации базы данных.
Откройте конфигурацию по кнопке Конфигуратор — Открыть конфигурацию . В правом окне откроется список всех объектов 1С.
Нажмите на кнопку ОК . Программа 1С выдаст окно сравнения конфигураций, в котором нужно перейти на регистр сведения Цены номенклатуры и раскрыть различия, нажав на «+» справа от объекта.
Из таблицы сравнения видно, что в регистре Цены номенклатуры в основной конфигурации отсутствует параметр измерения Тип цен .
Войдите в базу данных и откройте регистр Цены номенклатуры : кнопка Главное меню — Все функции — Регистры сведений — Цены номенклатуры .
Как видно из рисунка, сейчас в регистре сведений Цены номенклатуры для Комплекта постельного белья две записи для типов цен:
Поскольку реквизит Тип цен был удален из основной конфигурации, в регистре сведений должно остаться две записи с разными ценами на одинаковые ключевые параметры для Комплекта постельного белья. Правила записи в регистр этого не допускают, и программа 1С выдает ошибку при обновлении базы данных.
Удалите одну из записей для Комплекта постельного белья и выполните обновление сначала. На этот раз никаких ошибок программа 1С не выдаст!
Похожие публикации
&НаСервере
Процедура ИзменитьЦенуНаСервере ()
РегистрЦены = РегистрыСведений . ЦеныТоваров . СоздатьНаборЗаписей (); //1
РегистрЦены . Отбор . ВидЦен . Установить ( ВидЦены ); //2
РегистрЦены . Отбор . Период . Установить ( НачалоДня ( Дата )); //3
РегистрЦены . Прочитать (); //4
Для Каждого стрНабора из РегистрЦены Цикл
стрНабора . Цена = стрНабора . Цена *(( 100 + Процент )/ 100 ); //5
КонецЦикла;
РегистрЦены . Записать (); //6
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЦену ( Команда )
ИзменитьЦенуНаСервере ();
КонецПроцедуры
Исправление ошибки «Записи регистра сведений стали неуникальными»
Последовательное обновление конфигурации без «пропусков»
Если конфигурация типовая и изменений в нее пользователем не вносилось, проведите обновление последовательно всеми вышедшими релизами, без пропусков. Возможно, разработчики что-то убирали в коде, а в следующем релизе — добавляли и пропуск этих промежуточных релизов привел к ошибке заполнения каких-то данных регистра по умолчанию.
При возникновении ошибки обновите текущую конфигурацию, например, Бухгалтерия предприятия 3.0.67.54 не сразу на релиз 3.0.67.72, а последовательно на:
При последовательном обновлении запускаются специализированные обработчики, которые могут исключить данную ошибку автоматически.
Настройка автоматического обновления
Настройте автоматическое обновление 1С: раздел Администрирование — Настройки программы — Интернет-поддержка и сервисы — Обновление версии программы .
При автоматическом обновлении подобная ошибка, как правило, не появляется, так как все изменения разработчиков в «промежуточных» релизах, которые может пропустить пользователь при самостоятельном обновлении, учитываются автоматически.
Для автоматического обновления программы 1С должна быть настроена Интернет-поддержка.
Сравнение конфигураций
В самых сложных случаях придется сравнить основную конфигурацию с конфигурацией базы данных, анализ данных последней и приводит к ошибке.
Основная конфигурация – это обновляемая конфигурация программы. В типовых, не измененных программах 1С она совпадает с конфигурацией поставщика. После обновления конфигурации, запускается процесс обновления Конфигурации базы данных, в которой еще содержатся старые данные до тех пор, пока процесс обновления не завершится полностью.
В момент появления ошибки основная конфигурация и конфигурация базы данных отличаются. Именно появление ошибки и мешает завершению обновления конфигурации базы данных. Поэтому нужно разобраться, что происходит и какие данные в базе мешают ее обновлению.
Пошаговая инструкция сравнения основной конфигурации и конфигурации базы данных.
Откройте конфигурацию по кнопке Конфигуратор — Открыть конфигурацию . В правом окне откроется список всех объектов 1С.
Периодичность регистра сведений 1С
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
Изменение данных в регистре может осуществляться как вручную, так и при помощи документов. Режим записи в регистр определяет разработчик на этапе проектирования:
Содержание