Перенос и массовое обновление текстовых данных в 1С 8.3
Содержание
Переносить текст в 1С массово можно четырьмя способами: загрузить таблицу из Excel командой Загрузить из файла или обработкой «Загрузка данных из табличного документа», поставить одно значение многим объектам через Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов, заменить часть строки внешней обработкой или перебросить данные между базами через XML. Выбор зависит от того, откуда берётся текст и что с ним нужно сделать.
Ниже описаны инструменты для 1С 8.3 с интерфейсом «Такси»: пути меню даны для Бухгалтерии 3.0, а в ЗУП 3.1 и УТ 11 эти механизмы устроены так же, потому что взяты из общей Библиотеки стандартных подсистем.
| Задача | Чем делать | Нужен ли программист |
|---|---|---|
| Завести 500 новых позиций номенклатуры из прайса | Загрузить из файла в списке или «Загрузка данных из табличного документа» | Нет |
| Обновить описания у существующих элементов по артикулу | «Загрузка данных из табличного документа» с поиском по артикулу | Нет |
| Поставить всем выделенным одну единицу измерения или вид | Групповое изменение реквизитов | Нет |
| Заменить «ООО » на «ООО «» в 3 000 названий | Внешняя обработка с СтрЗаменить() | Да, или готовый код ниже |
| Перенести справочник из одной базы в другую | Выгрузка и загрузка XML | Желательно |
Подготовка таблицы перед импортом текста в 1С
Половина проблем при загрузке появляется ещё в Excel. Таблицу стоит привести в порядок до того, как она попадёт в программу.
Что проверить:
- 📌 Одна строка — один объект. Объединённые ячейки, промежуточные итоги и пустые строки-разделители удалите.
- 📌 Заголовки в первой строке. Так проще сопоставить колонки с реквизитами.
- 📌 Ключ для поиска. Если обновляете существующие элементы, нужна колонка, по которой 1С их найдёт: артикул, код, ИНН. Поиск по наименованию ненадёжен — лишний пробел, и 1С создаст дубль.
- 📌 Лишние пробелы. Формула
=СЖПРОБЕЛЫ(A2)в Excel убирает пробелы по краям и двойные внутри. - 📌 Длина строки. Наименование номенклатуры в Бухгалтерии ограничено по длине, а полное наименование — нет. Длинный текст из прайса, обрезанный при загрузке, — частая находка.
- 📌 Числа как текст. Артикул
00125Excel превращает в125. Задайте колонке текстовый формат до вставки данных.
Перенос строки внутри ячейки Excel (Alt+Enter) при загрузке превращается в перевод строки в 1С. Для многострочного реквизита — например, «Комментарий» или «Описание» — это удобно. Для наименования — нет: оно отобразится в списках криво.
Какую колонку чем заполнить
Перед загрузкой распишите себе соответствие колонок. Для справочника «Номенклатура» оно обычно такое:
Загрузка текста в 1С из Excel через табличный документ
Встроенная команда «Загрузить из файла»
В типовых конфигурациях на БСП у ряда справочников и табличных частей документов есть команда загрузки из файла. В Бухгалтерии 3.0 её проще всего найти в списке номенклатуры или в табличной части «Товары» документа поступления: кнопка Загрузить в командной панели или пункт в меню Ещё.
Как работает:
- Нажмите команду загрузки. Откроется форма с пустой таблицей-шаблоном.
- Скопируйте данные из Excel и вставьте в эту таблицу через
Ctrl+V. Можно также указать файл.xlsx,.xls,.csvили.mxl. - На следующем шаге программа покажет, какие строки она сопоставила с существующими объектами, а какие создаст как новые.
- Проверьте несопоставленные строки, при необходимости укажите элемент вручную.
- Завершите загрузку.
Плюс команды — она безопасна и не требует внешних обработок. Минус — набор колонок жёстко задан разработчиком конфигурации.
Универсальная обработка «Загрузка данных из табличного документа»
Когда встроенной команды нет или нужно загрузить нестандартный реквизит, используют универсальную внешнюю обработку ЗагрузкаДанныхИзТабличногоДокумента.epf. Её распространяют в составе универсальных обработок для пользователей ИТС; для 8.3 берите версию для управляемых форм.
Порядок:
- Откройте обработку через
Файл → Открытьили подключите вАдминистрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. - Выберите режим: загрузка в справочник, в табличную часть или в регистр сведений.
- Укажите вид справочника, например «Номенклатура».
- Вставьте данные из Excel на вкладку с табличным документом или откройте файл.
- На вкладке настройки колонок отметьте реквизиты, которые загружаете, и проставьте номер колонки для каждого.
- У ключевого реквизита (артикул) поставьте признак поиска. Тогда найденные элементы обновятся, а ненайденные — создадутся.
- Запустите контроль заполнения, затем загрузку.
Если поиск по ключу не настроен, обработка создаст новые элементы на каждую строку. Повторный запуск той же таблицы даст полный набор дублей.
Перед загрузкой в рабочую базу сделайте резервную копию. Массовую загрузку удобно сначала прогнать на копии: в файловом варианте это просто копия каталога базы, в клиент-серверном — выгрузка .dt или копия на SQL.
Массовое изменение текста через групповое изменение реквизитов
Если всем выбранным объектам нужно поставить одно и то же значение, Excel не нужен. Для этого есть стандартная обработка «Групповое изменение реквизитов».
Два способа её открыть:
- из списка: выделите элементы (
Ctrl+AилиCtrl+ клик), затемЕщё → Изменить выделенные; - из раздела:
Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов, там выберите тип объектов и задайте отбор.
Дальше в таблице реквизитов отметьте нужный, впишите новое значение и нажмите Изменить реквизиты. Обработка запишет каждый объект и покажет, какие записать не удалось и почему.
Чем хорош способ:
- ✅ работает в типовых конфигурациях без программиста;
- ✅ меняет и реквизиты шапки, и строки табличных частей;
- ✅ можно отобрать объекты по условию: например, всю номенклатуру из одной группы.
Где он не поможет:
- ❌ Замена части строки. Обработка ставит значение целиком. Превратить «Болт М8 оцинк.» в «Болт М8 оцинкованный» у 400 позиций, сохранив остальной текст, ею не получится.
- ❌ Разные значения для разных элементов. Для этого нужна загрузка из таблицы.
Документы при групповом изменении перезаписываются. Проведённый документ обработка может перепровести — проверьте настройки перед запуском, если документы в закрытом периоде.
Перенос текста в 1С внешней обработкой: замена подстроки
Когда нужно найти фрагмент в тысячах строк и заменить его, а остальной текст оставить, быстрее всего написать небольшую внешнюю обработку. Работы на 15 минут для того, кто знает конфигуратор.
Создайте обработку в конфигураторе: Файл → Новый → Внешняя обработка. Добавьте два строковых реквизита — ЧтоИскать и НаЧтоЗаменить, форму с этими полями и командой. В модуль формы поместите код:
&НаКлиенте
Процедура Заменить(Команда)
Если ПустаяСтрока(Объект.ЧтоИскать) Тогда
Сообщить("Укажите, что искать");
Возврат;
КонецЕсли;
ЗаменитьНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаменитьНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Спр.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Спр
|ГДЕ
| НЕ Спр.ЭтоГруппа
| И Спр.Наименование ПОДОБНО &Шаблон";
Запрос.УстановитьПараметр("Шаблон", "%" + Объект.ЧтоИскать + "%");
Выборка = Запрос.Выполнить().Выбрать();
Изменено = 0;
НачатьТранзакцию();
Попытка
Пока Выборка.Следующий() Цикл
СпрОбъект = Выборка.Ссылка.ПолучитьОбъект();
СпрОбъект.Наименование = СтрЗаменить(СпрОбъект.Наименование,
Объект.ЧтоИскать, Объект.НаЧтоЗаменить);
СпрОбъект.Записать();
Изменено = Изменено + 1;
КонецЦикла;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Сообщить(СтрШаблон("Изменено элементов: %1", Изменено));
КонецПроцедуры
Что важно в этом коде:
- Транзакция. Либо меняются все элементы, либо ни один. Если запись одного объекта упадёт, база не останется в полуизменённом виде.
СтрЗаменить()чувствителен к регистру. «оцинк.» и «Оцинк.» — разные строки. Если в базе встречаются оба варианта, запустите обработку дважды.- Спецсимволы
ПОДОБНО. Знаки%,_,[в искомой строке запрос воспринимает как шаблон. Если они есть в тексте, экранируйте их черезСПЕЦСИМВОЛили уберите условие и проверяйте вхождение в цикле функциейСтрНайти(). - Другие реквизиты. Чтобы менять полное наименование, допишите строку для
СпрОбъект.НаименованиеПолноеи добавьте его в условие запроса черезИЛИ.
Запись через Записать() вызывает все проверки и подписки конфигурации, поэтому 10 000 элементов могут обрабатываться несколько минут. Запускайте вне рабочего времени: долгая транзакция блокирует изменённые элементы, и другие пользователи не смогут их записать, пока она не завершится.
Перевод строки в тексте программно
Если текст нужно разбить на строки, в коде используйте Символы.ПС:
Описание = "Материал: сталь" + Символы.ПС + "Покрытие: цинк";
А чтобы убрать переносы, попавшие в наименование из Excel, замените их на пробел: СтрЗаменить(Текст, Символы.ПС, " "). Бывают и символы Символы.ВК — их убирают так же.
Обмен текстовыми данными через XML и универсальные форматы
Когда текст лежит не в Excel, а в другой базе 1С, таблица — лишний посредник. Справочник проще перенести целиком.
| Способ | Когда подходит | Риски |
|---|---|---|
| Обработка «Выгрузка и загрузка данных XML» | Две базы одной конфигурации, одного релиза | Загружает объекты с теми же ссылками; при разной структуре метаданных загрузка падает |
| Синхронизация данных в формате EnterpriseData | Разные типовые конфигурации: УТ 11 → БП 3.0 | Нужна настройка синхронизации, переносится то, что заложено в правила |
| «Универсальный обмен данными в формате XML» + правила обмена | Нетиповые базы, перенос между разными конфигурациями | Правила пишутся в «Конвертации данных», это работа программиста |
Выгрузка и загрузка XML пошагово
- В базе-источнике откройте внешнюю обработку
ВыгрузкаЗагрузкаДанныхXML83.epfчерезФайл → Открыть. - На вкладке выгрузки отметьте нужный справочник, при необходимости задайте отбор.
- Выгрузите в файл
.xml. - В базе-приёмнике откройте ту же обработку, перейдите на вкладку загрузки и укажите файл.
- Загрузите и проверьте результат в списке.
Обработка сохраняет внутренние идентификаторы. Если в приёмнике уже есть элемент с тем же идентификатором, он будет перезаписан данными из файла. Это удобно, когда нужно «догнать» копию базы до рабочей, и опасно, если приёмник жил своей жизнью и в нём правили те же элементы.
Для переноса только текста без структуры можно обойтись и без XML: сформируйте в источнике отчёт или список с нужными колонками, сохраните в .xlsx через Ещё → Вывести список и загрузите в приёмник по ключу, как описано в разделе про табличный документ.
Как проверить результат после переноса
После любой массовой операции проверьте три вещи.
- Количество. Сверьте число строк в исходной таблице с числом созданных и обновлённых элементов. Обработки выводят этот итог в сообщениях.
- Дубли. В списке номенклатуры отсортируйте по наименованию или артикулу и просмотрите соседние строки. Если дубли появились, не удаляйте их сразу: сначала проверьте, нет ли на них ссылок в документах. Удалять безопаснее через пометку и
Администрирование → Обслуживание → Корректировка данных → Удаление помеченных объектов— программа сама не даст удалить то, на что есть ссылки. - Печатные формы. Сформируйте счёт или накладную с изменёнными позициями. В печати берётся полное наименование: если вы меняли только короткое, клиент увидит старый текст.
Типичные ошибки при массовом переносе текста
Частые вопросы
Можно ли вставить колонку из Excel прямо в список справочника?
Как перенести текст в 1С в многострочное поле с абзацами?
Alt+Enter, при загрузке переносы сохранятся. Программно перенос строки задают через Символы.ПС.