Как массово сменить зарплатные карты сотрудникам в 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом Управленческий учет
← На главную

При ведении учета в 1С мы часто сталкиваемся с задачами массового обновления данных, которые требуют автоматизации. Одна из таких задач – необходимость массовой смены зарплатных карт (лицевых счетов) сотрудников, например, при переходе на новый зарплатный проект или изменении банковских реквизитов. Ручной ввод данных для 150 и более человек является не только трудоемким, но и высокорискованным с точки зрения ошибок. В этом руководстве мы рассмотрим различные подходы к решению этой проблемы, начиная от разработки собственной обработки и заканчивая использованием стандартных средств 1С.

Понимание структуры данных: Регистр сведений "Лицевые счета сотрудников по зарплатным проектам"

Для начала, давайте разберемся, где в системе 1С хранится информация о зарплатных картах сотрудников. Ключевым объектом, содержащим эти данные, является регистр сведений "Лицевые счета сотрудников по зарплатным проектам". Именно с ним мы будем работать для массового обновления информации.

Этот регистр является периодическим и подчиняется регистратору, что означает, что записи в нем могут иметь разные значения на разные даты и создаваться или изменяться документами. Мы должны учитывать эту особенность при программном изменении.

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

  1. Сотрудник: Ссылка на элемент справочника "Сотрудники", определяющая, для какого сотрудника предназначен лицевой счет.
  2. ЗарплатныйПроект: Ссылка на элемент справочника "ЗарплатныеПроекты", указывающая, к какому зарплатному проекту относится данный лицевой счет.
  3. БанковскийСчет: Строковое поле, в котором хранится номер зарплатной карты или банковского счета. Это то поле, которое мы будем массово изменять.
  4. Период: Дата, с которой действует запись лицевого счета.
  5. Регистратор: Документ, который создал или изменил данную запись. При программной записи мы можем не указывать его или создать фиктивный документ.

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

Метод 1: Разработка собственной обработки для загрузки из Excel

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

Ожидаемый формат файла Excel

Для нашей обработки мы ожидаем, что файл Excel будет содержать, как минимум, две колонки:

  1. Колонка 1: Идентификатор сотрудника. Это может быть ФИО сотрудника, его табельный номер, ИНН или другой уникальный идентификатор, по которому мы сможем найти сотрудника в базе 1С.
  2. Колонка 2: Новый банковский счет. Номер зарплатной карты или банковского счета, который необходимо установить для сотрудника.

Пример структуры файла Excel:

  1. "Иванов Иван Иванович", "40817810099910000001"
  2. "Петров Петр Петрович", "40817810099910000002"

Алгоритм реализации обработки

Разработка обработки будет включать три основных шага, которые мы детально рассмотрим.

Шаг 1: Чтение данных из файла Excel

На первом этапе мы должны прочитать данные из файла Excel и загрузить их во временную структуру в 1С, например, в ТаблицаЗначений. Для этого мы можем использовать COM-объекты для работы с Excel.

Предположим, что у нас есть путь к файлу Excel (ПутьКФайлу). Мы будем читать данные, начиная со второй строки, предполагая, что первая строка содержит заголовки.


// Создаем новую таблицу значений для хранения данных из Excel
ТЗДанные = Новый ТаблицаЗначений;
ТЗДанные.Колонки.Добавить("ФизЛицо"); // Колонка для ФИО сотрудника
ТЗДанные.Колонки.Добавить("БанковскийСчет"); // Колонка для нового банковского счета

Попытка
    // Создаем COM-объект Excel.Application для взаимодействия с Excel
    ExcelПриложение = Новый COMОбъект("Excel.Application");
    // Открываем указанную книгу Excel (файл)
    Книга = ExcelПриложение.Workbooks.Open(ПутьКФайлу);
    // Получаем первый лист книги
    Лист = Книга.Sheets(1);
    // Определяем номер последней используемой строки для корректного чтения
    ПоследняяСтрока = Лист.UsedRange.Rows.Count;

    // Итерируем по строкам Excel, начиная со второй (предполагаем заголовки в первой)
    Для НомерСтроки = 2 По ПоследняяСтрока Цикл
        // Читаем значения из ячеек: ФИО из первой колонки, счет из второй
        ФИО = Лист.Cells(НомерСтроки, 1).Value;
        Счет = Лист.Cells(НомерСтроки, 2).Value;

        // Проверяем, что ФИО не пустое, чтобы избежать обработки пустых строк
        Если Не ПустаяСтрока(ФИО) Тогда
            // Добавляем новую строку в нашу таблицу значений
            НоваяСтрока = ТЗДанные.Добавить();
            НоваяСтрока.ФизЛицо = СокрЛП(ФИО); // Обрезаем пробелы
            НоваяСтрока.БанковскийСчет = СокрЛП(Счет); // Обрезаем пробелы
        КонецЕсли;
    КонецЦикла;

    // Закрываем книгу без сохранения изменений
    Книга.Close(Ложь);
    // Завершаем работу приложения Excel
    ExcelПриложение.Quit();

Исключение
    // Обработка ошибок при работе с Excel
    Сообщить("Ошибка при чтении файла Excel: " + ОписаниеОшибки());
    Возврат; // Выходим из процедуры в случае ошибки
КонецПопытки;

// Теперь ТЗДанные содержит все необходимые данные из файла Excel

Мы успешно прочитали данные из файла Excel и сохранили их в ТаблицаЗначений ТЗДанные, которая будет использоваться на следующем шаге.

Шаг 2: Поиск сотрудников и лицевых счетов

После того как мы загрузили данные из Excel, нам необходимо сопоставить ФИО из файла с реальными объектами ФизическиеЛица и Сотрудники в базе 1С, а затем найти соответствующие записи в регистре сведений ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам. Для оптимизации поиска мы используем запрос с временной таблицей.


Запрос = Новый Запрос;
// Передаем нашу таблицу значений как параметр запроса, она будет выступать в роли временной таблицы
Запрос.УстановитьПараметр("ТаблицаДанных", ТЗДанные);
// Также нам понадобится целевой зарплатный проект. Допустим, мы его выбрали на форме обработки.
// Например: ЗарплатныйПроектЦелевой = Справочники.ЗарплатныеПроекты.НайтиПоНаименованию("НазваниеЦелевогоПроекта");
// Для примера, возьмем произвольный зарплатный проект или самый первый, если не указан
Запрос.УстановитьПараметр("ЗарплатныйПроектПараметр", ЗарплатныйПроектЦелевой); // Это должен быть объект СправочникСсылка.ЗарплатныеПроекты

Запрос.Текст =
"ВЫБРАТЬ
|    Данные.ФизЛицо КАК ФИОИзФайла,
|    Данные.БанковскийСчет КАК НовыйБанковскийСчет,
|    ФизЛица.Ссылка КАК ФизЛицоСсылка,
|    Сотрудники.Ссылка КАК СотрудникСсылка,
|    ЛицевыеСчета.Период КАК ТекущийПериодЛицевогоСчета,
|    ЛицевыеСчета.ЗарплатныйПроект КАК ТекущийЗарплатныйПроект,
|    ЛицевыеСчета.БанковскийСчет КАК ТекущийБанковскийСчет
|ИЗ
|    &ТаблицаДанных КАК Данные
|        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизЛица
|        ПО Данные.ФизЛицо = ФизЛица.Наименование
|        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
|        ПО ФизЛица.Ссылка = Сотрудники.ФизическоеЛицо
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ЛицевыеСчета
|        ПО Сотрудники.Ссылка = ЛицевыеСчета.Сотрудник
|            И ЛицевыеСчета.ЗарплатныйПроект = &ЗарплатныйПроектПараметр // Привязываемся к конкретному зарплатному проекту
|ГДЕ
|    НЕ ФизЛица.Ссылка ЕСТЬ NULL
|    И НЕ Сотрудники.Ссылка ЕСТЬ NULL
|
|УПОРЯДОЧИТЬ ПО ТекущийПериодЛицевогоСчета УБЫВ"; // Для периодического регистра берем последнюю запись

РезультатЗапроса = Запрос.Выполнить().Выгрузить(); // Получаем результат запроса в таблицу значений

В этом запросе мы объединяем данные из файла Excel с данными справочников ФизическиеЛица, Сотрудники и регистром сведений ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам. Важно, что мы осуществляем отбор по конкретному ЗарплатныйПроект, так как лицевой счет обычно привязан к нему. Если необходимо изменить лицевые счета для *всех* зарплатных проектов сотрудника, логика запроса и обновления будет более сложной.

Шаг 3: Изменение записей регистра сведений

Заключительный этап – непосредственное изменение данных в регистре сведений. Мы будем использовать объект НаборЗаписей, который предназначен для работы с данными регистра сведений.

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


// Получаем объект регистра сведений
МенеджерРегистра = РегистрыСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам;

// Создаем набор записей для работы с регистром
НаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей();

// Устанавливаем отбор по зарплатному проекту, чтобы работать только с нужными записями
// Если мы меняем лицевой счет внутри уже существующего зарплатного проекта
НаборЗаписей.Отбор.ЗарплатныйПроект.Установить(ЗарплатныйПроектЦелевой); // Используем ЗарплатныйПроектЦелевой из Шага 2
НаборЗаписей.Прочитать(); // Считываем текущие записи регистра по нашему отбору

// Создаем список для новых записей, если сотрудник не был найден в текущем наборе
СписокНовыхЗаписей = Новый СписокЗначений;

// Итерируем по результатам запроса, полученным на Шаге 2
Для Каждого СтрокаРезультата Из РезультатЗапроса Цикл
    // Проверяем, что сотрудник найден в базе 1С
    Если СтрокаРезультата.СотрудникСсылка = Неопределено Тогда
        Сообщить("Сотрудник не найден в базе 1С по ФИО: " + СтрокаРезультата.ФИОИзФайла);
        Продолжить; // Переходим к следующему сотруднику
    КонецЕсли;

    // Ищем запись для текущего сотрудника в прочитанном наборе
    НайденнаяЗапись = Неопределено;
    Для Каждого ЗаписьРегистра Из НаборЗаписей Цикл
        Если ЗаписьРегистра.Сотрудник = СтрокаРезультата.СотрудникСсылка Тогда
            НайденнаяЗапись = ЗаписьРегистра;
            Прервать; // Найдена соответствующая запись, прерываем внутренний цикл
        КонецЕсли;
    КонецЦикла;

    Если НайденнаяЗапись <> Неопределено Тогда
        // Запись найдена, обновляем банковский счет
        Если НайденнаяЗапись.БанковскийСчет <> СтрокаРезультата.НовыйБанковскийСчет Тогда
            НайденнаяЗапись.БанковскийСчет = СтрокаРезультата.НовыйБанковскийСчет;
            Сообщить("Обновлен счет для сотрудника: " + СтрокаРезультата.ФИОИзФайла);
        КонецЕсли;
    Иначе
        // Запись не найдена, создаем новую
        НоваяЗапись = НаборЗаписей.Добавить();
        НоваяЗапись.Период = ТекущаяДата(); // Устанавливаем актуальную дату
        НоваяЗапись.Сотрудник = СтрокаРезультата.СотрудникСсылка;
        НоваяЗапись.ЗарплатныйПроект = ЗарплатныйПроектЦелевой; // Указываем целевой зарплатный проект
        НоваяЗапись.БанковскийСчет = СтрокаРезультата.НовыйБанковскийСчет;
        Сообщить("Создана новая запись счета для сотрудника: " + СтрокаРезультата.ФИОИзФайла);
    КонецЕсли;
КонецЦикла;

// Записываем измененный набор записей в базу данных
Попытка
    НаборЗаписей.Записать();
    Сообщить("Массовая смена лицевых счетов завершена успешно!");
Исключение
    Сообщить("Ошибка при записи набора записей: " + ОписаниеОшибки());
КонецПопытки;

Таким образом, мы написали полноценный алгоритм для массовой смены лицевых счетов. Этот метод требует навыков программирования на встроенном языке 1С, но дает максимальную гибкость и контроль над процессом.

Метод 2: Использование стандартных средств 1С

В конфигурациях 1С, таких как "1С:Зарплата и управление персоналом", существуют встроенные инструменты, которые могут помочь нам решить эту задачу без написания сложного кода. Рассмотрим три основных стандартных инструмента.

1. Документ "Ввод лицевых счетов"

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

Разберем по шагам, как использовать этот документ:

  1. Создание документа: Мы открываем раздел "Зарплата" (или аналогичный, в зависимости от конфигурации) -> "Счета, касса" (или "Лицевые счета") -> "Ввод лицевых счетов". Здесь мы создаем новый документ.
  2. Указание зарплатного проекта: В шапке нового документа нам необходимо выбрать зарплатный проект, для которого будут устанавливаться или изменяться лицевые счета. Это критически важный шаг, так как все изменения будут относиться именно к этому проекту.
  3. Заполнение списка сотрудников: Используем кнопку "Заполнить", которая обычно предлагает варианты "Добавить сотрудников", "Добавить сотрудников, у которых нет лицевых счетов" и другие. Мы можем выбрать сотрудников по различным критериям (например, по подразделению) или добавить их вручную по одному. В результате табличная часть документа будет заполнена списком сотрудников.
  4. Ввод номеров счетов: Для каждого сотрудника в табличной части мы вручную вводим или изменяем номер банковского счета в соответствующей колонке. Если список очень большой, ручной ввод может быть утомительным.
  5. Проведение документа: После тщательной проверки всех введенных данных мы проводим документ. Проведение документа создаст новые записи или обновит существующие в регистре сведений ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам с датой документа в качестве периода действия.

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

2. Обработка "Групповое изменение реквизитов"

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

Разберем по шагам, как использовать эту обработку:

  1. Открытие обработки: Мы можем найти ее в разделе "Администрирование" -> "Обслуживание" -> "Корректировка данных" -> "Групповое изменение реквизитов" (или аналогичном, в зависимости от конфигурации и прав пользователя).
  2. Выбор типа объекта: В поле "Изменять" мы выбираем "Элементы (записи) регистра сведений". Затем в открывшемся списке регистров находим и выбираем "Лицевые счета сотрудников по зарплатным проектам".
  3. Настройка отбора: Нам крайне важно установить корректные условия отбора, чтобы выбрать только те записи регистра, которые мы хотим изменить. В разделе "Отбор" мы можем установить условия, например, по Сотруднику (если у нас есть список сотрудников), по ЗарплатномуПроекту (если мы хотим изменить счета только в рамках одного проекта) или по ТекущемуБанковскомуСчету (если нужно изменить определенные номера). Будьте предельно внимательны с настройкой отбора, чтобы случайно не затронуть лишние записи!
  4. Указание новых значений: В разделе "Реквизиты, значение которых требуется изменить" мы устанавливаем флажок напротив реквизита "Банковский счет". В соответствующем поле мы вводим новое значение. Если нам нужно массово установить всем выбранным сотрудникам один и тот же номер счета, это будет его значение. Если наша задача состоит в том, чтобы очистить счета, мы можем оставить поле пустым или ввести служебное значение (например, "НЕ АКТУАЛЕН").
  5. Применение изменений: После тщательной проверки настроек отбора и нового значения мы нажимаем кнопку "Изменить реквизиты". Перед выполнением этой операции мы настоятельно рекомендуем сделать полную резервную копию информационной базы данных!

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

3. Обработка "Загрузка данных из табличного документа"

Эта универсальная обработка является одним из самых мощных и часто используемых инструментов для массовой загрузки данных из внешних файлов (например, Excel, OpenOffice Calc) в различные объекты 1С: справочники, документы, и, что важно для нас, регистры сведений. Она часто входит в состав дистрибутива информационно-технологического сопровождения (ИТС) или может быть доступна как внешняя обработка.

Разберем по шагам, как использовать эту обработку для нашей задачи:

  1. Подготовка файла Excel: Мы подготавливаем файл с колонками, необходимыми для однозначной идентификации сотрудника (например, ФИО, ТабельныйНомер, ИНН) и нового номера банковского счета. Крайне важно, чтобы данные в файле были точными и соответствовали формату данных в 1С. Чем больше уникальных идентификаторов сотрудника мы предоставим, тем надежнее будет поиск.
  2. Открытие обработки: Мы запускаем обработку "Загрузка данных из табличного документа". Она может находиться в разделе "НСИ и администрирование" -> "Настройки интеграции" -> "Загрузка данных из табличного документа", или же ее можно открыть через меню "Файл" -> "Открыть", если это внешняя обработка.
  3. Выбор целевого объекта: В поле "Объект" или "Тип объекта" мы выбираем "Регистр сведений" и далее в списке находим и указываем "Лицевые счета сотрудников по зарплатным проектам".
  4. Настройка сопоставления колонок:
    1. Загрузка файла: Мы указываем путь к нашему подготовленному файлу Excel и загружаем его. Обработка проанализирует структуру файла и представит колонки.
    2. Сопоставление: В таблице сопоставления мы устанавливаем соответствие между колонками нашего файла Excel и полями регистра сведений. Обязательными полями для сопоставления будут Сотрудник (или его идентификатор) и БанковскийСчет.
    3. Идентификация сотрудника: Для поля Сотрудник мы должны указать, как программа должна искать соответствующего сотрудника в базе 1С. Например, мы выбираем "Поиск по полю" и указываем, что поиск должен производиться по "Наименованию" (для ФИО), "Коду" (для табельного номера) или "ИНН" в справочнике ФизическиеЛица или Сотрудники.
    4. Зарплатный проект: Также может потребоваться поле ЗарплатныйПроект. Мы можем либо указать его в файле Excel, либо установить единое значение для всех загружаемых записей непосредственно в настройках обработки.
    5. Период: Для поля Период (даты действия записи) мы можем установить текущую дату или дату из файла Excel, если она там присутствует.
  5. Режим загрузки: Мы выбираем режим загрузки. Если нам нужно обновить существующие записи, выбираем "Обновлять существующие". Если возможно создание новых и обновление старых, выбираем "Добавлять новые и обновлять существующие". Крайне важно, чтобы был корректно настроен ключ поиска для обновления (например, по связке "Сотрудник + ЗарплатныйПроект"), чтобы программа понимала, какую именно запись нужно обновить.
  6. Предварительный просмотр и загрузка: Перед окончательной загрузкой мы обязательно используем функцию предварительного просмотра. Это позволит нам убедиться, что все данные сопоставлены корректно и программа правильно идентифицирует сотрудников и их лицевые счета. После проверки нажимаем кнопку "Загрузить данные".

Этот метод является одним из наиболее мощных и гибких для массовой загрузки данных в 1С. Он позволяет выполнить задачу без навыков программирования, но требует внимательной подготовки файла Excel и тщательной настройки сопоставлений в самой обработке.

Метод 3: Использование готовых внешних обработок

Для пользователей, которые не обладают навыками программирования и не хотят тратить время на детальное изучение стандартных обработок, оптимальным решением может стать использование готовых внешних обработок. Эти обработки, разработанные сообществом 1С-специалистов, часто предлагают более удобный и интуитивно понятный интерфейс.

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

Преимущества использования таких готовых решений:

  1. Специализированный функционал: Эти обработки часто созданы для конкретных задач, имеют более удобный интерфейс и меньше настроек, чем универсальные инструменты.
  2. Дополнительные возможности: Многие из них включают функции предварительной проверки данных, поиска сотрудников по нескольким полям (ФИО, табельный номер, ИНН) и опции перезаписи или дополнения существующих счетов.
  3. Экономия времени: Использование готового решения избавляет от необходимости самостоятельно разрабатывать алгоритм загрузки, что может значительно сэкономить время, особенно для начинающего специалиста.

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

Важные рекомендации перед массовым изменением

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

  1. Резервное копирование: Всегда, без исключений, делайте полную резервную копию информационной базы перед выполнением любых массовых операций. Это ваша "страховка" на случай непредвиденных ошибок, позволяющая откатиться к предыдущему состоянию данных.
  2. Тестирование: Мы настоятельно рекомендуем проводить все операции по массовому изменению сначала на тестовой базе, которая является точной копией рабочей. Только после успешного тестирования и проверки результатов на тестовой базе мы можем переходить к рабочей.
  3. Тщательная проверка данных: Мы должны тщательно проверять исходный файл Excel на предмет ошибок, опечаток и несоответствий. Также обязательно проверяем результаты загрузки в 1С: выборочно просматриваем измененные лицевые счета нескольких сотрудников, чтобы убедиться в корректности данных.
  4. Привлечение специалиста: Если у вас нет достаточного опыта работы с 1С, вы не уверены в своих действиях или возникают сложности, обратитесь за помощью к квалифицированному программисту или консультанту 1С. Ошибки при массовом изменении могут привести к серьезным проблемам с начислением и выплатой заработной платы, а их исправление может занять значительно больше времени и ресурсов.

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

← На главную