1с действие не может выполняться в режиме загрузки данных
Механизм поддержки конфигурации и механизм хранилища конфигурации предполагают, что изменения в конфигурацию должны вноситься по определённым правилам. Соблюдение этих правил даёт гарантию того, что конфигурация в дальнейшем будет работать правильно.
Механизм выгрузки конфигурации в файл .cf и загрузки её из файла учитывает необходимость соблюдения этих правил. Если вы выгрузили конфигурацию и изменили её в другой информационной базе, то вы не всегда сможете «просто так» загрузить её обратно в исходную базу. В некоторых ситуациях платформа попросит вас разблокировать объекты исходной конфигурации, если она находятся на поддержке или присоединена к хранилищу.
Когда вы имеете дело с файлом конфигурации .cf, вы изменяете его средствами 1С:Предприятия. Но, как вы знаете, в платформе существует и другой механизм, который позволяет вносить изменения в конфигурацию без использования платформы. Это механизм выгрузки конфигурации в файлы XML и загрузки из них.
По мере развития этого механизма появилась потенциальная возможность изменения конфигурации в обход правил, необходимых для поддержки конфигурации или работы хранилища. Такие изменения могут приводить к нарушению нормальной работы конфигурации.
Например, конфигурация находится на полной поддержке и обновляется автоматически. После загрузки из файлов XML она продолжит находиться на полной поддержке, но будет отличаться от конфигурации поставщика. Тогда первое же автоматическое обновление приведёт к тому, что изменения, внесённые XML-редактированием, будут удалены.
Другой пример, когда конфигурация присоединена к хранилищу. В результате загрузки конфигурации из файлов XML, объекты, незахваченные в хранилище, будут загружены и будут изменены. При обновлении конфигурации базы данных эти изменения попадут в базу данных. Однако при следующем захвате в хранилище одного из таких объектов, изменения, загруженные из файлов XML, потеряются. Потому что при захвате конфигуратор получает последнюю версию объекта из хранилища. Таким образом, если при загрузке из файлов XML какие-то объекты были добавлены, то при захвате родительского объекта они будут удалены.
Для того чтобы избежать подобных ситуаций и привести работу платформы к единому порядку, мы ввели ряд ограничений на загрузку конфигурации из файлов XML. Эти ограничения вводятся в трёх ситуациях.
Загрузка в конфигурацию, подключённую к хранилищу
- Полная загрузка невозможна;
- Частичная загрузка возможна только в том случае, когда все объекты, которые изменятся после загрузки, захвачены в хранилище.
Загрузка в конфигурацию, находящуюся на поддержке
- Полная загрузка возможна только в том случае, когда все объекты конечной конфигурации являются редактируемыми;
- Частичная загрузка возможна только в том случае, когда все объекты конечной конфигурации, которые изменятся после загрузки, являются редактируемыми.
Загрузка конфигурации, которая содержит настройки поддержки
Если XML выгрузка содержит настройки поддержки (файл ParentConfigurations.xml) то:
- Полная загрузка невозможна;
- Частичная загрузка невозможна в том случае, когда загружается корневой объект конфигурации (файл Configuration.xml) .
По поводу последней ситуации нужно дать небольшое объяснение. Снятие конфигурации с поддержки в интерактивном режиме, в конфигураторе, не приводит к удалению настроек поддержки из данных. Поэтому такая конфигурация, выгруженная в файлы XML, всё равно будет содержать файл с настройками поддержки. А это значит, что загрузить ее из XML теперь не удастся.
Чтобы загрузка такой конфигурации стала возможной, нужно в каталоге выгрузки удалить файл настроек поддержки. Если выгрузка выполнялась в линейном формате, это файл Configuration.ParentConfigurations. А если, если выгрузка выполнялась в иерархическом формате, то это файл Configuration.ParentConfigurations.bin.
В результате конфигурация будет загружена как снятая с поддержки. Но при этом вы должны понимать, что и вся информация о настройках поддержки будет потеряна. В дальнейшем вы не сможете ею воспользоваться.
Для примера я буду использовать 1С 8.2 но для версии 8.3 эта инструкция так же подойдет. Давайте разберемся подробней, что же такое конфигурация. Я постараюсь своими словам вам это объяснить. Конфигурация в 1С это набор документов, таблиц, различных отчетов и т.д только не заполненных, пустых без данных. Аналогия можно провести с документами Excel, пустая таблица в которой забиты различны формулы и диаграммы это конфигурация. Конфигураций очень много это Бухгалтерия, Зарплата и кадры, документооборот, Розница и т.д Так же существует очень много различных самописных конфигураций.
Как выгрузить конфигурацию из 1С в файл
Как же нам выгрузить конфигурацию 1С в файл. И так для начала нам нужно зайти в сам конфигуратор, для этого запускаем 1С и выбираем нужную базу кликаем пункт Конфигурация.
В конфигураторе переходим в пункт Конфигурация и выбираем пункт Сохранить конфигурацию в файл.
Далее вводим имя файла и указываем путь куда будет сохранена конфигурацию 1С.
Вот и все на этом выгрузка конфигурации завершена. Теперь поговорим о том как её загрузить.
Как загрузить конфигурацию в 1С из файла
С выгрузкой разобрались давайте теперь разберемся с загрузкой конфигурации из файла .Для этого так же необходимо зайти в конфигуратор. И выбрать пункт Конфигурация в нем ищем Загрузку конфигурации из файла.
В открывшемся окне необходимо указать файл с конфигурацией и кликнуть Открыть. После чего дожидаемся загрузки конфигурации.
Закрываем конфигуратор и запускаем 1С в обычном режиме.
Как видите все оказалось достаточно просто.
Скриншоты, опубликованные в данной статье, являются цитатами и иллюстрациями программного продукта «1C:Предприятие», авторское право на который принадлежит ЗАО 1С.
Как в 1с загрузить конфигурацию?
Давайте начнем наше знакомство с конфигуратором 1с Предприятие. В данном разделе программы происходит создание и настройка конфигурации, а также ее объектов. Как правило, здесь работают программисты или опытные пользователи. Тем не менее, всем остальным, а также тем, кто только начинает знакомство с 1с, будет полезно изучить возможности конфигуратора. Итак, при запуске мы видим такое окно.
Чтобы начать работу с конфигурацией, нам необходимо ее открыть. Для этого выберите меню «Конфигурация» — «Открыть конфигурацию». Или воспользуйтесь соответствующей кнопкой.
Перед нами открылась конфигурация данной информационной базы 1с. Мы можем смотреть все константы, справочники, документы, отчеты и другие объекты конфигурации, при необходимости, менять настройки или создавать что-то новое.
Теперь давайте посмотрим, как загрузить конфигурацию в 1с 8.2. Для этого мы зайдем в меню «Конфигурация», и выберем «Загрузить конфигурацию из файла». Далее просто выбираем нужный файл в формате *.cf.
Можно выполнить и обратное действие, сохранив имеющуюся конфигурацию в файл. Это может быть нужно для создания резервной копии конфигурации или для установки ее на другой базе. Обращаем ваше внимание, что выполнять загрузку и сохранение конфигураций можно только с открытой конфигурацией. В противном случае, данные возможности будут неактивны. Ниже приведены наглядные примеры.
Итак, мы рассмотрели в этом уроке как можно загрузить конфигурацию в 1с 8.2. Рекомендуем вам почитать статью, как добавить базу в 1с.
Уточняю задачу - требуется проводить в закрытом периоде.
Просто записывать - не вариант, так как в РС КадроваяИсторияИнтревальный запись не изменяется, а нужно.
(5)вы уж определитесь, что вы хотите сделать: полностью самостоятельно обновить документ + его движения, либо таки использовать типовой механизм изменения документа с последующим изменением всех его движений с помощью проведения.
(6) Мне нужно провести документ (в закрытом периоде) с последующим изменением всех его движений. Где Вы увидели противоречия?
1. Откройте конкретному пользователю, период и пусть изменяет и проводит. Тем более, что по коду выглядит, что изменяется не один документ, а некоторое неизвестное количество.
2. Если это нужно вам, то для роли Администратор (если ничего не поменялось) закрытие периода игнорируется.
3. Если уж совсем "припекло" и другие варианты неподходят (например, по религиозным убеждениям), то можно сделать так:
- удалить (как написали в (2)) строку:
т.к. оно отключает изменение всех движений.
Решением в вашем случае будет открытие периода для пользователя, под которым выполняется перепроведение документов.
(11) ОК, спасибо! Только проблема с проведением осталась.
НачальнаяШтатанаяРасстановка - док, который требуется провести.
Док.ОбменДанными.Загрузка = Истина; - убрала
Период открыла. Документ под пользователем интерактивно проводится, а программно нет. Помогите разобраться.
: Ошибка при вызове метода контекста (Записать)
Док.Записать(РежимЗаписиДокумента.Проведение);
по причине:
Нарушение прав доступа!
по причине:
Нарушение прав доступа!
Либо период для данного пользователя с его ролями всё же не открыт, либо у данного пользователя, от которого запускается обработка, нет прав на данные операции с обрабатываемым документом.
Если это разовое действие, то можно попробовать использовать предложенный мной 3-й вариант. Но, у пользователя нужно тогда временно отключить защиту от опасных действий.
Либо период для данного пользователя с его ролями всё же не открыт, либо у данного пользователя, от которого запускается обработка, нет прав на данные операции с обрабатываемым документом.
Интерактивно под пользователем документ проводится.
Если Док.Записать() тоже проводится, но при этом не изменяется в РС значение одного реквизита.
Тут же провожу документ интерактивно под "тем самым" пользователем, всё ОК.
Не разовое действие.
(16) Тогда, посмотрите в журнале регистрации, на какой тип объекта (документ, РС и т.п.) не хватает прав и разбирайтесь конкретно с ним - смотрите, какие у ролей пользователя права для него.
Текст ошибки:
: Ошибка при вызове метода контекста (Записать)
Док.Записать(РежимЗаписиДокумента.Проведение);
по причине:
Нарушение прав доступа!
по причине:
Нарушение прав доступа!
Значит прав при выполнении обработки у пользователя, от которого эта обработка запускается, не хватает. В отличие, от интерактивного проведения.
Смотрите "Журнал регистрации".
(32) Вот, теперь осталось определить, какие роли есть у пользователя и есть ли у них право на изменение данного регистра.
Если прав нет, то добавить соответствующую роль.
Кстати, если не секрет, какие роли у пользователя от которого запускаете обработку?
З.Ы.
Хотя мне всё же непонятно, как может быть какое-либо ограничение прав при установке привилегированного режима?
(33) Какой уж тут секрет может быть.
Доп.права - это подозреваю нетиповая, для нетиповых же объектов.
(34) Интересно, я посмотрел, права на изменения по этому регистру есть только у роли "Полные права".
Это на типовой Зарплата и управление персоналом, редакция 3.1 (3.1.19.48) .
(40) Нет, ненужно. Я думал проблема как раз в этом - БСП не дает открывать обработки в небезопасном режиме без роли "Администратор системы".
Универсальные переносы данных 1С (перенос документов, остатков и справочной информации):
Данные программы разработаны в нашей компании. Позволяют комфортно выполнить переход со старых программ 1С на новые. В отличие от типовых переносов фирмы 1С эти разработки позволяют переносить документы за выбранный период.
Переносы данных можно приобрести за безналичный расчет на юридическое лицо (предоставим закрывающие документы) или оплатить банковской картой через шлюз Яндекс.Кассы (предоставим электронный чек). -->
Может кто знает как провести документ, что бы не инициализировать событие перед записью? Дело в том что в этом событии происходит вызов формы, а мне нужно провести документ внешней обработкой без получения каких либо форм на экране.
З.Ы. идеи типа изменить событие удалить форму не надо предлагать, т.к. вмешательства в конфу осуществить нельзя!
В модуле объекта:
(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?
Меня как раз это не беспокоит.
Использование признака ОбменДанными.Загрузка в обработчиках событий объекта
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1. Все действия в процедурах-обработчиков событий ПередЗаписью, ПриЗаписи, ПередУдалением должны выполняться после проверки на ОбменДанными.Загрузка :
Процедура ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// код обработчика
// .
КонецПроцедуры
Это необходимо для того, чтобы никакая бизнес-логика объекта не выполнялась при записи объекта через механизм обмена данными, поскольку она уже была выполнена для объекта в том узле, где он был создан. В этом случае все данные загружаются в ИБ «как есть», без искажений (изменений), проверок или каких-либо других дополнительных действий, препятствующих загрузке данных.
Кроме механизма обмена данными есть и другие случаи, когда это должно быть так. В общем виде следует руководствоваться следующим подходом: механизмы, не рассчитанные на особенности конкретных конфигураций, должны иметь возможность загрузить данные при установленном флаге загрузки так, как будто текста обработчика нет вообще:
Например, требуется загрузить всю базу из XML «как есть». Для этого должно быть достаточно установить записываемым объектам ОбменДанными.Загрузка = Истина и все данные должны загрузиться без искажений, проверок и дополнительных действий, т. е. так же как и при пустом обработчике.
2. Исключение составляет механизм обмена данными, который в ходе загрузке данных в базу регистрирует эти данные к выгрузке на других узлах плана обмена.
В тех случаях, когда в конфигурации используется подсистема «Обмен данными» БСП, и возникла необходимость отключить ее, следует устанавливать дополнительное свойство ОтключитьМеханизмРегистрацииОбъектов :
В случае других исключений, причина исключения из этого правила должна быть описана в комментарии к выполняемым действиям.
3. Требования выше также распространяются на обработчики подписок на эти события.
4. При этом вызывающая сторона, выставляя записываемому объекту признак ОбменДанными.Загрузка в Истина , берет на себя ответственность за целостность данных этого объекта.
Например, при записи объекта через механизм обмена данными в РИБ это обеспечивается корректным состоянием объекта в том узле, где он был создан (или изменен).
В других случаях вызывающая сторона должна принять меры по корректному заполнению записываемого объекта. Например, при загрузке данных через механизм обмена данными по правилам конвертации или с помощью формата EnterpriseData, следует выполнять все необходимые действия по (до)заполнению объекта. Эти действия рекомендуется размещать в экспортных процедурах самого объекта, которые используются вызывающей стороной при записи объекта в режиме обмена данными.
Читайте также: