1с слишком много файлов

Обновлено: 07.07.2024

Если до работы в 1С:Предприятии 8.3 Вы пользовались предыдущими версиями программы (8.2, 8.1, 8.0, не говоря уже о 7.7), то не могли не заметить, что при переходе на версию платформы 8.3 размер информационной базы (ИБ) значительно возрос.

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

Во многом увеличение размера базы 1С:Предприятие 8.3 в сравнении с предыдущими версиями обусловлено переходом на "управляемые формы", но мы это здесь обсуждать не будем, а рассмотрим некоторые способы сокращения размера базы, которые могут быть полезны обычным пользователям программы.

К сведению программистов, сисадминов и прочих IT-специалистов

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

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

Замечание для обычных пользователей

Поскольку для 1С:Предприятие есть много разных конфигураций, а проблема размера базы одна на всех, то приводить конкретные примеры (если они касаются конфигурации, а не платформы) мы будем для "Бухгалтерии предприятия".

К другим конфигурациям всё сказанное применимо "по аналогии".

Итак, посмотрим некоторые способы сокращения размера базы 1С, а также как сделать так, чтобы база не увеличивалась чрезмерно.

Отказ от ответственности

Все операции, предлагаемые в статье, Вы выполняете на свой страх и риск. Мы лишь приводим информацию в образовательных целях.

Если у Вас есть сомнения - обратитесь к специалисту по 1С Вашей компании.

Не загружайте в базу КЛАДР/ФИАС полностью!

Довольно часто происходит следующее: пользователь берёт и загружает все регионы адресного классификатора. Происходит это обычно по трём основным причинам:

  1. Пользователь новичок и "не подумал", зачем ему все регионы в базе, то есть загрузил "на всякий случай".
  2. "Не знал", что можно загрузить только часть справочника (маловероятно, но и так бывает).
  3. "Надоело" время от времени добавлять новые регионы, когда они реально требуются, но при этом не загружены (два-три-четыре раза добавил новые регионы, а потом надоело и решил загрузить сразу весь справочник, чтобы больше на это не отвлекаться).

В результате в базу 1С попадает очень много лишних данных, а размер самой ИБ возрастает очень существенно. Давайте посмотрим, на сколько именно:

  • версия 8.2: 1500 Мб ( + 1 Гб к пустой базе);
  • версия 8.3: 3000 Мб ( + 2,5 Гб к пустой базе);

Таким образом, не стоит загружать те регионы, которые реально не используются. Это не просто лишние данные, но они также попадают и в резервные копии (что увеличивает размер бэкапа, а также время его создания).

Если Вы уже загрузили лишнее, то удалите ненужные регионы и размер базы уменьшится.

Как уменьшить старую базу 1С:Предприятие

Это решение подходит для тех случаев, когда база существует давно (годы) и документов в ней накопилось очень много. В таком случае можно избавиться от части документов, выполнив специальную операцию, которая в 1С называется " свёртка информационной базы ".

(!) Обратите внимание, что эта операция не может быть отменена (кроме как восстановлением из резервной копии), поэтому подумайте перед её выполнением (и сделайте копию базы).

Принцип свёртки заключается в том, что в базе есть старые документы, которые на 100% никогда уже не понадобятся. От них можно избавиться, урезав базу до определённой даты (до какой - смотрите сами).

Данная операция выполняется из раздела Администрирование. Где конкретно находится этот пункт, зависит от точной версии программы и конфигурации (в любом случае есть быстрый поиск по меню). Ниже приведён скриншот для одной из версий 1С:Бухгалтерии 8.3.

В процессе выполнения свёртки 1С проверит все документы от начала базы и до указанной Вами даты свёртки, после чего на основе этих документов сформирует "остатки", а сами данные удаляет.

В результате база не пострадает, итого не "поплывут", но документов станет меньше (иногда значительно). Вот так и будет сокращена база.

При выполнении свёртки следуйте инструкциям 1С. Если же Вы не уверены, что сможете (и хотите) делать это самостоятельно, обратитесь к соответствующему IT-специалисту Вашей компании.

Замечание: вообще так всегда и следует делать, поскольку техническое обслуживание базы - не дело рядового пользователя. Тем не менее, знание подобных операций часто бывает очень полезно владельцам мелких ИП/ООО.

Очистите журнал регистрации

Когда Вы что-то делаете в программе, она не просто выполняет нужные Вам операции, но и ведёт специальный журнал: кто, когда и что делал. Этот лог называется журналом регистрации и в него часто попадает слишком много информации, а сам журнал может занимать очень много места, значительно увеличивая размер базы 1С.

Представьте себе, что все Ваши действия в 1С записываются годами! Это очень много данных.

Конечно, иногда информация из журнала регистрации может быть очень полезной. Но для большинства пользователей эти данные не несут никакой полезной нагрузки и могут быть без последствий удалены. Если Вы сомневаетесь в целесообразности данной операции - проконсультируйтесь с 1С-программистом или системным администратором Вашей компании!

Журнал регистрации можно очистить через Конфигуратор. Принцип показан на скриншоте ниже.

Чтобы журнал в дальнейшем не забился снова, настройте сохранение только критичных для Вас данных.

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

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

Уменьшаем размер резервной копии базы

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

Кстати, это доказывает, что база 1С состоит в основном из пустоты.

Есть ли вообще смысл уменьшать размер базы?

Чем меньше база, тем быстрее работает программа. А поскольку современные версии 1С:Предприятие 8.3 весьма "тормозные", то ускорить их не помешает.

Заметите ли Вы эффект от уменьшения размера базы? Это зависит от каждого случая индивидуально. В любом случае чем меньше места занимает ИБ, тем:

  • быстрее выполняется регулярное резервное копирование;
  • меньше места занимают резервные копии;
  • сама база занимает меньше места;
  • программа может работать быстрее (заранее сложно сказать);

Дополнительная информация по теме

На нашем сайте приведено также сравнение размеров базы для версии 1С:Предприятие 8.3 и 8.2 для конфигурации "Бухгалтерия предприятия". Вы можете на примере сравнить, как изменился размер базы при переходе на версию 8.3.

Также по указанной ссылке находится более подробное описание рассмотренных выше некоторых способов сжатия базы.

Поделитесь своим опытом

Знаете другие способы сжатия базы или просто имеете опыт уменьшения размера базы 1С:Предприятия? Поделитесь своим опытом в комментариях - это поможет другим пользователям лучше понять программу.

Устраняем ошибку «Слишком много открытых файлов» или «Too many open files» в 1С под ОС Linux (Red Hat 7/Centos 7)

Подробнее об ошибке

Пример полного текста ошибки:

Ошибка при выполнении файловой операции … Слишком много открытых файлов .



Описание:

Данная ошибка связана с тем, что ОС Linux исчерпала ограниченный ей лимит файлов на открытие и может возникать как при работе пользователя в пользовательском режиме, так и при работе разработчика с хранилищем конфигурации.

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


Решение:

На всех серверах 1С выполним следующие настройки лимитов открываемых файлов.

Увеличиваем лимит на открытые файлы всей системы.

1. Получим значение количества файлов, которые можно открыть в нашей файловой системе:

Скорее всего, здесь мы увидим числа порядка: 97822; 65208 и т.д.

Такие пределы нас вполне устраивают.

Данное значение используем в дальнейшей настройке.

Но, если понадобится их увеличить – добавим строку настроек в конфигурационный файл /etc/sysctl.conf любым удобным способом:

2. Перечитаем параметры:

где 6500 – это то число файлов, которое нам необходимо иметь возможность открывать в нашей файловой системе.

Увеличиваем лимит на открытые файлы для процессов 1С.

1. Отредактируем файл:

2. Перечитаем параметры:

3. Убедимся, что изменения вступили в силу. Получим pid службы:

4. По номеру pid получим значение параметра «max open files»:

Значение должно быть 65000.


Увеличиваем лимиты на открытые файлы для процесса 1С редактированием файла демона.

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

2. Обновим конфигурацию демон:

3. Перезапустим демон:

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

Увеличиваем максимальное число сегментов разделяемой памяти для всей системы.

Все наши модифицированные настройки можем увидеть в конфигурационном файле /etc/sysctl.conf:


Еще можно посмотреть


Ошибки публикации базы и веб сервиса на веб сервере 1C+ Apache +Linux.

Многие из нас привыкли публиковать базу или веб сервис 1С нажатием нескольких кнопок. Но не все из многих знают, что для этого необходимо запустить(от имени администратора!) конфигуратор 1С:Предприятие именно на той машине, где установлен веб сервер(а именно компонента веб-расширения 1С:Предприятия). В случае, если веб-сервер и компонента веб-расширения 1С:Предприятия установлены на машину с ОС Linux без […]

Основы работы в Linux

Основы работы в Linux

Основы работы в Linux. Как подключиться к серверу. Как скопировать файлы на сервер. Редактирование конфигурационных файлов.


Основные команды Linux

Список основных команд консоли Linux которые потребуются при установке и настройке 1С. Примеры использования с комментариями.

Настройка сервера хранилища конфигураций 1С на Linux

Установка и настройка хранилища конфигураций 1C на Linux сервере

Хранилище конфигурации 1С:Предприятия 8.3 является инструментом групповой разработки. Настраиваем сервер хранилища на Linux.

Ошибки на клиенте 1с линукс шрифты

Ошибки на клиенте при работе с сервером 1С на Linux. Часть 2

Разбор наиболее часто встречающихся ошибок при работе с 1С на Linux.

Утилита ring license для 1С версии 8.3.14 и выше под Linux

Для чего нужен 1C ring license? На текущий момент широко распространено использование программных лицензий. И системы на базе 1С в этом не исключение. Но, помимо простой активации пин-кодов, программная лицензия 1С также нуждается в обслуживании. Для обслуживания разработчику требуются знания об инструменте для получения списков, информации, анализа состояния файлов программных лицензий. Об этом инструменте мы […]


Ошибки СУБД. 1С+PostgreSQL+Linux. Часть 1.


Фото Алены Туляковой, ИА «Клерк.Ру»

В статье указаны основные ошибки, которые совершают начинающие администраторы 1С, и показаны способы их решения на примере теста Гилева.

Основная цель написания статьи — чтобы не повторять очевидные нюансы тем администраторам (и программистам), которые еще не набрали опыта с 1С.

Вторичная цель, если у меня будут какие-то недочеты, — на Инфостарте мне это укажут быстрее всего.

Неким стандартом "де факто" уже стал тест В. Гилева. Автор на своем сайте дал вполне понятные рекомендации, я же просто приведу некоторые результаты, и прокомментирую наиболее вероятные ошибки. Естественно, что результаты тестирования на Вашем оборудовании могут отличаться, это просто для ориентира, что должно быть и к чему можно стремиться. Сразу хочу отметить, что изменения надо делать пошагово, и после каждого шага проверять, какой результат это дало.

На Инфостарте подобные статьи есть, в соответствующих разделх буду ставить на них ссылки (если пропущу что-то - просьба подсказать в комментариях, добавлю). Итак, предположим у вас тормозит 1С. Как диагностировать проблему, и как понять кто виноват, администратор или программист?

Тестируемый компьютер, основной подопытный кролик: HP DL180G6, в комплектации 2*Xeon 5650, 32 Gb, Intel 362i , Win 2008 r2. Для сравнения, сопоставимые результаты в однопоточном тесте показывает Core i3-2100. Оборудование специально взял не самое новое, на современном оборудовании результаты заметно лучше.

Для тестирования разнесенных серверов 1С и SQL, сервер SQL: IBM System 3650 x4, 2*Xeon E5-2630, 32 Gb, Intel 350, Win 2008 r2.

Для проверки 10 Gbit сети использовались Intel 520-DA2 адаптеры.

Файловая версия. (база лежит на сервере в расшаренной папке, клиенты подключаются по сети, протокол CIFS/SMB). Алгоритм по шагам:

0. Добавляем на файловый сервер тестовую базу Гилева в ту же папку, что и основные базы. С клиентского компьютера подключаемся, запускаем тест. Запоминаем получившийся результат.

Подразумевается, что даже для старых компьютеров 10 летней давности (Pentium на 775 socket) время от нажатия на ярлык 1С:Предприятие до появления окна базы должно пройти меньше минуты. (Celeron = медленная работа).

Если у Вас компьютер хуже, чем пентиум на 775 socket с 1 гб оперативной памяти, то я Вам сочувствую, и комфортной работы на 1С 8.2 в файловой версии Вам будет добиться тяжело. Задумайтесь или об апгрейде (давно пора), или о переходе на терминальный (или web, в случае тонких клиентов и управляемых форм) сервер.

Если компьютер не хуже, то можно пинать администратора. Как минимум — проверить работу сети, антивируса и драйвера защиты HASP.

Если тест Гилева на этом этапе показал 30 "попугаев" и выше, но рабочая база 1С все равно работает медленно - вопросы уже к программисту.

1. Для ориентира, сколько же может "выжать" клиентский компьютер, проверяем работу только этого компьютера, без сети. Тестовую базу ставим на локальный компьютер (на очень быстрый диск). Если на клиентском компьютере нет нормального ССД, то создается рамдиск. Пока, самое простое и бесплатное — Ramdisk enterprise.

Для тестирования версии 8.2 вполне достаточно 256 мб рамдиска, и! Самое главное. После перезагрузки компьютера, с работающим рамдиском, на нем должно быть свободно 100-200 мб. Соответственно, без рамдиска, для нормальной работы свободной памяти должно быть 300-400 мб.

Для тестирования версии 8.3 рамдиска 256 мб хватит, но свободной оперативной памяти надо больше.

При тестировании нужно смотреть на загрузку процессора. В случае, близком к идеальному(рамдиск), локальная файловая 1с при работе загружает 1 ядро процессора. Соответственно, если при тестировании у вас ядро процессора загружено не полностью — ищите слабые места. Немного эмоционально, но в целом корректно, влияние процессора на работу 1С описано здесь. Просто для ориентира, даже на современных Core i3 с высокой частотой вполне реальны цифры 70-80.

Наиболее часто встречающиеся ошибки на этом этапе.

  • Неправильно настроенный антивирус. Антивирусов много, настройки для каждого свои, скажу лишь то, что при грамотной настройке ни веб, ни касперский 1С не мешают. При настройках "по умолчанию" - может отниматься примерно 3-5 попугаев (10-15%).
  • Режим производительности. Почему-то на это мало кто обращает внимания, а эффект - самый весомый. Если нужна скорость - то делать это обязательно, и на клиентских и на серверных компьютерах. (Хорошее описание у Гилева. Единственный нюанс, на некоторых материнских платах если выключить Intel SpeedStep то нельзя включать TurboBoost).

Включать режим производительности можно (и желательно) в двух местах:

  • через BIOS. Отключить режимы C1, C1E, Intel С-state (C2, C3,C4). В разных биосах они называтся по разному, но смысл один. Искать долго, требуется перезагрузка, но если сделал один раз - потом можно забыть. Если в BIOS все сделать правильно, то скорости добавится. На некоторых материнских платах настройками BIOS можно сделать так, что режим производительности Windows роли играть не будет. (Примеры настройки BIOS у Гилева). Эти настройки в основном касаются серверных процессоров или "продвинутых" BIOS, если Вы такое у себя не нашли, и у вас НЕ Xeon - ничего страшного.
  • Панель управления - Электропитание - Высокая производительность. Минус - если ТО комптютера давно не проводилось, он будет сильнее гудеть вентилятором, будет больше греться и потреблять больше энергии. Это - плата за производительность.

В BIOS C-state включены,

режим энергопотребления сбалансированный

Для Pentium и Core на этом можно остановиться,

из Xeon еще можно выжать немного "попугайчиков"

Если не использовать Turbo boost - именно так должен выглядеть

сервер, настроенный на производительность

А теперь цифры. Напомню: Intel Xeon 5650, ramdisk. В первом случае тест показывает 23.26, в последнем - 49.5. Разница - почти двухкратная. Цифры могут варьироваться, но соотношение остается практически таким же для Intel Core.

в) Turbo Boost. Сначала надо понять, поддерживает ли Ваш процессор эту функцию, например здесь. Если поддерживает, то можно еще вполне легально получить немного производительности. (вопросы разгона по частоте, особенно серверов, касаться не хочу, делайте это на свой страх и риск. Но соглашусь с тем, что повышение Bus speed со 133 до 166 дает очень ощутимый прирост как скорости, так и тепловыделения)

Как включать turbo boost написано, например, здесь. Но! Для 1С есть некоторые нюансы (не самые очевидные). Сложность в том, что максимальный эффект от turbo boost проявляется тогда, когда включены C-state. И получается примерно такая картинка:

turbo boost 23

Обратите внимание, что множитель - максимальный, частота Core speed - красивейшая, производительность - высокая. Но что же будет в результате с 1с?

Core speed (частота), GHz

CPU-Z Single Thread

Тест Гилева Ramdisk

Тест Гилева Ramdisk

А в итоге получается, что по тестам производительности ЦПУ вариант с множителем 23 впереди, по тестам Гилева в файловой версии - производительность с множителем 22 и 23 одинаковая, а вот в клиент-серверной - вариант с множителем 23 ужас ужас ужас (даже, если C-state выставить на уровень 7, то все равно медленнее, чем с выключенным C-state). Поэтому рекомендация, проверьте оба варианта у себя, и выберите из них лучший. В любом случае, разница 49,5 и 53 попугая - достаточно значительная, тем более это без особых усилий.

Вывод - turbo boost включать обязательно. Напомню, что недостаточно включить пункт Turbo boost в биосе, надо еще посмотреть и другие настройки (BIOS: QPI L0s, L1 - disable, demand scrubbing - disable, Intel SpeedStep - enable, Turbo boost - enable. Панель управления - Электропитание - Высокая производительность). И я бы все-таки (даже для файловой версии) остановился на варианте, где c-state выключен, хоть там множитель и меньше. Получится как-то так.

Турбо буст включен, c-state выключены, режим высокой производительности

Достаточно спорным моментом является частота памяти. Например вот тут частота памяти показывается как очень сильно влияющая. Мои же тесты - такой зависимости не выявили. Я не буду сравнивать DDR 2/3/4, я покажу результаты изменения частоты в пределах одной линейки. Память одна и та же, но в биосе принудительно ставим меньшие частоты.

800
1066
1333
И результаты тестирования. 1С 8.2.19.83, для файлового варианта локальный рамдиск, для клиент-серверного 1С и SQL на одном компьютере, Shared memory. Turbo boost в обоих вариантах выключен. 8.3 показывает сопоставимые результаты.
800 1066 1333
48,54 49,50 50,51
1с 8.2 файловый вариант 49,50 49,50 49,02
49,02 49,02 49,50
36,76 36,76 37,04
1с 8.2 клиент-сервер 37,04 37,04 36,50
36,23 36,76 36,76
Разница - в пределах погрешности измерений. Я специально вытащил скрины CPU-Z чтобы показать, что со сменой частоты меняются и другие параметры, те же CAS Latency и RAS to CAS Delay, что нивелирует изменение частоты. Разница будет тогда, когда физически будут меняться модули памяти, с более медленных на более быстрые, но и там цифры не особо значительные.

2. Когда с процессором и памятью клиентского компьютера разобрались, переходим к следующему очень важному месту - сети. Про тюнинг сети написаны многие тома книг, есть статьи на Инфостарте (1, 2 и другие), здесь я на эту тему заострять внимание не буду. Перед началом тестирования 1С просьба убедиться, что iperf между двумя компьютерами показывает всю полосу (для 1 гбит карточек - ну хотя бы 850 мбит, а лучше 950-980), что выполнены советы Гилева. Потом - самой простой проверкой работы будет, как это ни странно, копирование одного большого файла (5-10 гигабайт) по сети. Косвенным признаком нормальной работы на сети в 1 гбит будет средняя скорость копирования 100 мб/сек, хорошей работы — 120 мб/сек. Хочу обратить внимание, что слабым местом (в том числе) может быть и загруженность процессора. SMB протокол на Linux достаточно плохо параллелится, и во время работы он вполне спокойно может «скушать» одно ядро процессора, и больше не потреблять.

И еще. С настройками по умолчанию windows клиент лучше всего работает с windows server (или даже windows рабочая станция) и протоколом SMB/CIFS, linux клиент (debian, ubuntu остальные не смотрел) лучше работает с linux и NFS (с SMB тоже работает, но на NFS попугаи выше). То, что при линейном копировании вин-линукс сервер на нфс копируется в один поток быстрее, еще ни о чем не говорит. Тюнинг debian для 1С - тема отдельной статьи, я к ней еще не готов, хотя могу сказать, что в файловой версии получал даже немного бОльшую производительность, чем Win вариант на этом же оборудовании, но с postgres при пользователях свыше 50 у меня пока еще все очень плохо.

Самое главное, о чем знают "обжегшиеся" администраторы, но не учитывают начинающие. Есть очень много способов задать путь к базе 1с. Можно сделать servershare, можно 192.168.0.1share, можно net use z: 192.168.0.1share (и в некоторых случаях такой способ тоже сработает, но далеко не всегда) и потом указывать диск Z. Вроде бы все эти пути указывают на одно и то же место, но для 1С есть только один способ, достаточно стабильно дающий нормальную производительность. Так вот, правильно делать надо так:

В командной строке (или в политиках, или как Вам удобно) - делаете net use DriveLetter: servershare. Пример: net use m: serverbases. Я специально подчеркиваю, НЕ IP адрес, а именно имя сервера. Если сервер по имени не виден - добавьте его в dns на сервере, или локально в файл hosts. Но обращение должно быть по имени. Соответственно - в пути к базе обращаться к этому диску (см картинку).

Путь к базе

А теперь я на цифрах покажу, почему именно такой совет. Исходные данные: Карты Intel X520-DA2, Intel 362, Intel 350, Realtek 8169. ОС Win 2008 R2, Win 7, Debian 8. Драйвера последние, обновления применены. Перед тестированием я убедился, что Iperf дает полную полосу (кроме 10 гбит карточек, там получилось только 7.2 Gbit выжать, позже посмотрю почему, тестовый сервер еще не настроен как надо). Диски разные, но везде SSD(специально вставил одиночный диск для тестирования, больше ничем не нагружен) или рейд из SSD. Скорость 100 Mbit получена путем ограничения в настройках адаптера Intel 362. Разницы между 1 Gbit медь Intel 350 и 1 Gbit оптика Intel X520-DA2 (полученной путем ограничения скорости адаптера) не обнаружено. Максимальная производительность, турбобуст выключен (просто для сопоставимости результатов, турбобуст для хороших результатов добавляет чуть меньше 10%, для плохих - вообще может никак не сказаться). Версии 1С 8.2.19.86, 8.3.6.2076. Цифры привожу не все, а только самые интересные, чтобы было с чем сравнивать.

передача файлов большого объема по защищенному протоколу из 1С на сайт


Во время создания очередной B2B-системы на этапе интеграции 1С: Предприятие 8.2 с web — интерфейсом возникла необходимость безопасной передачи файлов больших размеров из 1С в web.
Для решения этой задачи был выбран протокол SFTP, как надежный и не имеющий ограничений по размеру передаваемого файла.
Во встроенном языке 1С: Предприятие 8.2 отсутствуют функции для передачи данных через SFTP, поэтому пришлось искать прикладные средства. На интернет-ресурсах, посвященных программированию 1С, есть примеры удачного использования freeware утилит типа WinSCP. Для использования данного способа необходимо из встроенного языка 1С выполнить запуск утилиты с параметрами командной строки.

Пример запуска утилиты WinCSP из 1С:

Минусом такого решения является отсутствие возможности контроля ошибок запуска и выполнения из встроенного языка 1С. В связи с этим было принято решение написать внешнюю DLL компоненту для 1С: Предприятие 8.2.

Создание компоненты DLL

  • IcomponentBase — реализует основные методы компоненты.
  • IlanguageInterface — служит для локализации методов и свойств 1С и С++ через определения массивов соответствий и методов акцессоров GetMethodName, GetPropName.

3. Для вызова необходимой функции из компоненты используется метод CallAsFunc из интерфейса IcomponentBase. При вызове методов из компоненты 1С, вызывается этот С++ метод.

  • lMethodNum – номер метода в массиве соответствий.
  • pvarRetValue – указатель на выходные параметры.
  • paParams — параметры из метода в 1С.
  • lSizeArray – размер массива, если входной параметр массив.

4. В нашем примере из 1С можно выполнять 4 метода, которым соответствуют С++ методы в DLL компоненте.

1С (методы) С++ методы
НачатьСессию()
Предварительно нужно определить параметры авторизации(хост, связку логин, пароль – либо rsa ключи, путь на удалённом сервере).
Поэтому функция НачатьСессию обрастает свойствами: Хост, Логин, Пароль, УдаленныйПуть
StartSSHSession(status,this->ssh_host,this->ssh_login,this->ssh_pass);
StartSftpSession(status,this->sftp_path)
ПослатьФайл(“Путь и имя файла на клиентской машине”)
WriteToServer(const char * &status, const char *loclfile)
ЕслиСессияНачата() isSessionStart()
ЗакончитьСессию() endSession() – завершает SFTP сеанс и SSH сеанс

5. В С++ нужно определить параметры доступа(чтение/запись) к созданным свойствам за это отвечают два метода IsPropReadable и IsPropWritable.

Таблица соотношений свойств 1С и С++

1С(свойства) С++ свойства
Хост ssh_host
Логин ssh_login
Пароль ssh_pass
УдаленныйПуть Sftp_path

Готовую библиотеку можно скачать тут.

Работа с компонентой во встроенном языке 1С

1. Выполняем подключение и создаем объект внешней компоненты, с помощью стандартных команд встроенного языка 1С.

2. Заполняем 4 свойства объекта компоненты Хост, Логин, Пароль, УдаленныйПуть.


3. Открываем сессию соединения


4. Отправляем файл


5. Отправляем следующий файл, с проверкой открыта ли сессия соединения.


6. После отправки файлов закрываем сессию

В результате выполнения успешно был передан файл с C:\data2.xml в /var/www/company/data/www/import/data.xml.

Вывод: данная реализация позволяет передавать файлы из 1С: Предприятие 8.2. большого размера по защищенному протоколу SFTP. Плюс появляется возможность переносить часть функционала из 1С во внешнюю компоненту, что защищает написанный код и позволяет реализовывать дополнительный, не доступный 1С функционал.

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