РегистрБухгалтерииКлючЗаписи.<Имя регистра бухгалтерии>

Типы · <Accounting register name>

Набор значений, однозначно идентифицирующих запись регистра. Объект используется в тех случаях, когда необходимо сослаться на определенную запись. Например, он выступает в качестве значение свойства ТекущаяСтрока табличного поля, отображающего список записей регистра. Важно! Данный объект нельзя использовать как устойчивый идентификатор записи, например, как ссылку для элементов справочника. Фактически имеет смысл только пока запись есть и не перезаписывалась.

Полное описание, параметры и ограничения

РегистрБухгалтерииКлючЗаписи.<Имя регистра бухгалтерии> (AccountingRegisterRecordKey.<Accounting register name>)

РегистрБухгалтерииКлючЗаписи.<Имя регистра бухгалтерии> (AccountingRegisterRecordKey.<Accounting register name>)

Доступен, начиная с версии 8.0.

Свойства:
НомерСтроки (LineNumber)
Регистратор (Recorder)

Описание:

Набор значений, однозначно идентифицирующих запись регистра. Объект используется в тех случаях, когда необходимо сослаться на определенную запись. Например, он выступает в качестве значение свойства ТекущаяСтрока табличного поля, отображающего список записей регистра.
Важно! Данный объект нельзя использовать как устойчивый идентификатор записи, например, как ссылку для элементов справочника. Фактически имеет смысл только пока запись есть и не перезаписывалась.

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение.
Сериализуется. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/enterprise/current-config}. Имя типа XDTO: РегистрБухгалтерииКлючЗаписи.<Имя регистра бухгалтерии>.

См. также:
Расширение формы списка записей регистра бухгалтерии, свойство ПараметрТекущаяСтрока
РегистрБухгалтерииМенеджер.<Имя регистра бухгалтерии>, метод СоздатьКлючЗаписи

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

В собственной транзакции сравнить замещение и добавление проводок

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

Где и как запускать

Полный серверный общий модуль своей отдельной конфигурации УчебнаяБухгалтерия85.

Подготовка

  1. Создайте НОВУЮ пустую файловую базу с именем корневой конфигурации УчебнаяБухгалтерия85, управляемым режимом блокировок. Это отдельный стенд, не УТ/КА2/УНФ/БП и не копия с рабочими данными.

  2. Планы счетов → УчебныеСчета85: код Строка 20, Максимальное количество субконто 0, без флагов учёта. Создайте два предопределённых негрупповых счёта: УчебныйАктив, код DEMO-A, вид Активный; УчебныйПассив, код DEMO-P, вид Пассивный. Оба не забалансовые. Не создавайте счёт 41/60 и не называйте опыт реальным планом бухучёта.

  3. Документы → УчебнаяОперация85: номер Строка 40, автонумерация выключена. Без пользовательских реквизитов, проведения, обработчиков, подписок, планов обмена и внешних вызовов.

  4. Регистры бухгалтерии → УчебныеПроводки85: план УчебныеСчета85, Корреспонденция включена. Единственное измерение МеткаОперации: Строка 80, Балансовый включён, проверка заполнения Показывать ошибку. Единственный ресурс Сумма: Число 15,2, Балансовый включён. Реквизитов нет. Длина уточнения периода 3.

  5. Создайте второй регистр УчебныеОдносторонние85 с теми же планом, измерением, ресурсом и длиной уточнения периода, но Корреспонденция выключена. У обоих единственный регистратор УчебнаяОперация85. Модули наборов и документа пустые, кроме отдельной экспортной учебной процедуры в последнем уроке.

  6. Обновите конфигурацию базы данных и убедитесь, что предопределённые счета созданы как данные. Создайте серверный общий модуль УчебнаяБухгалтерияПримеры с флагом Сервер. Вставьте весь модуль одного урока, вызовите УчебнаяБухгалтерияПримеры.ВыполнитьПример() из серверной команды своей обработки.

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

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

Процедура ВыполнитьПример() Экспорт
    Если Метаданные.Документы.Количество() <> 1
        ИЛИ Метаданные.ПланыСчетов.Количество() <> 1
        ИЛИ Метаданные.РегистрыБухгалтерии.Количество() <> 2
        ИЛИ Метаданные.Документы.Найти("УчебнаяОперация85") = Неопределено
        ИЛИ Метаданные.ПланыСчетов.Найти("УчебныеСчета85") = Неопределено Тогда
        ВызватьИсключение "Разрешены только собственные документ, план счетов и два регистра";
    КонецЕсли;
    Если Метаданные.ПланыСчетов.УчебныеСчета85.МаксКоличествоСубконто <> 0 Тогда
        ВызватьИсключение "В этом опыте план счетов без субконто";
    КонецЕсли;
    Для Каждого ИмяРегистра Из СтрРазделить("УчебныеПроводки85,УчебныеОдносторонние85", ",") Цикл
        Описание = Метаданные.РегистрыБухгалтерии.Найти(ИмяРегистра);
        Если Описание = Неопределено Тогда
            ВызватьИсключение "Не найден собственный регистр " + ИмяРегистра;
        КонецЕсли;
        Если Описание.Корреспонденция <> (ИмяРегистра = "УчебныеПроводки85")
            ИЛИ Описание.ПланСчетов.Имя <> "УчебныеСчета85"
            ИЛИ Описание.Измерения.Количество() <> 1
            ИЛИ Описание.Ресурсы.Количество() <> 1
            ИЛИ Описание.Реквизиты.Количество() <> 0
            ИЛИ Описание.Измерения.Найти("МеткаОперации") = Неопределено
            ИЛИ Описание.Ресурсы.Найти("Сумма") = Неопределено
            ИЛИ Описание.ДлинаУточненияПериода <> 3 Тогда
            ВызватьИсключение "Схема собственного регистра отличается от учебной";
        КонецЕсли;
    КонецЦикла;
    СчетДебета = ПланыСчетов.УчебныеСчета85.УчебныйАктив;
    СчетКредита = ПланыСчетов.УчебныеСчета85.УчебныйПассив;
    Если СчетДебета.Пустая() ИЛИ СчетКредита.Пустая() Тогда
        ВызватьИсключение "Нужны два собственных предопределённых счёта";
    КонецЕсли;
    Если СчетДебета.ПолучитьОбъект() = Неопределено ИЛИ СчетКредита.ПолучитьОбъект() = Неопределено Тогда
        ВызватьИсключение "Данные собственных счетов не созданы";
    КонецЕсли;
    Менеджер = РегистрыБухгалтерии.УчебныеПроводки85;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Нельзя запускать урок внутри чужой транзакции";
    КонецЕсли;
    НачатьТранзакцию();
    Попытка
        Документ = Документы.УчебнаяОперация85.СоздатьДокумент();
        Документ.Дата = Дата(2026, 9, 15, 10, 0, 0);
        Документ.Номер = "B-" + Строка(Новый УникальныйИдентификатор);
        Документ.Записать();
        СвояСсылка = Документ.Ссылка;
        Набор = СвойНаборПроводок(СвояСсылка, СчетДебета, СчетКредита);
        Набор.Записывать = Ложь;
        Набор.Записать(Истина);
        Проверка = Менеджер.СоздатьНаборЗаписей();
        Проверка.Отбор.Регистратор.Установить(СвояСсылка);
        Проверка.Прочитать();
        Сообщить(Проверка.Количество() = 2 И Проверка.Итог("Сумма") = 800);
        Проверка.Очистить();
        Замена = Проверка.Добавить();
        ЗаполнитьСвоюПроводку(Замена, СвояСсылка, СчетДебета, СчетКредита, 900);
        Проверка.Записать(Истина);
        Проверка.Прочитать();
        Сообщить(Проверка.Количество() = 1 И Проверка.Итог("Сумма") = 900);
        Добавление = Менеджер.СоздатьНаборЗаписей();
        Добавление.Отбор.Регистратор.Установить(СвояСсылка);
        Добавленная = Добавление.Добавить();
        ЗаполнитьСвоюПроводку(Добавленная, СвояСсылка, СчетДебета, СчетКредита, 60);
        Добавление.Записать(Ложь);
        Сообщить(Добавление.Количество() = 0);
        Проверка.Прочитать();
        Сообщить(Проверка.Количество() = 2 И Проверка.Итог("Сумма") = 960);
        Выборка = Менеджер.ВыбратьПоРегистратору(СвояСсылка);
        ЧислоЗаписей = 0;
        СуммаВыборки = 0;
        Пока Выборка.Следующий() Цикл
            ЧислоЗаписей = ЧислоЗаписей + 1;
            СуммаВыборки = СуммаВыборки + Выборка.Сумма;
            Сообщить(Выборка.Регистратор = СвояСсылка И Выборка.Активность);
            Сообщить(Выборка.СчетДт = СчетДебета И Выборка.СчетКт = СчетКредита);
            Сообщить(Выборка.Период = Документ.Дата);
            Ключ = Менеджер.СоздатьКлючЗаписи(Новый Структура("Регистратор,НомерСтроки", Выборка.Регистратор, Выборка.НомерСтроки));
            Сообщить(Ключ.Регистратор = СвояСсылка И Ключ.НомерСтроки = Выборка.НомерСтроки);
            Сообщить("Уточнение сохранённой записи: " + Строка(Выборка.УточнениеПериода));
        КонецЦикла;
        Сообщить(ЧислоЗаписей = 2 И СуммаВыборки = 960);
        ОтменитьТранзакцию();
    Исключение
        Если ТранзакцияАктивна() Тогда
            ОтменитьТранзакцию();
        КонецЕсли;
        ВызватьИсключение;
    КонецПопытки;
    После = Менеджер.СоздатьНаборЗаписей();
    После.Отбор.Регистратор.Установить(СвояСсылка);
    После.Прочитать();
    Сообщить(После.Количество() = 0);
    Сообщить(СвояСсылка.ПолучитьОбъект() = Неопределено);
КонецПроцедуры

Функция СвойНаборПроводок(СвояСсылка, СчетДебета, СчетКредита)
    Набор = РегистрыБухгалтерии.УчебныеПроводки85.СоздатьНаборЗаписей();
    Набор.Отбор.Регистратор.Установить(СвояСсылка);
    Для Каждого СуммаСтроки Из СтрРазделить("750,50", ",") Цикл
        Запись = Набор.Добавить();
        ЗаполнитьСвоюПроводку(Запись, СвояСсылка, СчетДебета, СчетКредита, Число(СуммаСтроки));
    КонецЦикла;
    Возврат Набор;
КонецФункции

Процедура ЗаполнитьСвоюПроводку(Запись, СвояСсылка, СчетДебета, СчетКредита, СуммаСтроки)
    Запись.Период = Дата(2026, 9, 15, 10, 0, 0);
    Запись.Регистратор = СвояСсылка;
    Запись.Активность = Истина;
    Запись.СчетДт = СчетДебета;
    Запись.СчетКт = СчетКредита;
    Запись.МеткаОперации = "DEMO-BOOK";
    Запись.Сумма = СуммаСтроки;
КонецПроцедуры

Разбор по шагам

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

  2. Записать две проводки 750 и 50 с замещением. Флаг Записывать=Ложь не препятствует прямому вызову Записать.

  3. Очистить свой считанный набор, добавить одну запись 900 и записать с замещением: две прежние записи своего регистратора заменены одной.

  4. Отдельным набором добавить 60 без замещения: в базе внутри транзакции две записи 900/60, записанный добавлением набор очищен.

  5. Обойти реальные записи только своего регистратора и составить ключ из сохранённых Регистратор и НомерСтроки, не из индекса массива.

  6. Отменить собственную транзакцию при успехе и ошибке. После отмены повторно читать только свою ссылку и проверить исчезновение документа и движений.

Как проверить результат

  1. Проверки 800,900,960 и очищенного после добавления набора Истина; выборка содержит две свои записи, сумма 960.

  2. Две последние проверки Истина: по собственной ссылке нет движений и нет сохранённого документа.

Ожидаемый результат

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

На что обратить внимание

  1. Замещать=Истина удаляет старые движения текущего отбора. Здесь отбор только по своему только что созданному документу.

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

  3. Не выносите ЗафиксироватьТранзакцию из другого примера в этот модуль. Фиксации здесь намеренно нет.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.