как программно открыть форму записи регистра сведений

Содержание

Открытие управляемой формы 1С записи регистра сведений

Своё знакомство с управляемым приложением 1С как разработчик я начал достаточно давно, но некоторые примеры разработки управляемого приложения повергают меня в шок до сих пор. Один из таких примеров — программное открытие управляемой формы записи регистра сведений.

Рассмотрим пример программного открытия управляемой формы уже существующей записи регистра сведений.

Открытие управляемой формы 1С записи регистра сведений

Стояла достаточно простая задача — открыть запись регистра сведений 1С «Счета учета» по значениям измерений. Данная процедура вызывалась из таблицы значений, где хранились значения этих измерений.

Процедура в итоге выглядела следующим образом:

&НаКлиенте
Процедура СчетаУчетаНоменклатурыПередНачаломИзменения(Элемент, Отказ)

ПередаваемыеПараметры = Новый Структура; //формируем структуру полей измерений

ПередаваемыеПараметры.Вставить(«Номенклатура»,СтрокаТабличнойЧасти.Номенклатура);
ПередаваемыеПараметры.Вставить(«Организация»,СтрокаТабличнойЧасти.Организация);
ПередаваемыеПараметры.Вставить(«Склад»,СтрокаТабличнойЧасти.Склад);
ПередаваемыеПараметры.Вставить(«ТипСклада»,СтрокаТабличнойЧасти.ТипСклада);

ПараметрыМассив = Новый Массив;
ПараметрыМассив.Добавить(ПередаваемыеПараметры); // помещаем структуру в массив
КлючЗаписиРегистра = Новый(«РегистрСведенийКлючЗаписи.СчетаУчетаНоменклатуры», ПараметрыМассив); //с помощью массива со структурой создаем ключ записи
ОткрытьФормуМодально(«РегистрСведений.СчетаУчетаНоменклатуры.ФормаЗаписи», Новый Структура(«Ключ», КлючЗаписиРегистра)); // передаем в форму ключ записи и открываем её

Этот способ я подсмотрел в типовой конфигурации. Я не очень понимаю, зачем в итоге такая длинная цепочка, если кто-то видел более простой способ. Просьба, напишите, как, в комментариях, буду очень Вам благодарен. Спасибо!

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Источник

Ключ записи регистра сведений для открытия ее формы

Ключ записи регистра сведений для открытия ее формы

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

Первый пример кода открытия записи регистра сведений

МассивКонструктораКлюча = Новый Массив;
МассивКонструктораКлюча.Добавить(Новый Структура(«ГрафикРаботы,Дата,НачалоИнтервала»,Расшифровка.ГрафикРаботы,НачалоДня(Расшифровка.Дата),Расшифровка.Дата));

КлючЗаписиРегистра = Новый («РегистрСведенийКлючЗаписи.ТабельРаботы», МассивКонструктораКлюча);
ОткрытьФорму(«РегистрСведений.ТабельРаботы.Форма.ФормаНазначенияПериода», Новый Структура(«Ключ», КлючЗаписиРегистра));

Второй вариант открытия – с использованием серверного вызова

КлючЗаписиРегистра = ПолучитьКлючЗаписи(Новый Структура(«ГрафикРаботы,Дата,НачалоИнтервала», Расшифровка.ГрафикРаботы,НачалоДня(Расшифровка.Дата),Расшифровка.Дата));
ОткрытьФорму(«РегистрСведений.ТабельРаботы.Форма.ФормаНазначенияПериода», Новый Структура(«Ключ», КлючЗаписиРегистра));

Особенности использования

В случае отсутствия записи, когда указаны не действительные измерения регистра, выйдет ошибка “Объект не найден”:

Запись = РегистрыСведений.ТабельРаботы.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(Запись,Структура);
Запись.Прочитать();
Если Запись.Выбран() = Ложь
Возврат Неопределено;
КонецЕсли;

Реклама — это когда изо всех сил колотят палкой по днищу пустой кастрюли.

Источник

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

Программная запись в регистр сведений

Добавление записей в регистр сведений выполняется с помощью набора записей. Набор записей — это коллекция нескольких записей регистра сведений.

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

Набор записей с установленным отбором можно назвать гранулой. Запись в регистр сведений выполняется гранулами.

Если при записи не устанавливать отбор, то будет перезаписан весь регистр сведений, все предыдущие записи будут удалены:

Можно установить отбор только по одному измерению и сразу добавить несколько записей:

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

Но если в метод Записать набора записей передать параметр Ложь, то запись будет выполнена с добавлением новых записей:

В результате в регистр сведений будет добавлена новая запись, но при этом все предыдущие записи не были удалены.

Если попытаться добавить в регистр сведений записи, которые не совпадают с установленным отбором, то будет выброшено исключение «Запись не верна! Значение поля не соответствует установленному отбору»:

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

Отбор записей регистра сведений

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

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

Удаление записей регистра сведений

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

Чтобы очистить весь регистр сведений можно записать пустой набор записей без отбора:

Если регистр сведений подчинен регистратору, то нужно устанавливать отбор по документу-регистратору:

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

В данном примере мы удалили все записи, у которых цена больше или равна 500. Но можно было решить ее от обратного: выбрать все записи, у которых цена меньше 500, создать набор записей и загрузить в него результат запроса. Так как отбор не был установлен, то весь регистр будет перезаписан и в нем останутся только те записи, где цена меньше 500:

Изменение записей регистра сведений

Чтобы изменить существующие записи регистра сведений нужно сначала прочитать их через набор записей, потом перебрать в цикле, изменить и записать набор записей. Например, увеличим все цены по одному типу цен на 10%:

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

Если регистр сведений подчинен регистратору, то отбор нужно устанавливать по регистратору:

Менеджер записи регистра сведений

Менеджер записи регистра сведений используется при интерактивном редактировании записи регистра сведений. Когда мы открываем форму записи, то чтение выполняется именно через менеджер записи. Когда нажимаем на форме записи кнопку Записать, то запись выполняется через менеджер записи.

Менеджер записи доступен только для регистров сведений с режимом записи Независимый.

Источник

Как открыть заполненной новую запись регистра сведений

Как открыть заполненной новую запись регистра сведений

Для того, чтобы форма записи регистра сведений при создании была заполнена полностью или частично, следует при открытии задать параметр “ЗначенияЗаполнения”

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

Ниже пример открытия в режиме управляемых форм.

Пример кода открытия заполненной записи

ОткрытьФорму(«РегистрСведений.КорректировкаТабеля.Форма.ФормаНазначенияПериода»,
Новый Структура(«ЗначенияЗаполнения», Новый Структура(«ГрафикРаботы,Номенклатура,Сотрудник,Дата,НачалоИнтервала,КонецИнтервала»,
Расшифровка.ГрафикРаботы,Расшифровка.Номенклатура,Расшифровка.Сотрудник,НачалоДня(Расшифровка.Дата),Расшифровка.НачалоПодИнтервала,Расшифровка.КонецПодИнтервала)));

Если часть реквизитов не заполнено:

Проверьте свойство “Заполнять из данных заполнения” у этого измерения (ресурса,реквизита)

После его установки все должно заполняться корректно, если в модуле это поле не очищаются другим кодом

В обычных формах открыть заполненную запись проще

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

Источник

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Остались вопросы?
Спросите в комментариях к статье.

7 комментариев

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

Не понятно за счет чего может быть профит при записи набора записей независимого регистра сведений. Можете пояснить?

Работа платформы с регистрами сведений несколько раз менялась. 8.3 стала более оптимальной и как бы мне не хотелось «потыкать палочкой» в 8.1 и в ранние версии 8.2, дабы показать как все было плохо, решил этого не делать. Кому станет любопытно «как было» — получит мотивацию изучить вопрос.

Зачем накладывать Отбор, когда создаётся новый набор записей?

Источник

Операционные системы и программное обеспечение