Опубликовано: 02.06.2022

Работа с операциями и проводками

Для отражения в бухгалтерском учёте информации о движении средств в системе «1С:Предприятие» используются операции и проводки. Эти объекты поддерживаются компонентой «Бухгалтерский учет». Настройка свойств операций и проводок производится соответствующими объектами метаданных в конфигурации.

Рассмотрим основные моменты работы с объектами данного типа:

Контекст работы с операциями и проводками

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

Во-первых, у агрегатного объекта "Документ" существует атрибут Операция, который обеспечивает доступ к операции данного документа.

Во-вторых, объект "Операция" непосредственно доступен в контекстах формы операции, формы журнала операции и формы журнала проводок. То есть в модулях указанных форм обращение к атрибутам и методам текущего объекта выполняется напрямую. В форме журнала операций текущим объектом является операция, на которой в данный момент стоит курсор. В форме журнала проводок текущим объектом является операция, которой принадлежит проводка, на которой в данный момент стоит курсор.

В-третьих, объект "Операция" может быть создан при помощи функции СоздатьОбъект(), которой в качестве параметра передаётся ключевое слово «Операция» (англоязычный синоним — «Operation»). В этом варианте использования становятся доступны методы перебора операций и проводок различных операций, а также добавления и удаления операции.

Опер = СоздатьОбъект("Операция");

С точки зрения чтения, все операции используются практически одинаково. Однако изменения (создание новых, запись, удаление) операций сильно отличается для «ручных» операций и операций, принадлежащих документам.

«Ручные» операции — это операции, введённые пользователем вручную или записанные с помощью объекта типа "Операция", созданного функцией СоздатьОбъект(). Все изменения из встроенного языка этих операций производятся только с помощью объекта типа "Операция", созданного функцией СоздатьОбъект(). Такие операции принадлежат документам специального вида «Операция», который не имеет большинства свойств обычных документов и используется только для отражения в журнале «Ручные операции». Вид документа «Операция» создаётся системой автоматически при внесении в конфигурацию первого объекта метаданных типа "ПланСчетов".

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

Работа с проводками

Как уже было сказано ранее, доступ к проводкам также осуществляется посредством объекта "Операция". Методы и атрибуты объекта "Операция" осуществляют доступ к данным как собственно операции, так и к данным проводок. Операция содержит набор методов для перебора и позиционирования на конкретные проводки. При этом одна из проводок операции может быть текущей. Все обращения к атрибутам и методам данных проводки будут относиться именно к текущей проводке. Если текущей проводки нет, то обращение к атрибутам и методам проводки недоступно.

Одной из возможностей организации данных бухгалтерского учёта системы «1С:Предприятие» является поддержка сложных проводок. Под сложной проводкой понимается проводка, состоящая из нескольких корреспонденций (одного дебета и нескольких кредитов или наоборот). С точки зрения синтаксиса объекта "Операция" текущей проводкой может являться простая проводка или одна из корреспонденций сложной проводки. Нумерация проводок осуществляется номером проводки и номером корреспонденции.

Атрибуты объекта «Операция»

Получить дату операции можно из атрибута ДатаОперации (англоязычный синоним — OperDate). Так как каждая бухгалтерская операция принадлежит документу (причём только одному, а операция введённая вручную также принадлежит специальному документу «Операция»), значение данного атрибута совпадает со значением атрибута ДатаДок документа, которому принадлежит операция.

Пример использования атрибута:

Опер = СоздатьОбъект("Операция");
Опер.НайтиОперацию(ВыбрДокумент);
Сообщить(Опер.ДатаОперации);

Получить содержание операции можно из атрибута Содержание (англоязычный синоним — Description). Содержание операции представляет собой произвольную символьную строку. Максимальная длина содержания задаётся в Конфигураторе при редактировании свойств объекта метаданных "Операция".

Пример использования атрибута:

Опер = СоздатьОбъект("Операция");
Опер.НайтиОперацию(ВыбрДокумент);
Сообщить(Опер.Содержание);

Получить сумму операции можно из атрибута СуммаОперации (англоязычный синоним — OperSum). Сумма операции является положительным или отрицательным числом. Она предназначена лишь для иллюстрирования денежного выражения операции и не влияет на бухгалтерские итоги. Длина и точность суммы операции задаётся в Конфигураторе при редактировании свойств объекта метаданных "Операция".

Пример использования атрибута:

Опер = СоздатьОбъект("Операция");
Опер.НайтиОперацию(ВыбрДокумент);
Сообщить(Опер.СуммаОперации);

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

Пример использования атрибута:

Опер = СоздатьОбъект("Операция");
Опер.НайтиОперацию(ВыбрДокумент);
Сообщить(Опер.ПризнакУчета);

Обратиться к документу операции позволяет доступный только для чтения атрибут Документ (англоязычный синоним — Document. Посредством данного атрибута становится возможным доступ к реквизитам документа.

Пример использования атрибута:

Опер = СоздатьОбъект("Операция");
Опер.НайтиОперацию(ВыбрДокумент);
Сообщить(Опер.Документ.НомерДок);

Атрибуты проводок операции

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

Пример использования атрибута:

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

Получить валюту выбранной проводки или корреспонденции можно из атрибута Валюта (англоязычный синоним — Currency). Данный атрибут содержит значение типа "Справочник" (вид справочника определён в настройках валютного учёта в конфигурации). Перед обращением к атрибуту конкретной проводки проводка должна быть выбрана с помощью метода ПолучитьПроводку() или создана при помощи метода НоваяПроводка(). В модулях форм «Операции» и «Журнал проводок» текущая проводка определяется положением курсора.

Пример использования атрибута:

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

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

Пример использования атрибута:

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

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

Пример использования атрибута:

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

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

Для обращения к дебетовой части текущей проводки или корреспонденции операции служит атрибут Дебет (англоязычный синоним — Debit). Данный атрибут возвращает агрегатный объект специального типа "Дебет", который используется только для доступа к данным дебетовой части и не используется отдельно. Перед обращением к атрибуту конкретной проводки проводка должна быть выбрана с помощью метода ПолучитьПроводку() или создана при помощи метода НоваяПроводка(). В модулях форм «Операции» и «Журнал проводок» текущая проводка определяется положением курсора.

Пример использования атрибута:

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

Для обращения к кредитовой части текущей проводки или корреспонденции операции служит атрибут Кредит (англоязычный синоним — Credit). Данный атрибут возвращает агрегатный объект специального типа "Кредит", который используется только для доступа к данным кредитовой части и не используется отдельно. Перед обращением к атрибуту конкретной проводки проводка должна быть выбрана с помощью метода ПолучитьПроводку() или создана при помощи метода НоваяПроводка(). В модулях форм «Операции» и «Журнал проводок» текущая проводка определяется положением курсора.

Пример использования атрибута:

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

Атрибуты агрегатных объектов «Дебет» и «Кредит»

Получить доступ к счёту дебета или кредита проводки или корреспонденции операции позволяет атрибут Счет (англоязычный синоним — Account). Атрибут имеет тип "Счет".

Пример использования атрибута:

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

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

Пример использования атрибута:

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

Методы объектов «Дебет» и «Кредит»

Получить или установить значения субконто по его номеру или виду в дебете или в кредите проводки (или корреспонденции операции) позволяет метод Субконто() (англоязычный синоним — Subconto()).

Синтаксис метода:

Субконто(<НомерИлиВидСубконто>, <Субконто>)

где

  • <НомерИлиВидСубконто> — порядковый номер (может быть задан выражением числового типа) или значение типа "ВидСубконто". Значение по умолчанию — 1;
  • <Субконто> — значение субконто. Параметр является необязательным и используется только в случае установки значения. Если параметр отсутствует, значение не меняется.

Пример использования метода:

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

Получить представление для субконто дебета или кредита текущей проводки или корреспонденции позволяет метод ПредставлениеСубконто() (англоязычный синоним — SubcontoPresentation()).

Примечание: Представление может быть настроено в конфигурации для видов субконто типа "Справочник" или "Документ". Формат представления определяется в Конфигураторе при редактировании свойств вида субконто.

Синтаксис метода:

ПредставлениеСубконто(<НомерИлиВидСубконто>, <Режим>)

где

  • <НомерИлиВидСубконто> — порядковый номер (может быть задан выражением числового типа) или значение типа "ВидСубконто". Значение по умолчанию — 1;
  • <Режим> — числовое выражение — признак полноты выдачи представления субконто. Может принимать значения: 0 — полное представление; 1 — краткое представление. Значение по умолчанию — 0.

Пример использования метода:

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

Методы объекта «Операция»

Методы для редактирования и создания операций

Создать новую операцию позволяет метод Новая() (англоязычный синоним — New()). Такая операция будет являться полным аналогом операции введённой вручную, то есть будет принадлежать документу специального вида «Операция». Метод не имеет параметров и может быть вызван только для объектов типа "Операция", созданных функцией СоздатьОбъект(). После вызова метода Новая() могут быть заданы значения реквизитов операции и добавлены проводки. После этого для записи операции должен быть вызван метод Записать().

Пример использования метода:

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

Записать новую или изменённую операцию позволяет метод Записать() (англоязычный синоним — Write()). Параметры у метода отсутствуют. Метод может быть использован в следующих ситуациях:

  • метод может быть вызван для записи новой или изменённой ручной операции. Такие операции могут создаваться и редактироваться пользователем вручную или из встроенного языка объектом "Операция", созданным функцией СоздатьОбъект();
  • метод может быть вызван для записи операции созданной при проведении документа в предопределённой процедуре ОбработкаПроведения(). Данный метод должен быть вызван после заполнения операции содержанием реквизитов и проводками;
  • этот метод может применяться в Модуле формы операции непосредственно к операции локального контекста, в этом случае данный метод отрабатывает те же действия, как интерактивное нажатие пользователем кнопки с формулой "#3аписать".

Примечание: При записи сложной проводки, если у главной корреспонденции сложной проводки не указана сумма (равна 0), то она автоматически вычисляется на основании подчинённых корреспонденций.

Пример использования метода:

// Создание и запись новой операции созданной,
// в модуле отчета или обработки
Опер = СоздатьОбъект("Операция");
Опер.Новая();
Опер.ДатаОперации = РабочаяДата();
Опер.Содержание = "Деньги по чеку";
Опер.НоваяПроводка();
Опер.Дебет.Счет = СчетПоКоду("50");
Опер.Кредит.Счет = СчетПоКоду("51");
Опер.Сумма = 1000000;
Опер.Записать();

Другой пример:

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

Удалить или пометить на удаление текущую операцию позволяет метод Удалить() (англоязычный синоним — Delete()). Данный метод может использоваться только для объектов, созданных с помощью функции СоздатьОбъект(). Если метод применён к операции, принадлежащей документу, то происходит удаление или пометка всего документа.

Синтаксис метода:

Удалить(<Режим>)

где <Режим> — числовое выражение. Возможные значения: 1 — непосредственное удаление; 0 — пометка на удаление. Параметр является необязательным. Значение по умолчанию — 1.

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

Пример использования метода:

Опер = СоздатьОбъект("Операция");
Опер.НайтиОперацию(ВыбрДокумент);
Опер.Удалить(0);

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

Пример использования метода:

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

Создать новую проводку для текущей операции позволяет метод НоваяПроводка() (англоязычный синоним — NewEntry()). При этом новая проводка становится текущей.

Данный метод может быть вызван, во-первых, для объекта "Операция", созданного функцией СоздатьОбъект(), при создании или изменении операции принадлежащей документу специального вида «Операция». Во-вторых, метод может быть вызван для объекта, являющегося атрибутом документа, при создании операции принадлежащей документу в процессе проведения документа.

Созданная проводка будет записана и повлечёт изменения в бухгалтерских итогах после вызова метода операции Записать().

Пример использования метода:

// Создание и запись новой операции,
// созданной в модуле отчета или обработки
Опер = СоздатьОбъект("Операция");
Опер.Новая();
Опер.ДатаОперации = РабочаяДата();
Опер.Содержание = "Деньги по чеку";
Опер.НоваяПроводка();
Опер.Дебет.Счет = СчетПоКоду("50");
Опер.Кредит.Счет = СчетПоКоду("51");
Опер.Сумма = 1000000;
Опер.Записать();

Другой пример:

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

Создать новую корреспонденцию для проводки позволяет метод НоваяКорреспонденция() (англоязычный синоним — NewCorrespondence()). Метод должен использоваться после того, как новая проводка создана с использованием метода НоваяПроводка().

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

Пример использования метода:

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

Выполнить запись в информационную базу уже добавленных и заполненных проводок операции позволяет метод ЗаписатьПроводки() (англоязычный синоним — WriteEntries()). Метод может использоваться только для атрибута Операция документа в момент проведения в предопределённой процедуре ОбработкаПроведения(). Параметры у данного метода отсутствуют.

При вызове метода ЗаписатьПроводки() происходит обновление бухгалтерских итогов. Это позволяет при проведении документа обращаться к бухгалтерским итогам уже изменённым проводками, записанными этим документом. После вызова метода и до окончания процедуры ОбработкаПроведение() уже невозможно изменять или удалять проводки, добавленные до вызова этого метода.

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

Примечание: При записи сложной проводки, если у главной корреспонденции сложной проводки не указана сумма (равна 0), то она автоматически вычисляется на основании подчинённых корреспонденций.

Пример использования метода:

Процедура СписаниеСчетаНаСч20(Счт)
   // создаем и формируем проводки
    . . .
КонецПроцедуры

Процедура СписаниеСчета20На40()
   // создаем и формируем проводки
    . . .
КонецПроцедуры

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

Выполнить включение/отключение проводок операции позволяет метод ВключитьПроводки() (англоязычный синоним — EntriesOn()). Метод может использоваться только для объектов, созданных функцией СоздатьОбъект(). Возвращаемым значением метода является числовое значение, отображающее состояние проводок на момент вызова метода: 1 — проводки операции включены; 0 — проводки операции выключены.

Примечание: При отключении проводок они остаются в операции, но исключаются из итогов.

Синтаксис метода:

ВключитьПроводки(<Флаг>)

где <Флаг> — устанавливаемый флаг состояния: 1 — включить проводки операции; 0 — выключить проводки операции. Параметр является необязательным. Если параметр опущен, состояние не изменяется.

Пример использования метода:

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

Удалить текущую проводку или корреспонденцию операции позволяет метод УдалитьПроводку() (англоязычный синоним — DeleteEntry()). Параметры у метода отсутствуют.

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

Пример использования метода:

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

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

Синтаксис метода:

УстановитьВремя(<Час>, <Минуты>, <Секунды>)

где

  • <Час> — число — час времени операции;
  • <Минуты> — число — минуты времени операции;
  • <Секунды> — число — секунды времени операции.

Пример использования:

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

Методы для поиска и выбора операции

Выполнить поиск операции по значению типа "Документ" позволяет метод НайтиОперацию() (англоязычный синоним — FindOper()). Возвращаемым значением метода является число 1, если действие выполнено (операция найдена), или 0, если действие не выполнено (операция не найдена).

Синтаксис метода:

НайтиОперацию(<Документ>)

где <Документ> — значение типа "Документ".

Пример использования метода:

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

Определить, спозиционирован ли объект в настоящий момент на некоторой операции или нет, позволяет метод Выбрана() (англоязычный синоним — Selected()). Параметры у метода отсутствуют. Возвращаемым значением метода является число 1, если операция выбрана, или 0, если операция не выбрана (не найдена).

Примечание: При использовании в форме журнала операций (проводок) метод определяет спозиционирован ли курсор. При использовании в форме операции метод определяет, записана новая операция или нет.

Пример использования метода:

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

Выбрать проводку или корреспонденцию проводки и сделать её текущей позволяет метод ПолучитьПроводкуПоНомеру() (англоязычный синоним — GetEntryByNumber()). Возвращаемым значением метода является число 1, если проводка найдена, или 0, если проводка не найдена.

Синтаксис метода:

// Синтаксис 1:

ПолучитьПроводкуПоНомеру(<АбсолютныйНомерПроводки>)

// Синтаксис 2:

ПолучитьПроводкуПоНомеру(<НомерПроводки>, <НомерКорреспонденции>)

где

  • <АбсолютныйНомерПроводки> — число — абсолютный номер проводки в операции (включая проводки и корреспонденции). Параметр является необязательным. Значение по умолчанию — 1;
  • <НомерПроводки> — число — номер проводки в операции. Параметр является необязательным. Значение по умолчанию — 1;
  • <НомерКорреспонденции> — число — номер корреспонденции в проводке. Параметр является необязательным. Имеет смысл, если указан параметр <НомерПроводки>.

Пример использования метода:

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

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

Метод позволяет обратится к таким атрибутам проводки, как Сумма, СуммаВал, Количество, Валюта, Дебет, Кредит и т.п.

Синтаксис метода:

Пров(<НомерПроводки>, <НомерКорреспонденции>)

где

  • <НомерПроводки> — число — номер проводки в операции. Параметр является необязательным. Если параметр не задан, то используется текущая проводка;
  • <НомерКорреспонденции> — число — номер корреспонденции в проводке. Параметр является необязательным. Имеет смысл, если указан параметр <НомерПроводки>.

Пример использования метода:

Опер = СоздатьОбъект("Операция");
Опер.НайтиОперацию(ВыбрДокумент);
Сообщить(Пров(2, 3).Дебет.Счет);

Определить, спозиционирована ли в настоящий момент некоторая проводка в операции или нет, позволяет метод ПроводкаВыбрана() (англоязычный синоним — EntrySelected()). Параметры у метода отсутствуют. Возвращаемым значением метода является число 1, если проводка выбрана, или 0, если проводка не выбрана.

Пример использования метода:

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

Методы для циклической обработки операций и проводок

Открыть выборку операции за указанный период позволяет метод ВыбратьОперации() (англоязычный синоним — SelectOpers()). Возвращаемым значением метода является число 1, если действие выполнено и в выборке есть хотя бы одна операция, или 0, если действие не выполнено или в выборке нет ни одной операции.

Синтаксис метода:

ВыбратьОперации(<НачалоПериода>, <КонецПериода>)

где

  • <НачалоПериода> — выражение типа "Дата", документ или позиция документа, с которого устанавливается начало выборки операций. Параметр является необязательным. Если параметр не указан, выборка начинается с самой первой операции в базе;
  • <КонецПериода> — выражение типа "Дата", документ или позиция документа, на котором устанавливается конец выборки операций. Параметр является необязательным. Если параметр не указан, выборка производится до самой последней операции в базе.

Пример использования метода:

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

Открыть выборку проводок операций за указанный период позволяет метод ВыбратьОперацииСПроводками() (англоязычный синоним — SelectOpersAndEntries()). С помощью параметров метода можно задать различные условия отбора проводок. Непосредственное извлечение из выборки проводок может затем осуществляться с помощью метода ПолучитьПроводку(). В случае же использования метода ПолучитьОперацию(), последний выбирает каждую первую, попавшую в выборку, проводку следующей операции.

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

Для метода предусмотрено два синтаксиса:

// Синтаксис 1:

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

// Синтаксис 2:

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

где

  • <НачПериода> — выражение типа "Дата", документ или позиция документа, с которого устанавливается начало выборки операций. Параметр является необязательным. Если параметр не указан, выборка начинается с самой первой операции в базе;
  • <КонПериода> — выражение типа "Дата", документ или позиция документа, на котором устанавливается конец выборки операций. Параметр является необязательным. Если параметр не указан, выборка производится до самой последней операции в базе;
  • <Фильтр> — строка, содержащая условие отбора проводок (см. примечание ниже). Параметр является необязательным. Если он не заполнен, в выборку включаются все проводки;
  • <ПланСчетов> — значение типа "ПланСчетов". Если параметр не указан, выборка производится по всем планам счетов;
  • <Разделитель> — значение разделителя учёта. Если параметр не указан, выборка производится по всем значениям разделителя учёта;
  • <Счет> — счёт, по которому будут отбираться проводки. Если не указан, выборка производится по всем счетам;
  • <КорСчет> — корреспондирующий счёт, по которому будут отбираться проводки. Параметр имеет смысл, если указан параметр <Счет>;
  • <Флаг> — признак вида оборота. Параметр может принимать значения:
    • 1 — отбирать проводки только по дебету счёта;
    • 2 — отбирать проводки только по кредиту счёта;
    • 3 — отбирать проводки и по дебету, и по кредиту (значение по умолчанию).
  • <Валюта> — значение типа "Справочник" (вида справочника, используемого для валютного учёта) — признак отбора проводок по валюте. Пустое значение типа "Справочник" соответствующего вида считается указанием отбора по пустой валюте. Для того, чтобы отбор по валюте не производился нужно либо опустить данный параметр, либо передать туда пустую строку.

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

  • n — проводки со счётом n;
  • n, m — проводки в дебет счёта n с кредита счёта m.

Здесь в качестве n и m может указываться звездочка "*", она обозначает любой счёт. Например, запись "*, 51" подразумевает все проводки с кредита 51-ого счёта.

В выборку включаются все проводки, удовлетворяющие следующим условиям:

  • если в параметре <Фильтр> указаны корреспонденции счетов, то проводка должна соответствовать одной из этих корреспонденции;
  • если параметре <Фильтр> указаны строки символов, то в проводке должна содержаться хотя бы одна из этих строк — либо в содержании операции, либо представлениях значений субконто и реквизитов проводки и операции.

Пример использования метода:

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

Открыть выборку операций или проводок за указанный период по указанному критерию отбора позволяет метод ВыбратьПоЗначению() (англоязычный синоним — SelectByValue()). Возможные критерии отборов настраиваются в Конфигураторе и имеют свои идентификаторы (системные или идентификаторы объектов метаданных). Вид отбора определяет будет открыта выборка операций или проводок. Возвращаемым значением метода является число 1, если действие выполнено и в выборке есть хотя бы одна операция или проводка, или 0, если действие не выполнено или в выборке нет ни одной операции или проводки.

Синтаксис метода:

ВыбратьПоЗначению(<НачПериода>, <КонПериода>, <ВидОтбора>, <3начениеОтбора>)

где

  • <НачПериода> — выражение типа "Дата", документ или позиция документа, с которого устанавливается начало выборки операций. Параметр является необязательным. Если параметр не указан, выборка начинается с самой первой операции в базе;
  • <КонПериода> — выражение типа "Дата", документ или позиция документа, на котором устанавливается конец выборки операций. Параметр является необязательным. Если параметр не указан, выборка производится до самой последней операции в базе;
  • <ВидОтбора> — символьная строка — название вида отбора (см. примечание ниже);
  • <3начениеОтбора> — значение отбора вида, указанного в параметре <ВидОтбора>.

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

  • "СуммаОперации" ("OperSum") — отбор по сумме операции. Доступно если в метаданных включён отбор по сумме операции;
  • "Содержание" ("Description") — отбор по содержанию операции. Доступно если в метаданных включен отбор по содержанию операции;
  • Имя реквизита операции — отбор по дополнительному реквизиту операции. Идентификатор реквизита должен быть указан так, как это задано в метаданных. Доступно если в метаданных включен отбор по реквизиту операции.

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

  • "Счет" ("Account") — отбор по счёту дебета или счёту кредита проводки. Доступно если в метаданных включен отбор по счетам проводок;
  • "СчетДт" ("AccountDt") — отбор по счёту дебета проводки. Доступно если в метаданных включен отбор по дебету/кредиту счетов проводок;
  • "СчетКт" ("AccountKt") — отбор по счёту кредита проводки. Доступно если в метаданных включен отбор по дебету/кредиту счетов проводок;
  • "Валюта" ("Currency") — отбор по валюте проводки. Доступно если в метаданных включён отбор по валюте проводок;
  • Имя вида субконто — отбор по виду субконто. Идентификатор вида субконто должен быть указан так, как он задан в метаданных. Доступно если в метаданных включён отбор по этому виду субконто;
  • Имя реквизита проводки — отбор по дополнительному реквизиту проводки. Идентификатор реквизита должен быть указан так, как он задан в метаданных. Доступно если в метаданных включён отбор по этому реквизиту проводки.

Пример использования метода:

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

Открыть выборку проводок текущей операции позволяет метод ВыбратьПроводки() (англоязычный синоним — SelectEntries()). Параметры у метода отсутствуют. Возвращаемым значением метода является число 1, если действие выполнено и в выборке есть хотя бы одна проводка, или 0, если действие не выполнено или в выборке нет ни одной проводки. Данный метод предназначен для организации перебора проводок операции и используется совместно с другим методом — ПолучитьПроводку().

Пример использования метода:

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

Выбрать очередную операцию из выборки, предварительно открытой при помощи метода ВыбратьОперации() или ему подобного, позволяет метод ПолучитьОперацию() (англоязычный синоним — GetOper()). Параметры у метода отсутствуют. Возвращаемым значением метода является число 1, если операция выбрана успешно, или 0, если операция не выбрана (достигнут конец выборки).

Пример использования метода:

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

Выбрать очередную проводку из выборки, предварительно открытой при помощи метода ВыбратьПроводки() или ему подобного, позволяет метод ПолучитьПроводку() (англоязычный синоним — GetEntry()). Параметры у метода отсутствуют. Возвращаемым значением метода является число 1, если проводка выбрана успешно, или 0, если проводка не выбрана (достигнут конец выборки).

Пример использования метода:

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

Методы для управления выбором проводок и операций

Установить фильтр по субконто, который в последующем будет использован при отборе проводок методом ВыбратьОперацииСПроводками(), позволяет метод ИспользоватьСубконто() (англоязычный синоним — UseSubconto()). Метод может вызываться последовательно несколько раз. В этом случае фильтры, устанавливаемые этим методом, суммируются.

Синтаксис метода:

ИспользоватьСубконто(<ВидСубконто>, <Субконто>)

где

  • <ВидСубконто> — значение типа "ВидСубконто"« — отбор проводок будет выполнен только для субконто указанного вида;
  • <Субконто> — значение субконто — отбор проводок будет выполнен только для указанного субконто. В качестве значения данного параметра можно также передавать значение типа "СписокЗначений".

Пример использования метода:

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

Установить фильтр по корреспондирующим субконто, который в последующем будет использован при отборе проводок методом ВыбратьОперацииСПроводками(), позволяет метод ИспользоватьКорСубконто() (англоязычный синоним — UseCorSubconto()). Метод может вызываться последовательно несколько раз. В этом случае фильтры, устанавливаемые этим методом, суммируются.

Синтаксис метода:

ИспользоватьКорСубконто(<ВидСубконто>, <Субконто>)

где

  • <ВидСубконто> — значение типа "ВидСубконто"« — отбор проводок будет выполнен только для корреспондирующих субконто указанного вида;
  • <Субконто> — значение субконто — отбор проводок будет выполнен только для указанного корреспондирующего субконто. В качестве значения данного параметра можно также передавать значение типа "СписокЗначений".

Пример использования метода:

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

Методы для получения информации об операции

Получить полное количество проводок и корреспонденции в операции позволяет метод КоличествоПроводок() (англоязычный синоним — EntriesCount()). Параметры у метода отсутствуют.

Пример использования метода:

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

Получить номер текущей проводки без учёта корреспонденции позволяет метод НомерПроводки() (англоязычный синоним — EntryNumber()). Параметры у метода отсутствуют.

Пример использования метода:

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

Получить номер корреспонденции для текущей проводки позволяет метод НомерКорреспонденции() (англоязычный синоним – CorrespondenceNumber()). Если проводка не сложная, метод возвращает 1. Параметры у метода отсутствуют.

Пример использования метода:

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

Определить, является ли проводка сложной (то есть состоящей из нескольких корреспонденции), позволяет метод СложнаяПроводка() (англоязычный синоним — ComplexEntry()). Параметры у метода отсутствуют. Возвращаемым значением метода является число 1, если текущая проводка является сложной, или 0, если текущая проводка не является сложной.

Пример использования метода:

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

Получить для текущей проводки её план счетов позволяет метод ПланСчетов() (англоязычный синоним — ChartOfAccounts()). Параметры у метода отсутствуют.

Пример использования метода:

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

Проверить проводку на соответствие корректным проводкам позволяет метод ПроверитьПроводку() (англоязычный синоним — CheckEntry()). Параметры у метода отсутствуют. Возвращаемым значением метода является число 1, если проводка соответствует корректным проводкам, или 0, если не соответствует.

Пример использования метода:

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

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

Синтаксис метода:

ПредставлениеПроводки(<ПоСубконто>)

где <ПоСубконто> — флаг включения в представление проводки представления субконто проводки. Параметр является необязательным. Значение по умолчанию – 0. Возможные значения параметра:

  • 0 — не включать представление субконто;
  • 1 — включать представление субконто;
  • 2 — включать развернутое представление субконто.

Пример использования метода:

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

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

Пример использования метода:

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

Проверить, помечена ли на удаление текущая операция или документ, которому принадлежит операция, позволяет метод ПометкаУдаления() (англоязычный синоним — DeleteMark()). Параметры у метода отсутствуют. Возвращаемым значением метода является число 1, если операция помечена на удаление, или 0, если операция не помечена на удаление.

Пример использования:

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

Получить время записи операции позволяет метод ПолучитьВремя() (англоязычный синоним — GetTime()). Метод возвращает строковое значение времени в формате "ЧЧ.ММ.СС". Кроме того, время записывается в переменные, передаваемые как параметры при вызове метода.

Синтаксис метода:

ПолучитьВремя(<Час>, <Минуты>, <Секунды>)

где

  • <Час> — идентификатор переменной, в которую метод возвращает число — час времени операции;
  • <Минуты> — идентификатор переменной, в которую метод возвращает число — минуты времени операции;
  • <Секунды> — идентификатор переменной, в которую метод возвращает число — секунды времени операции.

Пример использования:

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

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

Возвращаемое значение метода следует использовать, если нужно передать какому-либо методу или запомнить в переменную значение типа документ операции. Для доступа же к данным документа непосредственно из объекта типа "Операция" следует использовать атрибут Документ, например:

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

Получить номер строки документа, по которой была сформирована проводка, позволяет метод НомерСтрокиДокумента() (англоязычный синоним — DocLineNum()). Параметры у метода отсутствуют.

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

Пример использования метода:

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

Методы для работы с реквизитами операций

Назначить тип для реквизита операции, которому в Конфигураторе назначен тип «Неопределенный» позволяет метод НазначитьТип() (англоязычный синоним — SetType()).

Синтаксис метода:

НазначитьТип(<ИмяРеквизита>, <ИмяТипа>, <Длина>, <Точность>)

где

  • <ИмяРеквизита> — строковое выражение, содержащее имя реквизита, как оно задано в Конфигураторе;
  • <ИмяТипа> — строковое выражение — название типа данных (или вида субконто), который назначается реквизиту документа, например, "Строка", "Число", "Дата", "Справочник.Товары", "Документ.РасходнаяНакладная" и т.п.;
  • <Длина> — числовое выражение — длина поля представления данных. Параметр является необязательным. Имеет смысл только при задании числового или строкового типа;
  • <Точность> — числовое выражение — число знаков числа после десятичной точки. Параметр является необязательным. Имеет смысл только при задании числового типа.

Пример записи метода:

Операция.НазначитьТип("ТМЦ", "Справочник.Товары");

Установить значение реквизита по его идентификатору позволяет метод УстановитьАтрибут() (англоязычный синоним — SetAttrib()).

Синтаксис метода:

УстановитьАтрибут(<ИмяРеквизита>, <3начение>)

где

  • <ИмяРеквизита> — строковое выражение, содержащее имя реквизита, как оно задано в Конфигураторе;
  • <3начение> — выражение, содержащее устанавливаемое значение реквизита.

Пример записи метода:

Опер.УстановитьАтрибут("РознЦена", ЦенаТов);

Получить значение реквизита по его идентификатору позволяет метод ПолучитьАтрибут() (англоязычный синоним — GetAttrib()).

Синтаксис метода:

ПолучитьАтрибут(<ИмяРеквизита>)

где <ИмяРеквизита> — строковое выражение, содержащее имя реквизита, как оно задано в Конфигураторе.

Пример использования:

Цена = Опер.ПолучитьАтрибут("Цена");

Атрибуты контекста модуля формы операции

Атрибут БИ (англоязычный синоним — AT) содержит ссылку на агрегатный объект типа "БухгалтерскиеИтоги". Данный объект включается в контекст формы операции для облегчения доступа к итогам при работе с типовыми операциями (см. рис. ниже).

Типовая операция

Методы контекста модуля формы операции

Определить, вводится ли новая операция с использованием типовой, позволяет метод ПоТиповойОперации() (англоязычный синоним — ByTemplateOper()). Возвращаемым значением метода является число 1, если при вводе операции вручную использована типовая операция, или 0, если это не так.

Синтаксис метода:

ПоТиповойОперации(<Переменная>)

где <Переменная> — имя переменной, в которую будет записано наименование типовой операции.

Пример использования метода:

Процедура ПриОткрытии()   // предопределенная процедура
   Если ПоТиповойОперации() = 0 Тогда
      ИспользоватьВалюту(Константа.ОснВалюта);
   КонецЕсли;
КонецПроцедуры

Установить в форме используемую по умолчанию валюту позволяет метод ИспользоватьВалюту() (англоязычный синоним — UseCurrency()). Она будет автоматически подставляться в валюту вводимых проводок, если в проводках используются валютные счета. После автоматической подстановки пользователь может изменить валюту по своему усмотрению. Возвращаемым же значением метода является значение установки используемой валюты на момент до вызова метода.

Синтаксис метода:

ИспользоватьВалюту(<Валюта>)

где <Валюта> — значение типа "Справочник", имеющий вид, определённый при настройке валютного учёта. Если параметр не задан, установка не изменяется.

Пример использования метода:

Процедура ПриОткрытии()   // предопределенная процедура
   ИспользоватьВалюту(Константа.ОснВалюта);
КонецПроцедуры

Установить в форме используемый по умолчанию корреспондирующий счёт позволяет метод ИспользоватьКорСчет() (англоязычный синоним — UseCorAccount()). Этот счёт будет автоматически подставляться проводку взамен не указанных пользователем счетов. Эта возможность может быть использована, например, для ввода первоначальных остатков для автоматической простановки счёта, корреспондирующего с введённым. Возвращаемым же значением метода является значение установки используемого по умолчанию корреспондирующего счёта на момент до вызова метода.

Синтаксис метода:

ИспользоватьКорСчет(<Счет>)

где <Счет> — значение типа "Счет". Если параметр не задан, установка не изменяется.

Пример использования метода:

Процедура ПриОткрытии()   // предопределенная процедура
   ИспользоватьКорСчет(Константа.СчетПервОстатков);
КонецПроцедуры

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

Синтаксис метода:

ИспользоватьСубконто(<ВидСубконто>, <Субконто>)

где

  • <ВидСубконто> — значение типа "ВидСубконто";
  • <Субконто> — значение субконто. Если параметр не задан, установка не изменяется.

Пример использования метода:

Процедура ПриОткрытии()   // предопределенная процедура
   ИспользоватьСубконто(ВидыСубконто.Склады, Константа.ОснСклад);
КонецПроцедуры

Установить режим изменения порядка строк в форме операции позволяет метод ИзменениеПорядкаСтрок() (англоязычный синоним — ChangeLinesOrder()). Возвращаемым значением метода является режим изменения порядка строк до исполнения метода.

Синтаксис метода:

ИзменениеПорядкаСтрок(<Режим>)

где <Режим> — число: 1 — разрешить изменение порядка строк в операции; 0 — запретить. Если параметр не задан, то режим не меняется.

Пример использования метода:

Процедура ПриОткрытии()   // предопределенная процедура
   ИзменениеПорядкаСтрок(0);
КонецПроцедуры

Предопределённые процедуры модуля формы операции

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

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

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

Примечание: Начальное значение статуса возврата любой предопределённой процедуры равно 1. Оно устанавливается системой при вызове процедуры.

При открытии формы операции для ввода новой операции в системе «1С:Предприятие» неявно производится вызов процедуры ВводНового() (англоязычный синоним — InputNew()). Данная процедура может использоваться, например, для установки начальных значений реквизитов новой операции. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя вводить операции), ввод новой операции и открытие её формы не будет выполнено.

Синтаксис процедуры:

Процедура ВводНового(<ПризнКопирования>, <ОбъектКопирования>)
    . . .
КонецПроцедуры

где

  • <ПризнКопирования> — идентификатор переменной, куда будет помещено число 1, если операция введена копированием, или 0, если это просто новая операция. Данный признак может быть использован для анализа необходимости инициализации реквизитов новой операции. Параметр является необязательным;
  • <ОбъектКопирования> — идентификатор переменной, куда будет помещена ссылка на операцию, которая была скопирована. Параметр является необязательным.

Пример использования процедуры:

Процедура ПриОткрытии()   // предопределенная процедура
   ИспользоватьСубконто(ВидыСубконто.Склады, Константа.ОснСклад);
КонецПроцедуры

Когда форма новой операции открывается для ввода на основании в системе «1С:Предприятие» неявно производится вызов предопределённой процедуры ВводНаОсновании() (англоязычный синоним — InputCausedBy()). В этот момент система подставляет фактическое значение параметра <ДокОснование>, содержащее объект типа "Документ", на котором находился курсор в момент выполнения команды «Ввести на основании».

Данная процедура может использоваться, например, для установки начальных значений реквизитов новой операции, вводимых на основании выбранного документа. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя вводить новые операции), ввод новой операции и открытие формы не будет выполнено.

Синтаксис процедуры:

Процедура ВводНаОсновании(<ДокОснование>)
    . . .
КонецПроцедуры

где <ДокОснование> — значение документа, на основании которого вводится новая операция.

Пример использования:

Процедура ВводНаОсновании(ДокОсн)
   Если ДокОсн.Вид() = "ПлатПор" Тогда
      ИспользоватьСубконто(ВидыСубконто.Организации, ДокОсн.Получатель);
   КонецЕсли;
КонецПроцедуры

При записи операции из формы операции в системе «1С:Предприятие» производится вызов предопределённой процедуры ПриЗаписи() (англоязычный синоним — OnWrite()). Параметры у процедуры отсутствуют. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если не правильно заполнены реквизиты операции), запись операции не будет выполнена.

Пример использования:

Процедура ПриЗаписи()
   Если ПустаяСтрока(Содержание) = 1 Тогда
      Предупреждение("Не заполнено содержание операции!");
      СтатусВозврата(0);
   КонецЕсли;
КонецПроцедуры

В момент начала интерактивного редактирования существующей проводки или корреспонденции операции в системе «1С:Предприятие» производится вызов предопределённой процедуры ПриНачалеРедактированияСтроки() (англоязычный синоним — OnStartEditLine()). Параметры у процедуры отсутствуют. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя редактировать проводки операции), то проводка не будет изменена.

Пример использования:

Процедура ПриНачалеРедактированияСтроки()
   Если НазваниеНабораПрав() = "Оператор" Тогда
      Предупреждение("У вас нет права изменять проводки!", 2);
      СтатусВозврата(0);
   КонецЕсли;
КонецПроцедуры

При интерактивном вводе новой проводки или корреспонденции операции в системе «1С:Предприятие» производится вызов предопределённой процедуры ПриВводеСтроки() (англоязычный синоним — OnNewLine()). Параметры у процедуры отсутствуют. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю редактировать операции), то ввод новой строки не будет инициирован.

Пример использования:

Процедура ПриНачалеРедактированияСтроки()
   Если НазваниеНабораПрав() = "Оператор" Тогда
      Предупреждение("У вас нет права добавлять проводки!", 2);
      СтатусВозврата(0);
   КонецЕсли;
КонецПроцедуры

В момент начала интерактивного редактирования новой проводки или корреспонденции операции в системе «1С:Предприятие» производится вызов предопределённой процедуры ПриРедактированииНовойСтроки() (англоязычный синоним — OnEditNewLine()). Данная процедура может использоваться, например, для установки начальных значений проводки. Параметры у процедуры отсутствуют. Установка статуса возврата в данной процедуре не имеет смысла, так как отказаться от ввода новой проводки в этот момент уже невозможно.

Пример использования:

Процедура ПриРедактированииНовойСтроки()
   Фирма = Константа.ОснФирма;
КонецПроцедуры

При интерактивном удалении проводки или корреспонденции операции в системе «1С:Предприятие» производится вызов предопределённой процедуры ПриУдаленииСтроки() (англоязычный синоним — OnDeleteLine()). Параметры у процедуры отсутствуют. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя редактировать проводки операции), удаление проводки или корреспонденции операции не будет выполнено.

Пример использования:

Процедура ПриУдаленииСтроки()
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Предупреждение("У вас нет права удалять проводки!", 2);
      СтатусВозврата(0);
   КонецЕсли;
КонецПроцедуры

При попытке интерактивного перемещения строк вверх-вниз и перенумерации в системе «1С:Предприятие» производится вызов предопределённой процедуры ПриИзмененииПорядкаСтрок() (англоязычный синоним — OnChangeLinesOrder()). Если в данной предопределённой процедуре установить статус возврата в 0, перемещение строк не будет выполнено.

Синтаксис:

Процедура ПриИзмененииПорядкаСтрок(<Действие>)
    . . .
КонецПроцедуры

где <Действие> — число, характеризующее действие: 1 — перемещение строки вниз; -1 (минус единица) — перемещение строки вверх.

Пример использования:

Процедура ПриИзмененииПорядкаСтрок(Направление)
   СтатусВозврата(0);
КонецПроцедуры

Другие статьи по схожей тематике