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));
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
Возврат Выборка.Период;
КонецФункции // ПолучитьДатуНачалаВеденияБухгалтерскогоРегистра()