Как провести документ без проверок 1с
В этом уроке мы изучим всё, что нужно знать бухгалтеру о проведении документов в 1с, а именно:
Все эти вопросы мы рассмотрим применительно к "тройке" (1С:Бухгалтерия 8.3, редакция 3.0).
Что такое проведение документа и зачем оно нужно?
Проводя документ (нажимая кнопку "Провести") мы заставляем программу отразить хозяйственную операцию, которую олицетворяет документ, на соответствующих счетах бухгалтерского учёта.
Рассмотрим простой пример.
Пусть мы создали новый документ "Поступление наличных", указав в нём вид операции "Получение наличных в банке" и сумму 50 000 рублей:
Далее мы нажали кнопку "Записать", тем самым сохранив документ в базе, чтобы информация, которую мы ввели не потерялась. Более того теперь мы можем распечатать этот документ.
Но считается ли этот документ проведенным? Конечно, нет. Чтобы убедиться в этом нажмём кнопку "ДтКт", которая покажет нам проводки документа:
А если нет проводок, то и в бухгалтерском учёте (например, в оборотно-сальдовой ведомости) мы эти поступившие 50 000 рублей никогда не увидим.
И в журнале этот документ будет без зелёной галочки:
Теперь проведём документ, нажав кнопку "Провести":
И снова проверим появились ли проводки (кнопка "ДтКт"):
Проводки появились и документ с этого момента считается проведённым.
Итак, проведенный - значит с проводками по бухгалтерским счетам и/или движениями по другим регистрам учёта (кроме бухгалтерских регистров в 1с ещё бывают регистры сведений и регистры накоплений, на которых учитывается информация напрямую не попадающая в оборотно-сальдовую ведомость).
Что происходит при нажатии кнопки "Записать" в проведенном документе?
Многие знакомые мне бухгалтеры до конца не понимают как работает кнопка "Записать", когда мы нажимаем её в уже проведённом документе. Перепроводится при этом документ или просто сохраняется с новыми данными, но проводки остаются старыми?
Чтобы было понятнее давайте рассмотрим 2 случая.
Мы работаем в не проведенном документе
При нажатии кнопки "Записать": документ сохраняется, но не проводится.
При нажатии кнопки "Провести": документ сохраняется, а затем проводится (формируются проводки).
Мы работаем в уже проведенном документе
При нажатии кнопки "Записать": документ сохраняется, а затем проводится (старые проводки удаляются и формируются новые).
При нажатии кнопки "Провести": документ сохраняется, а затем проводится (старые проводки удаляются и формируются новые).
Вывод
Если документ уже проведён, то никакой разницы между кнопками "Записать" и "Провести" нет. Они делают одно и то же - перепроводят документ.
Можно ли изменить проведенный документ без его перепроведения?
Во-первых, зачем это может понадобиться? Ну, например, нужно изменить какой-нибудь несущественный реквизит в уже закрытом периоде.
Если вы просто измените его и нажмёте кнопку "Записать", то документ снова проведется (ведь он уже был проведен на момент нашего вмешательства), а это может повлечь изменение проводок в уже закрытом периоде и много других неприятностей.
Чаще всего так и происходит. И когда бухгалтер понимает, что случайно "провёл" документ в прошлом периоде и теперь у него проблемы с обороткой и закрытием месяца, то он просто приходит в ужас
Так можно ли изменить проведенный документ, не проводя его снова?
Ответ для пользователей: нет, нельзя. Большинство (если не все) типовых документов в "тройке" заточены на то, что формируют проводки заново при изменении и записи документа даже программным способом!
Ответ для программистов: используйте вот такой код при программном сохранении измененного документа:
Как перепровести все документы по организации за период?
Когда речь идёт о текущем (ещё не закрытом) периоде я рекомендую поступать именно так - проводить вообще все документы разом за период по организации.
Зачастую документы различных видов в 1с связаны между собой в части формирования проводок и движений по регистрам.
Причём самому бывает довольно сложно учесть эту зависимость, поэтому только полное перепроведение всех документов за период гарантирует, что программа учтёт все нюансы учёта и сформирует верные проводки.
Заходим в раздел "Операции" пункт "Групповое перепроведение документов":
В открывшейся форме указываем период, организацию и решаем останавливать ли процесс проведения при первой же ошибке:
Наконец, нажимаем кнопку "Выполнить" и дожидаемся окончания процесса.
Как перепровести не все документы, а только определенного вида?
Если же у нас есть веские причины проводить не все документы, а только определенного вида; или нам требуется провести только не проведенные документы - тогда нам на помощь придёт более мощный и гибкий инструмент.
Открываем меню "Функции для технического специалиста. " (у вас его нет?):
В открывшемся диалоге раскрываем пункт "Стандартные" и в нём выбираем "Проведение документов":
Нажимаем кнопку "Открыть". Открылась встроенная в 1с обработка для проведения документов:
Здесь можно выбрать:
- период проведения документов
- конкретные виды документов (например, реализация. причём искать в списке можно прямо вводом с клавиатуры)
- проводить только проведенные или только не проведенные или и те и другие
- прекращать ли проведение при первой же ошибке
Выбираем нужное и нажимаем кнопку "Провести".
Есть только один нюанс у этой обработки. Она делает проведение выбранных документов сразу по всем организациям в базе и это нужно учитывать, чтобы случайно не перепровести то, что перепроводить не надо.
В общем прекрасная обработка, но если вам нужно проводить ещё и отдельно по организациям, то возможно вы захотите познакомиться с ещё более изощрённым способом
Самый изощрённый способ перепроведения на случай, если в базе несколько организаций
Внимание! Этот вариант предназначен для достаточно опытных пользователей. Если вы пользуетесь этой возможностью в первый раз - я настоятельно рекомендую создать резервную копию базы перед этим.
Покажу на примере.
Пусть у нас в базе много организаций и мы хотим перепровести уже проведенные документы реализации за 1 квартал 2013 года только по организации ООО "Юпитер".
Ни одним из вышеперечисленных способов мы этого сделать не сможем.
Поэтому открываем меню "Функции для технического специалиста. " (у вас его нет?):
В открывшемся окне раскрываем пункт "Обработки" и находим там "Групповое изменение реквизитов":
В пункте "Выбор элементов для изменения" указываем "Реализация (акты, накладные":
Далее нажимаем на ссылку "Все элементы" справа от выбранного поля, чтобы уточнить какие именно документы нужно будет провести:
Настраиваем условия отбора так, чтобы в списке остались только нужные документы:
В данном случае я указал, что нам нужны только уже проведенные документы по организации Юпитер за 1 квартал 2013 года.
Настроив условия отбора нажимаем "ОК".
Теперь нажимаем кнопку "Дополнительные параметры" внизу формы:
Настраиваем параметры вот так:
Далее в списке находим реквизит "Проведен" и устанавливаем его в значение "Да":
Ещё раз убедившись, что среди обрабатываемых элементов присутствуют только нужные нам.
нажимаем кнопку "Изменить реквизиты":
Мы молодцы, на этом всё
Кстати, подписывайтесь на новые уроки.
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Что такое ОбменДанными.Загрузка = Истина, как использовать ОбменДанными.Загрузка.
ОбменДанными.Загрузка
ОбменДанными.Загрузка — атрибут любого объекта в системе 1С предприятие. Он позволяет обозначить при записи объекта, что необходимо отключить любые проверки (в т.ч проверки на уровне платформы 1С). Сделано это было для того, чтобы избежать конфликтов при обмене данных.
Если Вы разрабатываете свою конфигурацию, во всех проверках правильности данных (например, процедура ПередЗаписью) необходимо первой строкой добавить такую строку:
Если ОбменДанными.Загрузка = Истина Тогда
Возврат;
КонецЕсли;
Это является хорошим тоном среди разработчиков 1С.
Контроль записи в стандартных обработках 1С
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Если Вы когда-либо пользовались стандартными обработками 1С (например, Поиск и замена значений, Групповая обработка данных, Универсальный обмен данных и т.п), Вы наверное замечали настройку, которая называется обычно «Контроль записи». Эта настройка как раз отвечает за включение/выключение атрибута «ОбменДанными.Загрузка».
Как установить режим ОбменДанными Загрузка
Использовать этот атрибут очень удобно в программном коде, для отключения всех проверок. Например, данный атрибут необходим, если Вам нужно записать объект, но он имеет незаполненные обязательные реквизиты. Это можно также использовать как способ увеличить скорость массовой обработки данных — если Вы отключаете все проверки, система записывает объект быстрее.
КонтрагентСсылка = Справочники.Контрагенты.НайтиПоНаименованию(«Рога и копыта»);
КонтрагенОбъект = КонтрагентСсылка.ПолучитьОбъект();
КонтрагенОбъект.Наименование = «Рога и копыта LTD.»
КонтрагенОбъект.ОбменДанными.Загрузка = Истина;
КонтрагенОбъект.Записать();
Азы настройки обмена данными в 1С с помощью конфигурации «1С Конвертации данных» на примере смотрите в видео:
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
кстати я не знаю ответа, точнее 2 ответа точно фуфло, но между двумя остальными пожалуй 100% уверенности у меня нет, ибо никогда не заморачивался.
все-же ответы 2 и 3 точно не верные.
что бы понять какой верный из 1 и 4 надо понять как работает транзакция и ее блокировки.
дальше подсказывать не буду :)
зы
пары минут мне хватило, что-бы пороборь свои сомнения
ну если документ уже записан, а обработка проведения пустая, то и 2),3) прокатывают. Хотя я лично склоняюсь к 4).
(11) Я вот сделал проведение из Толстого клиента. В замере производительности у меня ни одного серверного вызова. Как так?
Проведение - это транзакция, транзакция не возможна на клиенте. То что толстый клиент имеет серверный контекст - не говорит о том, что событие происходит на клиенте.
(18) поэтому проведение обязательно проходит на сервере и еще может дополнительно проходить на клиенте?
(18)Что мешает начать транзакцию на клиенте, передать ее ID на сервер, там выполнить действия в БД и вернуть все обратно на клиент?
(18) Упс. А как же тогда файловая база работает? В файловой документы не проводятся? Или их файловый сервер проводит?
Рукалицо.
Если мы говорим про толстый клиент, то у нас и клиент и сервер в одном лице.
Но тут уж извините, либо трусы наденьте либо крестик снимите.
То есть либо у нас нет ни клиента ни сервера, потому что хрен его знает, что в файловой версии клиент, а что сервер. Либо у нас просто сервер там же где и клиент, но это не отменяет, что проведение делается на сервере.
(25)В файловой базе есть же тоже разделение на два режима исполнения кода Клиент/Сервер. Тут наверно подразумевается, можно ли в Клиентском режиме проводить доки
(27) Есть. Про что и речь. Поэтому правильный ответ, что нельзя. Потому что код проведения выполняется на сервере.
(30) Код обработки проведения будет выполняться на клиенте (толстом). Хочешь убедиться - повтори (12).
(32) Если (12) прав, то может быть и так, но уж точно не потому что база файловая и там типа все клиент.
Но тогда я не понимаю, каким образом клиент записывает данные в базу без серверного кода?
(34) Естественно открытие/закрытие транзакции, запросы, установка блокировок и запись данных будет вызывать серверный вызов. Но сам код исполняется на клиенте.
Может кто знает как провести документ, что бы не инициализировать событие перед записью? Дело в том что в этом событии происходит вызов формы, а мне нужно провести документ внешней обработкой без получения каких либо форм на экране.
З.Ы. идеи типа изменить событие удалить форму не надо предлагать, т.к. вмешательства в конфу осуществить нельзя!
В модуле объекта:
(10) не понял, каким образом у тебя отрабатывает событие в модуле формы, если ты из внешней обработки записываешь документ?
(3) прошу прощения, запутался в окнах в 1сине, да событие в модуле документа, получается обойти никак не получится?
(14) еще раз пишу для непонятливых:
Во внешней обработке:
В модуле объекта ДОКУМЕНТА:
(11) при обмене устанавливается автоматом, но никто не мешает вставить установку флага в программу перед записью.
если писали не криворучки, то в подписке первым делом должно стоять отключение по этому флагу всех действий.
(11) и что? По сути это такое же доп. Свойство, но в отличие от от них, на него уже есть реакция в объектах типовых
Получится, если типовая и выставить обменданными.загрузка в истину в модуле обработки перед вызовом метода записать() объекта
(27) фига се, проверил сейчас, действительно истина.
Откуда у меня взялся стереотип, что программно это свойство не установить?
(33) мы не знаем. Объективных предпосылок для того чтобы так думать нет. Более того, например типовая обработка выгрузказагрузкаданныххмл82.епф, которая используется всеми для адресного восстановления объектов и записей регистров из бэкапов, дает выставить это свойство специально, чтобы не выполнялись проверки при записи при загрузке восстанавливаемого объекта
(36) а может вы лукавите и раньше (в другой платформе или релизе) ОбменДанными.Загрузка был доступен только для чтения?
(40) Нет. Более того, мне кажется что это свойство выставлялось всегда исключительно только программнр
(38) в обработчике перед записью, перед открытием вашей формы, должен быть код анализа, как в (16)
(41) нет, в случае обмена с использованием плана обмена оно выставляется движком
(50) те планы обменами, которые для этого документа отмечены без установленного значения Распределенная ИБ.
(52) Короче тут, такая история я не программист 1с, я в поддержке сижу знаю чуть больше других юзеров. и вот наши программисты внесли в конфу некторые изменения, после которых документ перестал создаваться через эту обработку из-за того, что они вызывают модально некоторую форму. я просто хочу 1с-ку изучить вот и решил попытаться обработку изменить, не трогая конфу.
(49) > Действие не может выполняться в режиме загрузки данных
Говорит о том, что что-то написано такое, что не поддерживается Когда свойство ОбменДанными.Загрузка установлено в значение Истина
+(57) Скорее всего это в конфигурации написано.
А проги, у которых ты учишься, натуральные копрокодеры. Ни один уважающий себя прог не станет модально открывать форму из процедуры ПриЗаписи() модуля объекта.
Таких увольнять сразу надо, если они с серьезными вещами работают.
(56) процедуру ПередЗаписью не смогу показать она очень огромная и тем более конфа далека от типовой.
документ я создаю следующим образом:
Если есть, то оно до открытия формы расположено?
(59) если при выполнении этого кода появляется модальное окно - то гнать этих недоделанных прогов студентов до самого заднего задищенво.
короче пишешь докладную и ссылку на эту ветку.
(59) зачем ты приводишь код в котором нет ошибки? Тебя ведь просили привести код при или перед записи, потому что именно там написано то .авно, которое портит тебе жизнь
(64) думаю, что у него следующее:
при установленном свойстве ОбменДанными=Истина не может открыться модальное окно той копрокодерской формы и вываливается ошибка "Действие не может выполняться в режиме загрузки данных "
(48) что?
А ты можешь привести пример хоть одного свойства которое вдруг перестает быть доступным для чтения в зависимости от такой эфемерной сущности как план обмена, его наличия и наличия хотя бы одного узла в таких планах обмена, и хотя бы приблизительную причину почему такое могли сделать разработчики?
(68) мне все покоя мысль не дает, откуда я взял, что это свойство только для чтения :)
(66) ты так говоришь, как будто это мы вынудили тебя создать топик на форуме в котором ты у нас спрашиваешь как решить твою проблему.
Нет, это не мы. По прежнему у тебя уже есть все предпосылки чтобы ее решить, ничего нового написано не будет, только перелив из пустого в не более полное
(66) ты на вопрос ответь, что я тебе задавал.
В той процедуре, где форма открывается, есть строка
Или что-то наподобие до открытия модальной формы?
отладчик проходит мимо той строки где та самая форма вызывалась, но дальше отладчик выловить сложно, т.к. он не хочет показывать верные строки (переходит к строке где код закомменчен). закончу читать гугль и почищу кеш
(69) но я то здоров, зачем ты мне пытаешься тогда навязать свою. Э. Anxiety?
Меня как раз это не беспокоит.
Заливкой выделены события, выполняющиеся в транзакции записи.
Последовательность событий при проведении документа из формы документа (провести и закрыть)
Заливкой выделены события, выполняющиеся в транзакции записи.
Последовательность событий при отмене проведения документа из формы документа
Заливкой выделены события, выполняющиеся в транзакции записи.
Обработчики событий
Расширение управляемой формы для документа. Возникает на клиенте перед выполнением записи объекта из формы. Процедура-обработчик данного события вызывается перед вызовом процедуры-обработчика события ПередЗаписью .
- Отказ , тип Булево . Признак отказа от записи. Если в теле процедуры-обработчика установить данному параметру значение Истина , запись выполнена не будет и будет вызвано исключение. Значение по умолчанию: Ложь .
- ПараметрыЗаписи , тип Структура . Структура, содержащая параметры записи. Для формы документа существует два предопределенных параметра — РежимЗаписи и РежимПроведения . Они добавляются автоматически при вызове команд «Провести», «Провести и закрыть», «Отмена проведения». Параметр РежимПроведения может отсутствовать, если режим проведения в документе не определен.
Примечание: В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере .
Расширение управляемой формы для документа. Вызывается перед записью объекта на сервере. Можно отменить запись. Выполняется вне транзакции.
- Отказ , тип Булево . Признак отказа от записи. Если в теле процедуры-обработчика установить данному параметру значение Истина , запись выполнена не будет и будет вызвано исключение. Значение по умолчанию: Ложь .
- ТекущийОбъект , тип ДокументОбъект.ИмяДокумента . Записываемый объект.
- ПараметрыЗаписи , тип Структура . Структура, содержащая параметры записи. Для формы документа существует два предопределенных параметра — РежимЗаписи и РежимПроведения . Они добавляются автоматически при вызове команд «Провести», «Провести и закрыть», «Отмена проведения».
Возникает перед выполнением записи объекта. Процедура-обработчик вызывается после начала транзакции записи, но до начала записи документа.
- Отказ , тип Булево . Признак отказа от записи. Если в теле процедуры-обработчика установить данному параметру значение Истина , то запись выполнена не будет и будет вызвано исключение. Значение по умолчанию: Ложь .
- РежимЗаписи , тип РежимЗаписиДокумента . В параметр передается текущий режим записи документа. Позволяет определить в теле процедуры режим записи. Изменение значения параметра позволяет изменить режим записи.
- РежимПроведения , тип РежимПроведенияДокумента . В данный параметр передается текущий режим проведения. Изменение значения параметра позволяет изменить режим проведения.
Возникает при записи объекта. Процедура-обработчик вызывается после записи объекта в базу данных, но до окончания транзакции записи.
- Отказ , тип Булево . Признак отказа от записи документа. Если в теле процедуры-обработчика установить данному параметру значение Истина , то запись документа выполнена не будет. Значение по умолчанию: Ложь .
Расширение управляемой формы для документа. Возникает на сервере при записи объекта из формы. Процедура-обработчик вызывается после записи объекта (после события ПриЗаписи объекта) в базу данных, но до окончания транзакции записи.
- Отказ , тип Булево . Признак отказа от записи. Если в теле процедуры-обработчика установить данному параметру значение Истина , то запись произведена не будет. Значение по умолчанию: Ложь .
- ТекущийОбъект , тип ДокументОбъект.ИмяДокумента . Записываемый документ.
- ПараметрыЗаписи , тип Структура . Структура, содержащая параметры записи. Для формы документа существует два предопределенных параметра — РежимЗаписи и РежимПроведения . Они добавляются автоматически при вызове команд «Провести», «Провести и закрыть», «Отмена проведения».
Расширение управляемой формы для документа. Вызывается после записи объекта на сервере и после завершения транзакции.
- ТекущийОбъект , тип ДокументОбъект.ИмяДокумента . Записываемый объект.
- ПараметрыЗаписи , тип Структура . Структура, содержащая параметры записи. Для формы документа существует два предопределенных параметра — РежимЗаписи и РежимПроведения . Они добавляются автоматически при вызове команд «Провести», «Провести и закрыть», «Отмена проведения».
Расширение управляемой формы для документа. Возникает на сервере после записи объекта и после окончания транзакции записи, то есть к моменту вызова этой процедуры запись объекта полностью завершена.
- ПараметрыЗаписи , тип Структура . Структура, содержащая параметры записи. Для формы документа существует два предопределенных параметра — РежимЗаписи и РежимПроведения . Они добавляются автоматически при вызове команд «Провести», «Провести и закрыть», «Отмена проведения».
Примечание: В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере .
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Читайте также: