06. Бухгалтерские регистры

Как в регистре бухгалтерии сформировать проводки?

// Задать выбираемые значения. ВыбранныйОтветственный = Справочники.Пользователи.НайтиПоНаименованию("Иванцова"); ВыбранныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду("00027"); ВыбранныйДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоКоду("00013"); ВыбранныйДокумент = Документы.ДокументРасчетовСКонтрагентом.НайтиПоНомеру(2, '20050101'); ВыбранныйСчет = Справочники.БанковскиеСчета.НайтиПоКоду("00001"); ВыбраннаяСтатья = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("00002"); ВыбраннаяОрганизация = Справочники.Организации.НайтиПоКоду("00001"); ВыбраннаяВалюта = Справочники.Валюты.НайтиПоКоду(810); // Создать будущий регистратор. ДатаЗаписи = ТекущаяДата(); Документ = Документы.ОперацияБух.СоздатьДокумент(); Документ.Дата = ДатаЗаписи; Документ.Организация = ВыбраннаяОрганизация; Документ.Ответственный = ВыбранныйОтветственный; Документ.Содержание = "Оплата поставщику"; Документ.Записать(); // Создать набор записей. НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();НаборЗаписей.Отбор.Регистратор.Установить(Документ.Ссылка); Проводка = НаборЗаписей.Добавить(); Проводка.Регистратор = Документ.Ссылка; Проводка.Период = ДатаЗаписи; // Заполнить счет дебета. Проводка.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("60.01"); // Заполнить аналитику счета дебета. Проводка.СубконтоДт.Контрагенты = ВыбранныйКонтрагент; Проводка.СубконтоДт.Договоры = ВыбранныйДоговор; Проводка.СубконтоДт.ДокументыРасчетовСКонтрагентами = ВыбранныйДокумент;

// (Установить Проект в СубконтоДт

Если ЗначениеЗаполнено(ВыбранныйПроект) Тогда

Для каждого ТекСубконто Из Проводка.СчетДт.ВидыСубконто Цикл

Если СокрЛП(ТекСубконто.ВидСубконто) = "Проекты" Тогда

НомерСтроки = ТекСубконто.НомерСтроки;

Проводка.СубконтоДт.Вставить(Проводка.СчетДт.ВидыСубконто[НомерСтроки-1].ВидСубконто, ВыбранныйПроект);

КонецЕсли;

КонецЦикла;

КонецЕсли;

// )

// Заполнить счет кредита. Проводка.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("51"); // Заполнить аналитику счета кредита. Проводка.СубконтоКт.БанковскиеСчета = ВыбранныйСчет; Проводка.СубконтоКт.СтатьиДвиженияДенежныхСредств = ВыбраннаяСтатья;

// (Установить Проект в СубконтоКт

Если ЗначениеЗаполнено(ВыбранныйПроект) Тогда

Для каждого ТекСубконто Из Проводка.СчетКт.ВидыСубконто Цикл

Если СокрЛП(ТекСубконто.ВидСубконто) = "Проекты" Тогда

НомерСтроки = ТекСубконто.НомерСтроки;

Проводка.СубконтоКт.Вставить(Проводка.СчетКт.ВидыСубконто[НомерСтроки-1].ВидСубконто, ВыбранныйПроект);

КонецЕсли;

КонецЦикла;

КонецЕсли;

// )// Балансовое измерение. Проводка.Организация = ВыбраннаяОрганизация; // Балансовый ресурс. Движение.Сумма = 300000; // Реквизиты.Движение.НомерЖурнала = "БК"; Проводка.Содержание = "Оплата поставщику"; // Записать набор записей. НаборЗаписей.Записать();

Как получить остаток по счету?

Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ХозрасчетныйОстатки.Субконто1, | ХозрасчетныйОстатки.Организация, | ХозрасчетныйОстатки.СуммаОстаток, | ХозрасчетныйОстатки.КоличествоОстаток |ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, , ) КАК ХозрасчетныйОстатки"; Запрос.УстановитьПараметр("Период", КонецДня(ДатаОтчета)); Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.ТоварыНаСкладах); РезультатЗапроса = Запрос.Выполнить();

Как получить обороты по счету?

Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ХозрасчетныйОбороты.СуммаОборотДт, | ХозрасчетныйОбороты.СуммаОборотКт |ИЗ | РегистрБухгалтерии.Хозрасчетный.Обороты(&НачПериода, &КонПериода, Период, Счет = &Счет, , , , ) КАК ХозрасчетныйОбороты"; Запрос.УстановитьПараметр("НачПериода", НачПериода); Запрос.УстановитьПараметр("КонПериода", КонПериода); Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.ТоварыНаСкладах); РезультатЗапроса = Запрос.Выполнить();

Как получить остатки по счетам?

"ВЫБРАТЬ | ХозрасчетныйОстатки.Счет, | ПРЕДСТАВЛЕНИЕ(ХозрасчетныйОстатки.Счет), | ХозрасчетныйОстатки.ВалютнаяСуммаОстатокДт КАК ВалютнаяСуммаОстатокДт, | ХозрасчетныйОстатки.Счет.Порядок КАК СчетПорядок, | ХозрасчетныйОстатки.Валюта КАК Валюта, | ПРЕДСТАВЛЕНИЕ(ХозрасчетныйОстатки.Валюта) |ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет.Валютный И Счет.Вид = &Активный, ,) КАК ХозрасчетныйОстатки |УПОРЯДОЧИТЬ ПО | СчетПорядок |ИТОГИ | СУММА(ВалютнаяСуммаОстатокДт) |ПО | Валюта"; Запрос.УстановитьПараметр("Активный", ВидСчета.Активный); Запрос.УстановитьПараметр("Дата", Дата);

Как перенести остаток со счета на счет?

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

Как найти первый документ, приведший к появлению кредитового остатка на счете?

ВЫБРАТЬ ПЕРВЫЕ 1 ХозрасчетныйОстаткиИОбороты.Регистратор КАК Регистратор ИЗ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаН, &ДатаК, Регистратор, , Счет = &Счет, , ) КАК ХозрасчетныйОстаткиИОбороты ГДЕ ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокКт > 0 УПОРЯДОЧИТЬ ПО ХозрасчетныйОстаткиИОбороты.Период, Регистратор

Как выбрать все счета, в аналитике которых присутствуют либо вид субконто "Контрагент", либо вид субконто "Договор"?

ВЫБРАТЬ ХозрасчетныйВидыСубконто.Ссылка КАК Счет ИЗ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто ГДЕ ХозрасчетныйВидыСубконто.ВидСубконто.Наименование В ("Договоры", "Контрагенты")

Как выбрать все счета, в аналитике которых присутствуют как вид субконто "Контрагент", так и вид субконто "Номенклатура"?

ВЫБРАТЬ ХозрасчетныйВидыСубконто.Ссылка КАК Счет ИЗ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто1 ПО ХозрасчетныйВидыСубконто.Ссылка = ХозрасчетныйВидыСубконто1.Ссылка ГДЕ (ХозрасчетныйВидыСубконто.ВидСубконто.Наименование = "Контрагенты") И (ХозрасчетныйВидыСубконто1.ВидСубконто.Наименование = "Номенклатура")

Как добавить новый вид субконто к счету?

ВидМенеджеры = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.НайтиПоНаименованию("Менеджеры", Истина); // Добавить новый вид характеристик. Если ВидМенеджеры.Пустая() Тогда ВидМенеджеры = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.СоздатьЭлемент(); ВидМенеджеры.Наименование = "Менеджеры"; ВидМенеджеры.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.Пользователи"); ВидМенеджеры.Записать(); КонецЕсли; // Получить нужный счет. Счет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1"); Если (Не Счет.Пустая()) И (Счет.ВидыСубконто.Найти(ВидМенеджеры) = Неопределено) Тогда // Добавить новый вид субконто к счету. ОбъектСчета = Счет.ПолучитьОбъект(); НовыйВидСубконто = ОбъектСчета.ВидыСубконто.Добавить(); НовыйВидСубконто.ВидСубконто = ВидМенеджеры; НовыйВидСубконто.ТолькоОбороты = Истина; НовыйВидСубконто.Суммовой = Истина; ОбъектСчета.Записать(); КонецЕсли;

Как из регистра бухгалтерии "Хозрасчетный" получить обороты только по валютным счетам?

ВЫБРАТЬ ХозрасчетныйОбороты.Организация КАК Организация, ХозрасчетныйОбороты.Счет КАК Счет, ХозрасчетныйОбороты.Валюта, ХозрасчетныйОбороты.СуммаОборотДт, ХозрасчетныйОбороты.ВалютнаяСуммаОборотДт, ХозрасчетныйОбороты.СуммаОборотКт, ХозрасчетныйОбороты.ВалютнаяСуммаОборотКт ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНач, &ДатаКон, , Счет.Валютный, , , , ) КАК ХозрасчетныйОбороты УПОРЯДОЧИТЬ ПО Организация, ХозрасчетныйОбороты.Счет.Код

Как выбрать в регистре бухгалтерии "Хозрасчетный" обороты по "60-ым" счетам, исключив внутренние обороты между ними?

ВЫБРАТЬ ХозрасчетныйОбороты.Счет, ХозрасчетныйОбороты.СуммаОборотДт, ХозрасчетныйОбороты.СуммаОборотКт ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНач, &ДатаКон , , Счет В ИЕРАРХИИ (&Счет), , , НЕ(КорСчет В ИЕРАРХИИ (&Счет)), ) КАК ХозрасчетныйОбороты УПОРЯДОЧИТЬ ПО ХозрасчетныйОбороты.Счет.Код

Как реализовать метод "красного сторно" для регистра бухгалтерии?

Процедура ОбработкаПроведения(Отказ, Режим) СторнируемыеДвижения = РегистрыБухгалтерии.Хозрасчетный.ВыбратьПоРегистратору(СторнируемыйДокумент); Пока СторнируемыеДвижения.Следующий() Цикл Проводка = Движения.Хозрасчетный.Добавить(); Проводка.Период = Дата; Проводка.СчетДт = СторнируемыеДвижения.СчетДт; Проводка.СчетКт = СторнируемыеДвижения.СчетКт; Для каждого Субконто Из СторнируемыеДвижения.СубконтоДт Цикл Проводка.СубконтоДт[Субконто.Ключ] = Субконто.Значение; КонецЦикла; Для каждого Субконто Из СторнируемыеДвижения.СубконтоКт Цикл Проводка.СубконтоКт[Субконто.Ключ] = Субконто.Значение; КонецЦикла; Проводка.ВалютаДт = СторнируемыеДвижения.ВалютаДт; Проводка.ВалютаКт = СторнируемыеДвижения.ВалютаКт; Проводка.ВалютнаяСуммаДт = - СторнируемыеДвижения.ВалютнаяСуммаДт; Проводка.ВалютнаяСуммаКт = - СторнируемыеДвижения.ВалютнаяСуммаКт; Проводка.КоличествоДт = - СторнируемыеДвижения.КоличествоДт; Проводка.КоличествоКт = - СторнируемыеДвижения.КоличествоКт; Проводка.НомерЖурнала = СторнируемыеДвижения.НомерЖурнала; Проводка.Организация = СторнируемыеДвижения.Организация; Проводка.Содержание = СторнируемыеДвижения.Содержание; Проводка.Сумма = - СторнируемыеДвижения.Сумма; КонецЦикла; Движения.Хозрасчетный.Записать(); КонецПроцедуры

Как организовать сторнирование уже произведенных расчетов прошлых периодов?

ТаблицаСторноЗаписей = Движения.ОсновныеНачисленияРаботниковОрганизации.ПолучитьДополнение();

Для каждого СтрокаСторно Из ТаблицаСторноЗаписей Цикл

// Добавить сторно-записи в набор записей регистра.

// Новая запись движений.

Движение = Движения.ОсновныеНачисленияРаботниковОрганизации.Добавить(); // Заполнить свойства.

Движение.ПериодРегистрации = Строка.ПериодРегистрацииСторно;

Движение.ПериодДействияНачало = Строка.ПериодДействияНачалоСторно;

Движение.ПериодДействияКонец = Строка.ПериодДействияКонецСторно;

Движение.БазовыйПериодНачало = Строка.БазовыйПериодНачало;

Движение.БазовыйПериодКонец = Строка.БазовыйПериодКонец;

Движение.ВидРасчета = Строка.ВидРасчета;

Движение.Сторно = Истина; // Заполнить измерения.

Движение.ФизЛицо = Строка.ФизЛицо;

Движение.Приказ = Строка.Приказ;

Движение.Организация = Строка.Организация;

// Ресурсы не заполнять, потому что здесь не происходит расчет,

// только подготовка новой записи

// Заполнить реквизиты.

Движение.ГрафикРаботы = Строка.ГрафикРаботы;

Движение.Размер = Строка.Размер;

Движение.ВидУчетаВремени = Строка.ВидУчетаВремени;

Движение.ПодразделениеОрганизации = Строка.ПодразделениеОрганизации;

Движение.ПериодРасчетаСреднегоЗаработкаНачало = Строка.ПериодРасчетаСреднегоЗаработкаНачало;

Движение.ПериодРасчетаСреднегоЗаработкаОкончание = Строка.ПериодРасчетаСреднегоЗаработкаОкончание;

КонецЦикла;

Движения.ОсновныеНачисленияРаботниковОрганизации.Записать();

Как получить дату последней записи

Функция ПолучитьДатуПоследнейЗаписиБухгалтерскогоРегистра()

ЗапросРегистра = Новый Запрос("

|ВЫБРАТЬ ПЕРВЫЕ 1

| Хозрасчетный.Период КАК Период,

| Хозрасчетный.МоментВремени

|ИЗ

| РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный

|УПОРЯДОЧИТЬ ПО

| Период УБЫВ

|");

РезультатЗапроса = ЗапросРегистра.Выполнить();

Если РезультатЗапроса.Пустой() Тогда

Возврат НачалоДня(Дата(1, 1, 1));

КонецЕсли;

Выборка = РезультатЗапроса.Выбрать();

Выборка.Следующий();

Возврат Выборка.Период;

КонецФункции // ПолучитьДатуПоследнейЗаписиБухгалтерскогоРегистра()

Как получить дату первой записи

Функция ПолучитьДатуНачалаВеденияБухгалтерскогоРегистра()

ЗапросРегистра = Новый Запрос("

|ВЫБРАТЬ ПЕРВЫЕ 1

| Хозрасчетный.Период КАК Период,

| Хозрасчетный.МоментВремени

|ИЗ

| РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный

|УПОРЯДОЧИТЬ ПО

| Период ВОЗР

|");

РезультатЗапроса = ЗапросРегистра.Выполнить();

Если РезультатЗапроса.Пустой() Тогда

Возврат НачалоДня(Дата(1, 1, 1));

КонецЕсли;

Выборка = РезультатЗапроса.Выбрать();

Выборка.Следующий();

Возврат Выборка.Период;

КонецФункции // ПолучитьДатуНачалаВеденияБухгалтерскогоРегистра()