В повседневной практике специалистов 1С нередко возникает срочная задача: перенести один-единственный документ с большим объемом данных (например, документ СписаниеТоваров на 600 и более строк) из одной базы в другую. Настройка регулярного обмена или разработка сложных правил конвертации данных ради разовой операции отнимает слишком много времени, а ручной ввод такого количества строк вручную нерационален.
Ситуация осложняется разницей архитектур: конфигурация 1С:Бухгалтерия предприятия 3.0 работает на управляемых формах и Библиотеке стандартных подсистем (БСП), а 1С:Управление торговлей 10.3 — на обычных формах. Простое копирование строк через буфер обмена между табличными частями разных приложений не сработает. Разберем по шагам наиболее быстрые и надежные способы решения этой задачи.
Рассмотрим самый быстрый сценарий, не требующий написания программного кода. Он отлично подходит для переноса табличной части документа через промежуточный файл Excel или MXL.
Еще и выбираем пункт Вывести список.... В появившемся диалоге отмечаем необходимые для сопоставления колонки: Номенклатура (или Код/Артикул) и Количество. Полученный табличный документ сохраняем на диск в формате листа Excel (.xlsx) или табличного документа 1С (.mxl).СписаниеТоваров, заполняем шапку (организацию, склад, статью затрат) и записываем его без проведения.ЗагрузкаДанныхИзТабличногоДокумента.epf. Переключаем режим загрузки в Табличная часть и выбираем наш созданный документ и его табличную часть Товары.Номенклатура.ЕдиницаХраненияОстатков. Нажимаем кнопку Загрузить данные.Проанализируем ситуацию, когда необходимо программно перенести данные напрямую. Если специалист уверенно владеет встроенным языком 1С, проще всего написать компактный скрипт во внешней обработке или консоли кода. Передачу структуры табличной части можно реализовать через прямое COM-подключение или промежуточный файл формата JSON.
Посмотрим на пример кода, который формирует документ в базе приемнике (УТ 10.3) на основании прочитанных данных:
НовыйДокумент = Документы.СписаниеТоваров.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Организация = ВыбраннаяОрганизация;
НовыйДокумент.Склад = ВыбранныйСклад;
НовыйДокумент.СтатьяЗатрат = ВыбраннаяСтатья;
Для Каждого Стр Из ТаблицаВыгрузки Цикл
СсылкаНоменклатура = Справочники.Номенклатура.НайтиПоКоду(Стр.Код);
Если Не СсылкаНоменклатура.Пустая() Тогда
НоваяСтрока = НовыйДокумент.Товары.Добавить();
НоваяСтрока.Номенклатура = СсылкаНоменклатура;
НоваяСтрока.Количество = Стр.Количество;
НоваяСтрока.ЕдиницаИзмерения = СсылкаНоменклатура.ЕдиницаХраненияОстатков;
НоваяСтрока.Коэффициент = 1;
КонецЕсли;
КонецЦикла;
НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);
Выясним причину возможных ошибок при попытке проведения перенесенного документа в конфигурации 1С:Управление торговлей 10.3:
ЕдиницыИзмерения. При заполнении табличной части обязательно должны быть указаны ссылки на ЕдиницаХраненияОстатков или БазоваяЕдиницаИзмерения, а также заполнен реквизит Коэффициент.СтатьяЗатрат является обязательным для корректного отражения затрат в управленческом учете.Запись, проверить остатки на складе и устранить расхождения.