Документа не будет как провести в 1с

Обновлено: 08.07.2024

При переносе данных между базами часто возникает ситуация, когда движения документов переносить не требуется, а перенесенные документы следует проводить в базе-приёмнике. Например, в базе-источнике ведется управленческий учет, а в базе-приемнике регламентированный. Если при переносе не учитывать свойство «Проведен» документа, то можно получить в приемнике проведенные документы, у которых данные в движениях и в объекте не соответствуют друг другу.

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

Несколько основных моментов:

Для решения стоящей задачи наиболее удобно использовать обработчики событий конвертации в целом. Но нам необходимо определить – объект - это документ, и если документ – то проводится ли он. Для идентификации документа используем параметр обработчика ИмяТипаОбъекта.

I. Первый, более простой, случай: требуется оставлять в базе-приемнике документы непроведенными.

Подразумевается, что пользователи в базе-приемнике проверят документы и потом их проведут. Если не переносить движения и просто указать в свойстве «Проведен» - «Значение = Ложь», то можем получить при повторном переносе документы внешне не проведенные, но с движениями. К этому получим справедливое возмущение пользователей, которые не смогут понять результатов отчетов.

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

1. В обработчике « Перед загрузкой данных » конвертации создаем параметр с типом значений «Таблица значений». В колонку "Действие" строкой будем записывать – что делать с документом: просто отменять проведение или еще проставлять пометку на удаление.

ТаблицаДокументов = Новый ТаблицаЗначений ;
ТаблицаДокументов . Колонки . Добавить ( "Ссылка" );
ТаблицаДокументов . Колонки . Добавить ( "Действие" );
Параметры . Вставить ( "ТаблицаДокументов" , ТаблицаДокументов );

2. В обработчике «После загрузки объекта» конвертации, определяем найден ли объект, является ли объект документом, проводится ли он, и если в приемнике он проведен, то только тогда помещаем ссылку на него в наш параметр ТаблицаДокументов.

Если ОбъектНайден
И ИмяТипаОбъекта = "Документ"
И Объект . Метаданные (). Проведение = Метаданные . СвойстваОбъектов . Проведение . Разрешить
И Объект . Ссылка . Проведен Тогда
НоваяСтрока = Параметры . ТаблицаДокументов . Добавить ();
НоваяСтрока . Ссылка = Объект . Ссылка ;
Если ПараметрыОбъекта . Получить ( "ПометкаУдаления" ) Тогда
НоваяСтрока . Действие = "Удаление" ;
Иначе
НоваяСтрока . Действие = "Отмена" ;
КонецЕсли;
ИначеЕсли ПараметрыОбъекта <> Неопределено И Лев ( Строка ( ТипЗнч ( Объект )), 8 ) = "Документ" Тогда
Объект . ПометкаУдаления = ПараметрыОбъекта . Получить ( "ПометкаУдаления" ); //Пометка удаления у новых объектов и непроведенных старых
КонецЕсли;

3. В обработчике «После загрузки данных» конвертации отменяем проведение у записанных документов, проставляем при необходимости пометку на удаление и удаляем наш параметр. При желании отследить процесс удаления код обработчика может выглядеть так:

II. Требуется обеспечить проведение документов в базе-приемнике при переносе.

В этом случае необходимо помимо пометки удаления передавать значение свойства «Проведен» в параметр «Проведен» и данный параметр анализировать в обработчике «После загрузки объекта» (Рис.2).

1. « Перед загрузкой данных » Повторяем создание параметра конвертации, как в первом примере

ТаблицаДокументов = Новый ТаблицаЗначений ;
ТаблицаДокументов . Колонки . Добавить ( "Ссылка" );
ТаблицаДокументов . Колонки . Добавить ( "Действие" );
Параметры . Вставить ( "ТаблицаДокументов" , ТаблицаДокументов );

2. «После загрузки объекта » После загрузки мы должны уже работать с объектами, которые еще не записаны в базе. Документы можно выделить по типу значения, а новый объект, перед внесением в таблицу параметра, необходимо предварительно записать. Не забываем установить параметр «ОбъектМодифицирован» в «Ложь».

Если ИмяТипаОбъекта = "Документ"
И Объект . Метаданные (). Проведение = Метаданные . СвойстваОбъектов . Проведение . Разрешить Тогда

Если Не ОбъектНайден Тогда
Объект . Записать ();
ОбъектМодифицирован = Ложь;
КонецЕсли;

НоваяСтрока = Параметры . ТаблицаДокументов . Добавить ();
НоваяСтрока . Ссылка = Объект . Ссылка ;

Если ПараметрыОбъекта . Получить ( "Проведен" ) Тогда
НоваяСтрока . Действие = "Проведение" ;
ИначеЕсли ПараметрыОбъекта . Получить ( "ПометкаУдаления" ) Тогда
НоваяСтрока . Действие = "Удаление" ;
Иначе
НоваяСтрока . Действие = "Отмена" ;
КонецЕсли;
КонецЕсли;

3. «После загрузки данных » После загрузки мы должны пропустить запись документа, если он не проведен в базе-источнике и в базе приемника. Также необходимо проследить за пометкой удаления.

Для каждого СтрокаТч Из Параметры . ТаблицаДокументов Цикл


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

Если СтрокаТч . Действие = "Проведение" Тогда
РежимЗаписи = РежимЗаписиДокумента . Проведение ;
Иначе
РежимЗаписи = РежимЗаписиДокумента . ОтменаПроведения ;
КонецЕсли;

Если СтрокаТч . Действие = "Удаление" Тогда
ДокОбъект . ПометкаУдаления = Истина;
ДокОбъект . Записать ();
ИначеЕсли СтрокаТч . Ссылка . ПометкаУдаления Тогда
ДокОбъект . ПометкаУдаления = Ложь;
ДокОбъект . Записать ();
КонецЕсли;
Исключение


Проведение документов, перепроведение документов и восстановление последовательности проведения документов в 1С 8.3 – очень важная часть работы с программами 1С, с которой следует быть знакомым каждому пользователю. Что же это такое и для чего нужно?

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

Для исправления этих ситуаций 1С содержит несколько различных механизмов, позволяющих в пакетном режиме последовательно перепровести документы. Рассмотрим самые основные, позволяющие решить эту проблему в большинстве случаев.

Для доступа к обработкам по проведению документов необходимо включить пункт меню «Все функции». Для этого откройте меню и нажмите Сервис – Параметры.

В открывшемся окне поставьте галочку «Отображать команду Все функции»:

Закройте окно параметров и откройте главное меню ещё раз. В нём должен отдельным пунктом появиться «Все функции…». Нажмите на него:

В открывшемся окне найдите список стандартных механизмов, а среди них – Проведение документов. Он будет рядом с Журналом регистрации, работу которого мы рассматривали в недавней статье. Откройте Проведение документов:

В представленном окне доступен функционал проведения документов. В левой половине отображены все типы документов, доступных к перепроведению. Рядом с кнопкой Провести также доступен фильтр по периоду, в котором можно указать, за какой период проводить документы. Выбирайте необходимые документы и переносите их в правую половину окна двойным нажатием мыши или с помощью кнопки Добавить > посередине. После этого нажмите Провести:

Данное окно будет информировать нас о прогрессе выполняющихся операций:

После завершения программа выдаст окно с коротким отчётом:

Другой вариант проведения документов – с помощью встроенной обработки. Как и в п. 3, откройте меню Все функции. Выберите в списке обработок «Групповое перепроведение документов»:

В открывшемся окне укажите период, выберите организацию и нажмите Выполнить:

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

После завершения перепроведения документов будет показан аналогичный отчёт об операции:

Мы рассмотрели два варианта группового проведения документов в 1С 8.3. Их возможностей достаточно для исправления нарушенной последовательности проведения документов.

Напоминаем, что в рамках механизма Закрытие месяца всегда выполняется контроль последовательности проведения документов, и в случае его нарушения автоматически запускается операция перепроведения документов.

Если у Вас остались вопросы про проведению документов в 1С 8.3, мы с радостью ответим на них в рамках бесплатной консультации.

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