Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦОО_ИСБУ_Лек4.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
612.86 Кб
Скачать

5. Примеры формирования проводок в модуле документа

Пример 1.

Модуль анализирует сумму остатки на счете «СчетАнализа» для контрагента «Контрагент» и его договора «ДоговорКонтрагента» на дату «Дата» (эти реквизиты расположены в форме документа) и списывает этот долг на счет с именем «ДолгиКонтрагентов».

Замечание. Виртуальная таблица источника запроса

ПроводкиБУ = Движения.Хозрасчетный;

Запрос = Новый Запрос();

Запрос.УстановитьПараметр("Период" , Дата); Запрос.УстановитьПараметр("Контрагент" , Контрагент);

Запрос.УстановитьПараметр("Договор" , ДоговорКонтрагента); Запрос.УстановитьПараметр("Счет" , СчетАнализа);

Запрос.Текст = "

|ВЫБРАТЬ

| Субконто1,

| Субконто2,

| СуммаОстатокДт + КАК Задолженность

|ИЗ

| РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, , (Субконто1 = &Контрагент)И (Субконто2 = &Договор)

| ) КАК ХозрасчетныйОстатки";

ВыборкаОстатков = Запрос.Выполнить().Выбрать();

Если ВыборкаОстатков.Следующий() Тогда

Задолженность = ВыборкаОстатков.Задолженность;

Иначе

Задолженность = 0;

КонецЕсли;

Если Задолженность > 0 Тогда

ПроводкиБУ = Движения.Хозрасчетный;

Проводка = ПроводкиБУ.Добавить();

Проводка.Период = ДатаДока;

Проводка.Активность = Истина;

Проводка.Сумма = Задолженность;

Проводка.СчетДт=ПланыСчетов.Хозрасчетный.ДолгиКонтранентов;

Проводка.СубконтоДт.Контрагенты = Контрагент;

Проводка.СубконтоДт.Договоры = ДоговорКонтрагента;

Проводка.СчетКт = СчетАнализа;

// процедура из общего модуля

УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт, 1, Контрагент);

УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт, 2,

ДоговорКонтранента);

Движения.Хозрасчетный.Записать();

КонецЕСли;

Пример 2.

Составить модуль формирования проводок документа по выплате зарплаты. Документ содержит табличную часть с именем ТабЧасть

ПроводкиБУ = Движения.Хозрасчетный;

Для Каждого СтрокаТЧ из ТабЧасть Цикл

Проводка = ПроводкиБУ.Добавить();

Проводка.Период = Дата;

Проводка.Активность = Истина;

Проводка.Содержание = "Выплата зарплаты";

Проводка.Сумма = СтрокаТЧ.Сумма;

Если СтрокаТЧ.ВыплаченностьЗарплаты =

Перечисления.ВыплаченностьЗарплаты.Выплачено Тогда

СчетДт = ПланыСчетов.Хозрасчетный.РасчетыСПерсоналомПоОплатеТруда;

ИначеЕсли СтрокаТЧ.ВыплаченностьЗарплаты =

Перечисления.ВыплаченностьЗарплаты.Задепонировано Тогда

СчетДт = ПланыСчетов.Хозрасчетный.РасчетыПоДепонированнымСуммам;

Иначе

Сообщить("В документе " + ДокументВыплаты + " есть строки с невыплаченной зарплатой", СтатусСообщения.ОченьВажное);

Отказ = Истина;

Возврат;

КонецЕсли;

Проводка.СчетДт = СчетДт;

Проводка.СубконтоДт.РаботникиОрганизации = СтрокаТЧ.ФизЛицо;

Проводка.СчетКт = ПланыСчетов.Хозрасчетный.КассаОрганизации;

Проводка.СубконтоКт.СтатьиДвиженияДенежныхСредств =

СтатьяДвиженияДенежныхСредств;

КонецЦикла;

Движения.Хозрасчетный.Записать();

Пример 3 Сформировать программным способом документ «ОперацияБух» и сформировать его проводки

// Задать выбираемые значения.

ВыбранныйОтветственный = Справочники.Пользователи.НайтиПоНаименованию("Иванцова");

ВыбранныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду("00027");

ВыбранныйДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоКоду("00013");

ВыбранныйДокумент = Документы.ДокументРасчетовСКонтрагентом.НайтиПоНомеру(2, '20050101');

ВыбранныйСчет = Справочники.БанковскиеСчета.НайтиПоКоду("00001");

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

ВыбраннаяОрганизация = Справочники.Организации.НайтиПоКоду("00001");

ВыбраннаяВалюта = Справочники.Валюты.НайтиПоКоду(810);

// Создать будущий регистратор.

ДатаЗаписи = ТекущаяДата();

Документ = Документы.ОперацияБух.СоздатьДокумент();

Документ.Дата = ДатаЗаписи;

Документ.Организация = ВыбраннаяОрганизация;

Документ.Ответственный = ВыбранныйОтветственный;

Документ.Содержание = "Оплата поставщику";

Документ.Записать();

// Создать набор записей.

НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Регистратор.Установить(Документ.Ссылка);

Движение = НаборЗаписей.Добавить();

Движение.Регистратор = Документ.Ссылка;

Движение.Период = ДатаЗаписи;

// Заполнить счет дебета.

Движение.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("60.01");

// Заполнить аналитику счета дебета.

Движение.СубконтоДт.Контрагенты = ВыбранныйКонтрагент;

Движение.СубконтоДт.Договоры = ВыбранныйДоговор;

Движение.СубконтоДт.ДокументыРасчетовСКонтрагентами = ВыбранныйДокумент;

// Заполнить счет кредита.

Движение.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("51");

// Заполнить аналитику счета кредита.

Движение.СубконтоКт.БанковскиеСчета = ВыбранныйСчет;

Движение.СубконтоКт.СтатьиДвиженияДенежныхСредств = ВыбраннаяСтатья;

// Балансовое измерение.

Движение.Организация = ВыбраннаяОрганизация;

// Балансовый ресурс.

Движение.Сумма = 300000;

// Реквизиты.Движение.НомерЖурнала = "БК";

Движение.Содержание = "Оплата поставщику";

// Записать набор записей.

НаборЗаписей.Записать();

Пример 4. обработчик проведения документа «ПриходнаяНакладная»:

Процедура ОбработкаПроведения(Отказ, Режим)

Для Каждого ТекСтрокаМатериалы Из Материалы Цикл

// регистр ОстаткиМатериалов Приход

Движение = Движения.ОстаткиМатериалов Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

Движение. Период = Дата;

Движение.Материал = ТекСтрокаМатериады.Материал;

Движение Склад = Склад;

Движение.Количество = ТекСтрокаМатериалы.Количество;

КонецЦикла;

Для Каждого ТекСтрокаМатериалы Из Материалы Цикл

// регистр СтоимостьМатериалов Приход

Движение = Движения.СтоимостьМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Приход

Движение Период = Дата;

Движение. Материал = ТекСтрокаМатериалы.Материал;

Движение Стоимость = ТекСтрокаМатериалы.Сумма;

КонецЦикла;

Для Каждого ТекСтрокаМатериалы из Материалы Цикл

// регистр бухгалтерии Управленческий

Движение = Движения.Управленческий Добавить();

Движение СчетДт = ПланыСчетов Основной. Товары;

Движение СчетКт = ПланыСчетов.Основной.РасчетыСПоставщиками;

Движение Период = Дата;

Движение Сумма = ТекСтрокаМатериалы Сумма;

Движение.Количество = ТекСтрокаМатериальг Количество;

Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто. Материалы] =

ТекСтрокаМагериалы Материал;

КонецЦикла;

// записываем движения регистров

Движения.ОстаткиМатериалов.Записать();

Движения.СтоимостьМатериалов.Залисать()

Движения.Управленческий.Записать();

КонецПродедуры

Замечание. Платформа сформировала уже знакомые нам три цикла обхода табличной части документа (для каждого регистра свой цикл). В первых двух циклах для нас нет ничего нового. В последнем, по большому счету, тоже - движения формируются таким же образом, как и для регистра накопления. Интерес для нас представляет только последняя строчка цикла, в которой присваивается значение субконто дебета.

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

Другими словами, запись:

Движение СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Материалы] ...

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

Движение.СубконтоДт Материалы

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]