Операции и проводки

Создание операции и проводок
Простой перебор
Перебор с фильтром
Перебор с корр. счетом
Фильтр по субконто
Графа отбора
Поиск операции
Удаление операции и проводок
Другие полезности

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

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


Создание операции и проводок

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

Процедура ОбработкаПроведения()

//заполнение атрибутов операции
Операция.СуммаОперации = Итог("Сумма");
Операция.Содержание = "Поступление материалов";
Операция.Журнал = "МТ"; //доп. реквизит операции

//для каждой строки документа сделаем проводку
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл

ПривязыватьСтроку(1); //проводки будут содержать номер строки документа

//создание проводки и заполнение атрибутов проводки
Операция.НоваяПроводка();

Операция.Дебет.Счет = СчетПоКоду("10.1");
Операция.Дебет.Склады = Склад; //1-й вариант обращения к субконто
Операция.Дебет.Субконто(ВидыСубконто.Материалы,Материал); //2-й вариант
Операция.Количество = Количество;

Операция.Кредит.Счет = СчетПоКоду("51");
Операция.Кредит.Субконто(1,РасчетныйСчет); //3-й вариант

Операция.Сумма = Сумма;

//у нас счет 10.1 валютный, поэтому
Операция.ВалСумма = Сумма*Курс;
Операция.Валюта = Валюта;

Операция.Филиал = Филиал; //разделитель учета (доп. реквизит проводки)

КонецЦикла;
Операция.Записать();

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

Итак, у операции есть следующие атрибуты:

Атрибут операции
Описание
ДатаОперации Атрибут ДатаОперации содержит дату бухгалтерской операции. Так как каждая бухгалтерская операция принадлежит документу (причем только одному, а операция введенная вручную также принадлежит специальному документу «Операция»), значение атрибута совпадает со значением атрибута ДатаДок документа, которому принедлежит операция.
Содержание Атрибут Содержание служит для обращения к содержанию операции. Содержание операции представляет собой произвольную символьную строку. Например, "Поступление материалов".
СуммаОперации Атрибут СуммаОперации служит для обращения к сумме операции. Сумма операции является положительным или отрицательным числом. Сумма операции предназначена лишь для иллюстрирования денежного выра­жения операции и не влияет на бухгалтерские итоги.
Документ Атрибут Документ является атрибутом «только для чтения», то есть ему нельзя присваивать никакого значения. Он служит для обращения к документу, котрому принадлежит операция. Так, как любая операция принадлежит доку­менту (операция введенная «вручную» принадлежит документу специального вида «Операция») доступ к некоторым свойствам операции, например, номеру возможен только посредством обращения к атрибуту Документ.

Атрибут Документ предназначен только для доступа к атрибутам и рекви­зитам документа, которому принадлежит операция. Для получения значения типа «Документ» используется метод ТекущийДокумент.

Сумма Атрибут Сумма служит для обращения к сумме выбранной проводки (кор­респонденции) операции.

Перед обращением к атрибуту конкретной проводки эта проводка должна быть выбрана с помощью методов ВыбратьПроводки, ПолучитьПроводку или создана при помощи метода НоваяПроводка. В модулях форм «Опера­ции» и «Журнал проводок» текущая проводка определяется положением кур­сора.

Валюта Атрибут Валюта служит для обращения к валюте выбранной проводки или корреспонденции операции. Применяется только для счетов, на которых ведется валютный учет.
ВалСумма Атрибут ВалСумма служит для обращения к сумме в валюте выбранной проводки или корреспонденции операции. Применяется только для счетов, на которых ведется валютный учет.
Количество Атрибут Количество служит для обращению к количеству выбранной проводки или корреспонденции операции. Применяется только для счетов, на которых ведется количественный учет.
Дебет
Дебет.Счет
Дебет.Субконто

Атрибут Дебет служит для обращения к дебетовой части текущей проводки (корреспонденции) операции. Данный атрибут возвращает агрегатный объект специального типа «Дебет», который используется только для доступа к данным дебетовой части конкретной проводки (корреспонденции) операции и не используется отдельно.

Атрибут Дебет.Счет служит для доступа к счету дебета/кредита проводки или корреспонденции операции.

Атрибут Дебет.Субконто служит для доступа к значению субконто дебета проводки (корреспонденции) операции. В конкретном случае обращение к субконто для дебета определяется счетом дебета, то есть заданными для него видами субконто по которым ведется аналитический учет по этому счету.

Разные варианты обращения к субконто см. выше в примере.

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


Простой перебор операций и проводок

Пример, выбрать все операции за период:

Опер = СоздатьОбъект("Операция");
Опер.ВыбратьОперации(НачДата, КонДата); //заданный период

Пока Опер.ПолучитьОперацию()=1 Цикл

Сообщить(Опер.СуммаОперации);
Сообщить(Опер.Содержание);

//организуем перебор проводок текущей операции
//1-й вариант

Опер.ВыбратьПроводки();
Пока Опер.ПолучитьПроводку()=1 Цикл

Сообщить(Опер.Дебет.Счет);
Сообщить(Опер.Кредит.Счет);
Сообщить(Опер.Сумма);

КонецЦикла;

//2-й вариант перебора проводок текущей операции
Для Ном = 1 По Опер.КоличествоПроводок() Цикл

Опер.ПолучитьПроводкуПоНомеру(Ном); //проводка стала текущей

Сообщить(Опер.Дебет.Счет);
Сообщить(Опер.Кредит.Счет);
Сообщить(Опер.Сумма);

КонецЦикла;

КонецЦикла;


Перебор операций и проводок с фильтром

Синтаксис: ВыбратьОперацииСПроводками (<НачалоПериода>, <КонецПериода>, <Фильтр>, <Валюта>, <ПланСчетов>, <РазделительУчета>)

Пример, выбрать проводки по счету "10.1" по филиалу "Северный".

Опер = СоздатьОбъект("Операция");
Опер.ВыбратьОперацииСПроводками(НачДата, КонДата,"10.1",,ПланыСчетов.Основной,филСеверный);
Пока Опер.ПолучитьПроводку()=1 Цикл
....<действия с текущей проводкой>
КонецЦикла;

Примеры фильтра:

Строка фильтра
Описание
50 все проводки со счетом 50
50, * все проводки в дебет 50 счета
* , 51 все проводки с кредита 51 счета
50, 51 все проводки в дебет 50 счета с кредита 51
51; 52 все проводки со счетом 51 или счетом 52
46, 68.2 все проводки в дебет 46 счета с кредита 68.2
"бумага" все проводки, содержащие в содержании операции или в суб­конто или в реквизитах слово «бумага»
"бумага"; "картон" все проводки, содержащие в содержании операции или в субконто или в реквизитах слово «бумага» или слово «картон»
*, 46; "бумага" все проводки по кредиту 46 счета, содержащие в содер­жании операции или в субконто или в реквизитах слово «бумага»

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


Перебор операций и проводок с указанием счета и корр. счета

Синтаксис: ВыбратьОперацииСПроводками (<НачалоПериода>, <КонецПериода>, <Счет>, <КорСчет>, <Флаг>, <Валюта>, <ПланСчетов>, <РазделительУчета>)

<Счет>. Необязательный параметр. Счет — счет, по которому будут отбираться проводки.

<КорСчет>. Необязательный параметр. Счет — корреспондирующий счет, по которому будут отбираться проводки. Параметр имеет смысл, если указан параметр <Счет>.

<Флаг>. Необязательный параметр. Число — признак вида оборота. Параметр может принимать значения: 1 — отбирать проводки только по дебету счета; 2 — отбирать проводки только по кредиту счета; 3 — отбирать проводки и по дебету, и по кредиту. По умолчанию 3.

Пример, выбрать проводки Д10.1 К51 или Д51 К10.1

Сч10_1 = СчетПоКоду("10.1");
Сч51 = СчетПоКоду("51");
Опер = СоздатьОбъект("Операция");
Опер.ВыбратьОперацииСПроводками (НачДата, КонДата, Сч10_1, Сч51,,,ПланыСчетов.Основной);
Пока Опер.ПолучитьПроводку()=1 Цикл
....<действия с текущей проводкой>
КонецЦикла;


Фильтрация по субконто

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

Опер = СоздатьОбъект("Операция");
Опер.ИспользоватьСубконто(ВидыСубконто.Организации, ВыбОрг);
Опер.ВыбратьОперацииСПроводками(ДатаНач, ДатаКон, "60");
Пока Опер.ПолучитьПроводку() = 1 Цикл
.....Сообщить("Сумма " + Опер.Сумма);
КонецЦикла;

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

Опер = СоздатьОбъект("Операция");
Опер.ИспользоватьСубконто(ВидыСубконто.Материалы, ВыбрМатериал);
Опер.ИспользоватьСубконто(ВидыСубконто.Склады, ВыбрСклад);
Опер.ВыбратьОперацииСПроводками(ДатаНач, ДатаКон, "10");
Пока Опер.ПолучитьПроводку() = 1 Цикл
.....Сообщить("Сумма " + Опер.Сумма);
КонецЦикла;

Метод ИспользоватьКорСубконто аналогичен методу ИспользоватьСубконто, но задает фильтр по корреспондирующим субконто.

В качестве значения субконто в этим методы можно передавать «Список значений».


Фильтрация по графе отбора
синтаксис: ВыбратьПоЗначению (<НачалоПериода>, <КонецПериода> , <ВидОтбора>, <3начениеОтбора>)

Параметр <ВидОтбора> для отбора операций может принимать следующие значения:

"СуммаОперации" Отбор по сумме операции. Доступно если в метаданных включен отбор по сумме опера­ции.
"Содержание" Отбор по содержанию операции. Доступно если в метаданных включен отбор по содер­жанию операции.
<РеквизитОперации> Отбор по дополнительному реквизиту операции. Идентификатор реквизита должен быть указан так, как это задано в метаданных. Доступно если в метаданных включен отбор по реквизиту операции.

Параметр <ВидОтбора> для отбора проводок может принимать следующие значения:

"Счет" Отбор по счету дебета или счету кредита проводки. Доступно если в метаданных вклю­чен отбор по счетам проводок.
"СчетДт" Отбор по счету дебета проводки. Доступно если в метаданных включен отбор по дебе­ту/кредиту счетов проводок.
"СчетКт" Отбор по счету кредита проводки. Доступно если в метаданных включен отбор по дебе­ту/кредиту счетов проводок.
"Валюта" Отбор по валюте проводки. Доступно если в метаданных включен отбор по валюте прово­док.

ВидСубконто>
Отбор по виду субконто. Идентификатор вида субконто должен быть указан так, как он задан в метаданных. Доступно если в метаданных включен отбор по этому виду субконто.

<РеквизитПроводки>
Отбор по дополнительному реквизиту проводки. Идентификатор реквизита должен быть указан так, как он задан в метаданных. Доступно если в метаданных включен отбор по этому реквизиту проводки

После выполнения данного метода обход операций (проводок) осуществля­ется методами ПолучитьОперацию и ПолучитьПроводку.


Поиск операции
Синтаксис: НайтиОперацию([<Документ>])

В системе 1С:Предприятие каждая операция принадлежит документу. Причем операция принадлежит только одному документу, а у документа может существовать только одна операция. Операции введенные вручную принадлежат документам специального вида «Операция». Поэтому не существует возможности передачи такого значения как «Операция». Для «идентификации» операции фактически используется значение документа, которому она принадлежит. Поэтому для позиционировании объекта «Операция» непосредственно на конкретную операцию используется значение типа «Документ».

Пример,

Опер = СоздатьОбъект("Операция");
Если Опер.НайтиОперацию(ВыбрДокумент)=1 Тогда
...<операция стала текущей>
КонецЕсли;


Удаление операций и проводок

При отмене проведения документа автоматически удаляются операции и проводки, которые он сформировал (если у него стоит параметр Создавать операцию "только при проведении").

Опер = СоздатьОбъект("Операция");
Если Опер.НайтиОперацию(ВыбрДокумент)=1 Тогда
....Опер.Удалить(1); //непосредственное удаление (по умолч.)
....Опер.Удалить(0); //пометка операции (документа) на удаление
КонецЕсли;

Методы ПометкаУдаления и СнятьПометкуУдаления работают так же, как для документов.

Метод УдалитьПроводку удаляет текущую проводку из операции.

Иногда проводки лучше не удалять, а просто выключить. Тогда они исключаются из бухгалтерских итогов. Потом проводки можно обратно включить.
Опер.ВключитьПроводки(0); //выключить проводки

Опер.ВключитьПроводки(1); //включить проводки


Другие полезные методы

Метод
Описание
ПолучитьВремя()
УстановитьВремя()
Возвращает / устанавливает время текущей операции.
ПроверитьПроводку Проверить проводку на соответствие корректным проводкам. Список корректных проводок задает пользователь.
Выбрана()
ПроводкаВыбрана()
Проверяет выбранность операции и проводки.
ПланСчетов() Возвращает план счетов текущей проводки.
ПолучитьДокумент() Возвращает документ, которому принадлежит операция.
ПредставлениеПроводки()
ПредставлениеСубконто()
Возвращает строковое представление проводки и субконто, например для вывода в отчет.
ЗаписатьПроводки() Метод ЗаписатьПроводки выполняет запись в информационную базу уже добавленных и заполненных проводок операции. Метод может использоваться только для атрибута «Операция» документа в момент проведения (в процедуре ОбработкаПроведения). При этом происходит обновление бухгалтерских итогов. Это позволяет при проведении документа обращаться к бухгалтерским итогам уже измененным проводками, записанными этим документом. После выполнения метода ЗаписатьПроводки и до окончания процедуры ОбработкаПроведение уже невозможно изменять или удалять проводки, добавленные до вызова этого метода.

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

Процедура ОбработкаПроведения()

Сч20 = СчетПоКоду("20");
Cч40 = CчeтПoKoдy("40");
СписаниеСчетаНаСч20(СчетПоКоду("25"));
СписаниеСчетаНаСч20(СчетПоКоду("26"));
Операция.ЗаписатьПроводки();
СписаниеСчета20На40();
Операция.Содержание = "Закрытие фин. результатов за " + Формат(ДатаДок, "Д ММММГГГГ");
Операция.Записать();

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