Содержание
Довольно часть встречается ситуация, когда из формы какого-то прикладного объекта необходимо вызвать экспортную процедуру или функцию, расположенную в модуле этого объекта.
Напрямую обратиться к процедурам модуля объекта из формы не получится. Связано это с тем, что прикладных объектов на клиенте нет, они существуют только на сервере. На клиенте доступны только специальные типы для отображения данных.
Общая схема вызова серверной процедуры/функции состоит из нескольких этапов:
- Вызов контекстной серверной процедуры формы;
- Преобразование основного реквизита формы в прикладной объект;
- Вызов экспортной процедуры/функции модуля объекта;
- Обратное преобразование прикладного объекта в реквизит формы.
Рассмотрим описанные действия на примере. Предположим, что у документа есть табличная часть с товарами и ценами. Необходимо из формы документа вызвать процедуру модуля объекта, которая применяет для всех строк табличной части скидку в процентах.
Процедура модуля объекта документа для применения скидки:
Процедура ПрименитьСкидку(ПроцентСкидки) Экспорт Для каждого СтрокаТЧ Из Товары Цикл СтрокаТЧ.Цена = СтрокаТЧ.Цена — СтрокаТЧ.Цена / 100 * ПроцентСкидки; КонецЦикла; КонецПроцедуры
Внимание!
Процедуры/функции модуля объекта, которые предназначены для вызова извне модуля должны быть экспортными, т.е. иметь ключевое слово Экспорт.
На форме документа расположим кнопку, вызывающую серверную процедуру:
&НаКлиенте Процедура ПересчитатьЦены(Команда) // Этап 1. Вызов серверной процедуры ПересчитатьЦеныНаСервре(); КонецПроцедуры &НаСервере Процедура ПересчитатьЦеныНаСервре() // Этап 2. Преобразование основного реквизита формы в прикладной объект ДокументОбъект = РеквизитФормыВЗначение(«Объект»); // Этап 3. Вызов процедуры модуля объекта ДокументОбъект.ПрименитьСкидку(5); // Этап 4. Обратное преобразование прикладного объекта в реквизит формы ЗначениеВРеквизитФормы(ДокументОбъект, «Объект»); КонецПроцедуры
Когда пользователь нажимает на ту или иную кнопку, открывается или закрывается форма, записывается документ – возникает событие.
Программист может назначить на событие обработчик – функцию написанную на встроенном языке 1С, которая выполнит определенные действия при возникновении события.
Иногда возникает необходимость назначить обработчик сразу на несколько или все документы.
Например, в каждом документе у нас есть реквизит Ответственный (автор). Или мы добавили такой общий реквизит.
Перед записью каждого документа мы хотим проконтролировать, что данный реквизит заполнен.
Как это сделать?
Подписки на события 1С
Подписка на события 1С – это объект 1С, он находится в ветке конфигурации Общие/Подписки на события 1С.
Подписка на событие 1С позволяет назначить обработчик при наступлении события у любого нескольких объектов (справочников, документов).
Добавим новую подписку на событие 1С, установим название.
В свойстве подписки на событие 1С Источник – нужно выбрать один или несколько документов, справочников – объектов, на которые мы ставим обработчик.
В свойстве подписки на событие 1С Событие – нужно выбрать один из вариантов стандартных событий, которые могут произойти с выбранными документами и справочниками.
Мы упрощаем говоря «документы и справочники» — на самом деле можно использовать многие объекты 1С. К сожалению, нельзя подписаться на события 1С формы – например, при открытии формы, о чем жалеют многие программисты.
Набор возможных событий зависит от объекта. Будьте внимательны, так как если выбрать несколько (множество) объектов – то в списке событий будут только те события, которые могут быть у каждого из выбранных объектов (то есть общие для всех выбранных объектов события).
После этого остается создать функцию обработчик. Для этого в конфигурации должен быть общий модуль с установленной в свойствах галочкой Серверный. При нажатии кнопки «лупа» будет создана функция – обработчик.
Все! Мы только что подписались на событие 1С ПередЗаписью для всех документов. Теперь при записи любого документа будет выполняться наша функция, в которой прописана проверка.
Для того, чтобы отказать в записи документа, если проверка прошла отрицательно, нужно установить параметр функции
Отказ = Истина;
Последовательность в 1С Предприятие 8.3 – это объект метаданных, позволяющий контролировать хронологический порядок документов. Это важно при учете списания материалов, взаиморасчетах с контрагентами, например, при проведении документа оприходования задним числом будет некорректно определена стоимость ранее списанных материалов, так как при списании ТМЦ были проанализированы данные на момент проведения документа списания.
Внеся изменения в ранее введенные документы оприходования, есть риск получить искаженные данные. Неправильная последовательность проведения документов в 1С 8.3 по расчетам с контрагентами может привести к неверному зачету авансов полученных и множеству других ситуаций. Чтобы не возникло таких проблем, система должна контролировать это. При этом в программах 1С может быть реализовано множество различных последовательностей.
Если мы откроем 1С в режиме Конфигуратора и развернем узел «Документы» дерева метаданных, то увидим строку «Последовательности».
Рис.1 Здесь мы используем «1С:Бухгалтерия предприятия 3.0»Рис.2 Дерево «1С:Управление торговлей 11.3»
Данные последовательности описывают документы, входящие в нее, и определяют механизмы, позволяющие перепровести их при необходимости. Если мы откроем последовательность и перейдем на закладку «Использование», увидим список документов входящих в нее.
Рис.3 Пример в «1С:Бухгалтерии предприятия 3.0»
В 1С:УТ мы видим список регистров, влияющих на последовательность.
На этой же вкладке устанавливается режим перемещения границы последовательности при проведении. Возможны варианты «Перемещать» и «Не перемещать», определяющие возможность автоматического передвижения границы.
Восстановление последовательностей 1С
Откроем «1С:Бухгалтерия 3.0» в пользовательском режиме. В данной конфигурации важен контроль изменений – перепроведение и ввод «задним числом». Рассмотрим, как программа выполнит перепроведение с момента, когда было обнаружено нарушение.
При закрытии месяца
Для примера мы намеренно перепровели один документ. Выполняя процедуру, программа обнаружила нарушение, о чем сообщает пользователю и предлагает решение в виде перепроведения.
Рис.5 При «Закрытии месяца» автоматом контролируется правильность последовательности
При этом пользователь может выбрать, работает он с документами предыдущих периодов или только с текущими. Взятый для примера был изменен в текущем периоде – январе, поэтому мы смело ставим «Закрыть только Январь 2019».
Также перед закрытием мы можем принудительно выполнить перепроводку, нажав на соответствующую гиперссылку. В этом случае мы видим то же самое окошко с отличающимися вариантами действий. Система предлагает перепровести документы с января или же просто игнорировать предупреждение о нарушении последовательности, установив «Перепроведение не требуется».
Рис.6 Принудительное перепроведение
Нажатие по гиперссылке «1 документ», откроет отчет со списком измененных документов за период, и мы проанализируем, надо ли их перепровести.
Тут выбор за пользователем, но все же восстановление хронологии и перепроводка необходимы для подстраховки от неправильного расчета данных.
Перепроводка и установка границ в разделе «Все функции»
Можно использовать нашу стандартную обработку через раздел «Все функции». Если данный он недоступен, включить его можно в пункте меню «Сервис-Параметры», активировав команду ее отображения.
В «Стандартных» мы увидим нужный нам пункт.
Рис.9 Стандартные-Проведение
Восстановить границу можно на одноименной закладке и по одноименной команде. Это необходимо в том случае, если перепроведение не требуется, а нужно просто восстановить хронологию.
Рис.10 Восстановить хронологию
У нас граница на дате 01.01.0001. Поскольку мы видели в конфигураторе, что стоит режим – «Не перемещать», дата границы постоянно в одном положении и не изменяется.
Вернемся на закладку перепроведения. Установив период, с помощью кнопок «Добавить» (при необходимости «Удалить») выберем документы необходимые к проводке. Обратим внимание на галочки вверху. Отметим, что перепроводить мы будем только проведенные документы. Если имеются непроведенные документы, то лучше пользователю их проработать, просмотреть отдельно.
Рис.11 Если имеются непроведенные документы, то лучше пользователю их проработать, просмотреть отдельно
Нажав кнопку «Провести», выбранные документы перепроводятся в хронологической последовательности.
Обработка «Групповое перепроведение документов»
В разделе все функции доступна обработка «Группового перепроведения» (узел «Обработки»).
Рис.12 Групповое перепроведение документов
В данной обработке нет выбора документов, а указывается только период проведения.
Рис.13 В данной обработке нет выбора документов, а указывается только период проведения
Нажав кнопку «Выполнить», документы проводятся за выбранный период.
Несмотря на имеющийся выбор вариантов, первый рассмотренный нами способ – при поведении в закрытии месяца, является максимально удобным в «Бухгалтерии».
Пользователю надо обращать внимание на замечания программы о нарушении последовательности, для того чтобы все введенные документы в журналах, независимо от того, когда они были занесены, достоверно и без искажений отражали факты хозяйственной деятельности организации.
1С:Предприятие: настройка учета
При вводе документов возможны ошибки. Исключить вероятность их появления практически невозможно, хотя задачей бухгалтеров, естественно, является полное и своевременное отображение в программе всех хозяйственных операций . В связи с этим появляется необходимость исправления ранее созданных документов, удаления введенных по ошибке документов, перепроведения несвоевременно введенных документов.
Программа 1С:Предприятие дает возможность пользователям изменить документы «задним числом». Однако, идеология работы с документами при этом не должна быть нарушена. Основное правило, которым следует руководствоваться при вводе, изменении и удалении документов «задним числом» гласит: изменения не должны нарушать последовательность актов хоздеятельности предприятия, происходивших в действительности.
Недопустимо использование документов «задним числом» для отражения событий, относящихся к более поздним событиям. К примеру, если вечером покупатель вернул часть товара, а до этого днем была выписана расходная накладная, то нельзя вносить в расходную накладную исправления для уменьшения количества отгруженного товара на количество, возвращенное клиентом. В программе 1С относительно рассматриваемой ситуации заложено следующее: если изменить документ задним числом, то считается, что возвращенные товары после момента оформления расходной накладной были на складе и могли продаваться другим клиентам, хотя их не было на самом деле, поскольку они появились на складе только вечером. Соответственно, правильным будет отражение возврата товара отдельной операцией или документом.
Приведенное правило в управленческом учете распространяется на все документы, хранящиеся в информационной базе, а в бухгалтерском учете в периодах со сданной отчетностью недопустимо изменять документы и операции «задним числом»: ошибки рекомендуется исправлять в таких случаях способом красного сторно.
Перепроведение документов
Если необходимо внести изменения в документ «задним числом», то в системе 1С все документы, находящиеся за измененным документом, не перепроводятся автоматически, поскольку таких документов в информационной базе может быть достаточно много, и подобная операция занимает продолжительное время. Таким образом, изменение документов «задним числом» может привести к тому, что выполняемое последующими документами списание становится неверным.
Например, если в начале месяца неверно указана сумма приходной накладной, то сумма списания по расходным накладным, выписанным после этой приходной накладной, также будет неверной. Для правильного отражения в программе хозопераций, следующих за неверно отраженной, в системе 1С имеется возможность не только изменения документов «задним числом», но и их перепроведения. При перепроведении каждого документа заново выполняется анализ итогов на момент его расположения в журнале, что позволяет правильно отражают данные списания в учете. Естественно, имеет смысл перепроводить только те документы, которые отражают текущие итоги.
Механизм установления «последовательности» документов используется в конфигурациях программы 1С, для которых контроль ввода документов «задним числом» особенно критичен. Этот механизм автоматически контролирует все произведенные «задним числом» изменения документов, влияющие на проведение последующих документов. Он позволяет осуществить с нужного момента проведение всех документов, нуждающихся в перепроведении. Контроль необходимости перепроведения документов в этих конфигурациях производится также при формировании отчетов.
Что такое Последовательность Документов?
При перепроведении в конфигурации 1С:Бухгалтерия можно использовать стандартный режим проведения документов , избрав интервал, который соответствует определенному отчетному периоду, и выбрав все возможные виды уже проведенных документов.
Другие материалы по теме:
режим проведения документа, отрицательные остатки, перепроведение документов, последовательность документов, задним числом, последовательность, 8.2, 7.7, документ
Оператор выполняет безусловный адресный переход к другой строке программы
Синтаксис
Оператор Перейти имеет следующий синтаксис:
Перейти ~ИдентификаторМетки; //операторы ~ИдентификаторМетки: //операторы
А также альтернативный англоязычный синтаксис:
Goto ~Label; //operators ~Label: //operators
Описание
Оператор Перейти используется для немедленного безусловного перехода к оператору программы, расположенному на другой строке. Для этого целевая строка отмечается специальным символьным идентификатором — меткой. Метка может располагаться как до оператора Перейти (в этом случае будет осуществлен переход назад), так и после него (будет осуществлен переход вперед).
Связанные друг с другом оператор перехода и метка должны располагаться в одном программном модуле. Если оператор используется в теле процедуры или функции, то и метка должна располагаться в теле этой же процедуры или функции.
На использование оператора Перейти накладываются жесткие ограничения:
- оператор нельзя использовать для перехода к метке, объявленной за пределами программного модуля. При нарушении этого ограничения синтаксический анализатор выдаст ошибку: «Метка не определена (имя метки)»;
- оператор нельзя использовать для перехода к метке, объявленной за пределами процедуры или функции. При нарушении этого ограничения синтаксический анализатор выдаст ошибку: «Метка не определена в процедуре (имя метки)»;
- оператор нельзя использовать для перехода извне к метке, объявленной внутри условных или управляющих операторов, а также оператора управления исключениями. При нарушении этого ограничения синтаксический анализатор выдаст ошибку: «На метку с указанным именем имеется недопустимый переход (имя метки)»;
Эти ограничения связаны с тем, что неумелое использование данного оператора может привести к появлению трудно обнаруживаемых ошибок. Но оператор Перейти можно и нужно использовать в особых случаях, например, для досрочного прекращения цикла.
Пример использования
Пример кода с использованием оператора Перейти
//поиск значения в таблице Для НомерСтроки = 1 По Таб.ВысотаТаблицы() Цикл Для НомерКолонки = 1 По Таб.ШиринаТаблицы() Цикл Если Таб.Область(НомерСтроки, НомерКолонки).Текст = СокрЛП(СтрокаДляПоиска) Тогда Предупреждение(Шаблон(«Значение найдено RC»), 5); Перейти ~Выход; КонецЕсли; КонецЦикла; КонецЦикла; Предупреждение(«Значение не найдено!», 5); ~Выход: