Выгрузка справочника складов из 1С для обмена данными
Содержание
Выгрузить склады из 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
Это способ «для человека»: когда склады нужно отдать в виде таблицы, а не настраивать обмен.
- Откройте список складов (пути — в таблице выше).
- Настройте колонки: через
Ещё → Изменить формудобавьте в список нужные реквизиты (код, тип склада, подразделение). По умолчанию видно не всё. - Нажмите
Ещё → Вывести список. - В окне выбора отметьте колонки, которые пойдут в выгрузку, и формат вывода — «Табличный документ».
- В полученном табличном документе выполните
Файл → Сохранить каки выберите тип «Лист Excel 2007 (.xlsx)».
На выходе — обычная книга Excel со списком складов. Способ не требует ни прав разработчика, ни внешних обработок, работает в любой типовой конфигурации на платформе 8.3 с интерфейсом «Такси».
Вывести список отдаёт ровно то, что видно в колонках формы. Если нужен реквизит, которого нет в списке, сначала добавьте его через настройку формы, иначе он в файл не попадёт.
Универсальный обмен складами через XML и JSON
Когда склады переносят из одной базы 1С в другую такую же конфигурацию, список в Excel не годится: теряются внутренние ссылки. Здесь работает выгрузка в XML.
Для этого есть типовая внешняя обработка «Выгрузка и загрузка данных XML» (файл вида ВыгрузкаЗагрузкаДанныхXML.epf). Порядок такой:
- Откройте обработку через
Файл → Открытьи укажите путь к.epf. - На закладке выгрузки отметьте объект
Справочник.Склады(при необходимости — связанные справочники, например «Организации» или «Подразделения», иначе ссылки не восстановятся). - Укажите файл-приёмник и запустите выгрузку.
- В базе-получателе той же обработкой выполните загрузку из полученного XML.
Выгрузка XML между базами работает корректно только при одинаковой структуре конфигурации. Если релизы или сами конфигурации различаются, объект может не загрузиться — для разнородных баз используют формат EnterpriseData и правила конвертации, а не прямой XML.
Формат JSON 1С тоже умеет: в коде доступны объекты ЗаписьJSON и методы сериализации. Но готовой кнопки «выгрузить склады в JSON» в типовой поставке нет — JSON пишут своей обработкой (следующий раздел).
Обмен складами с сайтом и маркетплейсом по CommerceML
Для интернет-магазина склады выгружают не отдельным файлом, а в составе стандартного обмена по протоколу CommerceML. Склады и остатки по ним передаются внутри пакета предложений (offers.xml).
Настройка живёт в разделе обмена с сайтом (в «Управлении торговлей» и «Бухгалтерии» — пункт про обмен с сайтом или интеграцию с 1С-Битрикс; точное название зависит от конфигурации). Общая логика:
- 🔗 в настройке узла обмена указывают, какие склады участвуют в выгрузке остатков;
- 📦 включают выгрузку остатков — без этой галочки склады в пакет не попадут;
- 🏷️ сопоставляют склады 1С со складами на стороне сайта по коду или наименованию.
Как реквизиты 1С ложатся в CommerceML:
Для маркетплейсов прямого стандарта «склады по 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, где остатки идут в составе предложений.