Access и 1с добавить запись через запрос
Ненадо приписывать web сервисам несуществующие минусы.
>> 1. Не кроссплатформенно
B под линуксом и под виндовсом работают прекрасно. На FreeBSD ты сам говоришь тоже работают.
При прямом доступе в базу 1С писать нельзя однозначно. Иначе рискуешь огрести кучу неприятностей.
- оперативная отметка времени (ее значение должно быть уникальным, а в рассматриваемом случае может оказаться не уникальным);
- полнотекстовый поиск будет работать неверно;
- неуникальность номеров и кодов практически гарантирована;
- блокировки объектов (используются в методе Заблокировать прикладных объектов 1С:Предприятия и при их редактировании в диалогах);
Кроме того при прямом доступе недоступен весь функционал 1С. Например в поле Представление адреса в регистре контактной информации это самое представление нужно писать в том виде в каком его возвращает функция глобального модуля, иначе адрес будет трактоваться как иностранный.
Придётся дублировать часть функционала 1С на сайте. А это гемор.
Попробую опровергнуть по пунктам, но сначала я хочу предупредить: НИКОГДА НЕ ДЕЛАЙТЕ ТО В ЧЁМ НЕ УВЕРЕНЫ.
При прямом доступе нельзя писать однозначно.
Оперативная отметка не будет уникальной.
Полнотекстовый поиск будет работать не верно.
Не уникальность кодов и номеров.
Блокировки объектов при записи в базу.
Первый пункт о невозможности записи. В большинство баз данных писать можно. Для этого существует операторы INSERT и UPDATE. Неприятности мы можем получить и при не правильном конфигурировании 1С.
Таким образом правильно сгенерированный GUID будет уникален с достаточно большой долей вероятности.
Четвертое. Как же нам добиться уникальности номера? И надо ли? Во первых не все документы и справочники должны иметь уникальные номера и коды. А во вторых не вижу причин что бы не проверить перед записью в базу данных какие номера уникальны, а какие нет.
SET @C = SELECT COUNT(*)
Однако 2 часа ночи и пора спать. Спасибо Трактору — 90% статьи его.
Добравшись до работы, я таки решил проверить как это работает. Написав Функцию для постгреса:
return $result;
$$ LANGUAGE plperl;
Я вставил запись в справочник:
Потом создал новый элемент в 1С. Был приятно удивлен. 1С действительно не контролирует вставку данных в свою базу. Так что если будете вставлять напрямую данные, то за нумерацию и уникальность придется нести ответственность вам. Осталось проверить блокировки.
Специальные предложения
При обращении к одной базе данных из нескольких регистраций информационной базы (из нескольких кластеров) возможна неверная работа механизмов, за которые отвечает менеджер кластера. Кроме нумерации к ним относятся:
- оперативная отметка времени (ее значение должно быть уникальным, а в рассматриваемом случае может оказаться не уникальным);
- некоторые профайлы (сохраненные в них значения могут теряться или периодически оказываться недоступными);
- индексы полнотекстового поиска окажутся задублированы и могут оказаться различными;
- если механизм регламентных заданий включен в нескольких кластерах, то одно регламентное задание сможет быть запущено в нескольких экземплярах;
- управляемые блокировки (в рассматриваемом случае не используются);
- блокировки объектов (используются в методе Заблокировать прикладных объектов 1С:Предприятия и при их редактировании в диалогах);
- каждый кластер имеет свой журнал регистрации.
Все автоматические блокировки реализуются средствами управления транзациями СУБД. Поэтому наличие нескольких кластеров не оказывает влияние на транзакционный механизм базы данных.
И это всё при том что 1С умеет работать со своей базой :-)
awk, про УИДы всё ясно, тут возражений нет. Генери, пиши и настанет счастье.
С номерами/кодами интереснее. Я провёл эксперимент и попробовал создать новые документы в одну базу из двух кластеров 1С. Номера задвоились. Предполагаю что причина задвоения в том что сервер 1С самостоятельно выдаёт новые номера и не проверяет уникальность нового номера в базе. В этом случае избежать задвоения номеров при записи со стороны не удастся никак.
Из разъяснений 1С я понял что управляемые блокировки накладываются средствами 1С, а не СУБД, поэтому могут быть конфликты при записи со стороны.
В этой статье описывается процедура создания и выполнения запроса на добавление. Запрос на добавление предназначен для добавления новых записей в существующую таблицу с использованием данных из других источников.
Если вам нужно изменить данные в существующем наборе записей, например обновить значение поля, можно использовать запрос на обновление. Если вам нужно сделать новую таблицу на выборке или объединить две таблицы в одну, можно воспользоваться запросом на таблицу. Дополнительные сведения о запросах на обновление или запросах на изменение таблиц, а также о других способах добавления записей в базу данных или изменения существующих данных см. в разделе "См. также".
В этой статье
Обзор
Запрос на добавление обеспечивает выборку записей из одного или нескольких источников данных и копирование выбранных записей в существующую таблицу.
Предположим, вы получили базу данных с таблицей потенциальных клиентов и у вас уже есть таблица с такими данными в существующей базе данных. Чтобы данные хранились в одной таблице, вы решаете скопировать их из новой базы данных в существующую. Чтобы не вводить новые данные вручную, записи можно скопировать с помощью запроса на добавление.
Преимущества использования запроса на добавление
Используя запрос для копирования данных, можно выполнять указанные ниже операции.
Добавление нескольких записей одновременно. При копировании данных вручную обычно приходится несколько раз копировать и вставлять записи. Используя запрос, можно выбрать все нужные данные одновременно, а затем скопировать их.
Просмотр выбранных данных перед копированием. Можно просмотреть выбранные данные в режиме таблицы и внести необходимые изменения перед их копированием. Это особенно удобно, если запрос содержит условия или выражения и вам необходимо несколько попыток для правильного выбора данных. Запрос на добавление нельзя отменить. Если сделана ошибка, придется либо восстанавливать базу данных с помощью резервной копии, либо исправлять ошибку вручную или с помощью запроса на удаление.
Уточнение выбора с помощью условий. Например, может потребоваться добавить записи только для клиентов, живущих в конкретном городе.
Добавление записей в целевую таблицу, в которой отсутствуют некоторые поля из источников данных. Предположим, что в существующей таблице клиентов 11 полей, а в новой таблице, из которой требуется скопировать данные, — только девять из них. Для копирования данных из девяти совпадающих полей можно использовать запрос на добавление, а два несовпадающих поля можно оставить пустыми.
Основные этапы создания запроса на добавление
Создание запроса на добавление включает следующие основные этапы.
Создание запроса на выборку. Для начала выберите данные, которые нужно скопировать. При необходимости в запрос на выборку можно вносить изменения и выполнять его до тех пор, пока не будут выбраны нужные данные для копирования.
Преобразование запроса на выборку в запрос на добавление. Когда выборка будет готова, можно изменить тип запроса для Добавление.
Выбор целевых полей для каждого столбца в запросе на добавление. В некоторых случаях Access выбирает целевые поля автоматически. Эти поля можно настроить или при необходимости выбрать самостоятельно.
Предварительный просмотр и выполнение запроса на добавление записей. Перед добавлением записей можно переключиться в режим таблицы для предварительного просмотра добавляемых записей.
Важно: Запрос на добавление нельзя отменить. Рекомендуется создать резервную копию базы данных или целевой таблицы.
Дополнительные сведения о настройке базы данных для ввода данных см. в статье Советы по оформлению для обновления данных.
В этой статье
Обновление данных с помощью формы или таблицы
Вы можете использовать форму, чтобы вручную обновить данные. Формы для ввода данных могут служить простым, быстрым и точным способом для ввода данных. Формы могут содержать любое число элементов управления, например, списки, текстовые поля и кнопки. В свою очередь каждый из элементов управления в форме либо считывает данные из соответствующего поля таблицы, либо записывает данные в это поле.
Таблицы представляют собой сетки данных, которые напоминают листы Excel. Вы можете изменить данные, работая непосредственно в представлении таблицы. Если вы знакомы с Excel, вам не составит труда освоить таблицы. Вы можете изменить данные в таблицах, наборах результатов для запроса и формах, которые отображаются в виде таблицы. Как правило, если вам нужно просмотреть большое количество записей одновременно, рекомендуется использовать таблицы.
Общие сведения о символах ввода данных
В таблице ниже содержатся некоторые символы области маркировки, которые вы можете видеть при обновлении данных, а также описано их значение.
Это текущая запись; запись была сохранена в таком виде, как она отображается. Текущая запись выделяется изменением цвета в области маркировки.
Вы изменяете эту запись; изменения записи еще не сохранены.
Эта запись заблокирована другим пользователем; вы не можете ее изменить.
Это новая запись, в которую вы можете ввести данные.
Это поле первичного ключа, которое содержит значение, которое является уникальным идентификатором записи.
Добавление записи в таблицу или форму
Откройте таблицу в режиме таблицы или откройте форму в режиме формы.
На вкладке Главная в группе Записи нажмите Создать, щелкните Создать (пустую) запись или нажмите клавиши Ctrl + знак "плюс" (+).
Найдите запись со звездочкой в области маркировки и введите новые данные.
Щелкните мышь или любым иным способом переместите фокус на первое поле, которое вы хотите использовать, а затем введите данные.
Чтобы перейти к следующему полю в той же строке, нажмите клавишу TAB, используйте клавиши со стрелками вправо или влево или щелкните ячейку следующем поле.
В таблице, чтобы перейти к следующей ячейке в столбце, используйте кнопки по стрелками вверх или вниз или щелкните ячейку, которая вам нужна.
При просмотре другой записи или закрытии таблицы или формы Access сохраняет добавленную вами новую запись. Чтобы явным образом сохранить изменения в текущей записи, нажмите Shift+Enter.
Добавление записи
Прежде чем изменить и удалить запись, вам нужно найти ее. В форме или таблице, содержащей небольшое количество записей, можно воспользоваться кнопками навигации для перехода между записями, пока вы не найдете запись, которая вам нужна. При наличии большого количества записей, вы можете использовать диалоговое окно Найти и заменить и фильтрацию для записи.
Использование кнопок навигации по записям
Вы можете переключаться между записями с помощью кнопок навигации.
Кнопки со стрелками Нажмите, чтобы без труда перейти к первой, предыдущей, следующей или последней записи.
Новая (пустая) запись Нажмите, чтобы добавить запись.
Текущая запись Введите номер записи и нажмите клавишу ВВОД, чтобы перейти к этой записи. Номер записи определяется последовательно от начала формы или таблицы или формы, он не соответствует какому-либо значению поля.
Фильтр Кнопка индикатора фильтра показывает, был ли применен фильтр. Нажмите, чтобы отменить или повторно применить фильтр.
Поиск Введите текста в поле Поиск. При вводе каждого символа в реальном времени выделяется первое подходящее значение.
Использование диалогового окна Найти и заменить.
Диалоговое окно Найти и заменить представляет собой еще один способ изменения небольшого количества данных в минимальные сроки и с минимальными усилиями. Вы можете использовать функцию "Найти" в диалоговом окне Найти и заменить для поиска подходящей записи. Когда вы найдете совпадающую запись, данная запись становится текущей записью, и вы можете изменить или удалить ее.
Выберите поле, для которого вы хотите выполнить поиск.
На вкладке Главная в группе Найти нажмите кнопку Найти. Также можно нажать клавиши CTRL+F.
Появится диалоговое окно Найти и заменить.
Откройте вкладку Найти.
В поле Найти что введите значение, которое вы хотите найти.
Вы также можете воспользоваться списком Поиск в для изменения поле, в котором нужно выполнить поиск, или выполнить поиск по всей таблице.
При необходимости в списке Совпадение выберите параметр С любой частью поля. Выбор данной опции обеспечит максимально широкую область поиска.
В списке Поиск выберите вариант Всеи нажмите кнопку Найти далее.
Применение фильтра
Вы можете применить фильтр для ограниченного числа записей, которые отображаются при совпадении с вашими условиями. Применение фильтра упрощает поиск записи, которую вы хотите изменить или удалить.
Откройте таблицу в режиме таблицы или откройте форму в режиме формы.
Чтобы убедиться, что таблицы или формы еще не отфильтрованы, на вкладке Главная группы Сортировка и фильтр щелкните Дополнительно, а затем нажмите Очистить все фильтры, или щелкните Фильтр на панели навигации записей.
Перейдите к записи, содержащей значение, которое вы хотите использовать в качестве фильтра, а затем нажмите поле. Для фильтрации по выделенному фрагменту значения выберите только нужные вам символы.
На вкладке Главная в группе Сортировка и фильтр нажмите Выделение и щелкните правой кнопкой мыши на поле и примените фильтр.
Чтобы отфильтровать другие поля по выделенному фрагменту, повторите шаги 3 и 4.
Удаление записи
Процедура удаления довольно проста, кроме случаев, когда записи соотносятся с другими данными и находятся на "одной" стороне отношения "один ко многим". Чтобы обеспечить целостность данных, по умолчанию Access не позволяет удалять связанные данные. Дополнительные сведения см. в статье Руководство по связям между таблицами.
Откройте таблицу в режиме таблицы или откройте форму в режиме формы.
Во-первых, выберите запись или записи, которые вы хотите удалить.
Чтобы выбрать запись, щелкните область маркировки записи рядом с ней, если область маркировки записи доступна.
Чтобы увеличить или уменьшить выделенный фрагмент, перетащите область маркировки (если есть такая возможность) или нажмите клавиши SHIFT + СТРЕЛКА ВНИЗ или SHIFT + СТРЕЛКА ВВЕРХ.
Нажмите клавишу DELETE, выберите Главная >Записи > Удалить или нажмите клавиши Ctrl + знак минус (-).
Совет. Если вам нужно удалить только некоторые сведения, но не всю запись, выделите только нужные данные в каждом поле, которые вы хотите удалить, и нажмите клавишу DELETE.
Изменение данных в надписи или поле
Access содержит один элемента управления текстом для использования с полями с коротким текстом и длинным текстом (также называется "Memo"). Как правило, вы можете понять, когда соответствующее поле содержит короткий или длинный текст, по размеру элемента управления, который обычно отражает размер, необходимый для поля таблицы. Поле короткого текста может содержать до 255 знаков, а в поле длинного текста может храниться до 64 000 символов.
По умолчанию вы не можете изменить данные для определенных типов запросов. Например, невозможно изменить данные, возвращаемые перекрестным запросом, а также изменить или удалить вычисляемые поля — значения, которые рассчитываются по формуле при работе с базой, но не хранятся в таблице.
Откройте таблицу или запрос в режиме таблицы или форму в режиме формы.
Щелкните поле, или перейдите к полю с помощью клавиши TAB или клавиш со стрелками, а затем нажмите клавишу F2.
В представлении формы вы можете щелкнуть метку поля, чтобы выбрать поле. В режиме таблицы можно выбрать поле, щелкнув рядом с левой границей поля, когда указатель мыши примет вид знак плюса (+).
Установите курсор туда, куда вы хотите ввести информацию.
Введите или измените текст, который вы хотите вставить. Если вы ошиблись при вводе текста, нажмите клавишу BACKSPACE.
Вы сможете повысить свою продуктивность с помощью указанных ниже сочетаний клавиш:
Чтобы вставить новую строку в текстовое поле, нажмите клавиши Ctrl+Enter.
Чтобы вставить значение по умолчанию для поля, нажмите клавиши Ctrl + Alt + Пробел.
Чтобы вставить текущую дату, нажмите клавиши CTRL+; (точка с запятой).
Чтобы вставить текущее время, нажмите клавиши CTRL+SHIFT+: (двоеточие).
Чтобы проверить орфографию, нажмите клавишу F7.
Чтобы повторно использовать похожие значения предыдущей записи, перейдите в соответствующее поле в предыдущей записи, а затем нажмите клавиши CTRL +' (апостроф).
Чтобы явным образом сохранить изменения, нажмите Shift+Enter.
Дополнительные сведения см. в статье Сочетания клавиш в Access.
Чтобы сохранить данные, на вкладке Главная в группе Записи нажмите Сохранить запись или воспользуйтесь сочетанием клавиш Shift+Enter.
Вам не нужно явным образом сохранять изменения. Access фиксирует их в таблице при наведении курсора на новое поле в той же строке при наведении указателя на другую строку или при закрытии таблицы или формы.
Добавить дату с помощью средства выбора даты
Существует несколько способов, с помощью которых можно добавить дату в таблицу, а использование элемента выбора даты является очень удобным вариантом.
Выберите поле, для которого вы хотите добавить дату. На экране появится значок календаря.
Если маска ввода применяется к полю "Дата/время", эта возможность недоступна.
Нажмите значок календаря. Откроется элемент календаря.
Выполните одно из следующих действий:
Чтобы ввести текущую дату, нажмите Сегодня.
Чтобы выбрать день в текущем месяце, щелкните дату.
Чтобы выбрать другой месяц и день, используйте кнопки вперед или назад.
Ввод текста в элементе управления с помощью маски ввода
Поле может иметь примененную маску ввода. Маска ввода — это набор литеральных символов и заполнителей, которые требуют ввода данных в определенном формате. Дополнительные сведения о масках ввода см. в статье Управление форматами ввода данных с помощью маски ввода.
Для ввода данных используйте маску ввода:
Определение и итоговый формат маски ввода номера телефона по умолчанию
Применение форматирования текста к данным в поле "Длинный текст"
Если поле длинного текста (также известное как поле Memo) поддерживает расширенное форматирование текста, различные шрифты, размеры, стили и цвета можно применить к данному тексту.
Откройте форму в режиме формы или откройте таблицу в режиме формы.
Выберите поле длинного текста. Как правило, вы можете выполнить поиск поля с именем «Примечания» «Заметки» или «Описание».
На вкладке Главная в группе Форматирование текста вы можете отформатировать текст с помощью кнопок и меню.
Вы можете применять различные шрифты и размеры, делать текст полужирным или шрифтом, изменять цвета и так далее.
Если вам нужно больше места для редактирования, откройте поле "Масштаб".
Ввод данных с помощью списка
Списки помогают поддерживать целостность данных и просты в использовании. Вы можете использовать списки в формах, а также в таблицах и запросах. В Access есть три типа списков: списки значений, поля подытогов и многоуровневые списки. В списках значений отображается набор элементов, которые вы вводите вручную. Для извлечения данных из одного или других наборов результатов таблицы в представлении таблицы используется запрос. Многоуровневые списки решают общие бизнес-требования — связи "многие ко многим". Например, вам может потребоваться отслеживать проблемы службы поддержки клиентов и назначить нескольким людям одну и ту же проблему в одном поле.
Существует три типа элементов управления списками:
Поле со списком
Поле со полем со полем со множествой из нескольких полей
Ввод элемента из поле со списком
Откройте форму в режиме формы или таблицу или запрос в режиме таблицы.
Щелкните стрелку вниз рядом со списком и выберите элемент, который вам нужен.
Для фиксации вашего выбора для базы данных, установите курсор на другое поле или нажмите клавиши Shift+ Enter.
Ввод элемента из списка
Откройте форму в режиме формы.
Прокрутите вниз список элементов в поле со списком и выберите элемент, который вам нужен.
Для фиксации вашего выбора для базы данных, установите курсор на другое поле или нажмите клавиши Shift+ Enter.
Ввод элементов из многоуровневого списка в поле со списком multiselect
Откройте форму в режиме формы или таблицу или запрос в режиме таблицы.
Щелкните стрелку вниз рядом со списком.
Выберите до 100 элементов и нажмите кнопку ОК.
Изменение элементов в списке
Чтобы изменить элементы в списке, список должен поддерживать редактирование. Дополнительные сведения см. в вопросах разработки, которые следует учитывать при обновлении данных.
Откройте форму, таблицу или набор результатов запроса, которые содержат список.
Выполните одно из следующих действий:
Щелкните правой кнопкой мыши на списке, который требуется изменить, а затем нажмите кнопку Изменить элементы списка.
Щелкните список и нажмите эту кнопку, чтобы открыть диалоговое окно или форму "Изменение элементов списка".
Экран, который вы видите, зависит от типа списка, который вы хотите изменить. Выполните одно из указанных ниже действий.
Если вы редактируете список значений или многоценное поле, используйте диалоговое окно "Изменение элементов списка" для изменения данных списка, сохраняя каждый элемент в отдельной строке, а затем нажмите кнопку "ОК" после завершения.
Чтобы выбрать значение, используемое по умолчанию для новых записей, нажмите кнопку раскрывающегося списка для поля Значение по умолчанию, а затем выберите нужное значение.
Если вы изменяете поле подстановки, на экране отображается форма для ввода данных. Измените данные списка с помощью этой формы.
Ввод пустых строк
Access различает два вида пустых значений: нулевые значения и пустые строки. Нулевые значения указывают на неизвестное значение, а пустые строки обозначают поля, содержащие пробел. Например, предположим, что у вас есть таблица с данными клиентов, и эта таблица содержит поле с номером факса. Вы можете оставить поле пустым, если у вас нет информации о номере факса клиента. В этом случае, если поле остается пустым, для него присваивается нулевое значение, что означает, что вы не знаете, какое значение необходимо. Если позже вы определите, что у клиента нет факсимильного аппарата, вы можете ввести пустую строку в поле, чтобы показать, что для этого поля значение не будет установлено.
Откройте таблицу или запрос в режиме таблицы или форму в режиме формы
Выберите нужное поле, а затем введите две двойные кавычки без пробела между ними («»).
Для фиксации вашего выбора для базы данных, установите курсор на другое поле или нажмите клавиши Shift+ Enter. По умолчанию кавычки исчезнут.
Отмена изменений
Если вы неправильно вводите данные, вы можете отменить изменения. Выполните одно или несколько из указанных ниже действий.
Чтобы отменить последнее изменения, выберите Отменить в панели быстрого доступа или нажмите клавишу ESC.
Чтобы отменить все изменения для записи, еще раз нажмите клавишу ESC.
Чтобы отменить изменения после сохранения изменения или перейти к другой записи, выберите Отменить в панели быстрого доступа.
Важно Как только вы начнете редактирование еще одной записи, примените или удалите фильтр или перейдите на другое окно или вкладку документа, ваши изменения становятся постоянными.
По существу, существует два метода добавления записей в таблицу. Первый — добавление по одной записи за раз, второй — одновременное добавление нескольких записей. В обоих случаях для выполнения задачи необходимо использовать инструкцию SQL INSERT INTO. Инструкции INSERT INTO обычно называют запросами на добавление.
Чтобы добавить одну запись в таблицу, с помощью списка полей определите, в какие поля следует поместить данные, а затем разместите данные в списке значений. Для определения списка значений используйте выражение VALUES. Например, указанная ниже инструкция вставляет значения 1, Kelly и Jill в поля CustomerID, Last Name и First Name соответственно.
Вы можете опустить список полей, но только в том случае, если вы передаете все значения, которые должна содержать запись.
Чтобы добавить одновременно несколько записей в таблицу, используйте инструкцию INSERT INTO совместно с инструкцией SELECT. Если вы вставляете записи из другой таблицы, тип каждого вставляемого значения должен быть совместим с типом поля, принимающего данные.
Указанная ниже инструкция INSERT INTO вставляет все значения полей CustomerID, Last Name и First Name таблицы tblOldCustomers в соответствующие поля таблицы tblCustomers.
Если таблицы определены совершенно одинаково, можно не использовать списки полей.
Изменение записей в таблице
Чтобы изменить текущие данные в таблице, используйте инструкцию UPDATE, которую обычно называют запросом на обновление. Инструкция UPDATE может изменить одну или несколько записей и обычно имеет указанный ниже вид.
Чтобы изменить все записи в таблице, укажите имя таблицы и с помощью выражения SET укажите поле или поля, которые необходимо изменить.
В большинстве случаев вам потребуется уточнить инструкцию UPDATE с помощью выражения WHERE, чтобы ограничить количество изменяемых записей.
Удаление записей из таблицы
Чтобы удалить текущие данные в таблице, используйте инструкцию DELETE, которую обычно называют запросом на удаление. Эту операцию также называют усечением таблицы. Инструкция DELETE может удалить одну или несколько записей из таблицы и обычно имеет следующий вид:
Инструкция DELETE не удаляет структуру таблицы, она удаляет только данные, хранящиеся в структуре таблицы. Чтобы удалить все записи из таблицы, используйте инструкцию DELETE и укажите одну или несколько таблиц, из которых вы хотите удалить все записи.
В большинстве случаев вам потребуется уточнить инструкцию DELETE с помощью выражения WHERE, чтобы ограничить количество удаляемых записей.
Если вы хотите удалить данные только из определенных полей таблицы, используйте инструкцию UPDATE и присвойте этим полям значение NULL, но только в том случае, если эти поля допускают значение NULL.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Время показало, что приложения для работы с электронными таблицами, в том числе и Microsoft Excel, имеют потрясающие возможности для сбора, систематизации и анализа различных данных. Трудно представить бизнес, где бы не использовали этот инструмент. Вне зависимости от размера компании в ней обязательно используют электронные таблицы в том или ином виде.
Все те, кто работают с платформой 1С и решениями на ее основе не по наслышке знают, что Excel является чуть ли не главным инструментом бухгалтеров, аналитиков, финансистов и многих других специалистов.
Коллеги, Вы только вспомните сколько было сделано выгрузок из 1С в Excel! Сколько человеко-часов на это было потрачено!
Нет, нет! Excel ни в коем случае не является заменой учетных систем 1С, ведь назначение у них совершенно разное. Уберите оружие! Он скорее инструмент локального пользования для более гибкой обработки данных, ведь в 1С это не всегда сделать также просто, как в Excel.
Но если все так хорошо, то почему статья будет про Access? Неужели им кто-то еще пользуется? И на самом деле пользуется!
Excel vs. Access
Эпичной битвы не будет! Мы просто сравним два отличных инструмента по 9 критериям и опишем ситуации, когда Access может быть более подходящим вариантом.
Критерий | Excel | Access |
Назначение | Создание графиков, диаграмм и различных моделей данных. | Приложение базы данных для сбора и сортировки данных. |
Использование | Построение финансовых, статистических и других моделей, а также возможность проверки данных при вводе. | Сбор, сортировка и изменение информации в базах данных. |
Размер хранилища | Имеет ограничения по количеству строк (1 048 576) и столбцов (16 384), а также другие ограничения. Подробнее смотреть здесь. | Ограничения на макс. размер базы (2 ГБ) и другие. Подробнее смотреть здесь. |
Возможность доработки | Очень просто. Это может сделать любой пользователь Excel, конечно, если дело не касается макросов или других специфичных вещей. | Сложно, поскольку требуются знания по построению баз данных и других особенностей. |
Применимость | Больше всего подходит для анализа данных (финансовых, статистических или любых других). | Больше подходит для хранения данных. Ориентировано больше на малый бизнес. |
Изучение | Прост в изучении. | Тяжелее в изучении по сравнению с Excel. |
Реляционный или линейный | Не реляционное хранилище данных. | Для хранения используется реляционная модель. |
Знание программирования | В большинстве случаев знания программирования не нужны. | Знания программирования обязательны для работы с базами данных Access. |
И так, Access меньше ограничен в объемах выгрузки данных и позволяет строить реляционную модель хранения информации. Кроме того, можно делать произвольные SQL-запросы к таблицам для обработки данных. Во всем остальном Excel удобнее и эффективнее. Это если смотреть общую информацию, поэтому поклонников Access прошу не идти на несанкционированный митинг в комментариях! Тем более никто не мешает подключиться к базе Access из Excel и работать в последнем.
Таким образом, когда нужно выгрузить информацию из базы 1С в большом объеме и при этом у конечного потребителя нет навороченной СУБД, или просто стандарт работы через Access, или же есть реализованная на нем бизнес-логика, то почему бы не использовать его? Также иногда нужно обойти ограничение Excel в 1 миллион строк и выгрузить данные одним набором. В последнем случае база данных Access также может быть хорошим выбором.
Конечно, вместо Excel или Access есть масса других вариантов, но в зависимости от требований они не всегда могут подходить:
- CSV-файлы - их трудно анализировать, да и подходит это больше для последующей загрузки в другой источник данных.
- База SQL Server / PostgreSQL - отличный вариант, вот только не все конечные пользователи могут позволить себе настройку этого ПО.
- Разбить выгрузку Excel на несколько файлов? Отлично! Попробуйте собрать отчетность из 15 файлов Excel по 1 миллиону записей, тогда и поговорим!
- И др.
Далее поверхностно пробежимся по вопросу лицензирования и наконец-то перейдем к разработке.
Немного про лицензии
Этот вопрос очень важный, поскольку можно здорово напортачить, от чего в будущем могут быть проблемы из-за нарушения лицензионного соглашения Microsoft на их ПО. Дело тут вот в чем.
Выгрузка или другие действия в 1С должны выполняться на стороне сервера 1С, т.к. только там мы можем работать с запросами, таблицами значений или с системой компоновки данных. Конечно, есть еще толстый клиент и файловые базы, но сейчас они не представляют особого интереса, ведь тонкий клиент более предпочтительный вариант для прикладных решений. А для файловых баз проблема лицензирования офиса вообще не стоит, т.к. обычно все кто с этой базой работают уже имеют установленный офисный пакет. Получается, что для того, чтобы сервер 1С мог работать с базами данных Access нужно выполнить одно из следующих действий на сервере 1С:
- Установить полный пакет Microsoft Access.
- Установить пакет "Microsoft Access Database Engine 2016 Redistributable".
- И последний вариант - установить "Microsoft Access 2016 Runtime".
Самым простым вариантом выглядит установка полного пакета приложения MS Access на сервере, но это сильно нарушает лицензионное соглашение. В этом случае потребуется покупка лицензий на Office не только для сервера, но и клиентские лицензии для всех пользователей, которые работают с этим сервером. В нашем случае для всех, кто работает в 1С на этом сервере. А если пользователей 1000? И их становится все больше? Докупать лицензии? Это будет не дешево. В некоторых случаях лицензия может вообще запрещать такое развертывание, но на подробностях уже не будем останавливаться.
Второй вариант - это установка только ODBC-драйвера в пакете Microsoft Access Database Engine 2016 Redistributable. Да, это будет работать! Access устанавливать не нужно, а мы сможем работать с базой данных Access через ADO-соединение. Но и тут не все просто! Если перейти по ссылке и посмотреть детальную информацию, то там черным по белому написано, что этот пакет не может использоваться для:
- Для замены Ace (нас это сейчас не интересует).
- Для замены Jet OLEDB (из 1С тоже можно работать через Jet с базами Access, но это уже другая история).
- Как замена основных систем управления базами данных, электронными таблицами или документами.
- И самый главный пункт - использоваться как системная служба или программа серверной части приложения.
Фактически, этот пакет предназначен для клиентских компьютеров, которые подключаются к различным источникам данных
Третий вариант - установка Microsoft Access 2016 Runtime. Согласно информации на странице, для установки и распространения не требуется покупка дополнительных лицензий, т.к. этот пакет содержит лишь среду выполнения, которая используется для запуска уже готовых решений. Средства разработки в ней отсутствуют. При этом в состав пакета также входит установщик ODBC-драйвера, который нам и нужен.
На практике видел использование второго и третьего варианта, причем аудит от Microsoft не выявлял в этом случае никаких нарушений. Возможно, установка Microsoft Access Database Engine 2016 Redistributable формально и может являться нарушением соглашения, но по факту его никто не проверяет.
Все вышесказанное относится и к другим продуктам MS Office, в том числе и Excel, Word и т.д. Интересная информация по лицензированию есть здесь, можете прочитать там про "Access Runtime".
Нашли ошибку или не согласны что лицензирование работает именно так? Пишите в комментариях!
Простые примеры
В основном мы сосредоточимся на задачах выгрузки данных в Access. Операции загрузки также возможна, но она всегда достаточно простая и очень сильно завязана на условиях задачи (что и куда загрузить, как преобразовывать данные из базы и т.д.). Приведу лишь небольшой пример загрузки данных.
Все просто - создаем соединение с базой данных Access через ADO, создаем команду чтений данных в виде набора и обрабатываем его. После освобождаем ресурсы.
С выгрузкой данных все куда интересней, потому что проблемы сложнее:
- ODBC-драйвер не позволяет создать пустую базу. Тут либо иметь уже готовый файл с нужными таблицами или придумывать альтернативный вариант (что и было сделано, но об этом позже).
- При выгрузке всегда одного набора данных задача упрощается, но что если нужно выгружать каждый раз разные наборы. Например, нужно выгружать отчет на СКД и учитывать, что настройки (выводимые поля) пользователь может изменять. То есть нам нужно научиться создавать таблицы в Access, сопоставляя типы 1С с доступными типами MS Access.
- Нужно учесть ограничения базы Access на различные типы, а также на сам ODBC-драйвер. Например, что выгрузка в Access не поддерживает даты меньше 1753 года, если используется ODBC-драйвер.
- Также необходимо учитывать максимальный размер базы данных в 2 ГБ. Тут в качестве решения может быть настройка максимального количества выгружаемых записей для одной базы. В случае необходимости выгрузка будет выполняться в несколько порций.
То есть на практике нужно быть готовым к выгрузке произвольных наборов данных. которые в 1С могут быть представлены таблицей значений, запросов или результатом компоновки данных отчета. Если бы этих проблем не стояло, то алгоритм выгрузки был бы примерно такой.
Но вернемся все же к реальным требованиям. Для упрощения разработки и сопровождения сделаем прокси-функцию, которая позволит выгружать в Access таблицы значений, запросы и результаты СКД.
Прокси, прокси, прокси
Начнем с описания что в итоге нужно получить. Интерфейс выгрузки будет представлен тремя функциями:
- ВыгрузитьТаблицуЗначений(КаталогВыгрузки, ИсточникДанных)
- ВыгрузитьЗапрос(КаталогВыгрузки, ИсточникДанных)
- ВыгрузитьРезультатКомпоновки(КаталогВыгрузки, СхемаКомпоновкиДанных, Настройки)
Примеры работы с ними ниже под спойлером.
Все функции находятся в общем серверном модуле "РаботаСAccessСервер" и возвращают структуру результата выгрузки с количеством выгруженных записей.
Читайте также: