1с запретить сохранение в эксель

Обновлено: 07.07.2024

Существует несколько способов программной работы с файлами Excel из 1С. Каждый из них имеет свои преимущества и недостатки.

Обмен через табличный документ

Данный способ простой. Его суть заключается в том, что объект ТабличныйДокумент имеет методы:

  • Записать (< ИмяФайла >, < ТипФайлаТаблицы >) для выгрузки данных в файл;
  • Прочитать (< ИмяФайла >, < СпособЧтенияЗначений >) для загрузки данных из файла.

Внимание!

Метод Записать () доступен как на клиенте, так и на сервере. Метод Прочитать () доступен только на стороне сервера. Необходимо помнить об этом
при планировании клиент-серверного взаимодействия.

Рассмотрим пример сохранения табличного документа в файл. Необходимо любым способом создать и заполнить объект ТабличныйДокумент, а выгрузка в файл осуществляется всего лишь одной строкой:

ТабДок . Записать ( ПутьКФайлу , ТипФайлаТабличногоДокумента . XLSX );

Загрузка из файла осуществляется также достаточно просто:

ТабДок = Новый ТабличныйДокумент ;
ТабДок . Прочитать ( ПутьКФайлу , СпособЧтенияЗначенийТабличногоДокумента.Значение );

Обмен через OLE

Обмен через технологию OLE automation, пожалуй, самый распространенный вариант программной работы с файлами Excel. Он позволяет использовать весь функционал, предоставляемый Excel, но отличается медленной скоростью работы по сравнению с другими способами. Для обмена через OLE требуется установка MS Excel:

  • На компьютере конечного пользователя, если обмен происходит на стороне клиента;
  • На компьютере сервера 1С:Предприятие, если обмен происходит на стороне сервера.

Пример выгрузки:

Примеры чтения:

Для обхода всех заполненных строк листа Excel можно использовать следующие приемы:

Вместо последовательного обхода всех строк листа можно выгрузить все данные в массив и работать с ним. Такой подход будет быстрее при чтении большого объема данных:

ВсегоКолонок = Лист . Cells ( 1 , 1 ). SpecialCells ( 11 ). Column ;
ВсегоСтрок = Лист . Cells ( 1 , 1 ). SpecialCells ( 11 ). Row ;

Область = Лист . Range ( Лист . Cells ( 1 , 1 ), Лист . Cells ( ВсегоСтрок , ВсегоКолонок ));
Данные = Область . Value . Выгрузить ();

В таблице ниже приведены наиболее востребованные свойства и методы для работы с Excel через OLE:

Для того, чтобы узнать какое свойство нужно менять или какой метод вызвать можно воспользоваться макросами Excel. Если записать макрос с требуемыми действиями, то после можно посмотреть программный код на VBA записанного макроса.

Использование COMSafeArray

Обмен через ADO

Файл Excel при обмене через ADO представляет собой базу данных, к которой можно обращаться при помощи SQL-запросов. Установка MS Excel не требуется, но обязательно наличие драйвера ODBC, при помощи которого будет осуществляться доступ. Используемый драйвер ODBC определяется при указании строки соединения к файлу. Обычно требуемый драйвер уже установлен на компьютере.

Обмен через ADO заметно быстрее обмена через OLE, но при выгрузке нет возможности использовать функционал Excel для оформления ячеек, разметки страниц, задания формул и т.д.

Пример выгрузки:

Для создания нового листа и формирования его структуры можно воспользоваться объектами ADOX.Catalog и ADOX.Table. В этом случае код примет вид:

В приведенном примере в методе

во втором параметре указывается тип колонки. Параметр необязательный, вот некоторые значения типа колонки:

Пример чтения:

В строке соединения параметр HDR определяет как будет восприниматься первая строка на листе. Возможны варианты:

В приведенных примерах рассмотрено лишь несколько объектов ADO. Объектная модель ADO состоит из следующих объектов:

  • Connection;
  • Command;
  • Recordset;
  • Record;
  • Fields;
  • Stream;
  • Errors;
  • Parameters;
  • Properties.

Выгрузка без программирования

Для сохранения данных из 1С в Excel не всегда целесообразно прибегать к программированию. Если в режиме Предприятия пользователь может отобразить требуемые для выгрузки данные, то, их возможно сохранить в Excel без программирования.

Сохранение табличного документа 1С

В открывшемся окне требуется выбрать каталог, имя и формат сохраняемого файла.

Для сохранения данных динамических списков (например, списка номенклатуры) необходимо:

Сохранение динамического списка

Остались вопросы?
Спросите в комментариях к статье.


Отключение в рабочей книге команды Сохранить как

Можно сделать так, чтобы все рабочие книги сохранялись в режиме «только для чтения». Для этого в настройках Файл → Сохранить (File → Save) нужно установить флажок Только для чтения (Read-only recommended). Так вы запретите пользователю сохранять изменения, которые он может внести в файл. Пользователь сможет сохранить измененный файл только под другим именем или в другой папке.

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

Событие Before Save, которое вы будете использовать в следующем коде, было впервые создано в Excel 97. Как предполагает его имя, это событие происходит перед сохранением рабочей книги, позволяя вам поймать действия пользователя еще перед этим фактом, выдать предупреждение и запретить Excel сохранять файл.


Перед тем как пытаться выполнить следующий трюк, обязательно сначала сохраните рабочую книгу. Если вы напишете этот код до того, как сохраните книгу, то не сможете более сохранять изменения.
Чтобы написать код, откройте рабочую книгу, правой кнопкой мыши щелкните значок Excel слева от меню Файл (File) в строке меню рабочего листа и выберите пункт Исходный текст (View Code).


На Маc воспользоваться таким быстрым доступом нельзя. Необходимо открыть редактор Visual Basic (Visual Basic Editor, VBE), нажав сочетание клавиш Option+Fll или выбрав команду Tools → Macro → Visual Basic Editor. Открыв редактор, щелкните на нем, удерживая клавишу Ctrl, или щелкните правой кнопкой мыши пункт This Workbook в окне Projects.
Введите в VBE следующий код и нажмите сочетание клавиш Alt/Apple+Q, чтобы вернуться в Excel.

// Листинг 1.3 Private Sub workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim lReply As Long If SaveAsUI = True Then lReply = MsgBox("К сожалению, вы не можете сохранить эту книгу под этим имеенм. " _ & "Сохранить под другим именем?.", vbQuestion + vbOKCancel) Cancel = (lReply = vbCancel) If Cancel = False Then Me.Save Cancel = True End If End Sub

Запрет печати рабочей книги

Иногда возникает необходимость запретить пользователям печатать рабочую книгу, устраняя, таким образом, вероятность попадания ее в мусорную корзину или куда-нибудь на всеобщее обозрение. При помощи события Excel Before Print можно отследить и предупредить действия пользователя. Как и ранее, введите в VBE код из листинга 1.4.

// Листинг 1.4 Private Sub workbook_BeforePrint(Cancel As Boolean) Cancel = True MsgBox "К сожалению, вы не можете печатать этот файл", vbInformation End Sub

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

// Листинг 1.5 Private Sub workbook_BeforePrint(Cancel As Boolean) Select Case ActiveSheet.Name Case "Sheet1", "Sheet2" Cancel = True MsgBox "К сожалению, вы не можете распечатать лист из этой книги", vbInformation End Select End Sub

Обратите внимание, что печать будет остановлена только для листов Sheet1 и Sheet2. Конечно, имена листов вашей рабочей книги могут быть любыми. Чтобы добавить их в список кода, запишите их в кавычках, разделяя запятыми. Если вы хотите запретить печать только одного листа, укажите только одно название в кавычках, не ставя запятую.

Запрещение добавлять рабочие листы

Excel позволяет защищать структуру рабочей книги, чтобы пользователи не могли удалять листы, изменять их порядок, переименовывать и т. д. Иногда, однако, возникает необходимость запретить пользователям добавлять рабочие листы, одновременно разрешив другие изменения структуры книги. Сделать это поможет код из листинга 1.6.

// Листинг 1.6 Private Sub Workbook_NewSheet(ByVal Sh As Object) Application.DisplayAlerts = False MsgBox "К сожалению, вы не можете добавить больше листов в эту книгу", vbInformation Sh.Delete Application.DisplayAlerts = True End Sub

Еще один способ запретить пользователям добавлять листы — выбрать команду Сервис → Защита → Защитить книгу (Tools → Protection → Protect Workbook). Удостоверьтесь, что флажок Структуру (Structure) установлен, и щелкните на кнопке ОК. Однако, как мы уже упоминали в начале этого раздела, стандартная защита рабочих листов в Excel — это весьма грубый инструмент, который одновременно блокирует и множество других возможностей Excel.

После манипуляции с файлом необходимо его закрыть. В противном случае он останется захваченным в системе, и мы не сможем его использовать в других приложениях.

Клиент-Серверный вариант в управляемых формах.

1. Считываем данные из файла в массив из структур и затем этот массив передаем на сервер для дальнейших манипуляций с данными.

2-ой способ - это передать файл Excel на сервер через хранилище данных и далее работать с ним уже на сервере.

Очень часто приходится работать с очень большими файлами Excel, и его обработка путем перебора строк занимает огромное количество времени.

В таких случаех удобно в одно действие загрузить всю таблицу в массив и в потом работать уже непосредственно с массивом.

На выходе получаем двумерный массив, который содержит все данные указанного листа Excel

Полезные функции при работе с Excel:

Устанавливает видимость Excel при работе
Добавление новой книги в файл Excel
Сохранение книги Excel
Добавление нового листа к книге
Переименование листа
Изменение маштаба листа
Изменение ориентации листа
Отступы листа
Обращение к ячейки
чтение/запись
Обращение к области ячеек
Очень часто при чтении или записи значений в Excel ставятся лишние пробелы в числе, например, вместо 1502 он читает как 1 502 и в дальнейшем это значение не приводится к числу. Эту проблему можно решить заменой.
Объединение ячеек
Работа с именованными ячейками в Excel
Удаление ячейки
Удаление области ячеек
Обращение к строке
Изменение ширины колонки
Обращение к колонке
Удаление Строки
Фон ячейки / области / Строки /
Функция переводит цвет из формата RGB в формат Excel
Управление шрифтом в ячейки/строке/области
Р азрешает переносить по словам в ячейке
Управление рамкой ячейки
Устанавливаем формат ячейки
Формула в ячейки
Формула в ячейки
Формула в ячейки
Формула в ячейки
Функция для получения ширины колонки Excel
Спасибо пользователю goodwill
Разрешить перенос слов в ячейке
Спасибо пользователю roofless
Группировки данных на листе
Спасибо пользователю dr-wit, ignor

При работе с Excel мы оперируем столбцами как числом (Например, 1 столбец), а у Excel адресация столбцов производится с помощью символов. И когда нам нужно отредактировать формулу, то нам нужно номер столбца преобразовать в символ. В таких случаях вам пригодится эта функция.

2. Работа с Excel через ТабличныйДокумент 1С

С помощью данного метода можно и загружать из Excel и выгружать в Excel. Но на мой взгляд этот метод идепально подходит когда вам необходимо посто сохранить информацию в Excel без дальнейшей манипуляции.

Итак, приступим: загрузка из Excel:

1. Загружаем файл Excel в табличный документ

2. Производим манипуляции уже с ТабличнымДокументом

Давайте теперь разберем сохранение в Excel с помощью данного метода:

Тут все очень просто сначала мы формируем обычный Табличный документ и затем записываем его в Excel

2. Работа с Excel ADODB

Выражаю особую благодарность коллеги Fragster за хороший комментарий

Данный метод позволяет работать с Excel через ODBC и имеет ряд преимуществ:

  1. Не требует установки самой Excel, необходима лишь установить ODBC. Но как правило он уже установлен. Это особенность позволяет работать на стороне сервера без дополнительных установок Excel.
  2. Позволяет работать с таблицой Excel как с БД и строить к ней запросы на T-SQL. Таким образом мы можем делать отборы еще на этапе чтения данных и другие преимущества что дает Т-SQL. Что на мой взгляд огромный плюс.

Подключение к ADO

Отключение от ADO


Выполнение запроса

Пример запроса:

Запись в Excel тоже производится в виде запроса:

Хочу отметить что наименование полей производится по первой строке в таблице


ADODB предоставляет ряд объектов, с которыми мы работаем

ADODB.Recordset

В файле продемонстрированны оба варианта работы с запросами.

На этом пока все. По возможности буду дополнять статью :)

В архиве находится обработка, которая демонстрирует все описанные и другие возможности при работе с Excel.

Выгрузка данных из 1С в Excel - задача, которая встречается довольно часто, но, к сожалению, не все пользователи знают как ее правильно решить.

Хорошая новость заключается в том, что сделать это очень просто, буквально в 2 клика мышкой.

Выгрузка данных из отчетов 1С в Excel

Для начала откроем отчет. Любой. В нашем примере мы рассмотрим два отчета: один из УНФ, другой из УТ.

✅ Способ №1 (Подходит для всех конфигураций)

Нажмите на клавиатуре Ctrl+S. Самый универсальный способ.

✅ Способ №2 (Конфигурации на управляемых формах)

Нажать на иконку с дискетой в правом верхнем углу

✅ Способ №3 (Конфигурации на обычных формах)

Нажать файл, затем "сохранить" или "сохранить как". Или нажать на на иконку с дискетой.

✅ Способ №4 (Сохранение данных по нажатию кнопки из формы отчета)

Во многих типовых конфигурациях на форму отчета выведены кнопки, при нажатии на которые, можно сохранить данные.

Вне зависимости от способа, которым вы воспользуетесь, откроется окно сохранения файла.

В этом окне нужно указать адрес папки, в которую вы хотите сохранить файл:

Затем необходимо указать имя файла:

Обязательно указываем тип файла (выбираем старый или новый формат Excel).

Кстати, не обязательно выбирать именно Excel, если вам нужно сохранить данные в Word или PDF - просто выберите интересующий вас формат в списке.

После этого нажимаем на кнопку "Сохранить":

Файл с данными из отчета в формате Excel появится в указанной вами папке :)

Сохранение данных из списков и табличных частей в Excel

Еще одна полезная фишка, о которой стоит рассказать.

А вы знали, что практически любой список или табличную часть документа из 1С можно запросто сохранить в Excel? Теперь знаете.

Управляемые формы

Для примера откроем список заказов клиентов в УНФ:

Перед тем, как вывести его на печать, возможно? вы захотите установить период, а также нужные вам отборы.

Читайте также: