Имя: Пароль:
1C
1С v8
Конструктор не обнаружен (ХранилищеЗначения)
0 koketka
 
02.04.13
09:23
Всегда пользовалась стандарной обработкой пенос данных хml а тут пишет мне ошибку Конструктор не обнаружен (ХранилищеЗначения), что это такое отчего раньше не было а тут появилась
1 Fragster
 
гуру
02.04.13
09:23
управляемые формы?
2 koketka
 
02.04.13
09:29
первый раз слышк у нас 8.0
3 Godofsin
 
02.04.13
09:32
Й, не?
4 Godofsin
 
02.04.13
09:34
а нет, "Я" =)
5 Wobland
 
02.04.13
09:38
(0) очевидно, потому, что раньше обнаружение бывало
6 koketka
 
02.04.13
09:39
а как исправить данную ошибку
7 koketka
 
02.04.13
11:15
но может кто подскажет хоть где копать то
8 Wobland
 
02.04.13
11:15
может, я даже подскажу. при наличии большего количества информации
9 koketka
 
02.04.13
11:19
выгружаю поступление товаров и услуг за месяц из одной базы в другую обработкой перенос данных xml
вот обработка внутри
Перем ВсеТипыДок,ВсеТипыСпр;

// Определяет заполнено ли переданное значение
//
// Параметры:
//  Значение - значение, заполенение которого надо проверить
//
// Возвращаемое значение:
//  Истина - значение не заполнено, ложь - иначе.
//
Функция _ЗначениеНеЗаполнено(Значение)
   
   Результат = Ложь;
   ТипЗначения = ТипЗнч(Значение);
   
   // Сначала примитивные типы
   Если Значение = Неопределено Тогда
       Результат = Истина;
   ИначеЕсли Значение = NULL Тогда
       Результат = Истина;
   ИначеЕсли ТипЗначения = Тип("Строка") Тогда
       Если СокрЛП(Значение) = "" Тогда
           Результат = Истина;
       КонецЕсли;
   ИначеЕсли ТипЗначения = Тип("Число") Тогда
       Если Значение = 0 Тогда
           Результат = Истина;
       КонецЕсли;
   ИначеЕсли ТипЗначения = Тип("Дата") Тогда
       Если Значение = Дата('00010101') Тогда
           Результат = Истина;
       КонецЕсли;
   ИначеЕсли ТипЗначения = Тип("Булево") Тогда
       Результат = Ложь; // Булево будем считать не пустым
       // для МоментаВремени и Границы будем проверять заполнение Даты
   ИначеЕсли ТипЗначения = Тип("Граница") Тогда
       Если Значение.Значение = Дата('00010101') Тогда
           Результат = Истина;
       КонецЕсли;
   ИначеЕсли ТипЗначения = Тип("МоментВремени") Тогда
       Если Значение.Дата = Дата('00010101') Тогда
           Результат = Истина;
       КонецЕсли;    
       // Для остальных будем считать значение пустым, если оно равно
       // дефолтному значению своего типа
   Иначе
       Если Значение = Новый(ТипЗначения) Тогда
           Результат = Истина;
       КонецЕсли;
   КонецЕсли;
   
   Возврат Результат;
   
КонецФункции // ЗначениеНеЗаполнено()

Процедура ЗаписатьВПротоколВыполнения(Сообщение,Ошибка=Ложь) Экспорт
   
   Если Ошибка Тогда
       Если   ЭтоИнтерактивныйРежим Тогда
           Сообщить(Сообщение, СтатусСообщения.ОченьВажное);
       Иначе
           ЗаписьЖурналаРегистрации(РежимОбмена,УровеньЖурналаРегистрации.Ошибка,,,Сообщение);    
       КонецЕсли;
   Иначе
       Если  ЭтоИнтерактивныйРежим Тогда
           Сообщить(Сообщение, СтатусСообщения.Информация);
       Иначе
           ЗаписьЖурналаРегистрации(РежимОбмена,УровеньЖурналаРегистрации.Информация,,,Сообщение);    
       КонецЕсли;
   КонецЕсли;
   
КонецПроцедуры // ЗаписатьВПротоколВыполнения()


Процедура ЗаполнитьТаблицаПравилВыгрузки() Экспорт
   
   ТаблицаПравилВыгрузки.Строки.Очистить();
   
   СтрокиДЗ = ТаблицаПравилВыгрузки.Строки;
   СтрокаДЗГруппа = СтрокиДЗ.Добавить();
   СтрокаДЗГруппа.Имя="Константы";
   СтрокаДЗГруппа.ЭтоГруппа=Истина;
   СтрокаДЗГруппа.Включить = 0;
   
   Для Каждого Конст ИЗ Метаданные.Константы Цикл
       СтрокаДЗ = СтрокаДЗГруппа.Строки.Добавить();
       СтрокаДЗ.Имя=Конст.Имя;
       СтрокаДЗ.ЭтоГруппа=Ложь;
       СтрокаДЗ.Включить = 0;    
   КонецЦикла;
   
   СтрокаДЗГруппа = СтрокиДЗ.Добавить();
   СтрокаДЗГруппа.Имя="Справочники";
   СтрокаДЗГруппа.ЭтоГруппа=Истина;
   СтрокаДЗГруппа.Включить = 0;
   
   Для Каждого Спр ИЗ Метаданные.Справочники Цикл
       СтрокаДЗ = СтрокаДЗГруппа.Строки.Добавить();
       СтрокаДЗ.Имя=Спр.Имя;
       СтрокаДЗ.ЭтоГруппа=Ложь;
       СтрокаДЗ.Включить = 0;    
   КонецЦикла;
   
   СтрокаДЗГруппа = СтрокиДЗ.Добавить();
   СтрокаДЗГруппа.Имя="Документы";
   СтрокаДЗГруппа.ЭтоГруппа=Истина;
   СтрокаДЗГруппа.Включить = 0;
   
   Для Каждого Док ИЗ Метаданные.Документы Цикл
       СтрокаДЗ = СтрокаДЗГруппа.Строки.Добавить();
       СтрокаДЗ.Имя=Док.Имя;
       СтрокаДЗ.ЭтоГруппа=Ложь;
       СтрокаДЗ.Включить = 0;    
   КонецЦикла;
   
   СтрокаДЗГруппа = СтрокиДЗ.Добавить();
   СтрокаДЗГруппа.Имя="РегистрыСведений";
   СтрокаДЗГруппа.ЭтоГруппа=Истина;
   СтрокаДЗГруппа.Включить = 0;
   
   Для Каждого РегСвед ИЗ Метаданные.РегистрыСведений Цикл
       Если РегСвед.РежимЗаписи=Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда
           СтрокаДЗ = СтрокаДЗГруппа.Строки.Добавить();
           СтрокаДЗ.Имя=РегСвед.Имя;
           СтрокаДЗ.ЭтоГруппа=Ложь;
           СтрокаДЗ.Включить = 0;    
       КонецЕсли;
   КонецЦикла;
   
КонецПроцедуры

Процедура ДобавитьДанныеВСписок(СписокДанных,Данные)
   
   ОбработкаПрерыванияПользователя();
   
   Если _ЗначениеНеЗаполнено(Данные) Тогда
       Возврат;
   КонецЕсли;    
   
   Если ВсеТипыДок.СодержитТип(ТипЗнч(Данные))
       ИЛИ ВсеТипыСпр.СодержитТип(ТипЗнч(Данные)) Тогда
       
       Если СписокДанных.НайтиПоЗначению(Данные)<>Неопределено Тогда
           Возврат;
       КонецЕсли;
       
       СписокДанных.Добавить(Данные);
       
       Если  ВсеТипыСпр.СодержитТип(ТипЗнч(Данные)) Тогда
           Если Данные.Родитель<>Неопределено И НЕ Данные.Родитель.Пустая() Тогда
               ДобавитьДанныеВСписок(СписокДанных,Данные.Родитель.Ссылка);
           КонецЕсли;
           
           Если Данные.Владелец<>Неопределено И НЕ Данные.Владелец.Пустая() Тогда
               ДобавитьДанныеВСписок(СписокДанных,Данные.Владелец.Ссылка);
           КонецЕсли;    
       КонецЕсли;
       
       Для Каждого Реквизит ИЗ Данные.Метаданные().Реквизиты Цикл
           ИмяРеквизита=Реквизит.Имя;
           ЗначРекв=Данные[ИмяРеквизита];
           ДобавитьДанныеВСписок(СписокДанных,ЗначРекв);
       КонецЦикла;    
       
       Для Каждого ТаблЧастьМД ИЗ Данные.Метаданные().ТабличныеЧасти Цикл
           СписокАгрРекв=Новый СписокЗначений();
           Для Каждого Реквизит ИЗ ТаблЧастьМД.Реквизиты Цикл
               Если ВсеТипыДок.СодержитТип(ТипЗнч(Данные))
                   ИЛИ ВсеТипыСпр.СодержитТип(ТипЗнч(Данные)) Тогда
                   СписокАгрРекв.Добавить(Реквизит.Имя);
               КонецЕсли;        
           КонецЦикла;
           ТаблЧасть=Данные[ТаблЧастьМД.Имя];
           Если ТаблЧасть.Количество()>0
               И СписокАгрРекв.Количество()>0 Тогда
               Для Каждого СтрТаблЧасть ИЗ ТаблЧасть Цикл
                   Для Каждого СтрАгрРекв ИЗ СписокАгрРекв Цикл
                       ДобавитьДанныеВСписок(СписокДанных,СтрТаблЧасть[СтрАгрРекв.Значение]);
                   КонецЦикла;
               КонецЦикла;
           КонецЕсли;
           
       КонецЦикла;
   ИначеЕсли(Найти(Строка(Данные),"РегистрСведений")>0) Тогда
       
       СписокДанных.Добавить(Данные);
       
       СписокАгрРекв=Новый СписокЗначений();
       Для Каждого Измерение ИЗ Данные.Метаданные().Измерения Цикл
           ТипСтрока=Строка(Измерение.Тип);
           Если Найти(ТипСтрока,"Справочник")>0
               ИЛИ Найти(ТипСтрока,"Документ")>0 Тогда
               СписокАгрРекв.Добавить(Измерение.Имя);
           КонецЕсли;
       КонецЦикла;    
       
       Для Каждого Ресурс ИЗ Данные.Метаданные().Ресурсы Цикл
           ТипСтрока=Строка(Ресурс.Тип);
           Если Найти(ТипСтрока,"Справочник")>0
               ИЛИ Найти(ТипСтрока,"Документ")>0 Тогда
               СписокАгрРекв.Добавить(Ресурс.Имя);
           КонецЕсли;
       КонецЦикла;    
       
       Для Каждого Реквизит ИЗ Данные.Метаданные().Реквизиты Цикл
           ТипСтрока=Строка(Реквизит.Тип);
           Если Найти(ТипСтрока,"Справочник")>0
               ИЛИ Найти(ТипСтрока,"Документ")>0 Тогда
               СписокАгрРекв.Добавить(Реквизит.Имя);
           КонецЕсли;
       КонецЦикла;
       
       Если СписокАгрРекв.Количество()>0 Тогда
           Для Каждого СтрДанные ИЗ Данные Цикл
               Для Каждого СтрАгрРекв ИЗ СписокАгрРекв Цикл
                   ДобавитьДанныеВСписок(СписокДанных,СтрДанные[СтрАгрРекв.Значение]);
               КонецЦикла;
           КонецЦикла;
       КонецЕсли;
   ИначеЕсли(Найти(Строка(Данные),"КонстантаМенеджер")>0) Тогда
       СписокДанных.Добавить(Данные);
       ДобавитьДанныеВСписок(СписокДанных,Данные.Значение);
   Иначе
       Возврат;
   КонецЕсли;
КонецПроцедуры

Процедура  ВыполнитьВыгрузку() Экспорт
   ЗаписатьВПротоколВыполнения("Начало выгрузки:   " + ТекущаяДата(),Ложь);
   СписокДанных=Новый СписокЗначений();
   ЗаписьXML = Новый ЗаписьXML;
   ЗаписьXML.ОткрытьФайл(ИмяФайлаОбмена,"UTF-8");
   ЗаписьXML.ЗаписатьОбъявлениеXML();
   ЗаписьXML.ЗаписатьНачалоЭлемента("ФайлОбмена");
   
   Для Каждого СтрокаДЗГруппа ИЗ ТаблицаПравилВыгрузки.Строки Цикл
       
       Если СтрокаДЗГруппа.Включить>0 Тогда
           ИмяСтрокаДЗГруппа=СтрокаДЗГруппа.Имя;
           Для Каждого СтрокаДЗОбъект ИЗ СтрокаДЗГруппа.Строки Цикл
               Если СтрокаДЗОбъект.Включить>0 Тогда
                   Если ИмяСтрокаДЗГруппа="Справочники" Тогда
                       Менеджер=Справочники[СтрокаДЗОбъект.Имя];
                       Выборка=Менеджер.Выбрать(,,,);
                       Пока  Выборка.Следующий() Цикл
                           Состояние("Выгрузка объектов "+Строка(Менеджер));
                           ДобавитьДанныеВСписок(СписокДанных,Выборка.Ссылка);
                       КонецЦикла;    
                   ИначеЕсли(ИмяСтрокаДЗГруппа="Документы") Тогда
                       Менеджер=Документы[СтрокаДЗОбъект.Имя];
                       Выборка=Менеджер.Выбрать(ДатаНачала,ДатаОкончания,,);
                       Пока  Выборка.Следующий() Цикл
                           Состояние("Выгрузка объектов "+Строка(Менеджер));
                           ДобавитьДанныеВСписок(СписокДанных,Выборка.Ссылка);
                       КонецЦикла;        
                   ИначеЕсли(ИмяСтрокаДЗГруппа="РегистрыСведений") Тогда
                       Набор=РегистрыСведений[СтрокаДЗОбъект.Имя].СоздатьНаборЗаписей();    
                       Состояние("Выгрузка объектов "+Строка(Набор));
                       Набор.Прочитать();
                       Если Набор.Количество()>0 Тогда
                           ДобавитьДанныеВСписок(СписокДанных,Набор);
                       Конецесли;
                   ИначеЕсли(ИмяСтрокаДЗГруппа="Константы") Тогда
                       МенеджерЗначения=Константы[СтрокаДЗОбъект.Имя].СоздатьМенеджерЗначения();
                       МенеджерЗначения.Прочитать();
                       ДобавитьДанныеВСписок(СписокДанных,МенеджерЗначения);
                   КонецЕсли;                                      
               КонецЕсли;
           КонецЦикла;
       КонецЕсли;
   КонецЦикла;
   
   Для Каждого ЭлСписка ИЗ СписокДанных Цикл
       Попытка
           Данные=ЭлСписка.Значение;
           Если ВсеТипыДок.СодержитТип(ТипЗнч(Данные))
               ИЛИ ВсеТипыСпр.СодержитТип(ТипЗнч(Данные)) Тогда
               Данные=Данные.ПолучитьОбъект()
           КонецЕсли;
           ЗаписатьXML(ЗаписьXML, Данные);
       Исключение
           Продолжить;
       КонецПопытки;
   КонецЦикла;    
   
   ЗаписьXML.ЗаписатьКонецЭлемента();
   ЗаписьXML.Закрыть();
   ЗаписатьВПротоколВыполнения("Окончание выгрузки: " + ТекущаяДата(),Ложь);
КонецПроцедуры

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

ВсеТипыДок=Документы.ТипВсеСсылки();
ВсеТипыСпр=Справочники.ТипВсеСсылки();
Колонки = ТаблицаПравилВыгрузки.Колонки;

Колонки.Добавить("Включить");
Колонки.Добавить("ЭтоГруппа");    
Колонки.Добавить("Имя");
Независимо от того, куда вы едете — это в гору и против ветра!