Профессиональные решения для 1С 8.2 Суббота, 24.06.2017, 16:45
Меню сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Поделиться ссылкой


Главная » 2014 » Февраль » 1 » Перенос элемента справочника с сопутствующими регистрами сведений 1С 8.2
14:37
Перенос элемента справочника с сопутствующими регистрами сведений 1С 8.2
Бывают ситуации, когда элемент справочника был случайно непосредственно удален пользователем или в результате системного сбоя. Также может быть ситуация, когда просто необходимо перенести элемент с информацией по регистрам сведений в другую базу. Восстановить элемент справочника можно легко, если есть архив базы, тогда можно выгрузить информацию из архива и загрузить в текущую базу. Предлагаю вашему вниманию обработку, которая переносит элемент справочника со всеми сопутствующими регистрами. Например, контрагента можно будет перенести с контактной информацией, а номенклатуру с соответствующими ценами. Обработка автоматически подбирает состав и конкретные записи нужных регистров. Требование к базам - идентичность переносимых метаданных (по сути идентичность конфигураций), так как используется типовой механизм выгрузки объекта.
В обработке созданы закладки выгрузить и загрузить с выбором файла. Формат переносимых данных XML.
Код обработки имеет следующий вид:

Процедура КнопкаВыполнитьНажатие(Кнопка)
    Если ЭтаФорма.ЭлементыФормы.Панель1.ТекущаяСтраница=ЭтаФорма.ЭлементыФормы.Панель1.Страницы.Выгрузка Тогда
        Выгрузка();
    Иначе
        Загрузка();
    КонецЕсли;
КонецПроцедуры
Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)
    Если ЭтаФорма.ЭлементыФормы.Панель1.ТекущаяСтраница=ЭтаФорма.ЭлементыФормы.Панель1.Страницы.Выгрузка Тогда
        ВыбФайла=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
    Иначе
        ВыбФайла=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    КонецЕсли;   
    ВыбФайла.ПроверятьСуществованиеФайла = Истина;
    ВыбФайла.Фильтр="*.xml|*.xml";
    ВыбФайла.МножественныйВыбор=Ложь;
    ВыбФайла.Заголовок="Выберите файл для выгрузки";
    ВыбФайла.ПолноеИмяФайла=ИмяФайла;
    Если Не ВыбФайла.Выбрать() Тогда
        Возврат;
    КонецЕсли;
    ИмяФайла=ВыбФайла.ПолноеИмяФайла;
КонецПроцедуры
Процедура Выгрузка()
    Если ПустаяСтрока(ИмяФайла) Тогда
        Предупреждение("Укажите имя файла!");
        Возврат;
    КонецЕсли;
     ХМЛ = Новый ЗаписьXML();
    ХМЛ.ОткрытьФайл(ИмяФайла);
    ХМЛ.ЗаписатьОбъявлениеXML();
    ХМЛ.ЗаписатьНачалоЭлемента("Данные");
    Об=Элемент.ПолучитьОбъект();
    ЗаписатьXML(ХМЛ,Об);   
    Для  Каждого ТекРег  из Метаданные.РегистрыСведений Цикл
        Если Строка(ТекРег.РежимЗаписи)="Независимый" Тогда
            Для Каждого ТекИзм из ТекРег.Измерения Цикл
                Если ТекИзм.Тип.СодержитТип(ТипЗнч(Элемент)) Тогда
                    НабЗап=РегистрыСведений[ТекРег.Имя].СоздатьНаборЗаписей();
                    НабЗап.Отбор[ТекИзм.Имя].Установить(Элемент);
                    НабЗап.Прочитать();
                    Если НабЗап.Выгрузить().Количество()>0 Тогда
                        ЗаписатьXML(ХМЛ,НабЗап);
                    КонецЕсли;
                    Прервать;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
    ХМЛ.ЗаписатьКонецЭлемента();
    ХМЛ.Закрыть()   
КонецПроцедуры
Процедура Загрузка()
    ХМЛ = Новый ЧтениеXML();
    Попытка
        ХМЛ.ОткрытьФайл(ИмяФайла);
    Исключение
        Предупреждение("Файл не открыт! "+ИмяФайла);
        Возврат;
    КонецПопытки;
    ХМЛ.Прочитать();
    Если ХМЛ.Имя="Данные" Тогда
        ХМЛ.Прочитать();
        Пока ВозможностьЧтенияXML(ХМЛ) цикл
            Об = ПрочитатьXML(ХМЛ);
            Попытка
                Об.Записать();
                сообщить("Записан "+Об);
            Исключение
                сообщить(СокрЛП(Об)+" - "+ОписаниеОшибки());   
            КонецПопытки;   
        КонецЦикла;
    Иначе
        Сообщить("Неверный формат файла");
    КонецЕсли;
    ХМЛ.Закрыть();
КонецПроцедуры
Процедура Панель1ПриСменеСтраницы(Элемент, ТекущаяСтраница)
    Если ЭтаФорма.ЭлементыФормы.Панель1.ТекущаяСтраница=ЭтаФорма.ЭлементыФормы.Панель1.Страницы.Выгрузка Тогда
        ЭтаФорма.ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ОсновныеДействияФормыВыполнить.Текст="Выгрузить";
    Иначе
        ЭтаФорма.ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ОсновныеДействияФормыВыполнить.Текст="Загрузить";
    КонецЕсли;
КонецПроцедуры
 
Код 1С добавлен на сайт при помощи оригинальной обработки
 
 
Просмотров: 1550 | Добавил: Programmer1C | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск
Календарь
«  Февраль 2014  »
ПнВтСрЧтПтСбВс
     12
3456789
10111213141516
17181920212223
2425262728
Архив записей
Друзья сайта
  • Создать сайт
  • Современная Ароматерапия
  • Биодобавки из США
  • Заработок для web-мастера

  • Рейтинг@Mail.ru
    www.professional-1c.ru © 2017
    Бесплатный хостинг uCoz