Записи регистра сведений стали неуникальными 1с

Программная работа с регистрами сведений

Записи регистра сведений стали неуникальными 1с

28.02.2018

Категория: 1С:Предприятие

Регистры сведений в 1С — это прикладные объекты конфигурации для хранения данных в структурированном виде (в разрезе измерений). Например, в регистре сведений можно хранить курсы валют в разрезе валют, цены номенклатуры в разрезе номенклатур, ФИО физических лиц в разрезе физических лиц и т.д.

При проектировании разработчик указывает необходимость хранения данных в разрезе времени и минимальную периодичность, с которой записи будут храниться в регистре:

Регистры сведений, для которых указана периодичность, называются периодическими.

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

Физически регистр сведений представляет собой таблицу, в которой хранятся следующие данные:

  • измерения — описывают разрезы, в которых хранится информация;
  • период — поле, используемое для разворота данных по времени. Поле добавляется автоматически при указании свойства «Периодичность», отличного от «Непериодический»;
  • регистратор — поле, используемое для хранения документа, с которым связана запись. Поле добавляется автоматически при указании свойства «Режим записи» в значение «Подчинение регистратору»;
  • ресурсы — непосредственно хранят информацию для комбинации измерений;
  • реквизиты — дополнительная произвольная информация, относящаяся к конкретной записи регистра.

Для всех регистров сведений обеспечивается контроль уникальности записей, т.е. в регистре не может быть двух одинаковых записей. Одинаковыми считаются записи, у которых совпадают значения измерений, период (если регистр периодический) и регистратор (если регистр подчинен регистратору).

Добавление записей

Программно добавить записи в регистр сведений можно при помощи:

  • объекта НаборЗаписей;
  • объекта МенеджерЗаписи.

Объект МенеджерЗаписи можно использовать только для работы с независимыми регистрами. Причем можно обрабатывать только одну запись. Объект предназначен в основном для интерактивной работы, но программно с ним также можно работать. На системном уровне МенеджерЗаписи использует объект НаборЗаписей.

Общая схема добавления записей в регистр сведений при помощи объекта НаборЗаписей выглядит так:

  • создание объекта НаборЗаписей;
  • наложение отборов на измерения, период (если регистр периодический) и регистратора (если регистр подчинен регистратору);
  • добавление и заполнение значений полей записей;
  • запись набора записей.

// Добавление записи в независимый непериодический регистр сведенийНаборЗаписей = РегистрыСведений.ВерсииПодсистем.СоздатьНаборЗаписей(); // Этап 1НаборЗаписей.Отбор.ИмяПодсистемы.Установить(ИмяПодсистемы); // Этап 2// Этап 3НоваяЗапись = НаборЗаписей.Добавить();НоваяЗапись.ИмяПодсистемы = ИмяПодсистемы;НоваяЗапись.Версия = НомерВерсии;НаборЗаписей.Записать(); // Этап 4 // Добавление записи в независимый периодический регистр сведенийНаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); // Этап 1// Этап 2НаборЗаписей.Отбор.Валюта.Установить(Доллар);НаборЗаписей.Отбор.Период.Установить(НачалоДня(ТекущаяДата()));// Этап3НоваяЗапись = НаборЗаписей.Добавить();НоваяЗапись.Период = ТекущаяДата();НоваяЗапись.Валюта = Доллар;НоваяЗапись.Курс = 57.92;НоваяЗапись.Кратность = 1;НаборЗаписей.Записать(); // Этап 4

Общая схема добавления записей в регистр сведений при помощи объекта МенеджерЗаписи выглядит так:

  • создание объекта МенеджерЗаписи;
  • заполнение значений полей записи;
  • запись записи.

// Добавление записи в независимый непериодический регистр сведенийЗапись = РегистрыСведений.ВерсииПодсистем.СоздатьМенеджерЗаписи(); // Этап 1// Этап 2Запись.ИмяПодсистемы = ИмяПодсистемы;Запись.Версия = НомерВерсии;Запись.Записать(); // Этап 3 // Добавление записи в независимый периодический регистр сведенийЗапись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи(); // Этап 1// Этап 2Запись.Период = ТекущаяДата();Запись.Валюта = Доллар;Запись.Курс = 57.92;Запись.Кратность = 1;Запись.Записать(); // Этап 3

Изменение записей

Изменять существующие записи регистров сведений возможно при помощи объектов НаборЗаписей и МенеджерЗаписи. Ограничения объекта МенеджерЗаписи были описаны выше.

Общая схема редактирования записей регистров сведений:

  • создание объекта НаборЗаписей или МенеджерЗаписи;
  • наложение отборов;
  • чтение записей базы данных, соответствующих наложенным отборам;
  • редактирование прочитанных записей;
  • запись отредактированных записей.

// Редактирование записей с использованием объекта НаборЗаписейНаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); // Этап 1// Этап 2НаборЗаписей.Отбор.Период.Установить(ДатаКурса);НаборЗаписей.Отбор.Валюта.Установить(Доллар);НаборЗаписей.Прочитать(); // Этап 3Для Каждого Запись Из НаборЗаписей Цикл Запись.Курс = 57.84; // Этап 4КонецЦикла;НаборЗаписей.Записать(); // Этап 5 // Редактирование записей с использованием объекта МенеджерЗаписиЗапись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи(); // Этап 1// Этап 2Запись.Период = ДатаКурса;Запись.Валюта = Доллар;Запись.Прочитать(); // Этап 3Если Запись.Выбран() Тогда // Проверка, что запись существует Запись.Курс = 57.92; // Этап 4 Запись.Записать(); // Этап 5КонецЕсли;

Чтение записей

Чтение информации из базы данных рекомендуется выполнять при помощи запросов. Данный способ обеспечивает гибкое применение отборов и группировок, а также возможность выбора записей из нескольких таблиц.

Запрос = Новый Запрос;Запрос.Текст = «ВЫБРАТЬ | КурсыВалют.Период, | КурсыВалют.Валюта, | КурсыВалют.Курс |ИЗ | РегистрСведений.КурсыВалют КАК КурсыВалют»; Выборка = Запрос.Выполнить().Выбрать();Пока Выборка.Следующий() Цикл // обход результата выполнения запросаКонецЦикла;

Для периодических регистров сведений есть возможность получить наиболее поздние записи, период которых меньше указанной даты — срез последних, и наиболее ранние записи, период которых больше указанной даты — срез первых.

Для получения среза первых и среза последних запросом необходимо использовать одноименные виртуальные таблицы, в параметрах которых сразу можно задать дату среза и отборы. Отборы, если они необходимы, рекомендуется накладывать именно в параметрах виртуальных таблиц, т.

к. это позволяет ускорить выполнение запроса.

// Получение записи, у которой валюта равна значению из переменной «ВыбраннаяВалюта»// и период МЕНЬШЕ или равен значению из переменной «ВыбраннаяДата»Запрос = Новый Запрос;Запрос.Текст = «ВЫБРАТЬ | КурсыВалютСрезПоследних.Период, | КурсыВалютСрезПоследних.Валюта, | КурсыВалютСрезПоследних.Курс |ИЗ | РегистрСведений.КурсыВалют.СрезПоследних(&Период, Валюта = &Валюта) КАК КурсыВалютСрезПоследних»; Запрос.УстановитьПараметр(«Валюта», ВыбраннаяВалюта);Запрос.УстановитьПараметр(«Период», ВыбраннаяДата); Выборка = Запрос.Выполнить().Выбрать();Пока Выборка.Следующий() Цикл // обход результата выполнения запросаКонецЦикла; // Получение записи, у которой валюта равна значению из переменной «ВыбраннаяВалюта»// и период БОЛЬШЕ или равен значению из переменной «ВыбраннаяДата»Запрос = Новый Запрос;Запрос.Текст = «ВЫБРАТЬ | КурсыВалютСрезПервых.Период, | КурсыВалютСрезПервых.Валюта, | КурсыВалютСрезПервых.Курс |ИЗ | РегистрСведений.КурсыВалют.СрезПервых(&Период, Валюта = &Валюта) КАК КурсыВалютСрезПервых»; Запрос.УстановитьПараметр(«Валюта», ВыбраннаяВалюта);Запрос.УстановитьПараметр(«Период», ВыбраннаяДата); Выборка = Запрос.Выполнить().Выбрать();Пока Выборка.Следующий() Цикл // обход результата выполнения запросаКонецЦикла;

Кроме чтения запросом возможно использование методов объектной модели.

Для непериодических регистров сведений:

  • Выбрать(Отбор, Порядок) — выбирает записи с указанным отбором;
  • ВыбратьПоРегистратору(Регистратор) — выбирает все записи указанного регистратора;
  • Получить(Отбор) — получает ресурсы записи с отбором по всем измерениям.

Для периодических регистров сведений:

  • Выбрать(НачалоИнтервала, КонецИнтервала, Отбор, Порядок) — выбирает записи с указанным отбором, у которых период находится между НачалоИнтервала и КонецИнтервала;
  • ВыбратьПоРегистратору(Регистратор) — выбирает все записи указанного регистратора;
  • Получить(Период, Отбор) — получает ресурсы записи с отбором по всем измерениям и периоду;
  • ПолучитьПервое(НачалоПериода, Отбор) — получает ресурсы наиболее ранней записи, соответствующей указанным периоду и отбору;
  • ПолучитьПоследнее(КонецПериода, Отбор) — получает ресурсы наиболее поздней записи, соответствующей указанным периоду и отбору;
  • СрезПервых(НачалоПериода, Отбор) — получает таблицу наиболее ранних записей, соответствующую указанным периоду и отбору;
  • СрезПоследних(КонецПериода, Отбор) — получает таблицу наиболее поздних записей, соответствующую указанным периоду и отбору.

Удаление записей

Для удаления записи (записей) в независимом регистре сведений необходимо:

  • создать набор записей;
  • наложить требуемые отборы на измерения и период (если регистр периодический);
  • записать набор записей без предварительного чтения.
  • НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Валюта.Установить(Доллар);НаборЗаписей.Отбор.Период.Установить(НачалоДня(ТекущаяДата())); НаборЗаписей.Записать();

    Для удаления записей в подчиненном регистре сведений необходимо:

    • создать набор записей;
    • наложить отбор на регистратора;
    • записать набор записей без предварительного чтения.

    НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДокументРегистратор);НаборЗаписей.Записать();

    Очистка регистра сведений

    Для удаления всех записей в независимом регистре сведений достаточно записать набор записей этого регистра без установки отборов:

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

    Запись в регистр сведений, подчиненный регистратору, возможна только при установке отбора по регистратору, поэтому для очистки таких регистров необходимо:

    • получить перечень ссылок всех регистраторов регистра сведений;
    • последовательно записать пустой набор записей с отбором по регистраторам из первого пункта.

    Запрос = Новый Запрос( «ВЫБРАТЬ | ЦеныНоменклатуры.Регистратор |ИЗ | РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры»); Выборка = Запрос.Выполнить().Выбрать(); НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();Пока Выборка.Следующий() Цикл НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор); НаборЗаписей.Записать();КонецЦикла;

    28.05.2018

    Как работает механизм регистрации изменений

    Механизм регистрации изменений используется для обмена данными. При выполнении обмена из базы-источника в базу-приемник передаются не все данные, а только те, для которых были зарегистрированы изменения. В 1С регистрация изменений доступна для следующих объектов: константа, справочник, документ…

    Источник: https://tokmakov.msk.ru/articles/item/8

    Предназначение регистра сведений

    Регистры сведений в 1С — это прикладные объекты конфигурации для хранения данных в структурированном виде (в разрезе измерений). Например, в регистре сведений можно хранить курсы валют в разрезе валют, цены номенклатуры в разрезе номенклатур, ФИО физических лиц в разрезе физических лиц и т.д.

    При проектировании разработчик указывает необходимость хранения данных в разрезе времени и минимальную периодичность, с которой записи будут храниться в регистре:

    Регистры сведений, для которых указана периодичность, называются периодическими.

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

    Физически регистр сведений представляет собой таблицу, в которой хранятся следующие данные:

    • измерения — описывают разрезы, в которых хранится информация;
    • период — поле, используемое для разворота данных по времени. Поле добавляется автоматически при указании свойства «Периодичность», отличного от «Непериодический»;
    • регистратор — поле, используемое для хранения документа, с которым связана запись. Поле добавляется автоматически при указании свойства «Режим записи» в значение «Подчинение регистратору»;
    • ресурсы — непосредственно хранят информацию для комбинации измерений;
    • реквизиты — дополнительная произвольная информация, относящаяся к конкретной записи регистра.

    Для всех регистров сведений обеспечивается контроль уникальности записей, т.е. в регистре не может быть двух одинаковых записей. Одинаковыми считаются записи, у которых совпадают значения измерений, период (если регистр периодический) и регистратор (если регистр подчинен регистратору).

    Объекты доступа документов

    Записи регистра сведений стали неуникальными 1с

    При обновлении конфигурации периодически может возникать ошибка «Записи регистра сведений стали неуникальными» или «Имеются записи с одинаковыми измерениями«
    Эта ошибка означает, что при обновлении изменился состав измерений регистра сведений.

    Одним из базовых принципов работы регистра сведений является требование, что каждому набору значений измерений регистра сведений соответсвует один и только один набор значений реквизитов. Допустим, в нашей конфигурации есть регистр ответственных лиц по складам в разрезе складов и помещений.

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

    Однако у пользователя в этом регисте указано, что для «Главного склада» за помещение «Продукты» отвечает Иванов, а за помещение «Холодильники» — Петров. При обновлении информационной базы платформа должна оставить только одну запись с ответственным. Но она не может решить за пользователя, кого поставить ответственным за «Главный склад» вцелом (Иванова или Петрова). Поэтому выдается сообщение об ошибке.

    В зависимости от конкретной ситуации, сообщение может звучать как «Записи регистра сведений стали неуникальными» либо «Имеются записи с одинаковыми измерениями«.

    Смысл сообщения одинаков.

    Это сообщение означает, что в новой структуре регистров образовалось несколько записей с одним набором измерений и их нужно свернуть в одну.

    Для решения проблемы удаляем одну из записей, чтобы 1С однозначно знала, что за «Главный склад» отвечает Иванов.

    Ошибки неуникальности записей в 1С

    В типовых конфигурациях в большинстве случаев эта проблема решается разработчиком программно. Т.е. обновление конфигурации само при необходимости сворачивает записи регистра.

    Однако в некоторых случаях (например, если выполняется обновление с пропуском части релизов, или конфигурация доработана) данные могут не свернуться и их нужно свернуть самостоятельно. Для того, чтобы определить, что именно изменилось, выполняем режим «Конфигурация» — «Сравнить конфигурации».

    И сравниваем основную конфигурацию с конфигурацией базы данных. При таком сравнении мы однозначно можем определить, какие именно поля удалены или изменились.

    После этого консолью запросов находим неуникальные записи и удаляем их. Если записей немного, то удалить дубли можно и вручную. Если много, то проще это сделать программно. Предлагаю простую обработку, решающую данную задачу.

    Инструкция по свертке неуникальных записей:

    1. Открыть обработку. 2. Выбрать регистр сведений, в котором появились неуникальные записи. 3. Отметить измерения которые будут удалены при обновлении.

    4. Нажать « дубли».

    Обработка найдет дублирующиеся строки и свернет их в одну строку.
    После этого обновление конфигурации пройдет корректно.

    Также можно просто проверить наличие дублей без изменения данных

    Read Full Article

    Права доступа в 1С:Предприятии 8

    В 1С:Предприятии различают два типа прав – основные и интерактивные.

    Основные (неинтерактивные) – проверяются всегданезависимо от способа обращения к объектам информационной базы.

    Интерактивные – проверяются при выполнении интерактивных операций (например, операция «Установить пометку удаления»).

    Нужно учитывать, что проверку интерактивных прав можно обойти, создав, например, при конфигурировании форму самостоятельно и заменив стандартные команды своими, а проверку неинтерактивных прав нельзя обойти ни при каких обстоятельствах. Неинтерактивными правами защищается характерная для объекта фундаментальная функциональность, за это отвечают, например, такие права, как: «Добавление», «Чтение», «Изменение», «Удаление».

    Для построения защищенных прикладных решений достаточно управлять только 4-мя основными правами доступа — «Добавление», «Чтение», «Изменение» и «Удаление».

    Система 1С:Предприятие допускает проверку прав из встроенного языка. Например при добавлении команд к формам разработчик должен дополнительно позаботиться о проверке соответствующих интерактивных прав.

    Пример проверки прав из языка:

    Копировать в буфер обменаПроцедура КнопкаНажатие(Элемент) Разрешено = ПравоДоступа(«ИнтерактивноеУдаление», Метаданные.Документы.Документ1);ЕслиНе Разрешено Тогда Предупреждение («Удалять не разрешено»);// … необходимые действияКонецЕсли// … необходимые действияКонецПроцедуры

    При этом нужно помнить о том, что у будущего пользователя конфигурации соответствующие интерактивные и неинтерактивные права к тому или иному объекту могут различаться. Например, может быть разрешено право на «Удаление» и запрещено право «Интерактивное удаление».

    Проверка прав объектов производится только в режиме «1С:Предприятие».
    При попытке выполнить неразрешенную операцию выдается сообщение об ошибке «Нарушение прав доступа!», и производится отмена всех начатых транзакций.

    Проверка основных и интерактивных прав используется расширениями формы, табличного поля и поля ввода (расширение формы определяется ее основным реквизитом, а табличного поля и поля ввода — типом редактируемых данных). Благодаря этому, если не установлено право «Просмотр», то форма списка или форма объекта не откроется, и будет выдано стандартное сообщение о нарушении прав доступа.

    Рассмотрим проверку прав расширениями формы, табличного поля и поля ввода на примере документа:

    • При открытии формы документа проверяется право «Просмотр», после чего, если это форма нового объекта, то проверяется право «ИнтерактивноеДобавление», а если нет — право «Редактирование». Если выполняется запись с проведением, то проверяются права «ИнтерактивноеПроведение»,  «ИнтерактивнаяОтменаПроведения» или «ИнтерактивноеПроведениеНеОперативное», в зависимости от режима записи.
    • Расширение табличного поля для журнала документов при открытии формы, в которой журнал установлен основным реквизитом, проверяет, что право «Просмотр» установлено хотя бы у одного документа журнала. При проведении документов из журнала проверяются права «ИнтерактивнаяОтменаПроведения», «ИнтерактивноеПроведение» и «ИнтерактивноеПроведениеНеОперативное». При удалении документов проверяется право «ИнтерактивноеУдаление», а при установке/снятии пометки на удаление проверяются права «ИнтерактивнаяПометкаУдаления» и «ИнтерактивноеСнятиеПометкиУдаления». При добавлении нового документа, после выбора его типа, расширение табличного поля журнала документов проверяет право «ИнтерактивноеДобавление».
    • Поле ввода для документа проверяет только право «ВводПоСтроке».

    Связанные права

    Часть прав в системе 1С:Предприятия связаны друг с другом. Это означает, что основные права доступа, такие как «Чтение», «Изменение», «Добавление» и «Удаление» и некоторые другие могут влиять на права, отвечающие за такие операции с объектом, которые, в конечном счете, приведут к простейшим операциям. Например, нельзя разрешить право «Изменение», не выдав право «Чтение».

    Интерактивные права напрямую зависят от их неинтерактивных аналогов, т.е. право «Интерактивное удаление» зависит от права «Удаление».

    На практике при конфигурировании это выглядит так, что при разрешении интерактивных прав аналогичные им неинтерактивные будут автоматически разрешены, и, наоборот, при снятии неинтерактивных прав соответствующие им интерактивные автоматически будут сброшены.

    Допускается лишь установка неинтерактивного права и сброс интерактивного, но не наоборот. Например, нельзя разрешить интерактивное право «Интерактивное удаление» и запретить неинтерактивное «Удаление».

    Зависимость прав может выстраиваться в сложные цепочки, например, у объекта «Документ» право «Интерактивная отмена проведения» зависит от прав «Отмена проведения» и «Просмотр» одновременно, где первое зависит от «Изменение», которое, в свою очередь, зависит от права «Чтение» (см. рисунок).

    Ключевым является право «Чтение», при его отсутствии автоматически пропадают любые другие права на доступ к объекту.

    Алфавитный список прав доступа 1С:Предприятия

    Право доступаОписание
    AutomationРазрешает использование 1С:Предприятие в режиме automation.
    АдминистрированиеРазрешает административные действия, например, ведение списка пользователей или открытие конфигурации.
    АктивныеПользователиРазрешает просмотр списка активных пользователей. Это право может использоваться при организации «гостевого входа» в прикладном решении.
    ВводПоСтрокеРазрешает использование режима ввода по строке для различных объектов.
    ВнешнееСоединениеРазрешает использование 1С:Предприятия через COM соединение.
    ДобавлениеРазрешает добавление объектов данного вида. Проверяется на уровне объекта и на уровне БД.
    ЖурналРегистрацииРазрешает просмотр журнала подключений и протоколов работы
    ИзменениеРазрешает изменение объектов данного вида. Проверяется на уровне объекта и на уровне БД.
    ИнтерактивнаяОтменаПроведенияРазрешает интерактивную отмену проведения
    ИнтерактивнаяПометкаУдаленияРазрешает интерактивную установку пометки удаления
    ИнтерактивноеДобавлениеРазрешает интерактивное добавление объектов данного вида
    ИнтерактивноеОткрытиеВнешнихОбработокРазрешает открытие внешних обработок стандартными командами меню
    ИнтерактивноеПроведениеРазрешает интерактивное проведение документов данного вида
    ИнтерактивноеПроведениеНеОперативноеРазрешает интерактивное проведение (стандартными командами форм) документа в неоперативном режиме
    ИнтерактивноеСнятиеПометкиУдаленияРазрешает интерактивное снятие пометки на удаление
    ИнтерактивноеУдалениеРазрешает интерактивное непосредственное удаление
    ИнтерактивноеУдалениеПомеченныхРазрешает интерактивное удаление помеченных объектов
    ИспользованиеРазрешает использование обработки, отчета, интерфейса
    МонопольныйРежимРазрешает переключение в монопольный режим при работе в режиме 1С:Предприятия.
    ОтменаПроведенияРазрешает отмену проведения документов
    ПроведениеРазрешает проведение документов
    ПросмотрРазрешает просмотр объектов (например, в списках)
    РедактированиеРазрешает редактирование объекта
    УдалениеРазрешает удаление
    УправлениеИтогамиРазрешает управление итогами регистра бухгалтерии и регистра накопления — установку периода, по который рассчитаны итоги, и пересчет итогов
    ЧтениеРазрешает чтение данных из информационной базы

    Источник: https://printscanner.ru/obekty-dostupa-dokumentov/

    Самая полезная информация
    Добавить комментарий

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: