Выгружаем в EXCEL с помощью ADO
Неверите ? Смотрите …
Скачать ПримерADO.epf (6.91 kb)
Итак, постановка задачи: Создать с помощью механизма ADO файл excel и выгрузить в него из справочника номенклатура код и наименование.
ИмяФайлаЭксель = "D:\Export.xls"; // Имя создаваемого файла
// Собираем строку подключения
СтрокаПодключения = "
|Provider=Microsoft.Jet.OLEDB.4.0;
|Data Source="+ИмяФайлаЭксель+";
|Extended Properties=""Excel 8.0;HDR=No;"";";
// Создаем объект ADOX.Catalog
Catalog = Новый COMОбъект("ADOX.Catalog");
Catalog.ActiveConnection = СтрокаПодключения;
// Создаем таблицу и добавляем в неё два столбца
Table = Новый COMОбъект("ADOX.Table");
Table.Name = "Table";
Table.Columns.Append("Code");
Table.Columns.Append("Description");
// Присоединяем таблицу
Catalog.Tables.Append(Table);
Table = Неопределено;
Catalog = Неопределено;
// Создаем соединение
Connection = Новый COMОбъект("ADODB.Connection");
Connection.Open(СтрокаПодключения);
Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = Connection;
Command.CommandType = 1;
// Получаем номенклатуру для выгрузки Запрос = Новый Запрос("
|ВЫБРАТЬ
| Номенклатура.Код,
| Номенклатура.Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура");
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
// Заполняем таблицу данными выборки
Пока Выборка.Следующий() Цикл
Command.CommandText = "
|INSERT INTO [Table] VALUES ('"+Выборка.Код+"','"+Выборка.Наименование+"')";
Command.Execute();
КонецЦикла;
// Закрываем соединение
Command = Неопределено;
Connection.Close();
Connection = Неопределено;
Все, готово !
Плюсы данного способа формирования файла excel:
- Большая скорость
- Не требуется запуск самого процесса excel.exe, как это происходит в случае использования OLE-сервера excel.application, а следовательно нет необходимости отслеживать и перехватывать ошибки. Те кто использовал OLE-cоединение – тот поймет о чем я говорю, мало радости когда в случае программной или пользовательской ошибки процесс excel остается висеть в памяти.
- Не требуется самого приложения EXCEL, достаточно что бы на компьютере был установлен OLEDB провайдер Microsoft.Jet.OLEDB.4.0
Минусы тоже имеются:
- Нельзя красиво оформить ячейки – шрифт, рамки и т.д.
P.S. Возможен "комбинированный" способ: с помощбю ADO формируется файл, а затем с помощью OLE "наводится марафет".
Источник: http://infostart.ru/public/65045/
1С: вставка картинки в печатную форму програмно
Задача крайне проста — в нашем распоряжении имеется энное количество изображений (растровых или векторных, не суть важно), и мы хотим “на лету” вставить в табличный документ одно из этих изображений. Само собой, изображения хранятся в виде отдельных файлов соответствующих форматов, а имя нужного файла станет известно только в самый последний момент.
Что делать?
Можно потратить некоторое количество времени на борьбу со встроенным объектом “Картинка” и даже, чем черт не шутит, добиться какого-то положительного результата. Но можно и не добиться. Во всяком случае, я не добился.
Можно и по-другому. В глобальном модуле пишем функцию:
Функция Рисунок ( Куда,Откуда ) Экспорт Куда.Загрузить(Откуда);КонецФункции
В шаблоне таблицы организуем “посадочное место” для картинки (это делается так: F10-Таблица-Вставить рисунок-Картинка-растянуть до нужного размера-Отмена). В свойствах полученного объекта прописываем вызов своей функции (предполагается, что Таб — это имя таблицы, а Путь — переменная процедуры печати):
Рисунок(Таб.ТекущийОбъект,Путь);
После всего этого в процедуре печати остается определить, какой графический файл нам нужен:
Путь="C:\My_NonXXX_Pix\025.jpg";
Таб.ВывестиСекцию("КартинаМаслом");
Что делать, если база данных под MS SQL ушла в Suspect Mode?
Если базу силой 1С не восстановить
Восстановление путем тестирования самого SQL.
Вот некоторые команды:
DBCC CHECKDB (’database’, REPAIR_FAST)
DBCC CHECKDB (’database’, REPAIR_REBUILD)
Если предыдущие две не помогли, тогда уже можно применять третью, но она несет за собою возможную потерю данных, и желательно применять в безнадежном случае уже.
DBCC CHECKDB (’database’, REPAIR_ALLOW_DATA_LOSS)
Если команда не выполняется из-за не однопользовательского режима, тогда перейти можно по команде
alter database db-name set SINGLE_USER
В своей работе столкнулся с ситуацией, когда рабочая база данных в конце дня ушла в режим "Suspect Mode". А архив был за много часов до этого. Перевести ее нормальный режим, пока не произведена починка базы, не получалось. DBCC checkdb тоже отказывалась запускаться, т.к. база в этом режиме. Замкнутый круг?
Для начала необходимо перевести базу данных в режим EMERGENCY:
EXEC sp_resetstatus ‘database’;
ALTER DATABASE database SET EMERGENCY
Потом выполнять тестирование базы:
DBCC checkdb(’database’)
ALTER DATABASE databaseSET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB (’database’, REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE database SET MULTI_USER

