Парубец Олег

12
Рейтинг

Team leader
Олег Парубец



  •   Регистрация: 19.09.2013 (10 лет назад)

  •   Был(а) на сайте: 19.05.2019

Подписчики 2

Рейтинг 12


Комментарии

ОбменУстранение ошибки "Создание соединения: ADODB.Connection"#13 03.05.19 22:09
Загрузка из XLSXB возможна черз ADODB.
Строка соединения = "Driver={Microsoft EXCEL Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};Dbq=" + ФайлEXCEL + ";ReadOnly=1;"
ОбменУстранение ошибки "Создание соединения: ADODB.Connection"#12 03.05.19 21:53
надо добавить такие ключи, и прописать в них значения и Microsoft Access Database Engine 2010 надо 64 битный

ОС: 64bit офис: 64bit) или (ОС: 32bit офис: 32bit)

Ключ: HKCR \ CLSID \ {3BE786A0-0366-9434-4F5C-25CF162E475E} \ InprocServer32 \

Параметр: (По умолчанию)

Данные значения: C: \ Program Files \ Common Files \ Microsoft Shared \ Office14 \ ACEOLEDB.DLL


(ОС: 64bit офис: 32bit)

Ключ: HKCR \ Wow6432Node \ CLSID \ {3BE786A0-0366-9434-4F5C-25CF162E475E} \ InprocServer32 \

Параметр: (По умолчанию)

Данные значения: C: \ Program Files (x86) \ Common Files \ Microsoft Shared \ Office14 \ ACEOLEDB.DLL
ОбменУстранение ошибки "Создание соединения: ADODB.Connection"#10 02.05.19 19:21
Еще бывают такие нюансы:

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+СокрЛП(ИмяФайла)+";Extended Properties=""Excel 8.0;IMEX=1;""";

пришлось заменить на -
"Driver={Microsoft Excel Driver (*.xls)};Dbq=" + СокрЛП(ИмяФайла) + ";"
ОбменУстранение ошибки "Создание соединения: ADODB.Connection"#9 02.05.19 19:20
чтобы проверить строку соединения

создаешь пустой текстовый файл
меняешь расширение на udl
открываешь, на вкладке Поставщик данных, находишь своего поставщика, на второй вкладке забиваешь параметры, тестируешь, если все верно, открываешь блокнотом, копируешь полученную строку, в большинстве случаев помогает

если нет поставщика, значит он установлен неверно
DevРедактирование данных, сформированных средствами СКД и выведенных в Табличный документ с возможностью записи в регистр сведений.#2 09.04.19 3:26
Модуль первой простой обработки:
(выкладываю чтобы открыть на работе - СБ epf не пропускает):


Код
#Область ИнициализацияСКД

&НаСервере
Процедура ПриОткрытииНаСервере()
   
   ЭтаОбработка = РеквизитФормыВЗначение("Объект");
   СхемаКомпоновкиДанных   = ЭтаОбработка.ПолучитьМакет("МакетСКД");
   СКДАдрес1 = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор);
   
   КомпоновщикНастроек1.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКДАдрес1));
   КомпоновщикНастроек1.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
   
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
   ПриОткрытииНаСервере();
КонецПроцедуры

#КонецОбласти

#Область ОбщиеПроцедурыИФункции

&НаСервере
Процедура ИтеративноеПолучениеРасшифровки(ЭлементРасшифровки, ДанныеРасшифровки, СтруктураРасшифровки)
   
   Если ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") Тогда
      
   ИначеЕсли ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
      
      ПоляРасшифровки = ЭлементРасшифровки.ПолучитьПоля();
      
      Для Каждого ПолеРасшифровки Из ПоляРасшифровки Цикл
         СтруктураРасшифровки.Вставить(ПолеРасшифровки.Поле, ПолеРасшифровки.Значение);
      КонецЦикла;
      
   КонецЕсли;
   
   ПоляРасшифровки = ЭлементРасшифровки.ПолучитьРодителей();
   
   Для Каждого ПолеРасшифровки Из ПоляРасшифровки Цикл
      ИтеративноеПолучениеРасшифровки(ПолеРасшифровки, ДанныеРасшифровки, СтруктураРасшифровки);
   КонецЦикла;
   
КонецПроцедуры

&НаСервере
Функция ПолучитьСтруктуруЗначенийРасшифровки(Расшифровка, ДанныеРасшифровки, СтруктураРасшифровки = Неопределено)
   
   Если СтруктураРасшифровки = Неопределено Тогда
      СтруктураРасшифровки = Новый Структура;
   КонецЕсли;
   
   ЭлементРКД = ДанныеРасшифровки.Элементы[Расшифровка];
   
   ИтеративноеПолучениеРасшифровки(ЭлементРКД, ДанныеРасшифровки, СтруктураРасшифровки);
   
   Возврат СтруктураРасшифровки;
   
КонецФункции

&НаСервере
Функция ПолучитьИмяИзменяемойКолонки(Расшифровка, ДанныеРасшифровки)
   
   ИмяКолонки = "";
   
   ЭлементРКД = ДанныеРасшифровки.Элементы[Расшифровка];
   
   Если ТипЗнч(ЭлементРКД) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
      ПоляРасшифровки = ЭлементРКД.ПолучитьПоля();
      ИмяКолонки = ПоляРасшифровки[0].Поле;
   КонецЕсли;
   
   Возврат ИмяКолонки;
   
КонецФункции

#КонецОбласти

#Область ОбновлениеДанныхВТабличномДокументе

&НаСервере
Процедура ОбновитьДанныеВТабличномДокументе(ТабличныйДокумент, КомпоновщикНастроекКомпоновкиДанных, СКДАдрес, ДанныеРасшифровкиАдрес)
   
   СхемаКомпоновкиДанных = ПолучитьИзВременногоХранилища(СКДАдрес);
   
   //ЗаписьXML = Новый ЗаписьXML;
   //ЗаписьXML.УстановитьСтроку();
   //СериализаторXDTO.ЗаписатьXML(ЗаписьXML, СхемаКомпоновкиДанных);
   //ДанныеXML = ЗаписьXML.Закрыть();
   
   // Установка параметров данных
   //КомпоновщикНастроекКомпоновкиДанных.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Параметр", Параметр);
   
   // Компоновка макета
   КомпоновщикМакетаКомпоновкиДанных = Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновкиДанных = КомпоновщикМакетаКомпоновкиДанных.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроекКомпоновкиДанных.ПолучитьНастройки());
   
   // Данные расшифровки
   ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
   
   // Инициализация процессора компоновки
   ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных,, ДанныеРасшифровки);
   
   ДанныеРасшифровкиАдрес = ПоместитьВоВременноеХранилище(ДанныеРасшифровки, УникальныйИдентификатор);
   
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   ПроцессорВывода.УстановитьДокумент(ТабличныйДокумент);
   ПроцессорВывода.НачатьВывод();
   
   Пока Истина Цикл
      ЭлементРезультата = ПроцессорКомпоновкиДанных.Следующий();
      Если ЭлементРезультата= Неопределено Тогда
         Прервать;
      Иначе
         ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
      КонецЕсли;
   КонецЦикла;
   
   ПроцессорВывода.ЗакончитьВывод();
   
   //Разрешим редактировать ячейки расшифровки
   Для Ряд = ТабличныйДокумент.ФиксацияСверху+1 По ТабличныйДокумент.ВысотаТаблицы Цикл
      
      Для Кол = ТабличныйДокумент.ФиксацияСлева + 1 По ТабличныйДокумент.ШиринаТаблицы Цикл
         
         ТекущаяОбласть = ТабличныйДокумент.Область(Ряд, Кол, Ряд, Кол);
         
         Если ТекущаяОбласть.Расшифровка = Неопределено Тогда Продолжить; КонецЕсли;
         
         СтруктураРасшифровки = ПолучитьСтруктуруЗначенийРасшифровки(ТекущаяОбласть.Расшифровка, ДанныеРасшифровки);
         ПоляРасшифровкиЯчейки = ДанныеРасшифровки.Элементы[ТекущаяОбласть.Расшифровка].ПолучитьПоля();
         
         ИмяТекущегоРесурса = ПоляРасшифровкиЯчейки[0].Поле;
         
         Если СтруктураРасшифровки.Свойство(ИмяТекущегоРесурса) Тогда
            ТекущаяОбласть.СодержитЗначение   = Истина;
            //ТекущаяОбласть.ТипЗначения      = ТипЗначенияРесурса;
            ТекущаяОбласть.Значение         = СтруктураРасшифровки[ИмяТекущегоРесурса];
            ТекущаяОбласть.ЦветФона         = WebЦвета.НейтральноЗеленый;
            ТекущаяОбласть.Защита         = Ложь;
         КонецЕсли;
         
      КонецЦикла;
      
   КонецЦикла;
   
КонецПроцедуры

&НаСервере
Процедура ОбновитьНаСервере()
   ТабличныйДокумент1.Очистить();
   ОбновитьДанныеВТабличномДокументе(ТабличныйДокумент1, КомпоновщикНастроек1, СКДАдрес1, ДанныеРасшифровкиАдрес1);
КонецПроцедуры

&НаКлиенте
Процедура Обновить(Команда)
   ОбновитьНаСервере();
КонецПроцедуры

#КонецОбласти

#Область ИзменяемЯчейкуТабличногоДокумента

&НаСервере
Процедура ЗаписатьИзменения(Расшифровка, ДанныеРасшифровкиАдрес, НовоеЗначение)
   
   ДанныеРасшифровки      = ПолучитьИзВременногоХранилища(ДанныеРасшифровкиАдрес);
   СтруктураРасшифровки   = ПолучитьСтруктуруЗначенийРасшифровки(Расшифровка, ДанныеРасшифровки);
   ИмяРесурса            = ПолучитьИмяИзменяемойКолонки(Расшифровка, ДанныеРасшифровки);
   
   Текст = "Расшифровка -" + Строка(Расшифровка) + ": " + Символы.ПС;
   Для Каждого Эл Из СтруктураРасшифровки Цикл
      Текст = Текст + Эл.Ключ + "= " + Эл.Значение + " | " + Символы.ПС;
   КонецЦикла;
   Текст = Текст + ИмяРесурса + "= " + НовоеЗначение;
   Сообщить(Текст);
   
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьИзменениеЯчейкиТабличногоДокумента(Элемент, ДанныеРасшифровкиАдрес)
   
   Если Элемент.ТекущаяОбласть.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Прямоугольник
      И Элемент.ТекущаяОбласть.Расшифровка <> Неопределено   //не берем если сгруппировали находясь на "левой" ячейке
      И Не Элемент.ТекущаяОбласть.Защита Тогда            //не берем если сгруппировали находясь на защищенной ячейке
      
      ЗаписатьИзменения(Элемент.ТекущаяОбласть.Расшифровка, ДанныеРасшифровкиАдрес, Элемент.ТекущаяОбласть.Значение)
   КонецЕсли;
   
КонецПроцедуры

&НаКлиенте
Процедура ТабличныйДокумент1ПриИзменении(Элемент)
   ОбработатьИзменениеЯчейкиТабличногоДокумента(Элемент, ДанныеРасшифровкиАдрес1);
КонецПроцедуры

#КонецОбласти

Прикрепленные файлы:

Модуль 1й варианта обработки - фиксированной формы.txt
НовостиИгры кончились: Electronic Arts закрывает российский офис#5 30.03.19 22:12
(3) люди стали меньше покупать а не играть, сверхвыручка позволяла держать раздутый штат
- в России у людей снизилась и снижается дальше покупательская способность:
вот это трезвый коммент:
"Ещё один тревожный звоночек отчуждения России"