Как в 1с отменить проведение документа
Всем привет. Как обычно в пт занимаемся оптимизацией 1С. Есть документы, которые генерирует по 20-30 тысяс проводок. Само проведение оптимизировали, записывая проводки порциями, но вот отмена проведения занимает капец время. При чем всегда разное. Что испробововали:
1. Проводить отмену проведения вне транзакций
2. Отключать итоги, делать отмену проведения, включать итоги (неодназначный результат, больше сомнения вызывает вкл\откл итогов, база большая, и постоянно вкл\выкл итоги накладно)
3. Управляемые блокировки (пока тестим)
Есть идеи? Заранее спасибо.
(0) Отказаться от документов, "которые генерирует по 20-30 тысяс проводок", и спроектировать правильно не предлагать?
(6) Правильно! Давайте откажемся от документа РСВ в УПП, например!
А то что он кучи проводок генерит, это же неправильно.
(7) Не слышал, чтобы кто-то жаловался на долгую *отмену* РСВ. И то, РСВ можно выполнять (и отменять) по частям. Так что все предусмотрено.
Там у ТС явно чего-то лишнего наворотили. Может так "обмен" пытаются делать.
У нас такая же проблема((
Есть документ, который в конце месяца генерит до 500 тыс проводок. Отмена проведения это ппц. Мало того, что память жрет, еще и выполняется долго, и эскалация блокировок включается.
(8) ниче там не предусмотрено. вообще мне кажется в 1С больше г..на, только что беседовали с коллегами по sap, те поржали от души, когда мы им сказали, что в 1С есть ограничение на кол-во записей в таб. доке (9999) и на кол-во записей в регистре (99999). резюмировали: 1С - для EPR систем еще расти и расти, лучше не жлобиться и купить норм. забугор прогу, которая веками оттачивали.
Че думаете? Идти к начальству с предложением :))
(0) Напиши свой блек ждек и шлюх.
т.е. есть документ Владелец и будут еще документы, которые подчинены владельцу и формируется автоматически, так же и проводятся из основного документа.
(13) супер, "раскидайте 30 000 проводок по 1000 документам", а когда откроешь карточка счета бухи аху, там же мля 1000 док, не говоря уже о размере базы и т.д., и т.п. Хотя признаюсь често была такая мысль - но главный спец наш сказал вы аху что ли! давайте думайте дальше.
(12) Вообще не в кассу. Я тоже могу пойти к бывшим коллегам ораклистам и у нас найдется 100500 причин поржать над тем, какое 1С тормозное УГ. (Что, кстати, раньше и делали.) Но это никак не относится к обсуждаемой теме. Как и ограничения в ТЧ.
(12) ограничение по числу строк на порядок шире - 99999, про регистр вранье - нет такого ограничения ни на сам регистр, ни на набор записей.
(0) Что конкретно больше всего времени занимает? подписки/обработчики при отмене проведения пустые что ли все?
(21) больше всего времени занимает "ОТМЕНА проведения документа", с "проведением документа" слава аллаху разобрались (летает)
(23) при отмене проведения что-то делается вашим кодом? Или обработчик при отмене проведения пустой и подписок нет?
Платформа:1С:Предприятие 8.3 (8.3.8.2054)
Конфигурация: Управление производственным предприятием, редакция 1.3 (1.3.75.2)
В документе на форме (управляемые формы) создана кнопка Отмена проведения и создана команда НаКлиенте "Отмена проведения".
Появляется ошибка
: Ошибка при вызове метода контекста (Записать)
Записать(РежимЗаписиДокумента.ОтменаПроведения);
по причине:
Несоответствие типов (параметр номер '1')
Что я не так делаю?
Пыталась перенести записать в процедуру НаСервер - та же ошибка выскакивает.
Что это может быть?! И как правильно организовать распроведение документа?
(2) olgerd666, потому что требуется кое-что обработать в момент распроведения. Причем, обработка должна совершаться НаКлиенте. А как это организовать в УФ - я не знаю. :(
(4) c300pm, те.е я хочу сказать, что обработчик Подписки на событие с событием ОбработкаУдаленияПРоведения предлагает мне обработчик прописать только в общем модуле, который имеет признак Серверный. Понимаете?
и вообще, смысл всего этого? если у непроведенного документа типовая кнопка отмены проведения не активна, если документ не проведен. то есть получается как, если документ не проведен то и нет необходимости снимать его с проведения, как то так. так зачем все это?
Работая с управляемой формой - в ней нет как такового Объекта документа, только его представление для формы (тип другой - данныеформыколлекция или что-то похожее) с ним работать не получится кроме как для видимости, а зпаисывать вам нужно непосредственно ДокументОбъект, его можно получить только на сервере и записать соответственно там же. Методы ДанныеФормыВЗначение и ЗначениеВДанныеФормы нам в этом сильно помогают ;)
(11) spenser123, спасибо больше. Я понимала, что записывать на клиенте - не верное решение. Но так как и на сервере я получала аналогичную ошибку, то я совсем потерялась.
Всем еще раз огромное спасибо. :)
(11) spenser123,
Можно из формы записывать объект, проводить и отменять проведение,
как уже написал (15) нужно передавать правильные параметры:
criptid; user1257121; volend; creatermc; Cmapnep; smit1c; user659124_s.kostina; yuri76; SotNick; Const1C; корум; + 11 – Ответить
(14) teller, нет ошибка была бы та же самая, т.к. записать вызывало расширение формы документа а там в параметре не режим записи документа указывать нужно.
Расширение управляемой формы для документа (Managed form extension for documents)
Записать (Write)
Синтаксис:
Тип: Структура.
Структура параметров записи, которые могут быть обработаны в обработчиках событий записи. Состав параметров произвольный. Содержит предопределенные параметры записи РежимЗаписи и РежимПроведения. Предопределенные параметры передаются в метод объекта Записать.
Параметры записи можно обработать в событиях формы ПередЗаписью, ПередЗаписьюНаСервере, ПриЗаписиНаСервере, ПослеЗаписиНаСервере, ПослеЗаписи.
Возвращаемое значение:
Тип: Булево.
Истина - успешно записан; Ложь - в противном случае.
Описание:
Тонкий клиент, веб-клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер). .
Кстати через него тоже можно отменить проведение, просто в параметр структуру параметров нужно указывать.
При переносе данных между базами часто возникает ситуация, когда движения документов переносить не требуется, а перенесенные документы следует проводить в базе-приёмнике. Например, в базе-источнике ведется управленческий учет, а в базе-приемнике регламентированный. Если при переносе не учитывать свойство «Проведен» документа, то можно получить в приемнике проведенные документы, у которых данные в движениях и в объекте не соответствуют друг другу.
В правилах конвертации объектов (ПКО) в обработчике «Перед загрузкой» существуют параметры «РежимЗаписи» и «РежимПроведения», указание которых обеспечивает необходимый режим записи объекта, но в этом случае, запись происходит во время загрузки данных и если, по каким-то причинам, документ не запишется, загрузка данных будет прервана. Правильней записывать новые документы в конце загрузки, когда все перенесенные объекты уже будут в базе - приемнике.
Несколько основных моментов:
Для решения стоящей задачи наиболее удобно использовать обработчики событий конвертации в целом. Но нам необходимо определить – объект - это документ, и если документ – то проводится ли он. Для идентификации документа используем параметр обработчика ИмяТипаОбъекта.
I. Первый, более простой, случай: требуется оставлять в базе-приемнике документы непроведенными.
Подразумевается, что пользователи в базе-приемнике проверят документы и потом их проведут. Если не переносить движения и просто указать в свойстве «Проведен» - «Значение = Ложь», то можем получить при повторном переносе документы внешне не проведенные, но с движениями. К этому получим справедливое возмущение пользователей, которые не смогут понять результатов отчетов.
Свойство «Проведен» необходимо исключить из переноса в каждом документе. Нам необходимо при выгрузке данных запоминать необходимые для отмены проведения документы и после загрузки данных записать их с режимом отмены проведения. Помимо ссылки на документ необходимо сохранять и информацию об его пометке удаления. Для получения информации о пометке удаления данное свойство каждого проводимого документа необходимо передавать в параметр, который назовем также, как и имя свойства - ПометкаУдаления. (Рис.1)
1. В обработчике « Перед загрузкой данных » конвертации создаем параметр с типом значений «Таблица значений». В колонку "Действие" строкой будем записывать – что делать с документом: просто отменять проведение или еще проставлять пометку на удаление.
ТаблицаДокументов = Новый ТаблицаЗначений ;
ТаблицаДокументов . Колонки . Добавить ( "Ссылка" );
ТаблицаДокументов . Колонки . Добавить ( "Действие" );
Параметры . Вставить ( "ТаблицаДокументов" , ТаблицаДокументов );
2. В обработчике «После загрузки объекта» конвертации, определяем найден ли объект, является ли объект документом, проводится ли он, и если в приемнике он проведен, то только тогда помещаем ссылку на него в наш параметр ТаблицаДокументов.
Если ОбъектНайден
И ИмяТипаОбъекта = "Документ"
И Объект . Метаданные (). Проведение = Метаданные . СвойстваОбъектов . Проведение . Разрешить
И Объект . Ссылка . Проведен Тогда
НоваяСтрока = Параметры . ТаблицаДокументов . Добавить ();
НоваяСтрока . Ссылка = Объект . Ссылка ;
Если ПараметрыОбъекта . Получить ( "ПометкаУдаления" ) Тогда
НоваяСтрока . Действие = "Удаление" ;
Иначе
НоваяСтрока . Действие = "Отмена" ;
КонецЕсли;
ИначеЕсли ПараметрыОбъекта <> Неопределено И Лев ( Строка ( ТипЗнч ( Объект )), 8 ) = "Документ" Тогда
Объект . ПометкаУдаления = ПараметрыОбъекта . Получить ( "ПометкаУдаления" ); //Пометка удаления у новых объектов и непроведенных старых
КонецЕсли;
3. В обработчике «После загрузки данных» конвертации отменяем проведение у записанных документов, проставляем при необходимости пометку на удаление и удаляем наш параметр. При желании отследить процесс удаления код обработчика может выглядеть так:
II. Требуется обеспечить проведение документов в базе-приемнике при переносе.
В этом случае необходимо помимо пометки удаления передавать значение свойства «Проведен» в параметр «Проведен» и данный параметр анализировать в обработчике «После загрузки объекта» (Рис.2).
1. « Перед загрузкой данных » Повторяем создание параметра конвертации, как в первом примере
ТаблицаДокументов = Новый ТаблицаЗначений ;
ТаблицаДокументов . Колонки . Добавить ( "Ссылка" );
ТаблицаДокументов . Колонки . Добавить ( "Действие" );
Параметры . Вставить ( "ТаблицаДокументов" , ТаблицаДокументов );
2. «После загрузки объекта » После загрузки мы должны уже работать с объектами, которые еще не записаны в базе. Документы можно выделить по типу значения, а новый объект, перед внесением в таблицу параметра, необходимо предварительно записать. Не забываем установить параметр «ОбъектМодифицирован» в «Ложь».
Если ИмяТипаОбъекта = "Документ"
И Объект . Метаданные (). Проведение = Метаданные . СвойстваОбъектов . Проведение . Разрешить Тогда
Если Не ОбъектНайден Тогда
Объект . Записать ();
ОбъектМодифицирован = Ложь;
КонецЕсли;
НоваяСтрока = Параметры . ТаблицаДокументов . Добавить ();
НоваяСтрока . Ссылка = Объект . Ссылка ;
Если ПараметрыОбъекта . Получить ( "Проведен" ) Тогда
НоваяСтрока . Действие = "Проведение" ;
ИначеЕсли ПараметрыОбъекта . Получить ( "ПометкаУдаления" ) Тогда
НоваяСтрока . Действие = "Удаление" ;
Иначе
НоваяСтрока . Действие = "Отмена" ;
КонецЕсли;
КонецЕсли;
3. «После загрузки данных » После загрузки мы должны пропустить запись документа, если он не проведен в базе-источнике и в базе приемника. Также необходимо проследить за пометкой удаления.
Для каждого СтрокаТч Из Параметры . ТаблицаДокументов Цикл
Если СтрокаТч . Действие = "Отмена" И Не СтрокаТч . Ссылка . Проведен Тогда
Если СтрокаТч . Ссылка . ПометкаУдаления Тогда //Для снятия пометки удаления
Попытка
ДокОбъект = СтрокаТч . Ссылка . ПолучитьОбъект ();
ДокОбъект . ПометкаУдаления = Ложь;
ДокОбъект . Записать ();
Исключение
КонецПопытки;
КонецЕсли;
Если СтрокаТч . Действие = "Проведение" Тогда
РежимЗаписи = РежимЗаписиДокумента . Проведение ;
Иначе
РежимЗаписи = РежимЗаписиДокумента . ОтменаПроведения ;
КонецЕсли;
Если СтрокаТч . Действие = "Удаление" Тогда
ДокОбъект . ПометкаУдаления = Истина;
ДокОбъект . Записать ();
ИначеЕсли СтрокаТч . Ссылка . ПометкаУдаления Тогда
ДокОбъект . ПометкаУдаления = Ложь;
ДокОбъект . Записать ();
КонецЕсли;
Исключение
Для верного учета документы в 1С нужно сохранять в правильном порядке, то есть сначала самый первый по дате документ, затем следующий и так далее. Но на деле случается, что порядок проведения нарушается. Тогда требуется восстановить последовательность проведения документов. Рассмотрим, как это сделать, на примере программы 1С:Бухгалтерия предприятия 3.0.
Настройка проведения документов
Рассмотрим, как настроить проведение документов.
Зайдем в меню “Администрирование — Настройки программы — Проведение документов”.
Здесь доступны настройки:
- Момент выполнения расчетов: при закрытии месяца или при проведении документов. В первом случае процесс будет быстрее.
- Проверка проведения при формировании отчетов — программа может автоматически проверять и обновлять данные учета при формировании отчетов.
Восстановление последовательности проведения документов при закрытии месяца
Программа при закрытии месяца проверяет, не было ли нарушений. Если перепроведение документов требуется, ссылка “Перепроведение документов” будет отображаться прозрачным цветом.
При нажатии на ссылку откроется окно с настройками.
Получите понятные самоучители по 1С бесплатно:
Выбираем вариант перепроведения и нажимаем “ОК”.
После этого ссылка будет ярко зеленой.
Групповое перепроведение документов
Другой способ восстановить последовательность — выполнить групповое перепроведение документов.
Доступно в меню “Операции — Сервис — Групповое перепроведение документов”.
Выбираем организацию, ставим период.
Жмем кнопку “Выполнить”.
Можно остановить процесс при появлении ошибок, для этого устанавливается соответствующий флажок.
Выборочное перепроведение документов
Если нужно перепровести документы выборочно, подойдет механизм “Проведение документов”. Он доступен через “Все функции”.
В левой части формы показываются доступные для обработки документы. Справа отображаются выбранные документы.
Можно выбрать один или несколько документов. Для этого выделим документ слева и нажмем кнопку “Добавить”. Документ перенесется в правую часть.
Дополнительно задаем период для выбора документов.
Нажимаем кнопку “Провести”.
Удобно использовать, если требуется перепровести несколько документов разных типов.
Для однотипных документов достаточно просто открыть список документов, выделить нужные в списке, нажать правой кнопкой мыши и выбрать “Провести”.
Подскажите такой момент, мне нужно при отмене проведения документа перепровести некоторые другие.
Как я понимаю это в событии "ОбработкаУдаленияПроведения", но в этот момент сам документ, в котором это событие сработало ещё не распроведён? Как правильнее это сделать?*
Отмена проведения согласованного документа
Всем добрый день. Конфа "Медицина. Больничная аптека, редакция 1.1 (1.1.7.3)". Есть.
Манипуляция Проведением/Отмена проведения
Ребят, доброго дня! У меня вопрос по поводу Проведения и Отмены проведения. например: если мы.
Пометка на удаление или отмена проведения
Добрый вечер! Такой вопрос. Создала подписку на событие ПередЗаписью() документа, чтобы.
Обработка проведения документа Расходная
Начал изучать уроки Чистова, и наткнулся на ошибку при проведении документа Расходная, у него всё.
Так и правильно.
Снятие проведения происходит в неявной транзакции, поэтому все документы либо будут отменены (в случае положительного завершения транзакции, либо не будет отменен ни один.
В случае ошибки (так скажем во "вложенной" транзакции) мне нравиться текст ошибки - "В данной транзакции уже происходили ошибки"
Проверка режима проведения документа
Всем привет! Как в модуле документа сделать условие на проверку в каком режиме проводится документ.
Печать торг-12 без проведения документа.
1c 8.2 (8.2.15.301) 11.0(11.0.7.21) Подскажите, что сделать, чтобы можно было печатать ТОРГ-12 на.
Как выполнить запись документа вместо проведения
Доброго времени суток. В Управлении Торговлей 10.3, необходимо выполнить запись (без.
Обработка проведения документа: проведение каждой строки ТЧ
Всем доброе утро! Такой вопрос - у меня есть ТЧ документа. В каждой строке ТЧ идёт проверка.
Читайте также: