Выгрузка справочника складов из 1С для обмена данными

· 9 мин

Содержание

Выгрузить склады из 1С можно несколькими способами — от вывода списка в Excel за полминуты до настройки автоматического обмена по расписанию. Выбор зависит от того, куда едут данные: человеку в таблице, в другую базу 1С, на сайт или в сторонний сервис.

Самый быстрый путь — открыть список складов и нажать Ещё → Вывести список: получится таблица, которую сохраняют в Excel. Для регулярного обмена с сайтом или маркетплейсом подойдёт формат CommerceML, для переноса в такую же базу — универсальная выгрузка XML, а для нестандартного получателя пишут свою обработку.

Куда нужно выгрузить склады?

Чтобы не читать всё подряд, сверьтесь с таблицей — она показывает, какой способ под какую задачу.

СпособКогда подходитФормат на выходеПрава
Вывести списокотдать таблицу человекуExcel, табличный документобычный пользователь
Выгрузка/загрузка XMLперенос в такую же базу 1СXMLоткрытие обработок
CommerceMLобмен с сайтом, магазиномXML (пакет обмена)настройка обмена
Своя обработканестандартный формат получателяCSV, XML, JSON — любойразработчик
Прямой SQLаналитика, BI вне 1Стаблица СУБДдоступ к SQL Server
Регламент/планировщикрегулярная выгрузкаформат вашей обработкиадминистратор

Где лежит справочник складов в разных конфигурациях

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

КонфигурацияГде открыть список складов
1С:Бухгалтерия 3.0Справочники → Товары и услуги → Склады
1С:Управление торговлей 11раздел Склад и доставка (список «Склады»)
1С:ERP, Комплексная автоматизацияраздел Склад и доставка

В «1С:Бухгалтерии» справочник называется «Склады (места хранения)», в «Управлении торговлей» — просто «Склады». Поля у них схожие: код, наименование, тип склада (оптовый, розничный, ордерный), подразделение. Именно эти реквизиты и попадают в выгрузку.

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

Быстрая выгрузка списка складов в Excel

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

  1. Откройте список складов (пути — в таблице выше).
  2. Настройте колонки: через Ещё → Изменить форму добавьте в список нужные реквизиты (код, тип склада, подразделение). По умолчанию видно не всё.
  3. Нажмите Ещё → Вывести список.
  4. В окне выбора отметьте колонки, которые пойдут в выгрузку, и формат вывода — «Табличный документ».
  5. В полученном табличном документе выполните Файл → Сохранить как и выберите тип «Лист Excel 2007 (.xlsx)».

На выходе — обычная книга Excel со списком складов. Способ не требует ни прав разработчика, ни внешних обработок, работает в любой типовой конфигурации на платформе 8.3 с интерфейсом «Такси».

Вывести список отдаёт ровно то, что видно в колонках формы. Если нужен реквизит, которого нет в списке, сначала добавьте его через настройку формы, иначе он в файл не попадёт.

Универсальный обмен складами через XML и JSON

Когда склады переносят из одной базы 1С в другую такую же конфигурацию, список в Excel не годится: теряются внутренние ссылки. Здесь работает выгрузка в XML.

Для этого есть типовая внешняя обработка «Выгрузка и загрузка данных XML» (файл вида ВыгрузкаЗагрузкаДанныхXML.epf). Порядок такой:

  1. Откройте обработку через Файл → Открыть и укажите путь к .epf.
  2. На закладке выгрузки отметьте объект Справочник.Склады (при необходимости — связанные справочники, например «Организации» или «Подразделения», иначе ссылки не восстановятся).
  3. Укажите файл-приёмник и запустите выгрузку.
  4. В базе-получателе той же обработкой выполните загрузку из полученного XML.

Выгрузка XML между базами работает корректно только при одинаковой структуре конфигурации. Если релизы или сами конфигурации различаются, объект может не загрузиться — для разнородных баз используют формат EnterpriseData и правила конвертации, а не прямой XML.

Формат JSON 1С тоже умеет: в коде доступны объекты ЗаписьJSON и методы сериализации. Но готовой кнопки «выгрузить склады в JSON» в типовой поставке нет — JSON пишут своей обработкой (следующий раздел).

Обмен складами с сайтом и маркетплейсом по CommerceML

Для интернет-магазина склады выгружают не отдельным файлом, а в составе стандартного обмена по протоколу CommerceML. Склады и остатки по ним передаются внутри пакета предложений (offers.xml).

Настройка живёт в разделе обмена с сайтом (в «Управлении торговлей» и «Бухгалтерии» — пункт про обмен с сайтом или интеграцию с 1С-Битрикс; точное название зависит от конфигурации). Общая логика:

  • 🔗 в настройке узла обмена указывают, какие склады участвуют в выгрузке остатков;
  • 📦 включают выгрузку остатков — без этой галочки склады в пакет не попадут;
  • 🏷️ сопоставляют склады 1С со складами на стороне сайта по коду или наименованию.

Как реквизиты 1С ложатся в CommerceML:

Сопоставление полей
Склад (место хранения)→Элемент «Склад» в пакете offers.xml
Код склада→Идентификатор склада на стороне сайта
Остаток по складу→Количество в предложении (offer)
Тип склада (опт/розница)→Отдельная площадка или ценовая группа на сайте

Для маркетплейсов прямого стандарта «склады по CommerceML» нет — площадки принимают остатки через свои API или через модули-коннекторы. В этом случае склады и остатки чаще отдают своей обработкой в формате, который требует конкретный маркетплейс (как правило, CSV или XML по их шаблону).

Своя обработка: выгрузка складов программно

Когда получателю нужен нестандартный формат, пишут внешнюю обработку или просто выполняют код в консоли (например, через типовую обработку выполнения запросов/кода, если она есть в вашей базе). Склады читают запросом и пишут в файл.

Пример выгрузки списка складов в CSV:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|   Склады.Код КАК Код,
|   Склады.Наименование КАК Наименование
|ИЗ
|   Справочник.Склады КАК Склады
|ГДЕ
|   НЕ Склады.ПометкаУдаления";

Выборка = Запрос.Выполнить().Выбрать();

Запись = Новый ЗаписьТекста("C:\Обмен\sklady.csv", КодировкаТекста.UTF8);
Пока Выборка.Следующий() Цикл
    Запись.ЗаписатьСтроку(Выборка.Код + ";" + Выборка.Наименование);
КонецЦикла;
Запись.Закрыть();

Запрос отбирает только непомеченные на удаление склады — закрытые и ошибочные позиции на выгрузку не пойдут. Разделитель ; и кодировку подбирают под получателя: для многих систем нужна windows-1251, тогда в коде меняют параметр кодировки.

Для XML вместо ЗаписьТекста берут объект ЗаписьXML и формируют узлы с реквизитами складов; для JSON — ЗаписьJSON. Структуру тегов и имён полей задаёт тот, кто принимает файл, поэтому универсального шаблона нет — обработку пишут под конкретный формат обмена.

Если выгрузка нужна регулярно, оформите этот код внешней обработкой с параметрами (путь к файлу, кодировка). Так его удобно подключить к автоматическому запуску.

Выгрузка складов напрямую из базы данных через SQL

Если 1С работает в клиент-серверном варианте на MS SQL Server, список складов можно прочитать напрямую из базы запросом SQL. Способ выбирают аналитики, которым нужны данные в BI-системе, а не в 1С.

Главная сложность — физические имена таблиц и полей не совпадают с именами справочников. Справочник хранится в таблице вида _ReferenceNN, где номер назначает платформа. Узнать соответствие «объект метаданных → таблица СУБД» помогает встроенная функция ПолучитьСтруктуруХраненияБазыДанных() — выполните её в 1С и получите точные имена таблиц и колонок для справочника складов.

Правила для этого способа:

  • ⚠️ работайте только на чтение (SELECT); прямые изменения в таблицах 1С нарушают целостность данных и ломают базу;
  • 📋 имена таблиц меняются после реструктуризации — не зашивайте номер _ReferenceNN намертво, перечитывайте структуру;
  • 🔒 для регулярного доступа заводите отдельного пользователя SQL с правами только на чтение.

Когда имена таблицы и колонок известны, запрос выглядит привычно для любого, кто работал с SQL:

SELECT _Code AS Код, _Description AS Наименование
FROM dbo._ReferenceNN
WHERE _Marked = 0x00

Здесь _Code — код, _Description — наименование, _Marked — пометка удаления (0x00 — не помечен). Номер NN в имени таблицы и точные имена колонок подставьте из результата ПолучитьСтруктуруХраненияБазыДанных() — вслепую их не угадать.

Прямой SQL быстрее штатной выгрузки на больших данных, но завязан на внутреннюю структуру платформы — при обновлении конфигурации или платформы запросы, возможно, придётся править.

Автоматизация: выгрузка складов по расписанию

Разовую выгрузку делают руками, регулярную — ставят на расписание.

В клиент-серверной базе за это отвечает регламентное задание: вашу обработку выгрузки оформляют как метод, который сервер запускает по графику (например, каждый час или раз в сутки ночью). Расписание настраивают в консоли администрирования кластера или программно.

В файловой базе регламентные задания выполняются только при открытой сессии. Поэтому там выгрузку по расписанию запускают через планировщик Windows: он стартует 1cv8 в пакетном режиме с параметром /Execute и путём к обработке. Платформа открывает базу, отрабатывает код и закрывается.

Автоматический запуск 1cv8 /Execute занимает лицензию и сеанс на время работы. Для файловой базы планируйте выгрузку на время, когда с базой никто не работает, иначе возможны конфликты блокировок.

Для обмена с сайтом по CommerceML расписание уже встроено в настройку узла обмена — отдельный планировщик не нужен, периодичность задаётся прямо в параметрах обмена.

Частые ошибки при выгрузке складов

Разберём, что чаще всего идёт не так — и как это обойти.

  • 🔤 Крякозябры в CSV. Файл выгружен в UTF-8, а получатель ждёт windows-1251 (или наоборот). Проверьте кодировку на обеих сторонах и при импорте в Excel указывайте её вручную через мастер импорта текста.
  • 🧩 XML не загружается в другую базу. Конфигурации или релизы различаются. Для разнородных баз нужен формат EnterpriseData и конвертация, а не прямой XML.
  • 📦 Склады не появились на сайте. В настройке обмена не включена выгрузка остатков или склад не отмечен как участвующий в обмене. Проверьте галочки в узле обмена.
  • 🔒 Пустая выгрузка. У пользователя нет прав на чтение справочника складов, либо запрос отфильтровал все строки (например, по ПометкаУдаления). Проверьте права и условия отбора.
  • 🔁 Дубли складов у получателя. Сопоставление идёт не по тому полю. Договоритесь об уникальном ключе (код склада) и сверяйте по нему, а не по наименованию.

Частые вопросы

Можно ли выгрузить склады вместе с остатками товаров?
Через Вывести список — нет, он отдаёт только карточки складов. Остатки выгружают отдельно: отчётом «Остатки товаров» в Excel или обменом по CommerceML, где остатки идут в составе предложений.
В какой формат лучше выгружать для переноса в другую 1С?
В XML обработкой «Выгрузка и загрузка данных XML», если конфигурация-приёмник такая же. Для разных конфигураций — формат EnterpriseData с правилами конвертации.
Нужны ли права разработчика, чтобы выгрузить склады?
Для вывода списка в Excel — нет, достаточно прав на просмотр справочника. Для своей обработки и прямого SQL нужны расширенные права и доступ к коду или базе данных.
Почему в выгруженном списке меньше складов, чем в базе?
Скорее всего, часть складов помечена на удаление или скрыта фильтром списка. Снимите отбор в форме либо уберите условие по пометке удаления в запросе.
Как часто можно обновлять выгрузку складов автоматически?
Регламентным заданием — хоть каждые несколько минут, но для справочника складов это избыточно: он меняется редко. Разумная периодичность — раз в сутки или по факту изменения.