1с очистить движения документа программно

Обновлено: 04.07.2024

В некоторых типовых конфигурациях фирмы 1С существует возможность ручной корректировки движений документа по регистрам. В конфигурации 1С: Бухгалтерия 8 для этого, при наличии соответствующих прав, нужно открыть движения документа и установить флаг “Ручная корректировка”. Однако, иногда возникает необходимость выполнить корректировку движений большого количества документов. В этом случае нам понадобится обработка, которая изменит движения документов без перепроведения.

Рассмотрим как изменить движения документа на примере конфигурации 1С: Бухгалтерия 8. Менять будем движения по регистру бухгалтерии “Хозрасчетный”. Пусть перед нами стоит задача заполнить суммы налогового учета по данным бухгалтерского. Предположим, что у нас уже есть обработка, которая выбирает необходимые нам документы и последовательно обрабатывает их с помощью описанной нами процедуры “ИзменитьДвиженияДокумента”. Посмотрим как должна выглядеть эта процедура.

Процедура ИзменитьДвиженияДокумента ( ДокументСсылка )
// прочитаем набор записей регистра по документу
НаборЗаписей = РегистрыБухгалтерии . Хозрасчетный . СоздатьНаборЗаписей ( ) ;
НаборЗаписей . Отбор . Регистратор . Установить ( ДокументСсылка ) ;
НаборЗаписей . Прочитать ( ) ;

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

Хотелось бы отметить, что без проверки ведения налогового учета на счёте, при попытке записать набор, содержащий проводку с ненулевой суммой по счёту на котором не ведется налоговый учет, возникнет ошибка следующего содержания:

Запись не верна! Поле “Сумма (налоговый учет)” должно быть пустым! (Регистр бухгалтерии: Журнал проводок (бухгалтерский и налоговый учет); Номер строки: 1)

Режим обмена данными устанавливается следующими строками:

. . .
НаборЗаписей . ОбменДанными . Загрузка = Истина ;
. . .
ДокументОбъект . ОбменДанными . Загрузка = Истина ;
. . .

Это необходимо для того, чтобы не выполнялся программный код, находящийся в обработчиках событий “ПередЗаписью” модуля набора записей регистра бухгалтерии “Хозрасчетный” и модуля корректируемого документа. В каждом из них (для типовых конфигураций) есть проверка следующего вида:

Если ОбменДанными . Загрузка Тогда
Возврат ;
КонецЕсли ;

Движения документа отредактированы вручную и не могут быть автоматически актуализированы

Статья найдена на просторах интернета

Люди кончают самоубийством оттого, что получают по почте одну рекламу.

— Фредерик Бегбедер

Задача: Перебрать все регистры накопления, выявить непроведенные регистраторы и удалить движения.

В цикле собираю мега-запрос ко всем регистрам накопления, группирую по регистратору и имени регистра.

Создаю набор записей, устанавливаю отбор по регистратору и записываю набор.


Тестировал на платформе 1С:Предприятие 8.3 (8.3.14.1565)

Обработка универсальная, будет работать на любой конфигурации. Открывается через "Файл" - "Открыть".

Универсальное удаление движений по регистру накопления по всем непроведенным документам:

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

Ваша обработка ошибочно удалит движения документов, у которых отключено проведение (Проведение = Запретить в конфигураторе). На достаточно большой базе будет либо неоправданно долго работать, либо упадет из-за недостатка памяти вот из-за этой строки:
Не Регистр.Регистратор.Проведен Ну еще и "Выбрать различные" вместо "Выбрать" нужно и "Объединить" вместо "Объединить все".

(3) Протестировал. Если добавить "Выбрать различные", то 1с предприятие падает с ошибкой.
The query processor ran out of internal resources and could not produce a query plan.
This is a rare event and only expected for extremely complex queries or queries that reference a very large number of tables or partitions.
Please simplify the query. If you believe you have received this message in error, contact Customer Support Services for more information.

А в "Объединить" не вижу смысла, т.к. результаты запросов будут разные по двум измерениям "имя регистра" и регистратор.

The query processor ran out of internal resources and could not produce a query plan
Ошибка заключается в том, что SQL отказался с Вами играть и попросил переделать запрос Не проще написать: РегистрыНакопления[<ИмяРегистра>].СоздатьНаборЗаписей(); ?

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

так правильнее будет или нет?

(6) Можно было и таким путем пойти. Но у меня была цель универсальность. Если со временем добавят новые документы и новые регистры. Мой метод будет работать.

Как итог, самые большие проблемы в запросе. Если запустить Вашу обработку на системах с таблицами более миллиона записей, с несколькими регистраторами, то DBA Вам по пальцам настучит.

(8)Спасибо за подробный разбор.
1. Исправил.
4. Так сразу падает 1с. Выше писал(4)
5. Убрал. Решал другую задачу.
7. Убрал (11) п.2 и 3 особо критичны.
п.4 будет работать после исправления п.2 и п.3 (12) Каким образом можно убрать конструкцию Регистр.Регистратор.Проведен, если мне нужны все непроведенные документы? (13)ограничением типа документа и объединение со всеми типами.
Не забывайте, что mssql имеет ограничение на 256 таблиц.
В конструкции регистратор. Проведён будет неяное соединение с каждой таблицей составного типа для каждой записи

Давно такого говнокода не попадалось)

При подготовке к экзамену 1С:Специалист по платформе вам придется разобраться в “старой” и “новой” методиках проведения документов (На нашем сайте есть отличная бесплатная статья на эту тему). В противном случае каша в голове вам гарантирована!

Вопрос

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

Ответ

Здравствуйте! Предварительное удаление существующих движений документа в базе данных требуется только при проведении документа по “старой” методике, когда сначала выбираются остатки регистра, а затем формируются новые движения. Это удаление старых движений нужно для того, чтобы они не влияли на результат выборки остатков и не искажали реальную картину при перепроведении существующего документа будущей датой.

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

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

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

Очистка некоторых наборов записей регистров в объекте Движения может понадобиться по логике проведения документа. Поэтому в некоторых случаях команда Движения.ИмяРегистра.Очистить() уместна и оправдана. Однако, повторюсь, если не сделано специальных настроек, и требуется лишь удалить существующие движения документа из базы данных, использовать команду Движения.ИмяРегистра.Очистить() нет необходимости.

3. Автоматический поиск документов - исключений, то есть документов которые являются регистраторами в регистрах, но в свойство "Проведение" = Запретить. Примером может являтся документ "Бухгалелская операция" из бухгалтерии или документ "Корректировка регистров". По умолчанию по таким документам поиск ошибочных движений не ведется.

UPD. 07.11.14 Добавлена версия только для управляемого приложения. Дело в том, что как выяснилось на последних версиях платформы идет синтаксическая проверка модуля обработки перед ее открытием, поэтому выкладываю файл обработки работающий только под управляемыми формами (выпелил код для обычных форм).

Удаление движений у помеченных на удаление и непроведенных документов Удаление движений у помеченных на удаление и непроведенных документов. ТОЛЬКО УПРАВЛЯЕМОЕ ПРИЛОЖЕНИЕ

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

Не работает в варианте клиент-сервер. Платформа 8.3.5, БП 3.0, УФ

(2) Йожкин Кот, я не поленился потратить 5 минут и разобраться в чем проблема. Скачивайте новый файл, все должно работать.

УПП 1.3.61.1 \ 1С:Предприятие 8.3 (8.3.5.1231)

Добрый день обработка выдает ошибку (обычные формы):
: Значение не является значением объектного типа (СтандартныеРеквизиты)
ОписаниеТиповРегистратор = МетаданныеРегистр.СтандартныеРеквизиты.Регистратор.Тип;

Конфигурация:Зарплата и кадры бюджетного учреждения, редакция 1.0 (1.0.81.2)

С чисткой по битым ссылкам будет как-то так :) Просто нужно было срочно дать дружественному буху инструмент svilsa; jo0506; user766922; EugeneMIPT; lilac_carp; YNik; nastasya.89; intelligentvadik; texosn; nad0_hto; + 10 – Ответить

Просмотры 19648

Загрузки 244

Рейтинг 7

Создание 03.10.14 12:31

Обновление 07.11.14 11:47

№ Публикации 305625

Конфигурация Конфигурации 1cv8

Операционная система Не имеет значения

Вид учета Не имеет значения

Доступ к файлу Абонемент ($m)

Код открыт Не указано


См. также

Конвертация любых адресов, написанных в свободной форме, к ФИАС Промо

Допустим у нас есть база с адресами клиентов, и написаны они могут быть как душе угодно. С опечатками, без индексов, без разделителей, в совершенно любом формате. Вот было бы здорово иметь функцию, которая одним нажатием кнопки преобразует любую белиберду к строгому представлению адреса по ФИАС? Восстановит индекс, исправит опечатки и вернёт на 100% валидный адрес. Для всех, кто мечтательно сказал "ДА!", выкладываю данную обработку.

2 стартмани

30.06.2020 7694 68 XilDen 15

Управление платформенными обработками (расширение для типовых)

Расширение использует недокументированную возможность для управления платформенными обработками. Например, чтобы подменить "Активные пользователи" или доработать "Конструктор запросов".

1 стартмани

07.10.2021 3384 5 SeiOkami 23

Панель команд текущего объекта (документа, справочника и т.д.) со следующим возможностями: Редактор реквизитов, таблиц и движений текущего объекта, Анализ прав доступа к текущему объекту, Поиск ссылок на объект с отборами, Сторно движений документа, Выгрузка/загрузка текущего объекта между базами. Реализована всплывающей панелью в форме объекта. Подключается как расширение конфигурации (*.cfe) либо отдельными обработками.

1 стартмани

01.05.2020 15306 112 sapervodichka 1

Свертка БД 1С: обрезка до выбранной даты средствами MS SQL

Внешняя обработка, позволяющая произвести анализ размера БД и грубую обрезку данных до выбранной даты средствами MS SQL. Управляемые формы, 1С:Предприятие 8.3 (8.3.9.1818).

1 стартмани

15.11.2019 23288 271 dmitrydemenew 44

Удаление и/или копирование сохраненных в 1С настроек (например настроек печати табличных форм) Промо

Иногда нужно удалить сохраненную в 1С "покореженную" настройку или скопировать "удачную" другому пользователю.

1 стартмани

01.09.2012 66888 1378 AnryMc 46

Работа с файлами (обычная и управляемая форма)

Нужно загрузить файл с клиента на сервер или же, наоборот, файл загрузить с сервера на клиент, а впридачу все это на web-клиенте, да еще и асинхронно? Нет ничего проще, читай далее, как это сделать!

1 стартмани

10.06.2019 41641 222 Xershi 77

Электронная таблица средствами 1С (Версия 2.0)

Функционал электронной таблицы для программ на платформе 1С реализован на основе табличных документов. Функционал реализован в виде обработки. Большую часть формы обработки занимают листы (закладки) с табличными документами, которые выполняет роль электронной таблицы. Листы могут быть добавлены, удалены или переименованы. Ограничение по количеству листов определяется возможностью платформы. В формулах электронной таблицы можно использовать любые языковые конструкции, процедуры и функции 1С, ссылки на другие ячейки электронной таблицы расположенные в том числе и на других листах. Допустимо обращаться к ячейкам электронной таблицы по имени именованной области. В случае использования в формулах электронной таблицы данных из самой таблицы пересчет зависимых ячеек с формулами производится автоматически. Электронную таблицу можно сохранить в файл.

1 стартмани

23.04.2019 23815 78 user706545_kseg1971 40

Редактор объектов информационной базы 8.3

Универсальная внешняя обработка для редактирования реквизитов и табличных частей объектов информационной базы, редактирование движений документов. Доступ ко всем реквизитам объектов, есть возможность выгрузки и загрузки данных (объекты и движения документов) через XML. Платформа 8.3, управляемые формы. Версия 1.1.0.57 от 09.10.2021

2 стартмани

23.01.2019 43327 486 ROL32 50

Очистка кэша 1С 8 (8.0, 8.1, 8.2, 8.3). Грамотная чистка кэша 1С с сохранением настроек. Промо

Эффективное средство для устранения ошибок, возникающих в локальном кэше 1С на клиенте, которым легко сможет воспользоваться пользователь с любым уровнем знаний. Wsf-скрипт, созданный на стандартном языке автоматизации Windows - "WSH JScript", очищает кэш 1С просто, быстро и безопасно. Кроме варианта, очищающего кэш текущего пользователя, имеется также вариант для чистки кэша 1С всех пользователей терминального-сервера.

1 стартмани

04.11.2018 54199 533 Eugen-S 35

Сравнение pdf-файлов актов сверки

Обработка сравнивает два pdf-файла, в которых находятся стандартные печатные формы актов сверки, и показывает на экране совпадающие и/или отличающиеся по суммам документы взаиморасчетов.

Читайте также: