Имя: Пароль:
1C
1С v8
Выгрузка данных в справочник 1С из Excel
0 zelik503
 
08.11.13
12:18
Уважаемые форумчане, помогите!
Связались с компанией, занимающейся "разработкой" в 1С, поручили им обработку - они запросили огромные деньги, в итоге не заработало как положено
Конфигурация 1С 8.2 Учет Управление в ЖКХ
Любой мозговой штурм приветствуется, ибо горит работа
(((((


Текст обработки вот такой:
[quote]
Перем МетаданныеОписание Экспорт;
Перем СсылочныеТипы Экспорт;
Перем СоответствиеОбъектовМетаданныхИСсылочныхТипов;
Перем ОкноИсполнения Экспорт;
Перем ОбработанныхКонстант Экспорт;
Перем ОбработанныхНаборовЗаписей Экспорт;
Перем мСоответствиеКолонокДвижений;

// массив строк дерева метаданных, имеющих признак Выгружать
Перем СоставПолнойВыгрузки Экспорт;
// массив строк дерева метаданных, имеющих признак выгрузки по ссылке
Перем СоставВспомогательнойВыгрузки;

// массив регистров, использующих итоги
Перем ИспользующиеИтоги;

Перем мТипРезультатЗапроса;
Перем мТипДанныхУдаления;

Перем мВыгруженныеОбъекты;
Перем мКоличествоСохраненныхПоследнихВыгрузок;

Перем мНаличиеВыгрузкиПодчиненныхОбъектов;

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

// Процедура разбирает файл выгрузки и осуществляет запись в ИБ сохраненных
// там объектов
//
// Параметры
//   ИмяФайла - имя файла выгрузки
//
Процедура ВыполнитьЗагрузку(ИмяФайла) Экспорт
    
    Если СтрДлина(ИмяФайла) = 0 Тогда
        #Если Клиент Тогда
        Предупреждение("Не задано имя файла выгрузки");
        #КонецЕсли
        Возврат;
    КонецЕсли;
    
    Файл = Новый Файл(ИмяФайла);
    Если Не Файл.Существует() Тогда
        #Если Клиент Тогда
        Предупреждение("Не найден файл для загрузки данных: " + ИмяФайла);
        #КонецЕсли
        Возврат;
    КонецЕсли;
    
    ФайлВФорматеFastInfoSet = (Файл.Расширение = ".fi");
    
    Если ФайлВФорматеFastInfoSet Тогда
        
        // распаковка файла правил
        ЧтениеXML = Новый ЧтениеFastInfoset;
        
    Иначе
        
        ЧтениеXML = Новый ЧтениеXML;    
        
    КонецЕсли;
        
    
    ЧтениеXML.ОткрытьФайл(ИмяФайла);
    // проверка формата файла обмена
    Если Не ЧтениеXML.Прочитать() Или
        ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Или
        ЧтениеXML.ЛокальноеИмя <> "_1CV8DtUD" Или
        ЧтениеXML.URIПространстваИмен <> "http://www.1c.ru/V8/1CV8DtUD/"; Тогда
        #Если Клиент Тогда
        Предупреждение("Неверный формат файла выгрузки", 10, "Ошибка загрузки!!!");
        #КонецЕсли
        Возврат;
    КонецЕсли;
    
    Если Не ЧтениеXML.Прочитать() Или
        ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Или
        ЧтениеXML.ЛокальноеИмя <> "Data" Или
        ЧтениеXML.URIПространстваИмен <> "http://www.1c.ru/V8/1CV8DtUD/"; Тогда
        #Если Клиент Тогда
        Предупреждение("Неверный формат файла выгрузки", 10, "Ошибка загрузки!!!");
        #КонецЕсли
        Возврат;
    КонецЕсли;
    
    // чтение и запись в ИБ записанных в выгрузке объектов
    Если Не ЧтениеXML.Прочитать() Тогда
        #Если Клиент Тогда
        Предупреждение("Неверный формат файла выгрузки", 10, "Ошибка загрузки!!!");
        #КонецЕсли
        Возврат;
    КонецЕсли;
    
    Загружено = 0;
    УбратьИспользованиеИтогов();
    
    #Если Клиент Тогда
    Сообщить("Начало загрузки:   " + ТекущаяДата());
    #КонецЕсли
    
    Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл
        
        Попытка
            ЗаписанноеЗначение = ПрочитатьXML(ЧтениеXML);
        Исключение
            ВосстановитьИспользованиеИтогов();
            ВызватьИсключение;
        КонецПопытки;
        
        Если ПриЗагрузкеИспользоватьРежимОбменаДанными Тогда
            
            Попытка // Планы обмена свойства ОбменДанными не имеют
                ЗаписанноеЗначение.ОбменДанными.Загрузка = Истина;
            Исключение
            КонецПопытки;
            
        КонецЕсли;
        
        Попытка
            ЗаписанноеЗначение.Записать();
        Исключение
            
            ТекстОшибки = ОписаниеОшибки();
            
            Если НЕ ПродолжитьЗагрузкуВСлучаеВозникновенияОшибки Тогда
                
                #Если Клиент Тогда
                    Если Вопрос("При записи произошла ошибка:" + Символы.ПС + ТекстОшибки + "
                        |Продолжит загрузку?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
                        
                        ВосстановитьИспользованиеИтогов();
                        ВызватьИсключение;
                    КонецЕсли;
                #Иначе
                    ВосстановитьИспользованиеИтогов();
                    ВызватьИсключение;
                #КонецЕсли
                
            Иначе
                
                Попытка
                    Сообщить("Ошибка при загрузке данных. Объект: " + ЗаписанноеЗначение + ", Тип: " + ТипЗнч(ЗаписанноеЗначение) + "
                        |Ошибка : " + ТекстОшибки, СтатусСообщения.Важное);
                Исключение
                    Сообщить("Ошибка при загрузке данных.
                        |Ошибка : " + ТекстОшибки, СтатусСообщения.Важное);
                КонецПопытки;    
                
            КонецЕсли;
            
            Загружено = Загружено - 1;
            
        КонецПопытки;    
        
        Загружено = Загружено + 1;
        
        #Если Клиент Тогда
        Если Загружено % 100 = 0 Тогда
            Состояние("Загружено объектов - " + Загружено);
            ОбработкаПрерыванияПользователя();
        КонецЕсли;
        #КонецЕсли
    
    КонецЦикла;
    
    ВосстановитьИспользованиеИтогов();
    
    #Если Клиент Тогда
    Состояние();
    #КонецЕсли
    
    // проверка формата файла обмена
    Если ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Или
        ЧтениеXML.ЛокальноеИмя <> "Data" Или
        ЧтениеXML.URIПространстваИмен <> "http://www.1c.ru/V8/1CV8DtUD/"; Тогда
        #Если Клиент Тогда
        Предупреждение("Неверный формат файла выгрузки", 10, "Ошибка загрузки!!!");
        #КонецЕсли
        Возврат;
    КонецЕсли;
    Если Не ЧтениеXML.Прочитать() Или
        ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Или
        ЧтениеXML.ЛокальноеИмя <> "_1CV8DtUD" Или
        ЧтениеXML.URIПространстваИмен <> "http://www.1c.ru/V8/1CV8DtUD/"; Тогда
        #Если Клиент Тогда
        Предупреждение("Неверный формат файла выгрузки", 10, "Ошибка загрузки!!!");
        #КонецЕсли
        Возврат;
    КонецЕсли;
    
    ЧтениеXML.Закрыть();
    
    #Если Клиент Тогда
    Сообщить("Загружено объектов: " + Загружено);
    Сообщить("Окончание загрузки: " + ТекущаяДата());
    Предупреждение("Загрузка данных успешно завершена", 10);
    #КонецЕсли

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

Функция СоздатьОбъектЗаписиXMLДляПроверки()
    
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку("UTF-16");
    ЗаписьXML.ЗаписатьНачалоЭлемента("Проверка");
    
    Возврат ЗаписьXML;
    
КонецФункции

Процедура ВыполнитьПроверкуДляВыгрузкиОбъектовИзПланаОбмена(СсылкаНаУзел) Экспорт
    
    ОбъектыВыгруженныеСОшибками = Новый Соответствие;
    ВсегоОбработаноОбъектов = 0;
    КоличествоОшибок = 0;
    
    ЗаписьXML = СоздатьОбъектЗаписиXMLДляПроверки();
    
    СоставВыгрузки();
    МассивМетаданныхДляВыгрузки = Новый Массив();
    
    Для Каждого СтрокаТаблицыВыгрузки Из СоставПолнойВыгрузки Цикл
        
        СтрокаДереваМетаданных = СтрокаТаблицыВыгрузки.СтрокаДерева;
            
        МассивМетаданныхДляВыгрузки.Добавить(СтрокаДереваМетаданных.ОбъектМД);
                
    КонецЦикла;
    
    Если МассивМетаданныхДляВыгрузки.Количество() = 0 Тогда
        МассивМетаданныхДляВыгрузки = Неопределено;
    КонецЕсли;
    
    ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(СсылкаНаУзел, СсылкаНаУзел.НомерОтправленного + 1, МассивМетаданныхДляВыгрузки);
    Пока ВыборкаИзменений.Следующий() Цикл
        
        // имененный элемент
        Данные = ВыборкаИзменений.Получить();
        
        // данные должны быть
        Если Данные = Неопределено Тогда
            Продолжить;
        КонецЕсли;
        
        ЭтоУдаление = (мТипДанныхУдаления = ТипЗнч(Данные));
        
        Если ЭтоУдаление Тогда
            Продолжить;
        КонецЕсли;
        
        ВсегоОбработаноОбъектов = ВсегоОбработаноОбъектов + 1;
        
        МетаданныеОбъекта = Данные.Метаданные();        
        
        Попытка
        
            ВыполнитьВспомогательныеДействияДляЗаписиXML(ВсегоОбработаноОбъектов, ЗаписьXML, Истина);
            
            ЗаписатьXML(ЗаписьXML, Данные);
            
                                        
        Исключение
            
            КоличествоОшибок = КоличествоОшибок + 1;
            
            СтрокаОписанияОшибки = ОписаниеОшибки();
            
            // для ссылочных добавляем ссылку, а для не ссылочных сам объект
            ЭтоНеСсылка = Метаданные.РегистрыСведений.Содержит(МетаданныеОбъекта)
                ИЛИ Метаданные.РегистрыНакопления.Содержит(МетаданныеОбъекта)
                ИЛИ Метаданные.РегистрыБухгалтерии.Содержит(МетаданныеОбъекта)
                ИЛИ Метаданные.Константы.Содержит(МетаданныеОбъекта);
            
            Если ЭтоНеСсылка Тогда
                
                ОбъектыВыгруженныеСОшибками.Вставить(Данные, СтрокаОписанияОшибки);
                
            Иначе    
            
                Если ОбъектыВыгруженныеСОшибками.Получить(Данные.Ссылка) = Неопределено Тогда
                    ОбъектыВыгруженныеСОшибками.Вставить(Данные.Ссылка, СтрокаОписанияОшибки);
                КонецЕсли;
                
            КонецЕсли;
                        
        КонецПопытки;
        
        #Если Клиент Тогда
        Если ВсегоОбработаноОбъектов % 100 = 0 Тогда
            Состояние("Выгруженных объектов - " + ВсегоОбработаноОбъектов + ", ошибок при выгрузке - " + КоличествоОшибок);
        КонецЕсли;
        #КонецЕсли
                        
    КонецЦикла;
    
    #Если Клиент Тогда
    Сообщить("Отобразать результат");
    ОтобразитьОбъектыСОшибкамиВыгрузки(ОбъектыВыгруженныеСОшибками);        
    #КонецЕсли
    
КонецПроцедуры

#Если Клиент тогда
    
Процедура ОтобразитьОбъектыСОшибкамиВыгрузки(ОбъектыВыгруженныеСОшибками)
    
    Если ОбъектыВыгруженныеСОшибками.Количество() = 0 Тогда
        Предупреждение("Проверка объектов на наличие недопустимых символов завершена. Ошибок не обнаружено.");
    Иначе
        
        СтрокаПоискаОшибки = "ЗаписатьXML):";
        ДлинаСтрокиПоиска = СтрДлина(СтрокаПоискаОшибки);
        
        //
        ФормаОтображения = ПолучитьФорму("ОшибкиПриВыгрузке");
        
        ТаблицаДанных = ФормаОтображения.ТаблицаОбъектов;
        ТаблицаДанных.Колонки.Добавить("СлужебныйОбъект");
        
        Для Каждого СтрокаСоответствия Из ОбъектыВыгруженныеСОшибками Цикл
            
            СтрокаТаблицы = ТаблицаДанных.Добавить();
            СтрокаТаблицы.СлужебныйОбъект = СтрокаСоответствия.Ключ;
            СтрокаТаблицы.Объект = Строка(СтрокаСоответствия.Ключ);
            
            // служебные символы удалим из ошибки
            ТекстСообщения = СформироватьТекстСообщенияБезСлужебныхСимволов(СтрокаСоответствия.Значение);
            
            ПозицияНачалаОшибки = Найти(ТекстСообщения, "ЗаписатьXML):");
            Если ПозицияНачалаОшибки > 0 Тогда
                
                ТекстСообщения = Сред(ТекстСообщения, ПозицияНачалаОшибки + ДлинаСтрокиПоиска);
                
            КонецЕсли;
            
            СтрокаТаблицы.ТекстОшибки = СокрЛП(ТекстСообщения);
            
            МетаданныеЗначения = СтрокаТаблицы.СлужебныйОбъект.Метаданные();
            
            Если Метаданные.РегистрыСведений.Содержит(МетаданныеЗначения)
                ИЛИ Метаданные.РегистрыНакопления.Содержит(МетаданныеЗначения)
                ИЛИ Метаданные.РегистрыБухгалтерии.Содержит(МетаданныеЗначения)
                ИЛИ Метаданные.РегистрыБухгалтерии.Содержит(МетаданныеЗначения) Тогда
            
                СтрокаТаблицы.НомерТипаОбъекта = 0;
                
            ИначеЕсли Метаданные.Константы.Содержит(МетаданныеЗначения) Тогда
                
                СтрокаТаблицы.НомерТипаОбъекта = 1;
                
            ИначеЕсли Метаданные.Справочники.Содержит(МетаданныеЗначения) Тогда
                
                СтрокаТаблицы.НомерТипаОбъекта = 2;
                
            ИначеЕсли Метаданные.Документы.Содержит(МетаданныеЗначения) Тогда
                
                СтрокаТаблицы.НомерТипаОбъекта = 3;
                
            ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(МетаданныеЗначения) Тогда
                
                СтрокаТаблицы.НомерТипаОбъекта = 4;
                
            Иначе
                
                СтрокаТаблицы.НомерТипаОбъекта = 100;
                
            КонецЕсли;                
            
        КонецЦикла;
        
        ФормаОтображения.Открыть();
        
    КонецЕсли;    
    
КонецПроцедуры

#КонецЕсли

// Процедура создает файл выгрузки
//
// Параметры
//   ИмяФайла - имя файла выгрузки
//
Процедура ВыполнитьВыгрузку(ИмяФайла, ТолькоПроверкаНедопустимыхСимволов = Ложь) Экспорт
    
    ОбъектыВыгруженныеСОшибками = Новый Соответствие;
    
    Если НЕ ТолькоПроверкаНедопустимыхСимволов
        И СтрДлина(ИмяФайла) = 0 Тогда
        
        #Если Клиент Тогда
        Предупреждение("Не задано имя файла выгрузки");
        #КонецЕсли
        Возврат;
        
    КонецЕсли;
    
    СоставВыгрузки();
    
    Если СоставПолнойВыгрузки.Количество() = 0
        И ДополнительныеОбъектыДляВыгрузки.Количество() = 0 Тогда
        
        #Если Клиент Тогда
        Предупреждение("Не задан состав выгрузки");
        #КонецЕсли
        Возврат;
        
    КонецЕсли;
    
    Если ТолькоПроверкаНедопустимыхСимволов Тогда
        
        ЗаписьXML = СоздатьОбъектЗаписиXMLДляПроверки();
        
        ВыгрузкаДанных(ЗаписьXML, ТолькоПроверкаНедопустимыхСимволов, ОбъектыВыгруженныеСОшибками);
        
    Иначе
        
        Если Не ИспользоватьФорматFastInfoSet Тогда
            
            ЗаписьXML = Новый ЗаписьXML;
            ЗаписьXML.ОткрытьФайл(ИмяФайла, "UTF-8");
            
        Иначе
        
            ЗаписьXML = Новый ЗаписьFastInfoset;
            ЗаписьXML.ОткрытьФайл(ИмяФайла);
            
        КонецЕсли;
                
        ЗаписьXML.ЗаписатьОбъявлениеXML();
        ЗаписьXML.ЗаписатьНачалоЭлемента("_1CV8DtUD", "http://www.1c.ru/V8/1CV8DtUD/";);
        ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("V8Exch", "http://www.1c.ru/V8/1CV8DtUD/";);
        ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance";);
        ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("v8",  "http://v8.1c.ru/data";);
        ЗаписьXML.ЗаписатьНачалоЭлемента("V8Exch:Data");
        
        #Если Клиент Тогда
            Если НЕ ТолькоПроверкаНедопустимыхСимволов Тогда
                Сообщить("Начало выгрузки:   " + ТекущаяДата());
            Иначе
                Сообщить("Начало проверки:   " + ТекущаяДата());
            КонецЕсли;
        #КонецЕсли
        
        ВыгрузкаДанных(ЗаписьXML);
        
        ЗаписьXML.ЗаписатьКонецЭлемента(); //V8Exc:Data
        ЗаписьXML.ЗаписатьКонецЭлемента(); //V8Exc:_1CV8DtUD
        
    КонецЕсли;    
    
    #Если Клиент Тогда
    Если НЕ ТолькоПроверкаНедопустимыхСимволов Тогда
        Сообщить("Выгружено объектов: " + ВсегоОбработанныхЗаписей());
        Сообщить("Окончание выгрузки: " + ТекущаяДата());
        Предупреждение("Выгрузка данных успешно завершена", 10);
    Иначе        
        Сообщить("Проверено объектов: " + ВсегоОбработанныхЗаписей());
        Сообщить("Окончание проверки: " + ТекущаяДата());        
        ОтобразитьОбъектыСОшибкамиВыгрузки(ОбъектыВыгруженныеСОшибками);        
    КонецЕсли;
    #КонецЕсли
    
КонецПроцедуры

Функция СформироватьТекстСообщенияБезСлужебныхСимволов(Знач ТекстСообщения)

    НачалоСлужебногоСообщения    = Найти(ТекстСообщения, "{");
    ОкончаниеСлужебногоСообщения = Найти(ТекстСообщения, "}:");
    
    Если ОкончаниеСлужебногоСообщения > 0
        И НачалоСлужебногоСообщения > 0
        И НачалоСлужебногоСообщения < ОкончаниеСлужебногоСообщения Тогда
        
        ТекстСообщения = Лев(ТекстСообщения, (НачалоСлужебногоСообщения - 1)) +
                         Сред(ТекстСообщения, (ОкончаниеСлужебногоСообщения + 2));
                        
    КонецЕсли;
    
    Возврат СокрЛП(ТекстСообщения);

КонецФункции // ()


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

Процедура ВыгрузитьДанныеМассиваСсылок(МассивСсылок, СтрокаИмяДляЗапроса, ЗаписьXML, ТолькоПроверкаНедопустимыхСимволов = Ложь, ОбъектыВыгруженныеСОшибками = Неопределено)
    
    Если МассивСсылок.Количество() = 0
        ИЛИ НЕ ЗначениеЗаполнено(СтрокаИмяДляЗапроса) Тогда
        
        Возврат;
        
    КонецЕсли;
    
    Запрос = Новый Запрос();
    Запрос.Текст = "ВЫБРАТЬ разрешенные _.*
                   |    
                   |ИЗ
                   |    " + СтрокаИмяДляЗапроса + " КАК _
                   |ГДЕ
                   |    _.Ссылка В(&МассивСсылок)";
                  
    Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ЗапросИЗапись(РезультатЗапроса, ЗаписьXML, Истина, ОбъектыВыгруженныеСОшибками, ТолькоПроверкаНедопустимыхСимволов);
    
КонецПроцедуры

// Процедура записывает наборы записей регистра (накопления, бухгалтерии...)
//
// Параметры
//   ЗаписьXML - объект, через которых происходит запись объектов ИБ
//
Процедура ВыгрузкаДанных(ЗаписьXML, ТолькоПроверкаНедопустимыхСимволов = Ложь, ОбъектыВыгруженныеСОшибками = Неопределено)
    
    мВыгруженныеОбъекты = Новый ТаблицаЗначений;
    мВыгруженныеОбъекты.Колонки.Добавить("Ссылка");
    мВыгруженныеОбъекты.Индексы.Добавить("Ссылка");
    
    
    Если ОбъектыВыгруженныеСОшибками = Неопределено Тогда
        ОбъектыВыгруженныеСОшибками = Новый Соответствие;
    КонецЕсли;
    
    ОкноИсполнения = ПолучитьФорму("ОкноИсполнения");
    ОкноИсполненияОбщееКоличество = 1;
    ОкноИсполненияОбработано = 0;
    ОкноИсполнения.Открыть();
    
    Попытка
        
        Для Каждого СтрокаТаблицыВыгрузки Из СоставПолнойВыгрузки Цикл
            
            СтрокаДереваМетаданных = СтрокаТаблицыВыгрузки.СтрокаДерева;
            
            Если СтрокаДереваМетаданных.ЭлементОписания.Менеджер = Неопределено Тогда
                ВызватьИсключение("Выгрузка данных. Внутренняя ошибка");
            КонецЕсли;
            
            Если Метаданные.Константы.Содержит(СтрокаДереваМетаданных.ОбъектМД) Тогда
                
                ЗаписьКонстанты(ЗаписьXML, СтрокаДереваМетаданных.ОбъектМД, ОбъектыВыгруженныеСОшибками, ТолькоПроверкаНедопустимыхСимволов);
                
            ИначеЕсли Метаданные.РегистрыСведений.Содержит(СтрокаДереваМетаданных.ОбъектМД) Или
                Метаданные.РегистрыНакопления.Содержит(СтрокаДереваМетаданных.ОбъектМД) Или
                Метаданные.РегистрыРасчета.Содержит(СтрокаДереваМетаданных.ОбъектМД) Тогда
                
                ЗаписьРегистра(ЗаписьXML, СтрокаДереваМетаданных, ОбъектыВыгруженныеСОшибками, ТолькоПроверкаНедопустимыхСимволов);
                
            ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(СтрокаДереваМетаданных.ОбъектМД) Тогда
                
                ЗаписьРегистра(ЗаписьXML, СтрокаДереваМетаданных, ОбъектыВыгруженныеСОшибками, ТолькоПроверкаНедопустимыхСимволов, Истина);
                
            ИначеЕсли ТипЗнч(СтрокаДереваМетаданных.ЭлементОписания.Менеджер) = Тип("Строка") Тогда
                // специальный случай для перерасчетов
                ЗаписьПерерасчета(ЗаписьXML, СтрокаДереваМетаданных, ОбъектыВыгруженныеСОшибками, ТолькоПроверкаНедопустимыхСимволов);
                
            ИначеЕсли Метаданные.Последовательности.Содержит(СтрокаДереваМетаданных.ОбъектМД) Тогда
                
                ЗаписьПоследовательности(ЗаписьXML, СтрокаДереваМетаданных,
1 Cube
 
08.11.13
12:19
Вопрос-то задай...
2 Wobland
 
08.11.13
12:20
приступаем к штурму. сколько? мне 50000 хватит
3 dk
 
08.11.13
12:20
думаешь кто-то эту портянку читать будет? ))
4 Пенза58
 
08.11.13
12:21
В чем вопрос то?
5 Cube
 
08.11.13
12:21
(3) +1
6 Cube
 
08.11.13
12:21
(3) забесплатно)
7 Bigbro
 
08.11.13
12:21
ТС готов заплатить любые деньги, но не более стоимости тарелки супа?)
8 Галахад
 
гуру
08.11.13
12:22
"они запросили огромные деньги" - интересно это сколько?
9 Bigbro
 
08.11.13
12:22
всего 2 вопроса - что делает код реально. и что он должен был делать по замыслу?)
10 ам794123
 
08.11.13
12:23
тут братву на помощь звать надо а неодинэсников
11 Cube
 
08.11.13
12:23
(8) Главное - заплатил ли ТС им эти деньги или кинул?)))
12 arsik
 
гуру
08.11.13
12:24
похоже на вброс
13 Пенза58
 
08.11.13
12:25
Во-первых Не из Excel, а из XML
Во-вторых тут написана какая-то универсальная обработка, имхо все же лучше писать под каждый конкретный справочник свою обработку.
14 manyak
 
08.11.13
12:26
у тебя они просто код скопировали в конфу с инета с форума:
[quote] убери теги - 1с не будет ругаться :)
15 zelik503
 
08.11.13
12:26
Сори ) недописал пост
соль в чем - недовыгружаются все строки - только 10%
дальше ошибка: запись с такими полями существует! : УПЖКХ_СведенияДляВзаимоРасчетовПоЛС: 01.01.2013, л/с №100000652(Регистр Сведений: Сведения для Взаиморасчетов по лицевым счетам: Номер строки: 2) и 2 кнопки ОК и ПОДРОБНО
16 zelik503
 
08.11.13
12:27
Если интересна финансовая сторона вопроса - 12 часов по 1700р/час
нет, quote - я сам дописал - думал под кат уберется
фотки нельзя на форум ложить как я понял?
17 Cube
 
08.11.13
12:28
(16) Фотки на хостинг, а сюда ссылку. Вот, например: itmages.ru
18 zelik503
 
08.11.13
12:29
Код должен был список адресов абонентов с адресами и лицевами счетами (около 6000 позиций) перетащить их XLS (!) файла в справочник
кстати по деньгам - это много или мало?
19 Пенза58
 
08.11.13
12:29
(16) > фотки нельзя на форум ложить как я понял?
http://ipicture.ru/
20 Wobland
 
08.11.13
12:29
(16) берусь. к понедельнику сделаю, ТЗ на бочку
21 Cube
 
08.11.13
12:29
(16) Не хилый ценник. И что, эти бабки улачены, а работа не доделана?
22 Пенза58
 
08.11.13
12:29
(15)
Спасет только:
Попытка
Исключение
Сообщить(""+ОписаниеОшибки());
КонецПопытки;
23 Ork
 
08.11.13
12:30
(16)
1. Разработчику о проблеме сообщили?
2. Выгрузку делал тот же разработчик?
3. Причину возникновения "задвоенных" записей выявили?
24 Cube
 
08.11.13
12:30
(18) "кстати по деньгам - это много или мало?"
Для мухосранска - много, для неризиновска нормально...
25 Пенза58
 
08.11.13
12:31
(18) Ты серьезно что ли?

Давай еще раз: есть справочник абонентов, есть справочник лецевых счетов с владелецем из абонентьа и у абонента есть адерса, это на выгрузить в эксель.

Так?
26 Fedot200
 
08.11.13
12:31
(22) ну вот, всю мазу обламал
27 Ненавижу 1С
 
гуру
08.11.13
12:33
"огромную сумму" это сколько?
28 Ненавижу 1С
 
гуру
08.11.13
12:34
вижу (16) сделаю за 15000
29 Ork
 
08.11.13
12:35
+ (23)
Для "задвоенных" записей допустимо учитывать только одну?
И вот это вот : "Выгрузка данных в справочник" и "Регистр Сведений: Сведения для Взаиморасчетов" не складываются в одно.
Заполнение справочника - один подход и ввод остатков - совсем другой.
30 Галахад
 
гуру
08.11.13
12:35
(24) Чо это много?

(0) Похоже нельзя в один и тот же день несколько раз платить.
31 Cube
 
08.11.13
12:37
(30) "Чо это много?"
Есть мухосрански со ставкой 500 р/час... :)
Знаешь, это закадье такое загадочное и неизведанное... :))
32 Cube
 
08.11.13
12:37
(31) "закадье" = "замкадье"
33 Галахад
 
гуру
08.11.13
12:41
(31) Палить-то не надо.
34 kosts
 
08.11.13
12:45
(18) >Код должен был список адресов абонентов с адресами и лицевами счетами (около 6000 позиций) перетащить их XLS (!) файла в справочник


Если обработка разовая, то нет смысла заморачиваться с XML.
Самый простой способ это скопировать таблицу EXCEL в таблицу 1C. Таблицу 1С уже обработать.
35 zelik503
 
08.11.13
12:46
С разработчиками долгая история была - в итоге они уверяют что у них все работает и просят ещё денег на уточнение ТЗ или чтото типа того
В итоге компания отказалась от их услуг по финансовым причинам и осталась эта обработка, которую нужно допилить, но я сам в этом новичек
да, замкадье, но не сильно далекое - всего то 30 км до столицы
36 Ненавижу 1С
 
гуру
08.11.13
12:47
(35) типа Подольска что ли? так сколько готовы оплатить?
37 el7cartel
 
08.11.13
12:47
(2) а че так дешево? 100000
38 Пенза58
 
08.11.13
12:48
(35) Откуда загружать все же надо из Exel или из XML?
39 zelik503
 
08.11.13
12:55
Данные загружаются из Excel-файла
тупо заполнение справочника
да я хотел сам разобраться, инфа конфеденциальная все таки
40 kosts
 
08.11.13
12:58
(39) Если сам по сути проггер, то сможешь и сам сделать.
Но этот код выкинь и начни с начала...
41 zelik503
 
08.11.13
12:59
(40) реально код плохой? это же профессиональная компания с многолетним опытом разработки (как они сами писали
)
42 Галахад
 
гуру
08.11.13
13:00
(39) Обманываете вы нас. Или обработка не та или что-то не то делаете.
43 Пенза58
 
08.11.13
13:00
(39)
Вот обработка загрузки в базу контрагентов, адресов и догововоров. Вместо догововров сделай лицевые счета.
http://yadi.sk/d/xoJM8j6ACLe9x
44 kosts
 
08.11.13
13:01
(41) Может код и не плохой сам по себе. Но он явно что-то другое грузит, а не EXCEL...
45 zelik503
 
08.11.13
13:06
Ох уж эта пятница
простите все!!! это реально не тот код ( это выгрузки из XML файла
46 Cube
 
08.11.13
13:07
(45) Закусывать надо))
47 zelik503
 
08.11.13
13:08
Спасибо большое всем за ответы
ща пересоздам тему
А эта обработка с этого сайта скачана и была (
48 Базис
 
naïve
08.11.13
13:12
Напиши или позвони мне, я буду в городе вечером.
49 Кирпич
 
08.11.13
13:16
(0) ступайте на какой нибудь фрилансру, там вам за 500 рублей всё сделают. но не менее чем 500, а то начнете там торговаться.
50 Михаил Козлов
 
08.11.13
13:37
(0) Штатная ЗагрузкаДанныхИзТабличногоДокумента не подходит?
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший