1с удалить движения у непроведенных документов
При подготовке к экзамену 1С:Специалист по платформе вам придется разобраться в “старой” и “новой” методиках проведения документов (На нашем сайте есть отличная бесплатная статья на эту тему). В противном случае каша в голове вам гарантирована!
Вопрос
Подскажите, пожалуйста, в некоторых случаях в начале обработки проведения движения в регистр записываем, а в некоторых очищаем. Вопрос: в каких случаях надо очищать, а в каких записывать?
Ответ
Здравствуйте! Предварительное удаление существующих движений документа в базе данных требуется только при проведении документа по “старой” методике, когда сначала выбираются остатки регистра, а затем формируются новые движения. Это удаление старых движений нужно для того, чтобы они не влияли на результат выборки остатков и не искажали реальную картину при перепроведении существующего документа будущей датой.
Если же документ проводится по “новой” методике, когда движения сначала записываются в базу данных, а затем проверяется корректность состояния базы данных (в частности, наличие отрицательных остатков), принудительно удалять старые движения не требуется – новые движения при записи затрут старые.
В обработке проведения мы работаем с объектом Движения, который находится в памяти. По умолчанию (если не делать специально дополнительных настроек) в конфигурациях на управляемых формах (именно такие конфигурации используются сейчас на экзамене) в объект Движения не подгружаются существующие движения документа из базы данных. Поэтому все входящие в него наборы записей регистров пусты – не содержат записей – и выполнять их очистку нет смысла. Можно сразу записать все или некоторые наборы записей регистров из объекта Движения – так как они пусты, будет произведена запись пустых наборов записей, то есть фактически очистка существующих движений в базе данных.
Предварительная очистка наборов записей объекта Движения (Движения.ИмяРегистра.Очистить()) – для целей удаления существующих движений из базы данных – не является грубой ошибкой, но нежелательна, так как может быть расценена как недочет, лишнее действие и указывать на недостаток опыта работы с управляемыми формами.
Очистка некоторых наборов записей регистров в объекте Движения может понадобиться по логике проведения документа. Поэтому в некоторых случаях команда Движения.ИмяРегистра.Очистить() уместна и оправдана. Однако, повторюсь, если не сделано специальных настроек, и требуется лишь удалить существующие движения документа из базы данных, использовать команду Движения.ИмяРегистра.Очистить() нет необходимости.
Нередко при работе с 1С возникают ситуации, когда у непроведенных или помеченных на удаление документов остаются движения в регистрах. Данная обработка помогает автоматизировать процесс нахождения и удаления таких движений. UPD. 07.11.14 Добавлена версия только для управляемого приложения.
Основные особенности обработки:
1. Работает как на обычных, так и на управляемых формах
2. Гибкая настройка обработки, позволяющая удалять движения только по определенным регистрам или по определенным документам
3. Автоматический поиск документов - исключений, то есть документов которые являются регистраторами в регистрах, но в свойство "Проведение" = Запретить. Примером может являтся документ "Бухгалелская операция" из бухгалтерии или документ "Корректировка регистров". По умолчанию по таким документам поиск ошибочных движений не ведется.
UPD. 07.11.14 Добавлена версия только для управляемого приложения. Дело в том, что как выяснилось на последних версиях платформы идет синтаксическая проверка модуля обработки перед ее открытием, поэтому выкладываю файл обработки работающий только под управляемыми формами (выпелил код для обычных форм).
Специальные предложения
Не работает в варианте клиент-сервер. Платформа 8.3.5, БП 3.0, УФ
Ошибка инициализации модуля: ВнешняяОбработка.УдалениеДвиженийУПомеченныхНаУдалениеИНепроведенныхДокументо в.МодульОбъекта
по причине:
: Переменная не определена (РежимДиалогаВопрос)
Ответ = Вопрос(ТекстВопроса, >РежимДиалогаВопрос.ДаНет);
: Переменная не определена (РежимДиалогаВопрос)
Ответ = Вопрос(ТекстВопроса, >РежимДиалогаВопрос.ДаНет);
: Переменная не определена (КодВозвратаДиалога)
Если Ответ = >КодВозвратаДиалога.Нет тогда
: Переменная не определена (КодВозвратаДиалога)
Если Ответ = >КодВозвратаДиалога.Нет тогда
: Процедура или функция с указанным именем не определена (Вопрос)
Ответ = >Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
: Процедура или функция с указанным именем не определена (Вопрос)
Ответ = >Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
: Процедура или функция с указанным именем не определена (ОбработкаПрерыванияПользователя)
>ОбработкаПрерыванияПользователя();
: Процедура или функция с указанным именем не определена (ОбработкаПрерыванияПользователя)
>ОбработкаПрерыванияПользователя();
Привет!
При установке пометки на удаление или при отмене проведения документа движения в регистре не очищаются. При этом флаг "Автоматическое удаление движений" стоит.
Из-за чего так может быть?
(0) в 7.7 такого быть не может. И галка на этот процесс никак не влияет.
Поэтому, одна из черепашек врёт
из-за этого при попытке провести этот документ, база отваливается с ошибкой SQL, что запись в таблице регистра неуникальна
Эта фигня возникает на некоторых документах, при проведении программа спрашивает "Провести задним числом или изменить время документа?". И при любом ответе возникает *опа
Короче, или через QA, или обработкой очисти записи во всех Ra*, там, где closed у документа = 0, потом, обработкой пересчитай итоги.
Профит
Очистить движения в SQL получается. Но не могу понять, ПОЧЕМУ так происходит и как этого избежать.
Перенесла ТА на месяц вперед, документы стали нормально проводиться и распроводиться, движения удаляются. Если же снова дата документа = ТА, то при оперативном проведении движения записываются, но документ в журнале выглядит как непроведенный и система его распознает как непроведенный.
(27) Ошибки же есть при этом при проведении ?
Всё проведение дока идёт в одной транзакции. Не должно быть там зависших движений при невозможности апдейта _1sjourn
Еще такая тема.
Если у документа вручную изменить дату и провести - ОК.
Но если у этого же документа попытаться программно изменить дату, то выводится ошибка:
Ошибка обновления записи
При изменении прочих реквизитов документ сохраняется успешно
(32) каким образом ты программно дату меняешь ? В 7.7 штатно можно менять дату только у НЕ проведенного документа
(37) Медленно (по слогам не буду, извини). Проведённому документу менять дату нельзя. Его распровести надо. Поменять дату. Потом провести.
а вот это нахрена ?
(51) ВЫбДокумент получаю через НайтиДокумент()
ВыбДокумент.НайтиДокумент(тз.Ссылка);
И ранее ты его не заблокировала случайно. В УРБД не помню, вроде был флаг на изменение документа только в в центре или месте создания.
(62) Сообщить(ВыбДокумент.Блокировка()) Перед записать что сообщает. Запусти эту обработку в монопольном режиме.
На фотке 5 строками выше как по мне два удаленных документа с точно такими же номерами. контроль уникальность номеров отключена что ли или база глюкнула
Анахрена такие телодвижения:
(78) оно аналогично ПКМ-Движения документа.
Если только там не своя обработка для просмотра движений регистра
И там тоже будет залочено, если документ не проведен
(78) кто же тебя знает, на каком ты документе споцизионирована в этот момент.
в клюшках все до ужаса просто.
есть ОбработкаПроведения, есть ОбработкаУдаленияПроведения пока нет текстов этих процедур, весь разговор - безсмысленен.
(79) так я разными способами пыталась предварительно очистить движения. Это уже изврат, согласна, но это эксперименты. Что с ними, что без них не рабоатет
на вот, тест на вшивость, а то тебе веры нет
Пока не могу предоставить пример, потому что вчера вычистили все такие движения:
(22) Короче, или через QA, или обработкой очисти записи во всех Ra*, там, где closed у документа = 0
новых косячных еще не сгенерировала, т.к. после переноса точки актуальности на более позднюю дату, косяков с движениями не стало
трэш и угар какой-то в обработке.
еще и прямой запрос прилепили непонятно зачем, чорным можно обойтись.
.
ну и для начала - ввиду того что мудрячат что-то с прямыми запрсоами - проверить есть ли у непроведенных доков движения. почитстить их для непроведенных. а потом делать все по порядку с ДатаКорр и ДатаДок.
.
главное - не митуситься.
Обработка позволяет делать как полное, так и выборочное удаление движений документов в 1С.
- Бухгалтерия предприятия 3.0
- Управление торговлей 11.4, 11.5
- Управление предприятием ERP 2.4, 2.5
- Зарплата и управление персоналом 3.1
- Комплексная автоматизация 2.4, 2.5
- Розница 2.2, 2.3
- Управление нашей фирмой 1.6
Наверняка, у вас есть много вопросов относительно оплаты (как оплатить, как получить разработку, не возникнут ли проблемы и т.п.).
Ответы на самые распространенные вопросы, относящиеся к процессу покупки моих разработок, приведены на странице заказа. Для перехода к ней нажмите Оплатить картой или Заказать счет .
Там же вы найдете мои контакты, на случай если останутся вопросы.
Необходимость принудительно удалить движения документа возникает достаточно редко - в 99% случаев достаточно отменить проведение документа. Однако бывают ситуации, когда отмена проведения (и даже пометка на удаление) не помогают, движения не удаляются.
Для таких курьезных случаев и предназначена эта обработка. Она позволяет удалять движения ЛЮБЫХ документов в ЛЮБЫХ конфигурациях с управляемыми формами.
На форме обработки выбираем нужный документ (вначале выбирается тип документа) и нажимаем Удалить движения .
Если нужно удалить не все движения документа, то удаляем из списка те из них, которые необходимо сохранить.
Обработка позволяет удалять движения у документов в любом статусе - проведен, не проведен, помечен на удаление.
Обращаю ваше внимание, что перепроведение исходных документов восстанавливает их движения. Пользуясь разработкой, отдавайте себе отчет в том, что делаете.
Вас может заинтересовать
Произвольная отправка уведомлений выбранным пользователям о создании новых справочников и документов в базе.
Расширение позволяет навести порядок с вводом телефонных номеров партнеров, контактных лиц, контрагентов и физических лиц. Дополнительно можно включить контроль уникальности телефонного номера перед записью элемента справочника.
Запрет бессмысленного перепроведения документов пользователями в том случае, когда они просто хотят закрыть документ, нажимая Провести и закрыть.
Нередко при работе с 1С возникают ситуации, когда у непроведенных или помеченных на удаление документов остаются движения в регистрах. Данная обработка помогает автоматизировать процесс нахождения и удаления таких движений. UPD. 07.11.14 Добавлена версия только для управляемого приложения.
Основные особенности обработки:
1. Работает как на обычных, так и на управляемых формах
2. Гибкая настройка обработки, позволяющая удалять движения только по определенным регистрам или по определенным документам
3. Автоматический поиск документов - исключений, то есть документов которые являются регистраторами в регистрах, но в свойство "Проведение" = Запретить. Примером может являтся документ "Бухгалелская операция" из бухгалтерии или документ "Корректировка регистров". По умолчанию по таким документам поиск ошибочных движений не ведется.
UPD. 07.11.14 Добавлена версия только для управляемого приложения. Дело в том, что как выяснилось на последних версиях платформы идет синтаксическая проверка модуля обработки перед ее открытием, поэтому выкладываю файл обработки работающий только под управляемыми формами (выпелил код для обычных форм).
Специальные предложения
Не работает в варианте клиент-сервер. Платформа 8.3.5, БП 3.0, УФ
Ошибка инициализации модуля: ВнешняяОбработка.УдалениеДвиженийУПомеченныхНаУдалениеИНепроведенныхДокументо в.МодульОбъекта
по причине:
: Переменная не определена (РежимДиалогаВопрос)
Ответ = Вопрос(ТекстВопроса, >РежимДиалогаВопрос.ДаНет);
: Переменная не определена (РежимДиалогаВопрос)
Ответ = Вопрос(ТекстВопроса, >РежимДиалогаВопрос.ДаНет);
: Переменная не определена (КодВозвратаДиалога)
Если Ответ = >КодВозвратаДиалога.Нет тогда
: Переменная не определена (КодВозвратаДиалога)
Если Ответ = >КодВозвратаДиалога.Нет тогда
: Процедура или функция с указанным именем не определена (Вопрос)
Ответ = >Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
: Процедура или функция с указанным именем не определена (Вопрос)
Ответ = >Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
: Процедура или функция с указанным именем не определена (ОбработкаПрерыванияПользователя)
>ОбработкаПрерыванияПользователя();
: Процедура или функция с указанным именем не определена (ОбработкаПрерыванияПользователя)
>ОбработкаПрерыванияПользователя();
Читайте также: