чем отличается передзаписью и призаписи в 1с

Чтобы выяснить этот вопрос, Вы можете разместить вывод сообщений в указанных процедурах и посмотреть, в каком порядке они запускаются.

Последовательность запуска процедур будет выглядеть следующим образом:
Форма. Перед записью.
Модуль. Перед записью.
Модуль. При записи.
Модуль. Обработка проведения.
Форма. При записи.
Форма. После записи.
При простой интерактивной записи документа (без проведения) порядок будет тот-же, за исключением процедуры ОбработкаПроведения(), которая в режиме записи не запускается. А при отмене проведения вместо нее запускается процедура ОбработкаОтменыПроведения();

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

Вывод: Если Вы хотите провести какие-то проверки в процессе оформления документа (т.е. пока он открыт у пользователя), и не хотите, чтобы они выполнялись например при регламентном перепроведении документов, то их следует располагать в модуле формы документа. В противном случае, если надо эти проверки проводить всегда, то код целесообразно разместить в модуле документа. Но при этом надо помнить, что в серверном варианте работы БД код модуля документа выполняется на сервере, поэтому обязательно надо помнить, какие методы программы работают на сервере, а какие нет.

Источник

1С 8.2 УП : Обработчики событий при записи объектов. Зачем и что за чем?

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

Для чего нам вообще нужны эти обработчики?
Очень часто программисту требуется переопределить стандартное поведение системы во время записи объектов, а именно: отменить запись, в случае каких-то условий; запросить дополнительную информацию у пользователя; дозаполнить реквизиты; что-то ещё записать в базу данных на основании этой записи; что-то изменить на форме после записи и т.д. и т.п. Каждый программист рано или поздно сталкивается с подобными задачами, потому знать назначение и последовательность запуска этих событий программисту, работающему на платформе 1С 8.2, необходимо.

В модуле формы или в модуле объекта?
Сначала надо определиться нужны ли нам данные формы? Будет ли запись записываться программным способом или только интерактивно? Будем ли вести диалог с пользователем?
Дело в том, что часть событий выполняется на уровне модуля формы и это значит, что они выполняются только при интерактивной записи, а также в этих событиях мы можем обращаться к данным формы, вести диалог с пользователем.
Другая часть событий выполняется на уровне модуля объекта, как при интерактивной, так и при программной записи.
Потому можно сразу определиться с обработчиком модуля формы или модуля объекта будем работать.

Модуль формы: на клиенте или на сервере?
Далее, если выбран модуль формы, то надо определиться какой обработчик потребуется: исполняемый на клиенте, или исполняемый на сервере. Если потребуется диалог с пользователем, то на клиенте, в противном случае на сервере. Их можно отличить по имени директивы компиляции или по имени обработчика (когда на сервере, это пишется в имени, например ПередЗаписьюНаСервере()).

Как выбрать конкретный обработчик?
Выбор зависит от поставленной задачи. Что конкретно можно делать в каждом обработчике опишу ниже, а пока пример.

Источник

Обработчики событий при записи объектов. Зачем и что за чем?

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

Для чего нам вообще нужны эти обработчики?
Очень часто программисту требуется переопределить стандартное поведение системы во время записи объектов, а именно: отменить запись, в случае каких-то условий; запросить дополнительную информацию у пользователя; дозаполнить реквизиты; что-то ещё записать в базу данных на основании этой записи; что-то изменить на форме после записи и т.д. и т.п. Каждый программист рано или поздно сталкивается с подобными задачами, потому знать назначение и последовательность запуска этих событий программисту, работающему на платформе 1С 8.2, необходимо.

В модуле формы или в модуле объекта?
Сначала надо определиться нужны ли нам данные формы? Будет ли запись записываться программным способом или только интерактивно? Будем ли вести диалог с пользователем?
Дело в том, что часть событий выполняется на уровне модуля формы и это значит, что они выполняются только при интерактивной записи, а также в этих событиях мы можем обращаться к данным формы, вести диалог с пользователем.
Другая часть событий выполняется на уровне модуля объекта, как при интерактивной, так и при программной записи.
Потому можно сразу определиться с обработчиком модуля формы или модуля объекта будем работать.

Модуль формы: на клиенте или на сервере?
Далее, если выбран модуль формы, то надо определиться какой обработчик потребуется: исполняемый на клиенте, или исполняемый на сервере. Если потребуется диалог с пользователем, то на клиенте, в противном случае на сервере. Их можно отличить по имени директивы компиляции или по имени обработчика (когда на сервере, это пишется в имени, например ПередЗаписьюНаСервере()).

Как выбрать конкретный обработчик?
Выбор зависит от поставленной задачи. Что конкретно можно делать в каждом обработчике опишу ниже, а пока пример.

Источник

Записать() в процедуре ПередЗаписью()

Доброго времени суток, Уважаемые!
Понадобилось мне при записи группы номенклатуры с определенным признаком проставить данный признак у всех элементов группы.
Написала код:

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

Но смущает меня, что в процедуре ПередЗаписью() снова вызывается запись. Говорят, некошерно.. Посоветуйте что-нить

(0) >> проставить данный признак у всех элементов группы

(15) >> Ты из принципа только сабж читаешь, (0) скрыт скриптом?

Что не так? Я где-то не прав?

Какая разница меняется он или нет? Он записывается.

В обработчике ПриЗаписи у первого же элемента из выборки в этом цикле ты собрался менять како-то поле. У этого элемента (который уже как раз меняется) обработчик ПриЗаписи по-твоему не будет выполняться?

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

Вообще обсуждать нечего. В (0) авнокод.
Таких вещей не следует делать не в ПриЗаписи не в ПередЗаписью.

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

Источник

Корректировка движений регистра (Проведение без Проведения)

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

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

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

Не претендуя на оригинальность самой идеи отменять транзакцию, тем не менее хочу представить работающий алгоритм (для конфигураций 1С 8.1/8.2). Возможно, кому-то пригодится в работе. Мне он помогал ещё в нескольких случаях.

В примере приводится проведение по регистру накопления «Размещение». Это регистр был добавлен в конфигурацию и не относится к типовым. Алгоритм легко переделать на другой (другие) нужный регистр. Как с любыми операциями с регистрами, и этой операцией тоже следует пользоваться аккуратно )

Текст самих процедур (8.1/8.2)

//отбираем все проведенные документы, которые могут делать движения по нужному нам
//регистру (РегистрыНакопления.Размещение)
//за указанный период с Дата1 по Дата2

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

Решение похожей задачи (но другим способом) для платформы 7.7 описано в статье «Технологическое перепроведение документов»

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *