Телефоны и e-mail контрагентов из 1С: Excel, XML, JSON и vCard

· 9 мин

Содержание

Быстрее всего выгрузить контакты клиентов из 1С так: откройте список контрагентов, нажмите Ещё → Вывести список, отметьте нужные колонки и сохраните результат в Excel. Если телефонов и e-mail в колонках нет, берите универсальный отчёт или запрос к табличной части «Контактная информация» — там лежат все телефоны, адреса и почта.

Для обмена с CRM удобнее JSON, для смартфона — файл vCard, для ежедневной выгрузки — скрипт через COM-соединение. Примеры даны для 1С:Бухгалтерии 3.0 и 1С:Управления торговлей 11 на платформе 8.3 с интерфейсом «Такси».

Подготовка базы клиентов перед выгрузкой контактов

Экспорт честно переносит всё, что есть в базе, включая мусор. Десять минут на чистку экономят ручную правку файла на сотни строк.

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

КонфигурацияГде список клиентовГде контактные лица
Бухгалтерия предприятия 3.0Справочники → Покупки и продажи → КонтрагентыВкладка «Контактные лица» в карточке контрагента
Управление торговлей 11Справочник «Партнеры» (раздел «CRM и маркетинг») и связанные с ним контрагентыСправочник «Контактные лица партнеров»

В УТ 11 телефоны и почта чаще заполнены у партнёра, а не у контрагента-юрлица. Если выгружать из «Контрагентов», половина колонок окажется пустой.

Что проверить до экспорта:

  • 🔍 Дубли. В БП 3.0 есть обработка Администрирование → Обслуживание → Корректировка данных → Поиск и удаление дублей. Ищите по ИНН и наименованию.
  • 🗑️ Помеченные на удаление. Их лучше удалить или отфильтровать, иначе в рассылку попадут закрытые фирмы.
  • 📞 Формат телефонов. В одной базе часто живут 8 (495) 123-45-67, +74951234567 и 495-123-4567. Для CRM и смартфона нужен единый вид, лучше +7XXXXXXXXXX.
  • 📁 Группы. Если справочник разбит на «Покупатели», «Поставщики», «Архив», решите заранее, какие группы выгружать.

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

Контакты сотрудников клиента — фамилия, мобильный, личная почта — это персональные данные. Передавать такой файл подрядчику или загружать в сторонний сервис можно только при законном основании по 152-ФЗ. Для своей CRM внутри компании вопрос обычно закрыт договором и согласием, для внешней рассылочной платформы — уже нет.

Выгрузка контактов из списка справочника в Excel

Самый простой путь. Подходит, когда нужны наименование, ИНН и пара колонок, которые уже видны в списке.

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

Если в форме списка нет колонки «Телефон», добавьте её через Ещё → Изменить форму или Ещё → Настроить список и повторите вывод. В типовых БП 3.0 в списке контрагентов обычно есть только наименование, ИНН и КПП, а телефон и e-mail приходится выводить другими способами.

При выводе списка 1С берёт строки с учётом текущего отбора и иерархии. Если вы стоите внутри группы, в файл попадёт только эта группа. Для полного списка включите режим просмотра «Список» вместо «Иерархический список».

Стандартные отчёты: таблица с телефонами и почтой

Когда нужны именно телефоны и e-mail, удобнее универсальный отчёт. Он есть в БП 3.0, УТ 11 и других конфигурациях на БСП. Найдите его в разделе Отчеты — он лежит среди стандартных отчётов.

Настройка за шесть шагов:

  1. Тип объекта — «Справочник», объект — «Контрагенты» (или «Партнеры» в УТ 11).
  2. Откройте настройки отчёта в расширенном режиме: Настройки → Вид: Расширенный.
  3. На вкладке «Поля и сортировки» добавьте «Наименование», «ИНН» и поля табличной части «Контактная информация»: «Вид» и «Представление».
  4. На вкладке «Отборы» поставьте «Пометка удаления = Нет», «Это группа = Нет».
  5. Нажмите «Сформировать».
  6. Сохраните результат в .xlsx так же, как список.

Отчёт выдаст несколько строк на одного клиента: по строке на каждый телефон, адрес и e-mail. Для CRM это неудобно, нужен «широкий» вид — одна строка, а телефон и почта в своих колонках.

Получить его можно двумя путями:

  • 📊 В Excel построить сводную таблицу: строки — контрагент, колонки — «Вид», значения — «Представление».
  • 🧾 В отчёте добавить отбор по «Виду» и сформировать отдельно телефоны и отдельно почту, затем свести через ВПР по ИНН.

Сохраните настройку отчёта (Еще → Сохранить вариант отчета), чтобы в следующий раз не собирать поля заново.

Запрос к базе: одна строка на клиента

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

Контактная информация в типовых конфигурациях хранится в табличной части КонтактнаяИнформация самого справочника. Тип записи задаёт перечисление ТипыКонтактнойИнформации.

ВЫБРАТЬ
    К.Наименование КАК Клиент,
    К.ИНН КАК ИНН,
    МАКСИМУМ(ВЫБОР
        КОГДА КИ.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
            ТОГДА КИ.Представление
        КОНЕЦ) КАК Телефон,
    МАКСИМУМ(ВЫБОР
        КОГДА КИ.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)
            ТОГДА КИ.Представление
        КОНЕЦ) КАК Email
ИЗ
    Справочник.Контрагенты КАК К
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК КИ
        ПО КИ.Ссылка = К.Ссылка
ГДЕ
    НЕ К.ПометкаУдаления
    И НЕ К.ЭтоГруппа
СГРУППИРОВАТЬ ПО
    К.Наименование,
    К.ИНН

МАКСИМУМ с ВЫБОР разворачивает строки в колонки: на выходе одна строка на клиента. Если у клиента три телефона, запрос возьмёт один из них. Чтобы получить все, уберите агрегацию и группировку — вернётесь к «длинному» виду.

Поле Представление — строка в том виде, как её видит пользователь в карточке. В БСП у телефонов есть и отдельные поля номера, но их набор зависит от версии библиотеки. Для выгрузки надёжнее брать представление и чистить его уже в Excel.

Выгрузка контактов клиентов в XML и JSON

XML и JSON нужны, когда контакты уходят не человеку, а программе: сайту, CRM, телефонии, рассылочному сервису.

Универсальная обработка XML

Для переноса справочника в другую базу 1С есть обработка «Выгрузка и загрузка данных XML». Она распространяется через ИТС как внешняя обработка .epf. В ней отмечаете справочник «Контрагенты», задаёте период и имя файла — и получаете XML, который загружается той же обработкой в базу с похожей структурой.

Ограничение: формат внутренний, 1С-шный. Для внешней CRM он неудобен — там проще JSON.

JSON своим кодом

Начиная с платформы 8.3.6 в языке есть ЗаписьJSON и ЗаписатьJSON. Короткий пример для внешней обработки, выполняется на сервере:

Запрос = Новый Запрос(ТекстЗапроса); // текст из предыдущего раздела
Выборка = Запрос.Выполнить().Выбрать();

Клиенты = Новый Массив;
Пока Выборка.Следующий() Цикл
    Клиент = Новый Структура;
    Клиент.Вставить("name", Выборка.Клиент);
    Клиент.Вставить("inn", Выборка.ИНН);
    Клиент.Вставить("phone", Строка(Выборка.Телефон));
    Клиент.Вставить("email", Строка(Выборка.Email));
    Клиенты.Добавить(Клиент);
КонецЦикла;

Запись = Новый ЗаписьJSON;
Запись.ОткрытьФайл("C:\Export\clients.json", "UTF-8");
ЗаписатьJSON(Запись, Клиенты);
Запись.Закрыть();

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

Файл vCard для телефона и почтового клиента

В типовых конфигурациях готовой кнопки «Выгрузить в vCard» нет. Есть два рабочих пути.

Через Google Контакты. Сохраните выгрузку в CSV с колонками «Имя», «Телефон», «E-mail». Импортируйте файл в Google Контакты, затем экспортируйте оттуда в vCard. Контакты сразу появятся на Android-смартфоне, привязанном к этому аккаунту. Минус — данные клиентов проходят через внешний сервис, учитывайте это с точки зрения 152-ФЗ.

Своей обработкой. Файл .vcf — обычный текст. Каждый контакт — блок от BEGIN:VCARD до END:VCARD. Пример записи в формате vCard 3.0:

BEGIN:VCARD
VERSION:3.0
FN:ООО Ромашка
ORG:ООО Ромашка
TEL;TYPE=WORK:+74951234567
EMAIL;TYPE=WORK:info@romashka.ru
END:VCARD

Код, который собирает такой файл из той же выборки:

Текст = Новый ЗаписьТекста("C:\Export\clients.vcf", КодировкаТекста.UTF8);
Пока Выборка.Следующий() Цикл
    Текст.ЗаписатьСтроку("BEGIN:VCARD");
    Текст.ЗаписатьСтроку("VERSION:3.0");
    Текст.ЗаписатьСтроку("FN:" + Выборка.Клиент);
    Текст.ЗаписатьСтроку("ORG:" + Выборка.Клиент);
    Если ЗначениеЗаполнено(Выборка.Телефон) Тогда
        Текст.ЗаписатьСтроку("TEL;TYPE=WORK:" + Выборка.Телефон);
    КонецЕсли;
    Если ЗначениеЗаполнено(Выборка.Email) Тогда
        Текст.ЗаписатьСтроку("EMAIL;TYPE=WORK:" + Выборка.Email);
    КонецЕсли;
    Текст.ЗаписатьСтроку("END:VCARD");
КонецЦикла;
Текст.Закрыть();

Один файл с сотнями карточек импортируется в iPhone (через почту или iCloud), в Android и в Outlook за раз. Если в имени клиента есть запятая или точка с запятой, по стандарту их экранируют обратной косой чертой; без этого часть телефонов покажет имя обрезанным.

Для смартфона полезнее выгружать не фирмы, а контактных лиц: «Иван Петров (Ромашка)». В БП 3.0 для этого делайте запрос к справочнику «Контактные лица», в УТ 11 — к «Контактным лицам партнеров».

Автоматическая выгрузка: COM-соединение и запуск по расписанию

Если CRM должна получать свежие контакты каждую ночь, ручной экспорт не годится. Варианты по возрастанию сложности:

СпособКогда подходитЧто нужно
Пакетный запуск 1С с обработкойФайловая база, выгрузка в файл по расписаниюВнешняя обработка, планировщик Windows
COM-соединениеСкрипт на Python/PowerShell забирает данные самWindows, зарегистрированный comcntr.dll
HTTP-сервис или ODataВнешняя система обращается к 1С по сетиПубликация базы на веб-сервере

Пакетный запуск

Внешняя обработка с кодом из раздела про JSON или vCard запускается из командной строки:

"C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8.exe" ENTERPRISE /F"D:\Bases\Buh" /N"Выгрузка" /P"пароль" /Execute"D:\Scripts\export_contacts.epf"

Код выгрузки ставьте в обработчик ПриОткрытии формы обработки, в конце вызывайте ЗавершитьРаботуСистемы(Ложь). Задание добавьте в Планировщик заданий Windows на ночное время. Для выгрузки заведите отдельного пользователя с правами только на чтение справочников.

COM-соединение из Python

COM-соединение даёт внешнему скрипту прямой доступ к базе. Сначала зарегистрируйте компоненту от имени администратора: regsvr32 "C:\Program Files\1cv8\8.3.xx.xxxx\bin\comcntr.dll". Разрядность Python и платформы должна совпадать.

import win32com.client

connector = win32com.client.Dispatch("V83.COMConnector")
base = connector.Connect('File="D:\\Bases\\Buh";Usr="Выгрузка";Pwd="пароль";')

query = base.NewObject("Запрос")
query.Text = """ВЫБРАТЬ К.Наименование КАК Клиент, К.ИНН КАК ИНН
ИЗ Справочник.Контрагенты КАК К
ГДЕ НЕ К.ПометкаУдаления И НЕ К.ЭтоГруппа"""

sel = query.Execute().Select()
while sel.Next():
    print(sel.Клиент, sel.ИНН)

Каждое COM-подключение занимает лицензию 1С, как обычный сеанс. Если лицензий впритык, ночная выгрузка может не стартовать, пока кто-то работает в базе, — поставьте её на время, когда офис пуст.

Пароль в скрипте и bat-файле хранится открытым текстом. Ограничьте доступ к папке со скриптами и не давайте пользователю выгрузки права на изменение данных.

OData и HTTP-сервисы

Для клиент-серверной базы с веб-публикацией удобнее стандартный интерфейс OData: CRM сама запрашивает справочник по HTTP. Его включают в настройках базы и указывают, какие объекты доступны. Это задача администратора 1С: нужна публикация на IIS или Apache и отдельная учётная запись.

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

Можно ли выгрузить контакты из 1С без прав администратора?
Да, через Ещё → Вывести список и универсальный отчёт. Хватит прав на просмотр справочника. Внешние обработки и консоль запросов обычно требуют права на их открытие.
Почему в выгрузке у некоторых клиентов пустой телефон?
Телефон мог быть записан в поле «Комментарий» или в контактном лице, а не в контактной информации самого контрагента. В УТ 11 частая причина — данные заполнены у партнёра, а выгружается контрагент.
Как выгрузить только покупателей, без поставщиков?
Поставьте отбор по группе справочника. Если группы не ведутся, отберите контрагентов, по которым были реализации за период: в запросе соедините справочник с документами продаж.
В Excel телефоны превратились в числа вида 7,49512E+10. Что делать?
Excel принял номер за число. Перед вставкой задайте колонке текстовый формат или импортируйте CSV через мастер импорта с типом колонки «Текстовый».
Кириллица в CSV открывается «кракозябрами». Как исправить?
Сохраняйте CSV в UTF-8 с BOM или открывайте файл в Excel через Данные → Из текстового/CSV-файла с выбором кодировки UTF-8.

Источники

  • Федеральный закон от 27.07.2006 № 152-ФЗ «О персональных данных»