Перенос и массовое обновление текстовых данных в 1С 8.3

· 9 мин

Содержание

Переносить текст в 1С массово можно четырьмя способами: загрузить таблицу из Excel командой Загрузить из файла или обработкой «Загрузка данных из табличного документа», поставить одно значение многим объектам через Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов, заменить часть строки внешней обработкой или перебросить данные между базами через XML. Выбор зависит от того, откуда берётся текст и что с ним нужно сделать.

Ниже описаны инструменты для 1С 8.3 с интерфейсом «Такси»: пути меню даны для Бухгалтерии 3.0, а в ЗУП 3.1 и УТ 11 эти механизмы устроены так же, потому что взяты из общей Библиотеки стандартных подсистем.

ЗадачаЧем делатьНужен ли программист
Завести 500 новых позиций номенклатуры из прайсаЗагрузить из файла в списке или «Загрузка данных из табличного документа»Нет
Обновить описания у существующих элементов по артикулу«Загрузка данных из табличного документа» с поиском по артикулуНет
Поставить всем выделенным одну единицу измерения или видГрупповое изменение реквизитовНет
Заменить «ООО » на «ООО «» в 3 000 названийВнешняя обработка с СтрЗаменить()Да, или готовый код ниже
Перенести справочник из одной базы в другуюВыгрузка и загрузка XMLЖелательно

Подготовка таблицы перед импортом текста в 1С

Половина проблем при загрузке появляется ещё в Excel. Таблицу стоит привести в порядок до того, как она попадёт в программу.

Что проверить:

  • 📌 Одна строка — один объект. Объединённые ячейки, промежуточные итоги и пустые строки-разделители удалите.
  • 📌 Заголовки в первой строке. Так проще сопоставить колонки с реквизитами.
  • 📌 Ключ для поиска. Если обновляете существующие элементы, нужна колонка, по которой 1С их найдёт: артикул, код, ИНН. Поиск по наименованию ненадёжен — лишний пробел, и 1С создаст дубль.
  • 📌 Лишние пробелы. Формула =СЖПРОБЕЛЫ(A2) в Excel убирает пробелы по краям и двойные внутри.
  • 📌 Длина строки. Наименование номенклатуры в Бухгалтерии ограничено по длине, а полное наименование — нет. Длинный текст из прайса, обрезанный при загрузке, — частая находка.
  • 📌 Числа как текст. Артикул 00125 Excel превращает в 125. Задайте колонке текстовый формат до вставки данных.

Перенос строки внутри ячейки Excel (Alt+Enter) при загрузке превращается в перевод строки в 1С. Для многострочного реквизита — например, «Комментарий» или «Описание» — это удобно. Для наименования — нет: оно отобразится в списках криво.

Какую колонку чем заполнить

Перед загрузкой распишите себе соответствие колонок. Для справочника «Номенклатура» оно обычно такое:

Сопоставление полей
Артикул→Артикул (ключ поиска)
Название короткое→Наименование
Название для документов→Полное наименование
Ед. изм.→Единица измерения (по коду ОКЕИ или названию)
Ставка НДС→Ставка НДС
Описание→Комментарий / описание

Загрузка текста в 1С из Excel через табличный документ

Встроенная команда «Загрузить из файла»

В типовых конфигурациях на БСП у ряда справочников и табличных частей документов есть команда загрузки из файла. В Бухгалтерии 3.0 её проще всего найти в списке номенклатуры или в табличной части «Товары» документа поступления: кнопка Загрузить в командной панели или пункт в меню Ещё.

Как работает:

  1. Нажмите команду загрузки. Откроется форма с пустой таблицей-шаблоном.
  2. Скопируйте данные из Excel и вставьте в эту таблицу через Ctrl+V. Можно также указать файл .xlsx, .xls, .csv или .mxl.
  3. На следующем шаге программа покажет, какие строки она сопоставила с существующими объектами, а какие создаст как новые.
  4. Проверьте несопоставленные строки, при необходимости укажите элемент вручную.
  5. Завершите загрузку.

Плюс команды — она безопасна и не требует внешних обработок. Минус — набор колонок жёстко задан разработчиком конфигурации.

Универсальная обработка «Загрузка данных из табличного документа»

Когда встроенной команды нет или нужно загрузить нестандартный реквизит, используют универсальную внешнюю обработку ЗагрузкаДанныхИзТабличногоДокумента.epf. Её распространяют в составе универсальных обработок для пользователей ИТС; для 8.3 берите версию для управляемых форм.

Порядок:

  1. Откройте обработку через Файл → Открыть или подключите в Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки.
  2. Выберите режим: загрузка в справочник, в табличную часть или в регистр сведений.
  3. Укажите вид справочника, например «Номенклатура».
  4. Вставьте данные из Excel на вкладку с табличным документом или откройте файл.
  5. На вкладке настройки колонок отметьте реквизиты, которые загружаете, и проставьте номер колонки для каждого.
  6. У ключевого реквизита (артикул) поставьте признак поиска. Тогда найденные элементы обновятся, а ненайденные — создадутся.
  7. Запустите контроль заполнения, затем загрузку.

Если поиск по ключу не настроен, обработка создаст новые элементы на каждую строку. Повторный запуск той же таблицы даст полный набор дублей.

Перед загрузкой в рабочую базу сделайте резервную копию. Массовую загрузку удобно сначала прогнать на копии: в файловом варианте это просто копия каталога базы, в клиент-серверном — выгрузка .dt или копия на SQL.

Массовое изменение текста через групповое изменение реквизитов

Если всем выбранным объектам нужно поставить одно и то же значение, Excel не нужен. Для этого есть стандартная обработка «Групповое изменение реквизитов».

Два способа её открыть:

  • из списка: выделите элементы (Ctrl+A или Ctrl + клик), затем Ещё → Изменить выделенные;
  • из раздела: Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов, там выберите тип объектов и задайте отбор.

Дальше в таблице реквизитов отметьте нужный, впишите новое значение и нажмите Изменить реквизиты. Обработка запишет каждый объект и покажет, какие записать не удалось и почему.

Чем хорош способ:

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

Где он не поможет:

  • ❌ Замена части строки. Обработка ставит значение целиком. Превратить «Болт М8 оцинк.» в «Болт М8 оцинкованный» у 400 позиций, сохранив остальной текст, ею не получится.
  • ❌ Разные значения для разных элементов. Для этого нужна загрузка из таблицы.

Документы при групповом изменении перезаписываются. Проведённый документ обработка может перепровести — проверьте настройки перед запуском, если документы в закрытом периоде.

Перенос текста в 1С внешней обработкой: замена подстроки

Когда нужно найти фрагмент в тысячах строк и заменить его, а остальной текст оставить, быстрее всего написать небольшую внешнюю обработку. Работы на 15 минут для того, кто знает конфигуратор.

Создайте обработку в конфигураторе: Файл → Новый → Внешняя обработка. Добавьте два строковых реквизита — ЧтоИскать и НаЧтоЗаменить, форму с этими полями и командой. В модуль формы поместите код:

&НаКлиенте
Процедура Заменить(Команда)
	Если ПустаяСтрока(Объект.ЧтоИскать) Тогда
		Сообщить("Укажите, что искать");
		Возврат;
	КонецЕсли;
	ЗаменитьНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗаменитьНаСервере()

	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Спр.Ссылка КАК Ссылка
	|ИЗ
	|	Справочник.Номенклатура КАК Спр
	|ГДЕ
	|	НЕ Спр.ЭтоГруппа
	|	И Спр.Наименование ПОДОБНО &Шаблон";
	Запрос.УстановитьПараметр("Шаблон", "%" + Объект.ЧтоИскать + "%");
	Выборка = Запрос.Выполнить().Выбрать();

	Изменено = 0;
	НачатьТранзакцию();
	Попытка
		Пока Выборка.Следующий() Цикл
			СпрОбъект = Выборка.Ссылка.ПолучитьОбъект();
			СпрОбъект.Наименование = СтрЗаменить(СпрОбъект.Наименование,
				Объект.ЧтоИскать, Объект.НаЧтоЗаменить);
			СпрОбъект.Записать();
			Изменено = Изменено + 1;
		КонецЦикла;
		ЗафиксироватьТранзакцию();
	Исключение
		ОтменитьТранзакцию();
		ВызватьИсключение;
	КонецПопытки;

	Сообщить(СтрШаблон("Изменено элементов: %1", Изменено));

КонецПроцедуры

Что важно в этом коде:

  1. Транзакция. Либо меняются все элементы, либо ни один. Если запись одного объекта упадёт, база не останется в полуизменённом виде.
  2. СтрЗаменить() чувствителен к регистру. «оцинк.» и «Оцинк.» — разные строки. Если в базе встречаются оба варианта, запустите обработку дважды.
  3. Спецсимволы ПОДОБНО. Знаки %, _, [ в искомой строке запрос воспринимает как шаблон. Если они есть в тексте, экранируйте их через СПЕЦСИМВОЛ или уберите условие и проверяйте вхождение в цикле функцией СтрНайти().
  4. Другие реквизиты. Чтобы менять полное наименование, допишите строку для СпрОбъект.НаименованиеПолное и добавьте его в условие запроса через ИЛИ.

Запись через Записать() вызывает все проверки и подписки конфигурации, поэтому 10 000 элементов могут обрабатываться несколько минут. Запускайте вне рабочего времени: долгая транзакция блокирует изменённые элементы, и другие пользователи не смогут их записать, пока она не завершится.

Перевод строки в тексте программно

Если текст нужно разбить на строки, в коде используйте Символы.ПС:

Описание = "Материал: сталь" + Символы.ПС + "Покрытие: цинк";

А чтобы убрать переносы, попавшие в наименование из Excel, замените их на пробел: СтрЗаменить(Текст, Символы.ПС, " "). Бывают и символы Символы.ВК — их убирают так же.

Обмен текстовыми данными через XML и универсальные форматы

Когда текст лежит не в Excel, а в другой базе 1С, таблица — лишний посредник. Справочник проще перенести целиком.

СпособКогда подходитРиски
Обработка «Выгрузка и загрузка данных XML»Две базы одной конфигурации, одного релизаЗагружает объекты с теми же ссылками; при разной структуре метаданных загрузка падает
Синхронизация данных в формате EnterpriseDataРазные типовые конфигурации: УТ 11 → БП 3.0Нужна настройка синхронизации, переносится то, что заложено в правила
«Универсальный обмен данными в формате XML» + правила обменаНетиповые базы, перенос между разными конфигурациямиПравила пишутся в «Конвертации данных», это работа программиста

Выгрузка и загрузка XML пошагово

  1. В базе-источнике откройте внешнюю обработку ВыгрузкаЗагрузкаДанныхXML83.epf через Файл → Открыть.
  2. На вкладке выгрузки отметьте нужный справочник, при необходимости задайте отбор.
  3. Выгрузите в файл .xml.
  4. В базе-приёмнике откройте ту же обработку, перейдите на вкладку загрузки и укажите файл.
  5. Загрузите и проверьте результат в списке.

Обработка сохраняет внутренние идентификаторы. Если в приёмнике уже есть элемент с тем же идентификатором, он будет перезаписан данными из файла. Это удобно, когда нужно «догнать» копию базы до рабочей, и опасно, если приёмник жил своей жизнью и в нём правили те же элементы.

Для переноса только текста без структуры можно обойтись и без XML: сформируйте в источнике отчёт или список с нужными колонками, сохраните в .xlsx через Ещё → Вывести список и загрузите в приёмник по ключу, как описано в разделе про табличный документ.

Как проверить результат после переноса

После любой массовой операции проверьте три вещи.

  1. Количество. Сверьте число строк в исходной таблице с числом созданных и обновлённых элементов. Обработки выводят этот итог в сообщениях.
  2. Дубли. В списке номенклатуры отсортируйте по наименованию или артикулу и просмотрите соседние строки. Если дубли появились, не удаляйте их сразу: сначала проверьте, нет ли на них ссылок в документах. Удалять безопаснее через пометку и Администрирование → Обслуживание → Корректировка данных → Удаление помеченных объектов — программа сама не даст удалить то, на что есть ссылки.
  3. Печатные формы. Сформируйте счёт или накладную с изменёнными позициями. В печати берётся полное наименование: если вы меняли только короткое, клиент увидит старый текст.
Перед массовым переносом
Выполнено: 0 / 6

Типичные ошибки при массовом переносе текста

Диагностика: выберите симптом

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

Можно ли вставить колонку из Excel прямо в список справочника?
Нет. Список 1С не принимает вставку нескольких строк как новые элементы. Нужна команда загрузки из файла или обработка загрузки из табличного документа.
Как перенести текст в 1С в многострочное поле с абзацами?
В ячейке Excel разделите абзацы через Alt+Enter, при загрузке переносы сохранятся. Программно перенос строки задают через Символы.ПС.
Работает ли групповое изменение реквизитов в базе 1С:Fresh?
Да, обработка входит в типовую конфигурацию и доступна в разделе администрирования. Внешние обработки в облаке подключать сложнее: они проходят проверку сервиса.
Можно ли отменить массовую загрузку?
Кнопки отмены нет. Откатиться можно только к резервной копии, сделанной до загрузки, поэтому её делают каждый раз.
Сохраняется ли история изменённых наименований?
Только если в базе включено версионирование объектов для этого справочника. Тогда старое значение видно в отчёте по версиям элемента.