1с скопировать записи регистра сведений
Разберем один из объектов, при помощи которого можно записывать данные в регистр сведений 1С. Набор записей регистра сведений. Если при помощи менеджера записей регистра сведений мы могли работать в регистре только с одной записью, то при помощи набора можно создавать (удалять, редактировать) любое количество записей.
Для создания набора записи регистра сведений необходимо использовать метод СоздатьНаборЗаписей менеджера регистра сведений.
МенеджерЦеныНаТопливо = РегистрыСведений . ЦеныНаТопливо ;
НаборЗаписей = МенеджерЦеныНаТопливо . СоздатьНаборЗаписей ();
После выполнения данного метода будет создан набор записей регистра сведений, т.е. переменная НаборЗаписей кода выше имеет тип РегистрСведенийНаборЗаписей.ЦеныНаТопливо. Причем он будет создан абсолютно пустым!
Заметьте, набор записей можно создать или в серверном контексте, или в клиентском контексте, но в режиме толстого клиента. Под тонким клиентом, код приведенный в этой статье работать не будет!
Вы можете работать с этим набором записей как с коллекцией: добавлять, удалять запись, очищать всю коллекцию. Причем, метод СоздатьНаборЗаписей создает пустой набор записей. В нашей переменной НаборЗаписей нет ни каких данных, даже если они имеются сейчас в регистре. И если мы запишем этот набор, то все данные, которые есть у нас в регистре будет уничтожены. Т.е. код ниже приведет к полной очистке моего регистра сведений.
МенеджерЦеныНаТопливо = РегистрыСведений . ЦеныНаТопливо ;
НаборЗаписей = МенеджерЦеныНаТопливо . СоздатьНаборЗаписей ();
Записать() – это метод объекта набор записей регистра сведений, которые записывает данные из созданного набора непосредственно в регистр сведений. Причем данный метод имеет параметр Замещать типа Булево, который по умолчанию всегда равен Истине. Если данный параметр принимает значение Истина, то после записи набор записей из созданного объекта заместит данные в регистре сведений. Поскольку мы не создали ни какие данные (наш набор пуст), то у нас просто все текущие записи в регистре сведений удалятся. Если мы не хотим этого, то нужно просто в параметр Замещать передать Ложь.
МенеджерЦеныНаТопливо = РегистрыСведений . ЦеныНаТопливо ;
НаборЗаписей = МенеджерЦеныНаТопливо . СоздатьНаборЗаписей ();
НаборЗаписей . Записать (Ложь);
В этом случае записи (которых нет) из набора не заместят записи из регистра, и данные не очистятся.
Если мы хотим создать новую запись, то необходимо воспользоваться методом Добавить() набора записей регистра сведений, который создает новую запись в нашем наборе.
МенеджерЦеныНаТопливо = РегистрыСведений . ЦеныНаТопливо ;
НаборЗаписей = МенеджерЦеныНаТопливо . СоздатьНаборЗаписей ();
НоваяЗапись = НаборЗаписей . Добавить ();
НоваяЗапись . Период = ТекущаяДата ();
НоваяЗапись . ВидТоплива = ВидТоплива ;
НоваяЗапись . ПоставщикТоплива = ПоставщикТоплива ;
НоваяЗапись . Цена = Цена ;
НаборЗаписей . Записать (Ложь);
Данный код создаст новую запись. В своем коде я работаю с регистром сведений, который создал для предыдущих статей.
Если мы попытаемся еще раз записать точно такой же набор данных, то возникнет ошибка «Запись с такими ключевыми полями существует!»
Причем такой проблемы ни когда не будет при работе с менеджером регистра сведений, так как при работе с менеджером мы получаем данные по измерениям и просто перезаписываем ресурсы и реквизиты.
И обратите внимание, если мы будет записывать с замещением, то проблем с ключевыми полями также не будет, поскольку мы своей записью заместим все имеющиеся данные, т.е. они будут очищены.
При помощи объекта набор записей можно записать в регистр практически неограниченное количество записей. Например, я сделаю выборку по поставщикам топлива и в цикле создам записи нашего набора.
МенеджерЦеныНаТопливо = РегистрыСведений . ЦеныНаТопливо ;
НаборЗаписей = МенеджерЦеныНаТопливо . СоздатьНаборЗаписей ();
Выборка = Справочники . ПоставщикиТоплива . Выбрать ();
Пока Выборка . Следующий () Цикл
НоваяЗапись = НаборЗаписей . Добавить ();
НоваяЗапись . Период = ТекущаяДата ();
НоваяЗапись . ВидТоплива = ВидТоплива ;
НоваяЗапись . ПоставщикТоплива = Выборка . Ссылка ;
НоваяЗапись . Цена = Цена ;
КонецЦикла;
НаборЗаписей . Записать (Ложь);
В этом коде мы создадим несколько записей набора, а потом запишем весь наш набор в регистр сведений.
Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
Доброго времени суток! Нужно отловить интерактивное копирование записи регистра сведений в управляемых формах. Т.е. пользователь открывает фому списка регистра сведений, выделяет нужную запись регистра и наживает F9. Так вот мне нужно, как то перехватить это событие, что бы переопределить значения некоторых реквизитов и что бы в открытой форме были уже новые значения, к примеру в период подставить текущую дату, в измерение "Организация", подставить текущую организацию пользователя и т.д. На форумах ничего толкового не нашел, один бред какой-то. Прошу обратить внимание, что речь идет именно о копировании ЗАПИСИ РЕГИСТРА СВЕДЕНИЙ, а не элемента справочника или документа. Конфигурация не типовая, пишется с нуля (если это имеет значение). Заранее спасибо!
главное зафиксировать факт того события которые вы должны перехватить, а остальное уже не сложно
Обычно я фиксирую такие "факты" во встроенной структуре "ДополнительныеСвойства" и у набора записей регистра сведений она тоже есть. Т.е., в тех формах или обработчиках событий при копировании, добавлении вы должны вставить в ДополнительныеСвойства новый ключ, например "НеобходимаКорректировкаЗаписи". Можно добавить по этому ключу значение структуру с данными заполнения. Далее все элементарно.
Соответственно по параметру "Копирование" я погу понять что запись создается копирование, но что делать дальше, не пойму, как добраться до значений новой записи, как их изменить, или как передать этот признак в форму, что бы обратиться к нему допустим при открытии формы?
Не пробовал, но вдруг это поможет.
Попробуй создать свою форму списка - регистра сведений.
Помести на эту форму кнопку и задай сочетание клавиш для этой кнопки.
Под кнопкой напиши свой код, что нужно делать.
Не уверен, что F9 подойдет, но Ctrl + W будет работать.
(4) Да не, мне кажется должен быть какой-то "правильный", "типовой" алгоритм действий в моем случае. Разработчик платформы должны были предусмотреть такой сценарий, должно быть как-то все слишком просто и правильно.
Модуль менеджера РС имеет предопределенную процедуру ОбработкаПолученияФормы
В СП посмотрите, полагаю самое то для ваших целей.
(6) Да, там есть параметр через который можно добраться до значения копирования, но как изменить значения новой записи? Проще тогда получить объект копирования из обработчика ПриСозданииНаСервере (только что нарыл):
Проблема в том, что не возможно точно определить, произошло копирование или нет, т.к. ЗначениеКопирования есть всегда, даже если я просто создаю запись.
(9) Да, все верно, все работает, кроме того, как я понял, проверить новая это запись или нет можно конструкцией
Пример с использованием набора записей и менеджера записи:
А вот пример через менеджер записи:
Похожие FAQ
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Cодержимое указанного ниже веб-сайта в этом приложении блокируется. Aboutsecurity_1cv8c.exe 1
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э PostgreSQL: установка, настройка, обслуживание 11
PostgreSQL напрямую "из коробки" применяться для использования с 1С Предприятем не может. Необходима именно адаптированная версия от 1С, превращающая PostgreSQL в блокировочник, причем нужно понимать, что блокировки будут накладываться на всю таблиц ZIP-архив Создание 0
Для того чтобы записать файлы в ZIP-архив необходимо выполнить несколько простых действий: * Создать архив с необходимыми параметрами, в который будут помещаться файлы. * Поместить в архив необходимые файлы. * Записать архив. Создание объекта За Посмотреть все результаты поиска похожих
Еще в этой же категории
Как изменить запись регистра сведений? 36
НаборЗаписей = РегистрыСведений.НумерацияДоговоров.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Период.Установить(НачалоГода(Дата)); НаборЗаписей.Отбор.Организация.Установить(Организация); НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество Как добавить запись в периодический независимый регистр сведений? 16
// Добавление записей в периодический независимый регистр сведений НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Валюта.Установить(ТекущаяВалюта); НаборЗаписей.Отбор.Период.Установить(ТекущаяДата); НовЗапис Как добавить записи в непериодический независимый регистр сведений? 13
НаборЗаписей = РегистрыСведений.ЗначенияСвойств.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Номенклатура.Установить(ТекущаяНоменклатура); НаборЗаписей.Отбор.Свойство.Установить(ТекущееСвойство); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапи Как добавить записи в независимый регистр сведений? 11
Для добавления отдельной записи в регистр сведений, не подчиненный регистратору, можно использовать объект РегистрСведенийМенеджерЗаписи. имя . Например, для того, чтобы в независимый регистр сведений ЗначенияСвойствОбъектов с измерениями Объект, Открыть запись регистра сведений по ключу. 10
// Создание структуры значений СтруктураФормы = Новый Структура; СтруктураФормы.Вставить(" Пользователь" , Пользователь); СтруктураФормы.Вставить(" Настройка" , Элемент.ТекущаяСтрока); // Почему-то нужно создавать запись через массив (по друго Посмотреть все в категории Регистры сведений
Регистры сведений позволяют хранить произвольные данные в разрезе нескольких измерений. Они позволяют получить срез информации (текущее значение показателей) на любой момент времени.
Для регистров сведений связь с регистраторами не всегда обязательна.
Добавление записей в регистр сведений
Программно добавить записи в регистр сведений можно двумя способами:
- с помощью объекта МенеджерЗаписи;
- с помощью объекта НаборЗаписей.
Добавление записей с помощью объекта МенеджерЗаписи
Объект МенеджерЗаписи можно использовать только для работы с независимыми регистрами. Причем можно обрабатывать только одну запись. Таким образом, для того, чтобы в периодический, независимый регистр сведений “КурсыВалют” с измерением “Валюта” и ресурсами “Курс” и “Кратность” добавить одну запись – курс и кратность валюты на определенную дату – можно использовать следующий код:
Добавление записей в независимый регистр сведений помощью объекта НаборЗаписей
Добавление записей в независимый регистр сведений с помощью НабораЗаписей выполняется по следующему алгоритму:
- Создание объекта НабораЗаписи;
- Установка отбора по измерениям и периоду (если регистр периодический);
- Добавление и заполнение значений полей записи;
- Запись набора.
Для примера выполним добавление записей в тот же регистр сведений “КурсыВалют“, предварительно установив отбор по измерению “Валюта” и периоду.
Добавление записей в регистр сведений, подчиненный регистратору
Для добавление записей в регистр сведений, подчиненный регистратору, выполняется с помощью объекта НаборЗаписей по следующему алгоритму:
- Создание объекта НаборЗаписей;
- Установка отбора по определенному регистратору;
- Заполнение записей набора;
- Запись набора.
Изменение записей в регистре сведений
Изменение записей в независимом регистре сведений
Изменять записи в независимом регистре сведений можно как с помощью МенеджераЗаписи, так и с помощью НабораЗаписей. Изменение записей выполняется по следующему алгоритму:
- Создание объекта МенеджерЗаписи или НаборЗаписи;
- Установить отборы;
- Чтение записей из базы данных, соответствующих наложенному отбору;
- Редактирование полученных записей;
- Запись измененных записей.
При изменении записей в независимом регистре сведений с помощью объекта МенеджерЗаписи, действуют такие же ограничения как и при добавлении. При изменении записи с помощью менеджера, после чтения значений выполним проверку – есть ли записи для изменения.
В отличии от менеджера записи, работа с набором записи позволяет изменять сразу несколько записей, полученных в результате установленного отбора. Поэтому изменение записей производим в цикле.
Изменение записей в регистрах сведений подчиненных регистраторам
Изменение записей регистров, подчиненных регистраторам, возможно только с помощью наборов записей. При этом всегда используется отбор по регистратору. Нельзя добавлять или удалять отдельные записи. Можно только считывать и записывать записи по регистратору.
Изменение записей выполняется по следующему алгоритму:
- Создать объект НаборЗаписей;
- Установить отбор по определенному регистратору;
- Прочитать набор;
- Изменить записи набора;
- Записать набор.
Удаление записи в регистре сведений
Удаление записи из независимого регистра сведений
Для удаления записи из независимого регистра сведений выполняется по следующему алгоритму:
Регистры сведений в 1С — это прикладные объекты конфигурации для хранения данных в структурированном виде (в разрезе измерений). Например, в регистре сведений можно хранить курсы валют в разрезе валют, цены номенклатуры в разрезе номенклатур, ФИО физических лиц в разрезе физических лиц и т.д.
При проектировании разработчик указывает необходимость хранения данных в разрезе времени и минимальную периодичность, с которой записи будут храниться в регистре:
Регистры сведений, для которых указана периодичность, называются периодическими.
Изменение данных в регистре может осуществляться как вручную, так и при помощи документов. Режим записи в регистр определяет разработчик на этапе проектирования:
Физически регистр сведений представляет собой таблицу, в которой хранятся следующие данные:
- измерения — описывают разрезы, в которых хранится информация;
- период — поле, используемое для разворота данных по времени. Поле добавляется автоматически при указании свойства «Периодичность», отличного от «Непериодический»;
- регистратор — поле, используемое для хранения документа, с которым связана запись. Поле добавляется автоматически при указании свойства «Режим записи» в значение «Подчинение регистратору»;
- ресурсы — непосредственно хранят информацию для комбинации измерений;
- реквизиты — дополнительная произвольная информация, относящаяся к конкретной записи регистра.
Для всех регистров сведений обеспечивается контроль уникальности записей, т.е. в регистре не может быть двух одинаковых записей. Одинаковыми считаются записи, у которых совпадают значения измерений, период (если регистр периодический) и регистратор (если регистр подчинен регистратору).
Добавление записей
Программно добавить записи в регистр сведений можно при помощи:
- объекта НаборЗаписей ;
- объекта МенеджерЗаписи .
Объект МенеджерЗаписи можно использовать только для работы с независимыми регистрами. Причем можно обрабатывать только одну запись. Объект предназначен в основном для интерактивной работы, но программно с ним также можно работать. На системном уровне МенеджерЗаписи использует объект НаборЗаписей .
Общая схема добавления записей в регистр сведений при помощи объекта НаборЗаписей выглядит так:
- создание объекта НаборЗаписей ;
- наложение отборов на измерения, период (если регистр периодический) и регистратора (если регистр подчинен регистратору);
- добавление и заполнение значений полей записей;
- запись набора записей.
Общая схема добавления записей в регистр сведений при помощи объекта МенеджерЗаписи выглядит так:
- создание объекта МенеджерЗаписи ;
- заполнение значений полей записи;
- запись записи.
Изменение записей
Изменять существующие записи регистров сведений возможно при помощи объектов НаборЗаписей и МенеджерЗаписи . Ограничения объекта МенеджерЗаписи были описаны выше.
Общая схема редактирования записей регистров сведений:
- создание объекта НаборЗаписей или МенеджерЗаписи ;
- наложение отборов;
- чтение записей базы данных, соответствующих наложенным отборам;
- редактирование прочитанных записей;
- запись отредактированных записей.
Чтение записей
Чтение информации из базы данных рекомендуется выполнять при помощи запросов. Данный способ обеспечивает гибкое применение отборов и группировок, а также возможность выбора записей из нескольких таблиц.
Для периодических регистров сведений есть возможность получить наиболее поздние записи, период которых меньше указанной даты — срез последних, и наиболее ранние записи, период которых больше указанной даты — срез первых. Для получения среза первых и среза последних запросом необходимо использовать одноименные виртуальные таблицы, в параметрах которых сразу можно задать дату среза и отборы. Отборы, если они необходимы, рекомендуется накладывать именно в параметрах виртуальных таблиц, т.к. это позволяет ускорить выполнение запроса.
Кроме чтения запросом возможно использование методов объектной модели.
Для непериодических регистров сведений:
- Выбрать(Отбор, Порядок) — выбирает записи с указанным отбором;
- ВыбратьПоРегистратору(Регистратор) — выбирает все записи указанного регистратора;
- Получить(Отбор) — получает ресурсы записи с отбором по всем измерениям.
Для периодических регистров сведений:
- Выбрать(НачалоИнтервала, КонецИнтервала, Отбор, Порядок) — выбирает записи с указанным отбором, у которых период находится между НачалоИнтервала и КонецИнтервала ;
- ВыбратьПоРегистратору(Регистратор) — выбирает все записи указанного регистратора;
- Получить(Период, Отбор) — получает ресурсы записи с отбором по всем измерениям и периоду;
- ПолучитьПервое(НачалоПериода, Отбор) — получает ресурсы наиболее ранней записи, соответствующей указанным периоду и отбору;
- ПолучитьПоследнее(КонецПериода, Отбор) — получает ресурсы наиболее поздней записи, соответствующей указанным периоду и отбору;
- СрезПервых(НачалоПериода, Отбор) — получает таблицу наиболее ранних записей, соответствующую указанным периоду и отбору;
- СрезПоследних(КонецПериода, Отбор) — получает таблицу наиболее поздних записей, соответствующую указанным периоду и отбору.
Удаление записей
Для удаления записи (записей) в независимом регистре сведений необходимо:
Для удаления записей в подчиненном регистре сведений необходимо:
- создать набор записей;
- наложить отбор на регистратора;
- записать набор записей без предварительного чтения.
Очистка регистра сведений
Для удаления всех записей в независимом регистре сведений достаточно записать набор записей этого регистра без установки отборов:
Запись в регистр сведений, подчиненный регистратору, возможна только при установке отбора по регистратору, поэтому для очистки таких регистров необходимо:
- получить перечень ссылок всех регистраторов регистра сведений;
- последовательно записать пустой набор записей с отбором по регистраторам из первого пункта.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Читайте также: