Выгрузка списка сотрудников из 1С:Предприятие — стандартная задача для бухгалтеров, кадровых специалистов и IT-отделов. Нужно ли сформировать отчёт для налоговой, передать данные в другую программу или просто сохранить резервную копию — вариантов реализации множество. Но не все они одинаково удобны: где-то потребуются права администратора, а где-то хватит базовых знаний конфигуратора 1С.
В этой статье разберём 5 рабочих способов выгрузки — от простейшего экспорта в Excel до автоматического обмена через JSON/XML. Особое внимание уделим нюансам: почему иногда выгружаются не все поля, как избежать ошибок с кодировкой и что делать, если 1С "зависает" при большом объёме данных. Для программистов приведём примеры кода на встроенном языке, а для пользователей без технических навыков — пошаговые инструкции с картинками (см. спойлеры).
⚠️ Важно: если выгружаете данные для государственных органов (ПФР, ФНС, Роструд), уточните актуальные требования к формату файлов на их официальных сайтах. Форматы и структуры отчётности могут меняться чаще, чем интерфейс 1С.
1. Выгрузка через стандартный отчёт «Список сотрудников»
Самый быстрый способ — использовать встроенные отчёты 1С:Зарплата и Управление Персоналом (ЗУП) или 1С:Бухгалтерия. Он не требует прав доступа к конфигуратору и подходит для одноразовых задач.
Алгоритм действий:
- 📊 Откройте раздел
Кадры → Отчёты по кадрам(в ЗУП 3.1) илиЗарплата и Кадры → Кадровые отчёты(в Бухгалтерии 3.0). - 🔍 Выберите отчёт «Список сотрудников» или «Сведения о работниках» (название зависит от версии конфигурации).
- ⚙️ Настройте параметры: укажите период, подразделения (если нужно выгрузить не всех сотрудников), а также поля для выгрузки (ФИО, должность, табельный номер и др.).
- 💾 Нажмите
Сформировать, затемВыгрузить → ExcelилиСохранить как...для других форматов.
Преимущества метода: скорость и простота. Недостатки: ограниченный набор полей (например, не всегда доступны паспортные данные или история трудоустройства) и риск потери форматирования при большом объёме данных.
Если в выгруженном Excel фамилии отображаются как "######", расширьте ширину столбцов или сохраните файл в формате .csv — это решит проблему с длинными строками.
2. Экспорт через обработку «Универсальный обмен данными»
Для более гибкой выгрузки используйте обработку «Универсальный обмен данными» (входит в стандартную поставку 1С). Она позволяет:
- 📋 Выбирать любые поля из справочника
ФизическиеЛицаилиСотрудники. - 🔄 Сохранять данные в
XML,JSON,CSVилиDBF. - 🔄 Загружать данные обратно (если потребуется импорт).
Инструкция:
- Перейдите в
Файл → Открыть → Дополнительные отчёты и обработки. - Выберите «Универсальный обмен данными» (или найдите её через поиск по названию).
- В открывшемся окне укажите:
- 📌 Источник данных: справочник
СотрудникиилиФизическиеЛица. - 📌 Формат файла: например,
XMLдля дальнейшей интеграции. - 📌 Поля для выгрузки: отметьте галочками нужные (можно добавить пользовательские реквизиты).
- 📌 Источник данных: справочник
Выполнить и укажите путь для сохранения файла.⚠️ Внимание: если в справочнике ФизическиеЛица есть дубли или незаполненные обязательные поля (например, ИНН), обработка может прерваться с ошибкой. Перед выгрузкой проверьте данные через отчёт «Контроль заполнения кадровых данных».
Проверьте права доступа (нужны права на чтение справочников)
Убедитесь, что в 1С нет блокировок от других пользователей
Создайте резервную копию базы (на случай сбоя)
Закройте все лишние окна 1С для ускорения процесса-->
3. Выгрузка через внешние обработки (для программистов)
Если стандартных инструментов недостаточно, можно написать собственную обработку на встроенном языке 1С. Этот способ даёт полный контроль над структурой выходного файла и позволяет автоматизировать выгрузку по расписанию.
Пример кода для выгрузки в CSV:
Процедура ВыгрузитьСотрудниковВCSV(ПутьКФайлу)
ТаблицаДанных = Новый ТаблицаЗначений;
ТаблицаДанных.Колонки.Добавить("ФИО");
ТаблицаДанных.Колонки.Добавить("ТабельныйНомер");
ТаблицаДанных.Колонки.Добавить("Должность");
ТаблицаДанных.Колонки.Добавить("Подразделение");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Сотрудники.Наименование КАК ФИО,
| Сотрудники.ТабельныйНомер КАК ТабельныйНомер,
| Сотрудники.Должность КАК Должность,
| Сотрудники.Подразделение КАК Подразделение
|ИЗ
| Справочник.Сотрудники КАК Сотрудники";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = ТаблицаДанных.Добавить();
НоваяСтрока.ФИО = Выборка.ФИО;
НоваяСтрока.ТабельныйНомер = Выборка.ТабельныйНомер;
НоваяСтрока.Должность = Выборка.Должность;
НоваяСтрока.Подразделение = Выборка.Подразделение;
КонецЦикла;
ЗаписьCSV = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8);
ЗаписьCSV.ЗаписатьСтроку("ФИО;Табельный номер;Должность;Подразделение");
Для Каждого Строка Из ТаблицаДанных Цикл
ЗаписьCSV.ЗаписатьСтроку(
Строка.ФИО + ";" +
Строка.ТабельныйНомер + ";" +
Строка.Должность + ";" +
Строка.Подразделение
);
КонецЦикла;
ЗаписьCSV.Закрыть();
КонецПроцедуры
Чтобы использовать этот код:
- Создайте новую обработку в
Конфигураторе(Файл → Новый → Обработка). - Вставьте код в модуль обработки.
- Добавьте кнопку на форму и свяжите её с процедурой
ВыгрузитьСотрудниковВCSV. - При запуске укажите путь к файлу (например,
C:\Export\employees.csv).
Критическая деталь: если в данных есть символы ; (точка с запятой), они нарушат структуру CSV. Замените их на запятые или используйте кавычки для экранирования:
ЗаписьCSV.ЗаписатьСтроку(
"""" + Строка.ФИО + """" + ";" + // Экранирование кавычками
Строка.ТабельныйНомер + ";" +
"""" + Строка.Должность + """" + ";"
);
4. Автоматическая выгрузка через регламентные задания
Если список сотрудников нужно обновлять регулярно (например, ежедневно для синхронизации с внешней системой), настройте регламентное задание. Это избавит от ручного запуска выгрузки.
Пошаговая настройка:
- Откройте
Администрирование → Регламентные и фоновые задания. - Создайте новое задание с типом «Выполнение кода».
- В поле
Кодвставьте процедуру выгрузки (аналогичную примеру из предыдущего раздела). - Укажите расписание (например,
Ежедневно в 23:00). - В параметрах задания пропишите путь к файлу выгрузки (например,
\\server\shared\employees_$(CurrentDate).csv, где$(CurrentDate)— текущая дата). - В
Администрирование → Публикация на веб-серверевключите опцию «OData». - Укажите префикс виртуального каталога (например,
/odata). - В настройках прав доступа добавьте пользователя, под которым будет осуществляться доступ.
- Сформируйте URL для запроса. Пример:
http://ваш-сервер/odata/standard.odata/Catalog_Сотрудники?$select=Наименование,ТабельныйНомер,Должность - 🔗 Реальное время: данные всегда актуальны (в отличие от файловой выгрузки).
- 🔒 Безопасность: можно ограничить доступ по IP или токенам.
- 📊 Фильтрация: поддерживаются запросы с
$filter,$top,$skip.
Для отправки файла по email или FTP дополните код процедурой отправки. Пример для email:
Почта = Новый Почта;
Сообщение = Почта.СоздатьСообщение();
Сообщение.Текст = "Выгрузка сотрудников на " + ТекущаяДата();
Сообщение.Тема = "Ежедневная выгрузка сотрудников";
Сообщение.Получатели.Добавить("hr@company.ru");
Сообщение.Вложения.Добавить(Новый ВложениеФайла(ПутьКФайлу));
Почта.Отправить(Сообщение);
⚠️ Внимание: регламентные задания выполняются под учётной записью пользователя, который их создал. Если у этого пользователя изменятся права или он будет удалён, задание перестанет работать. Используйте служебную учётную запись с минимальными необходимыми правами.
5. Выгрузка через OData (для интеграции с внешними системами)
Современный способ обмена данными — протокол OData, который поддерживается в 1С начиная с версии 8.3.10. Он позволяет получать данные по API-запросам, что удобно для интеграции с BI-системами, CRM или корпоративными порталами.
Чтобы настроить OData:
Для авторизации используйте Basic Auth (логин/пароль) или OAuth 2.0 (если настроено). Пример запроса на Python:
import requests
from requests.auth import HTTPBasicAuth
url = "http://server/odata/standard.odata/Catalog_Сотрудники"
auth = HTTPBasicAuth("username", "password")
params = {"$select": "Наименование,ТабельныйНомер,Должность"}
response = requests.get(url, auth=auth, params=params)
data = response.json()
for employee in data["value"]:
print(employee["Наименование"], employee["ТабельныйНомер"])
Преимущества OData:
⚠️ Внимание: OData может создавать высокую нагрузку на сервер при частых запросах. Ограничьте количество одновременно подключённых клиентов в настройках веб-сервера 1С.
Пример сложного OData-запроса с фильтрацией
Чтобы получить сотрудников конкретного подразделения с датой приёма после 01.01.2023, используйте URL:
/odata/standard.odata/Catalog_Сотрудники?$filter=Подразделение/Наименование eq 'Бухгалтерия' and ДатаПриема gt 2023-01-01T00:00:00
Обратите внимание на формат даты — он должен соответствовать ISO 8601.
Сравнение способов выгрузки: какой выбрать?
Выбор метода зависит от задачи, технических навыков и требований к данным. Ниже таблица сравнения:
| Способ | Сложность | Форматы | Автоматизация | Подходит для |
|---|---|---|---|---|
| Стандартный отчёт | ⭐ (просто) | Excel, PDF | ❌ Нет | Разовые выгрузки для отчётности |
| Универсальный обмен | ⭐⭐ (средне) | XML, CSV, DBF | ❌ Нет | Гибкая выгрузка без программирования |
| Собственная обработка | ⭐⭐⭐ (сложно) | Любые | ✅ Да (через регламентные задания) | Интеграция с другими системами, нестандартные форматы |
| Регламентные задания | ⭐⭐ (средне) | Любые | ✅ Да | Регулярный экспорт (например, для резервного копирования) |
| OData | ⭐⭐⭐ (сложно) | JSON | ✅ Да | Интеграция с внешними сервисами в реальном времени |
Для большинства пользователей оптимальным будет универсальный обмен данными — он не требует знаний программирования, но даёт больше возможностей, чем стандартные отчёты. Если нужна автоматизация, комбинируйте собственные обработки с регламентными заданиями.
Для выгрузки в государственные органы (ПФР, ФНС) используйте форматы, утверждённые приказами ведомств. Например, для СЗВ-ТД требуется XML по схеме версии 5.05 (актуально на момент публикации).
Частые ошибки и их решения
Даже при правильной настройке выгрузки могут возникать проблемы. Рассмотрим типичные ситуации и способы их устранения:
1. Ошибка: «Недостаточно прав для выполнения операции»
Решение: проверьте права пользователя в Администрирование → Пользователи. Для выгрузки через обработки нужны права на чтение справочника Сотрудники и запись во внешние файлы. Если используете 1С:Предприятие в файловом варианте, убедитесь, что у пользователя Windows есть права на запись в папку выгрузки.
2. Файл CSV открывается с иероглифами
Решение: при сохранении укажите кодировку UTF-8 (в обработках 1С это параметр КодировкаТекста.UTF8). Если данные уже выгружены с ошибкой, откройте файл в Notepad++ и пересохраните в UTF-8.
3. Выгружаются не все сотрудники
Решение: проверьте фильтры в отчёте или запросе. Частая причина — отбор по подразделению или дате приёма. Также убедитесь, что сотрудники не помечены на удаление (в справочнике включите отображение пометок).
4. 1С зависает при выгрузке большого количества данных
Решение: разбейте выгрузку на части (например, по подразделениям) или используйте фоновое задание. Для ускорения отключите ненужные поля в запросе.
5. Ошибка при экспорте в XML: «Неверная структура файла»
Решение: проверьте соответствие структуры XML требуемой схеме (XSD). Если выгружаете для госорганов, скачайте актуальную XSD-схему с их сайта и сверьте её с вашим файлом. Для валидации используйте инструменты вроде XML Validator.
Как проверить XML на ошибки без сторонних программ?
В 1С есть встроенная проверка:
1. Откройте выгруженный XML-файл в текстовом редакторе.
2. Скопируйте содержимое.
3. В 1С создайте новый объект ЧтениеXML:
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(ВашаСтрокаXML);
Попытка
Чтение.Прочитать();
Сообщить("XML корректен");
Исключение
Сообщить("Ошибка: " + ОписаниеОшибки());
КонецПопытки;
Это поможет найти синтаксические ошибки.
FAQ: Ответы на частые вопросы
Можно ли выгрузить фотографии сотрудников?
Да, но не через стандартные отчёты. Фотографии хранятся в реквизите Фотография справочника ФизическиеЛица в бинарном формате. Чтобы их выгрузить:
- Используйте обработку с кодом, который читает этот реквизит.
- Сохраняйте фотографии в файлы (например,
.jpg) с помощью методаЗаписать():
Фотография = Выборка.Фотография;
Если Не Фотография.Пустая() Тогда
Фотография.Записать("C:\Photos\" + Выборка.ТабельныйНомер + ".jpg");
КонецЕсли;
Как выгрузить историю изменений по сотрудникам (например, переводы, изменение окладов)?
История хранится в регистрах сведений (например, КадроваяИстория или ЗарплатнаяИстория). Используйте запрос с выборкой из этих регистров:
ВЫБРАТЬ
КадроваяИстория.Сотрудник КАК Сотрудник,
КадроваяИстория.Дата КАК ДатаСобытия,
КадроваяИстория.ВидСобытия КАК Событие,
КадроваяИстория.Подразделение КАК Подразделение
ИЗ
РегистрСведений.КадроваяИстория КАК КадроваяИстория
ГДЕ
КадроваяИстория.Период МЕЖДУ &НачалоПериода И &КонецПериода
Для удобства свяжите таблицу сведений с таблицей сотрудников по полю Сотрудник.
Можно ли выгрузить данные в Google Sheets?
Да, двумя способами:
- Через CSV: выгрузите данные в
CSV, затем импортируйте в Google Sheets (Файл → Импорт → Загрузить). - Через API: используйте Google Apps Script для прямой загрузки. Пример скрипта:
function importFrom1C() {
var url = "http://ваш-сервер/odata/standard.odata/Catalog_Сотрудники?$format=json";
var response = UrlFetchApp.fetch(url, {
headers: {Authorization: "Basic " + Utilities.base64Encode("login:password")}
});
var data = JSON.parse(response.getContentText());
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.clear();
// Заголовки
sheet.appendRow(["ФИО", "Табельный номер", "Должность"]);
// Данные
data.value.forEach(function(employee) {
sheet.appendRow([employee.Наименование, employee.ТабельныйНомер, employee.Должность]);
});
}
Как выгрузить данные только по уволенным сотрудникам?
Добавьте в запрос фильтр по дате увольнения. Пример для обработки:
Запрос.Текст =
"ВЫБРАТЬ
| Сотрудники.Наименование КАК ФИО,
| Сотрудники.ТабельныйНомер,
| Сотрудники.ДатаУвольнения
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|ГДЕ
| НЕ Сотрудники.ДатаУвольнения ЕСТЬ NULL";
Для точности укажите диапазон дат: Сотрудники.ДатаУвольнения МЕЖДУ &ДатаНачала И &ДатаОкончания.
Можно ли выгрузить данные в формате для 1С:Зарплата и Кадры (для миграции)?
Для переноса данных между базами 1С используйте формат DT (Data Transfer) или XML по схеме EnterpriseData. Алгоритм:
- В исходной базе создайте обработку выгрузки в
XMLс использованиемЗаписьXML. - В целевой базе используйте «Универсальный обмен данными» для загрузки.
Пример структуры XML для сотрудника:
<Сотрудник>
<ТабельныйНомер>123</ТабельныйНомер>
<ФизическоеЛицо>
<Фамилия>Иванов</Фамилия>
<Имя>Иван</Имя>
<Отчество>Иванович</Отчество>
</ФизическоеЛицо>
<Должность>Менеджер</Должность>
</Сотрудник>
Для сложных миграций используйте Конвертацию данных 2.0 (входит в поставку 1С).