Казалось бы, про эту программу и разработку в ней правил конвертации уже сказано все, что можно. Появились уже более современные и быстрые технологии. Почему же все еще она?
Дело в том, что «Конвертация данных» второй редакции все еще актуальна для огромного круга задач. Она имеет очень широкую функциональность и позволяет реализовывать сложные алгоритмы. Годы идут, а люди продолжают ей пользоваться и у них возникает много вопросов по этой программе.
Возможно, в будущем вы тоже будете заниматься такими проектами и столкнетесь с задачами, похожими на те, про которые я собираюсь рассказать. Мне хочется вам в этом помочь.
Как будет построена статья?
- Сначала немного теории и немного советов по оптимизации правил конвертации.
- А далее я расскажу про часто возникающие у нас в проектах проблемы и про то, как мы их решаем.
К данной статье есть приложение, где для каждого слайда приведены примеры кода, которые вы можете скопировать и применить у себя, если вам это потребуется.
Простые и эффективные методы оптимизации переносов
Давайте рассмотрим наиболее простые и эффективные методы оптимизации переносов.
- Самый основной и актуальный из них – это отключение выгрузки объектов по ссылке. Когда вы выгружаете справочную информацию отдельно, а далее в документах не тратите время на ее выгрузку.
- Еще один эффективный метод – это выгрузка только ссылки. Когда вы для какого-то справочника создаете два правила конвертации объекта:
- Первое правило выгружает только ссылку (в нем выгружаются только те свойства, которые используются для поиска). Это правило используется для поиска ссылки на этот справочник во всех других правилах конвертации объектов.
- И еще одно отдельное правило конвертации, где выгружаются все свойства данного справочника. Именно оно используется в правиле выгрузки данных.
- Конечно же, актуально использование кэша выгрузки. Для этого достаточно в правиле конвертации просто поставить галочку «запоминать выгруженные объекты».
- Имеет смысл создавать собственный кэш с использованием глобального параметра, куда в обработчике конвертации «Перед выгрузкой данных» помещается некая таблица значений с объектами, соответствующими определенному условию. Используя собственный кэш, вы сможете избежать множества запросов в цикле, когда необходимо дозаполнять свойства данных объектов.
Прошу вас также не забывать про использование режима отладки переноса, который есть в обработке «Универсальный обмен данными в формате XML». В приложении к данному докладу есть подробная видеоинструкция, где рассказывается:
- Как создать такую обработку отладки;
- Как запустить для нее замер производительности;
- Как увидеть те участки своих алгоритмов, которые у вас неоптимальны.
- И как их оптимизировать.
Методы поэтапного выполнения переносов данных
Для больших тяжелых баз часто возникает необходимость проводить перенос поэтапно.
- Стандартная методика поэтапного переноса данных, рекомендованная фирмой «1С», заключается в том, что:
- Сначала вы переносите всю справочную информацию;
- Потом – начальные остатки;
- И далее документы.
- Также в силу большого размера базы или каких-то ограничений вашего «железа» часто возникает необходимость делить документы на части. Я рекомендую делить их:
- Либо по времени (по годам, полугодиям);
- Либо по виду документа:
- Сначала поступления;
- Потом все закупочные документы;
- Потом все реализационные документы.
- Либо вы можете реализовать поэтапное выполнение переноса данных с помощью разделения на части по группам правил выгрузки. На мой взгляд, очень показательно данная методика реализована в переносе данных из ЗУП 2.5 в ЗУП 3.0. Да, там очень замудрено реализованы алгоритмы, но если изучить обработку переноса, то вы увидите, что процесс разделен по группам правил выгрузки:
- Сначала выгружается учетная политика;
- Далее – справочная информация;
- И в последнюю очередь уже кадровые и расчетные данные.
Каждая из групп правил выгрузки выгружается в отдельный файл и далее в таком же порядке загружается в ЗУП3.0.
Особенности переноса документов в КД 2
Как вы знаете, в типовых переносах фирмы «1С» обычно не используется перенос документов. Они переносят только справочную информацию и некие начальные остатки. Заказчиков это часто не устраивает, они просят все-таки перенести им все документы за какой-то период (например, с начала года). Иногда с этим возникают проблемы.
- В первую очередь, проблемы возникают из-за того, что в программах 1С разных редакций реализованы разные методологии учета. И даже один и тот же документ с одним и тем же названием может отражать немного другую хозяйственную операцию. Примеры этих ситуаций я покажу на следующем слайде.
- Также хочу напомнить, что при переносе документов в такие редакции программ, как «Комплексная автоматизация 2.0» или ERP, вам недостаточно просто провести документ. Его, как вы знаете, необходимо также отразить в регламентированном учете, а для этого у вас должны быть предварительно заполнены соответствующие настройки отражения. Про это нужно помнить. Как выполнить такое заполнение автоматически, я вам также сейчас покажу.
- Но вот вы выполнили перенос и в базе-приемнике у вас появились разнообразные тысячи документов. Я думаю, что никого из заказчиков не устроит, если эти тысячи документов в базе-приемнике будут непроведенные, а отчеты пустые. Разумеется, документы нужно провести. Дальше я покажу, как это лучше реализовать. При этом я бы советовал заранее составить таблицу тех документов, которые необходимо провести, потому что возможно, что не все документы, которые вы перенесли, были в исходной базе проведенными. Составляете такую таблицу, сортируете и запускаете ее проведение в глобальном обработчике конвертации «После загрузки данных».
Проблемы совместимости программ 1С
Рассмотрим конкретные проблемы, которые возникают в задачах переноса документов из конфигураций 1С старых редакций в новые. Сразу оговорюсь, что эти примеры касаются переносов для таких конфигураций, как: УТ10->УТ11, КА1.0-> КА2.0, и УПП->ERP.
- Например, есть серьезное отличие в методологии реализации документа «Авансовый отчет». В программах новых редакций данный документ не может оприходовать товар. Таким образом, для каждого авансового отчета, в котором оприходовался товар, вам придется создавать отдельный виртуальный документ (либо «Поступление товаров и услуг», либо «Оприходование товара»).
- Есть серьезное отличие в документе «Корректировка долга» – приходится анализировать вид операции. Дело в том, что в программах новых редакций вообще нет документа «Корректировка долга»:
- Есть документ «Списание задолженности»;
- Есть документ «Взаимозачет задолженности».
А если вид операции в старой программе ни тот, ни другой, то придется создавать для оставшихся операций документ «Корректировка записей регистров».
Вот такое мое предложение и решение на этот счет.
- Отличие в учете грузовых таможенных деклараций. В частности, отсутствует документ «Импорт ГТД».
- Также многие зарплатные документы в новой базе реализованы отдельно по сотруднику. Если раньше документ содержал табличную часть, то сейчас придется разделять его на множество документов, для каждого сотрудника отдельно.
- И, как вы знаете, в программах новых редакций в торговом и в производственном учете фирма «1С» отказалась от использования множества перечислений для видов операций. Сейчас у нас есть одно общее перечисление «Хозяйственные операции» и каждый документ из этого общего перечисления использует только несколько своих операций. Так вот, к сожалению, для переноса финансовых документов во многих ситуациях нет достойного соответствия и приходится переносить их либо в «Прочий приход денежных средств», либо в «Прочий расход денежных средств», что может быть не очень удобно.
FAQ. Выгрузка измененных объектов
Давайте перейдем к следующей части. Это – часто возникающие проблемы в задачах переносов и то, как я предлагаю их решать малыми силами.
Сначала разберем ситуацию, когда вам нужно только «довыгрузить» измененные объекты из базы.
- Первое стандартное решение – вы создаете свой новый план обмена, создаете узел, настраиваете его. И то, что зарегистрировалось, выгружаете.
- Либо через типовую подсистему «Обмен данными» (используете их обработки).
- Либо можете создать регламентное задание, в котором будет запускаться обработка выгрузки для зарегистрированных объектов.
- Если конфигурация на поддержке и нет возможности создать свой план обмена, а вам нужно реализовать обмен с некоей сторонней системой, то можно использовать такой план обмена, как «Полный». Однако при его использовании у вас будет регистрироваться много лишних объектов и вам придется каждый раз при выгрузке очищать те, которые не используются в составе вашего обмена.
- Есть альтернативное решение: вы можете сформировать запрос к журналу регистрации, составить список тех объектов, по которым есть записи с момента последней выгрузки и выгружать уже только вот эти измененные в этот период объекты.
FAQ. Отказ от перезаписи при загрузке
Давайте рассмотрим ситуацию, когда вам нужно не перезаписывать существующие объекты в базе.
Допустим, вы переносили договоры контрагентов в индивидуальные соглашения с клиентами и после переноса ваши сотрудники прописали в этих индивидуальных соглашениях недостающие условия сотрудничества с клиентом. При новом переносе вся их работа будет стерта.
- Понятно, что есть простой способ отказа от перезаписи – это установка флага «Не перезаписывать существующие объекты». В этом случае будут создаваться только новые. Это просто и понятно.
- Но может возникнуть не такая простая ситуация. Вам нужно перегрузить весь квартал, но не затрагивать документы, по которым сотрудники ввели какие-то ручные корректировки. В этом случае я рекомендую использовать в базе-приемнике некий флаг, показывающий, что были введены корректировки. Это может быть:
- Либо какое-то доп. свойство;
- Либо новый реквизит;
- Либо просто решение «в лоб» – некое кодовое слово, которое сотрудник пишет в комментарии к документу. Например, слово «Защитить».
И при нахождении данного признака в обработчике «После загрузки» правил конвертации данного документа мы устанавливаем «Отказ». У нас перенесется весь квартал, кроме измененных и защищенных от перезаписи документов.
FAQ. Отражение в регламентированном учете
Уделим немного внимания настройкам отражения в регламентированном учете для таких программ, как «Комплексная автоматизация 2.0» либо ERP.
Если просто перенести документы и провести их, не заполнив предварительно регистры настроек отражения в регламентированном учете, у вас не появится никаких движений по регистру бухгалтерии.
Что можно сделать? Можно перед началом проведения документов сгенерировать эти настройки неким автоматическим способом. На слайде показан пример подобного заполнения для одного из этих регистров сведений – мы просто будем хранить всю номенклатуру на 41 счете.
Разумеется, после того, как вы сгенерируете настройки отражения таким образом, вы не получите сразу корректную ОСВ, так как она будет содержать ошибки. Но это будет первое приближение, с которым уже можно работать. И дальше уже можно внести в эти настройки изменения и, перепроводя документы, получить более корректный результат.
FAQ. Коды строк заказов
Также не стоит забывать про такой нюанс, что в программах новых редакций у документов реализации и поступления должно быть заполнено поле КодСтроки. Когда данные документы создаются вручную, эти поля заполняются, но при переносе вам КодСтроки взять неоткуда, потому что это поле должно браться из заказов, это не номер строки табличной части.
Как я рекомендую справляться с данной ситуацией?
- При загрузке вы создаете таблицу ДокументыДляПроведения, куда добавляете все документы. В глобальном обработчике конвертации «ПослеЗагрузкиОбъектов» сортируете данную таблицу и приступаете к проведению документов.
- На первой итерации проводите только заказы клиентов и заказы поставщикам. Дело в том, что значение поля КодСтроки должно браться из регистров накопления «Заказы клиентов» или «Заказы поставщикам».
- После этого формируете запрос по движениям данных заказов, и помещаете их коды строк в индексированную таблицу.
- И на второй итерации уже проводите документы «Реализация товаров и услуг» и «Поступление товаров и услуг», проставляя соответствующие коды строк в их табличные части.
При таком алгоритме у вас документы продаж и закупок будут проведены корректно, поле КодСтроки в их таблицах будет заполнено и это займет оптимальное количество времени.
FAQ. Ошибка записи из-за блокировки
Часто при проведении загрузки данных возникает проблема записи объектов из-за возникших блокировок.
- Это может происходить, если вы загружаете в базу, где уже работают пользователи.
- Но необязательно. Такое также может происходить и при загрузке в совершенно новую пустую базу.
Какое решение я рекомендую?
- В глобальном обработчике конвертации «Перед загрузкой данных» рекомендую составить список включенных регламентных заданий.
- После этого выключаем все регламентные задания.
- И уже после того, как перенос отработал, в глобальном обработчике конвертации «После загрузки данных» включаем те регламентные задания, которые работали до того, как мы начали выполнять перенос данных.
Таким образом, минимизируется возможность появления блокировок при загрузке данных.
Конечно же, не стоит забывать про то, что если в базе работают пользователи, то блокировки все же могут возникнуть.
FAQ. Подмена ссылок при переносе
Иногда возникает задача подмены объектов, когда при переносе данных необходимо провести некоторое сопоставление. Например, заказчик передает вам таблицу, где указаны пары значений:
- Идентификаторы объекта в старой базе и в новой;
- Коды некой справочной информации в старой базе и в новой;
- В крайнем случае, наименования объекта в старой и новой базах.
И вам необходимо выполнить их подмену.
Это реализуется при помощи глобального параметра конвертации для хранения соответствия и параметра объекта для получения значения из этого соответствия. Например, мы хотим при выгрузке договоров контрагентов подменять их статью движения денежных средств на определенную статью из некоего соответствия. Есть два возможных способа данной реализации:
- Первый способ – это когда мы для правила конвертации «ДоговорыКонтрагентов» создаем новый параметр объекта, в котором из соответствия определяется значение статьи движения денежных средств. И в обработчике «После загрузки» ПКО «ДоговорыКонтрагентов» мы этот параметр объекта считываем, определяем и записываем:
Объект.СтатьяДвиженияДенежныхСредств = НайденнаяСДДС
Но все эти действия вам придется повторить для каждого правила конвертации, которое имеет ссылку на статью движения денежных средств. - Мне больше нравится другой, более универсальный способ, когда вы изменяете само правило конвертации «СтатьиДвиженияДенежныхСредств». То же самое, создаете в нем отдельный параметр, в котором из соответствия определяется значение, которое нужно искать в базе-приемнике (например, уникальный идентификатор). И в обработчике «После загрузки» этого же ПКО вы данный параметр считываете и подменяете уже саму переменную Объект:
Объект = НайденнаяСДДС
В этом случае вы сможете использовать ПКО «СтатьиДвиженияДенежныхСредств» у себя в базе везде и больше вам нигде не нужно будет подменять ссылки. - Если подобная задача у вас возникает при регулярном обмене, я рекомендую хранить эту таблицу (этот маппинг) не в коде, не в каком-то файле, а все-таки создать для этого отдельный регистр. Тогда пользователи, работающие только в пользовательском режиме, смогут даже что-то изменить, чтобы при следующем обмене уже заработало новое соответствие.
FAQ. Сверка ОСВ
Иногда после проведения переноса возникает задача сверки оборотно-сальдовой ведомости. На экране вы можете увидеть, как реализован данный алгоритм в типовом переносе начальных остатков из УПП в ERP.
- В обработчике «Перед выгрузкой данных» в базе-источнике срабатывает запрос к регистру бухгалтерии – к остаткам и оборотам за период. Это происходит в алгоритме под названием «Проверки».
- Результат этого запроса, содержащий счета учета и суммы, мы помещаем в глобальный параметр конвертации.
- И уже на заключительной стадии переноса, после проведения всех документов и отражения их в регламентированном учете мы формируем аналогичный запрос в базе-приемнике.
- В результате мы можем сравнивать те суммы, которые были по каждому счету учета в исходной базе и в базе-получателе.
Так можно реализовать проверку.
FAQ. Оптимизация обмена с сайтом
Иногда возникают задачи обмена с сайтом, и сейчас я хочу рассказать, как можно ускорить время, необходимое на то, чтобы информация из базы 1С оказалась у вас на сайте.
- Сначала вы выгружаете сообщение обмена, допустим, на FTP-сервер.
- После этого вызываете GET-запрос с параметром «Номер отправленного сообщения» уже на самом сайте.
- И получаете ответ:
- Если загрузка произошла успешно, то вам, допустим, приходит ответ в виде самого номера сообщения.
- Если неуспешно – приходит текст ошибки.
- И если все прошло хорошо, вы у себя стираете зарегистрированные изменения и увеличиваете номер отправленного сообщения на единицу.
Изменения из вашей базы будут попадать гораздо быстрее. Это – практически оперативные обмены по подписке.
Этот алгоритм, в принципе, описан на сайте «1С», но я часто замечал, что его не используют.
FAQ. Проверка синхронности данных
Иногда возникает задача проверки синхронности данных в вашей исходной 1С-базе и в некоей сторонней системе. Как можно реализовать данную задачу? Ведь вам важно, чтобы пользователи могли одинаково верить и 1С, и некоей другой вашей системе, чтобы данные были и актуальны, и синхронны, и вы могли бы руководству это подтвердить.
- В сторонней системе у объекта добавляется поле, в котором хранится значение реквизита «ВерсияОбъекта» из 1С.
- По расписанию через веб-сервис вы подключаетесь к сторонней системе (сами обмены проводятся отдельно) – и сравниваете значения поля «ВерсияОбъекта» у себя в 1С и в вашей сторонней системе.
- Результатом такого сравнения будет список отличающихся объектов.
- Вы можете разобраться с причинами этих отличий и исправить ситуацию, дозагрузив отличающиеся объекты.
FAQ. Подсистема контроля ведения учета (БСП)
Я сегодня привел несколько примеров того, как можно и нужно проверять ваши перенесенные данные. А что для этой цели нам может предложить сама фирма «1С»?
В БСП, в релизе 2.4.3 ознакомительно появилась новая подсистема, которая называется «Контроль ведения учета». Она содержит действительно очень важные проверки, которые имеет смысл запускать после проведения переноса. Здесь на экране можно видеть скриншот из демонстрационной базы БСП данного релиза.
В скором времени, когда данная версия БСП будет у нас в каждой базе, вы сможете проверять результат переноса с помощью этих инструментов. При этом, как сообщает фирма «1С», сам интерфейс проверки может быть изменен.
К сожалению, текущая версия программы ERP (релиз 2.4.1) содержит более старую версию БСП, где такой функциональности нет пока даже в ознакомительном режиме. Так что ждем конца года или даже следующего года.
Заключение. Выводы
Мы с вами сегодня рассмотрели некий список небольших, но часто возникающих проблем в задачах переносов. Я вам желаю, чтобы ваши проекты проходили всегда успешно. Если столкнетесь с подобными задачами, в приложении к докладу вы сможете взять примеры кода, скопировать и использовать у себя.
****************
Данная статья написана по итогам доклада, прочитанного на конференции INFOSTART EVENT 2024 COMMUNITY. Больше статей можно прочитать здесь.
В 2024 году приглашаем всех принять участие в 7 региональных митапах, а также юбилейной INFOSTART EVENT 2024 в Москве.
Автор — прикладной математик по образованию ?
(1) Добрый день. Да)
1. Недавно ковырялся с правилами обмена, у меня перед выгрузкой много кода типа Если Источник.Проведен = Ложь ИЛИ Источник.Подразделение = … ИЛИ … Тогда Отказ КонецЕсли; Думал, если отбирать данные запросом — можно убрать объектное чтение и ускорить выгрузку. Бегло пробежал Вашу статью, но ничего про способ чтения не нашел. Как считаете, это существенно ?
2. Поскольку Вы — математик, посмотрите статью про математическую индукцию ?
https://infostart.ru/public/794859 Интересно Ваше профессиональное мнение.
Добрый день! Скачал «FAQ — приложение к докладу». В папке «01 Слайд »Простые и эффективные методы оптимизации переносов'» размещено видео без звука. Выложите, пожалуйста, видео со звуком.
(3) зачастую документы выгружаются не напрямую, а в составе других документов. Возникают ситуации, когда такие документы загружать нельзя категорически по тому или иному условию. По этой причине эти условия прописывают перед выгрузкой объекта.
В целом простые проверки особо не влияют на скорость выгрузки.
Скачал материалы. FAQ в архиве — скачался нормально, а вот PDF — «битый» почему-то
Добрый день. Пользуюсь вашими методиками, для оптимизации своих правил. Можете объянить чем вот этот пункт:
«Еще один эффективный метод – это выгрузка только ссылки. Когда вы для какого-то справочника создаете два правила конвертации объекта:
Первое правило выгружает только ссылку (в нем выгружаются только те свойства, которые используются для поиска). Это правило используется для поиска ссылки на этот справочник во всех других правилах конвертации объектов.
И еще одно отдельное правило конвертации, где выгружаются все свойства данного справочника. Именно оно используется в правиле выгрузки данных.»
Отличается от настройки в ПКО:
«При переносе объекта по ссылке НЕ создавать новый объект (переносить ссылку) «?
Судя по описанию будет сделано как раз то что вы описали в ваших рекомендациях… Нолько не надо заморачиваться с написание дополнительных правил.