Доброго дня, коллеги!
При подготовке к экзамену 1С:Специалист по платформе вам придется разобраться в “старой” и “новой” методиках проведения документов (На нашем сайте есть отличная бесплатная статья на эту тему). В противном случае каша в голове вам гарантирована!
Вопрос
Ответ
Здравствуйте! Предварительное удаление существующих движений документа в базе данных требуется только при проведении документа по “старой” методике, когда сначала выбираются остатки регистра, а затем формируются новые движения. Это удаление старых движений нужно для того, чтобы они не влияли на результат выборки остатков и не искажали реальную картину при перепроведении существующего документа будущей датой.
Если же документ проводится по “новой” методике, когда движения сначала записываются в базу данных, а затем проверяется корректность состояния базы данных (в частности, наличие отрицательных остатков), принудительно удалять старые движения не требуется – новые движения при записи затрут старые.
*
В обработке проведения мы работаем с объектом Движения, который находится в памяти. По умолчанию (если не делать специально дополнительных настроек) в конфигурациях на управляемых формах (именно такие конфигурации используются сейчас на экзамене) в объект Движения не подгружаются существующие движения документа из базы данных. Поэтому все входящие в него наборы записей регистров пусты – не содержат записей – и выполнять их очистку нет смысла. Можно сразу записать все или некоторые наборы записей регистров из объекта Движения – так как они пусты, будет произведена запись пустых наборов записей, то есть фактически очистка существующих движений в базе данных.
*
Предварительная очистка наборов записей объекта Движения (Движения.ИмяРегистра.Очистить()) – для целей удаления существующих движений из базы данных – не является грубой ошибкой, но нежелательна, так как может быть расценена как недочет, лишнее действие и указывать на недостаток опыта работы с управляемыми формами.
*
Очистка некоторых наборов записей регистров в объекте Движения может понадобиться по логике проведения документа. Поэтому в некоторых случаях команда Движения.ИмяРегистра.Очистить() уместна и оправдана. Однако, повторюсь, если не сделано специальных настроек, и требуется лишь удалить существующие движения документа из базы данных, использовать команду Движения.ИмяРегистра.Очистить() нет необходимости.
Подготовка к аттестации 1С:Специалист по платформе 1С:Предприятие 8.3.
Добрый день.
Хотел бы уточнить : в данной статье говорится о том, что команда Движения.ИмяРегистра.Очистить() – скорее исключение при проведении по новой методике и Движения.Записать() обеспечивает “затирание” прежних движений документа новыми. Однако в Вашей же статье по приведенной ссылке, описывающей различия между старой и новой методиками(
https://xn—-1-bedvffifm4g.xn--p1ai/articles/2017-02-12-two-methods-for-inventory-check/ ) эта самая очистка все же присутствует в новой методике:
// 2. Формирование движений-расход регистра
Движения.СвободныеОстатки.Очистить();
ВыборкаТовары = РезультатЗапроса.Выбрать();
Пока ВыборкаТовары.Следующий() Цикл
Движение = Движения.СвободныеОстатки.ДобавитьРасход();
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаТовары.Номенклатура;
Движение.Количество = ВыборкаТовары.Количество;
КонецЦикла;
Не могли бы пояснить, зачем она там необходима?
Добрый день, когда была написана данная статья (2017 год) на экзамене можно было использовать обычные формы. При открытии обычной формы текущие движения прочитывались и содержались в Движения.ИмяРегистра. Если их не очистить, то после записи движений у документа будут старые и новые движения по регистрам.
Спасибо!!