Выполнить команду powershell из 1с
В некоторых ситуациях может появиться необходимость выполнения некоторых команд от имени платформы 1С. Чаще всего это задачи по проверке доступа сервера 1С к определенному каталогу, проверить качество связи с каким-либо узлом, получить список запущенных процессов или служб и др. Все это можно сделать стандартными средствами администрирования, но иногда это не представляется возможным, или может занять значительно больше времени. Ведь не всегда администраторы считают своей проблемой то, что у 1Ски нет доступа и им нужно это доказать / показать / объяснить / обосновать. В этих случаях эта обработка может помочь, но с условием, что у Вас есть права в информационной базе для открытия внешней обработки или прикрепления ее в справочник дополнительных отчетов и обработок.
В конце демонстрации Выше была выполнена команда для завершения всех рабочих процессов (rphost). Никогда так не делайте на рабочем окружении! Это только для примера.
Инструмент ни в коем случае не является заменой стандартных средств администрирования, а лишь является небольшим дополнением к ним в особых случаях.
Проверено на 8.3.10, на всякий случай также на 8.3.6.
Основные возможности инструмента:
- Интерактивное выполнение произвольных команд / скриптов из 1С (поддерживается CMD и PowerShell).
- Привычное оформление консоли (почти).
- Защита от большинства причин зависаний с помощью таймаута выполнения (при выполнении "бесконечных" команд или ожидании интерактивных действий).
- Выбор контекста выполнения скрипта (на клиенте или на сервере).
- Сделано с душой :)
Только для тех, кто понимает что и для чего он делает. Метод "тыка" тут не приветствуется.
Примеры использования
Вот несколько примеров, для чего мне пригодилась обработка в свое время.
Получим настройки прав доступа на каталог.
В результате получим информацию о настроенных правах доступа.
Проверим доступ к узлу в сети.
И получим привычного вида информацию.
Конечно, это не решает полностью задачу проверки доступа узла в сети, но с чего-то же надо начинать.
Ни больше, ни меньше.
Простой скрипт для получения размера каталога сеансовых данных сервера 1С. Работает только для простых случаев, когда служба на сервере одна и каталог с сеансовыми данными находится по стандартному пути.
Всегда можно его поменять под собственные нужды.
Все зависит от конкретной ситуации и потребностей.
Если Вы случайно запустите скрипт, который требует интерактивных действий для завершения, то он, конечно, не будет выполнен. Вместо этого по истечению таймаута ожидания команды будет выдана ошибка.
Используйте так как Вам нужно!
Пока что все
Повторюсь, инструмент не является заменой стандартных возможностей для администрирования и должен использоваться только в особых случаях.
В случае, если к разработке будет интерес, то в будущем можно добавить поддержку Linux.
P.S. Если Вы дочитали до конца, то по возможности прошу написать интересен ли Вам PowerShell и стоит ли делать публикации по нему? Ваше мнение?
Авторские разработки
Анализ производительности APDEX - отчет для просмотра и анализа замеров производительности в конфигурациях на базе БСП.
Путеводитель по истории релизов - отчет по истории выпуска релизов продуктов фирмы "1С" и анализа информации по обновлениям.
Просмотр и анализ структуры базы данных (отчет на СКД) - отчет для просмотра и анализа структуры базы данных с поддержкой файловых баз (ограниченный режим), а также баз на SQL Server и PostgreSQL.
Просмотр и анализ журнала регистрации (отчет на СКД) - отчет на базе системы компоновки данных (СКД) для просмотра записей журнала регистрации.
Обозреватель криптографии - отчет для просмотра доступных провайдеров и сертификатов криптографии на сервере и клиенте.
Пакетная выгрузка / загрузка внешних отчетов и обработок - пакетная выгрузка / загрузка внешних отчетов и обработок для массовый манипуляций с ними.
Другие ссылки
Специальные предложения
PowerShell наше все!
(поклонникам OneScript не бить :))
(2) Я павершелл не смог осилить. Ну негуманоидный он, блин ((( (27) дело привычки, но без практики с ним можно и правда запутаться :) 3. Vladimir Litvinenko 2636 15.11.19 15:53 Сейчас в темеБыло бы классно увидеть в списке bash/sh. При установке git (mingw) даже на Windows-сервере bash уже будет доступен как другие инструменты командной стоки. А есть еще Linux Subsystem на Windows. Поддержка bash сделала бы инструмент более вездеходным, как впрочем и применяемые скрипты, а разработать и отладить работу с ним можно и без доступа к Linux.
Нет ли планов расширить функционал?
(3) у меня 80% времени - это работа с Windows, поэтому пока не стал на Linux портировать.
Но в конце публикации сделал ремарку, что если интерес будет к Linux, то сделаю.
Может на январских выходных "побалуюсь".
Что за особые случаи, когда штатного функционала не хватает?
(5) обычно это ситуации из разряда "мы все настроили, это Ваша 1С не работает" и приходится смотреть детальней.Чаще как-раз в связке со стандартными инструментами. отличная тема обязательно скачаю когда добавите bash
Ждать только до следующего года придется. (:
(12) а так можно будет ?cat Справочники.Контрагенты | grep ООО Ромашка
:)
Думаю, что сделаю, как на пенсию выйду :))))))
Просто скрипты и ничего больше. Т.к. разработка ориентирована на Windows была, то используется старый добрый WshShell для управления процессами, запуском скрипта, управление выводом и другим.
Зачем усложнять такую простую задачу. Для Linux потребуется уже другой подход.
Т.е. у Вас COM-объекты. Потому и спросил о том, что в основе.
Если не сложно - пожалуйста добавьте пару строк об этом, чтобы было сразу понятно. Командную строку, то пилить фигня. А повершел через активпош?
Или что-то свое?
Это как рассказать что умеете, но не сказать как. (19) выходит одноразовое использование? Результат программно использовать можно?
(20) Вы можете взять из обработки ту часть кода, что выполняет скрипт и делать с результатом все что посчитаете нужным.
У меня уже не разовое использование, поэтому обработка и появилась :)
(21) тогда осталось только в публикации упомянуть выше названное ограничение.Единственное не знаю использует ли скрипт как компонента, либо он в ядро винды вшит? (22) это не ограничение, а скорее незаявленная функциональность. В публикации об этом ни слова.
Юрий, отличный инструмент!
Пользуюсь подобным самодельным, очень выручает. Самый частый вариант использования - когда нужно что-то проверить или сделать на сервере, к которому нет доступа. Администраторы Заказчиков зачастую очень ревностно относятся к предоставлению доступа к серверам. При этом, добиться от них получения какой-то информации или, например, изменения настроек ТЖ, стоит каких-то неимоверных усилий и дней переписки. В таких случаях данный инструмент становится просто незаменимым. Разумеется, дальше всё зависит от прав пользователя, под которым работают процессы. Практически всегда это "стандартный" USR1CV8, создаваемый при установке Сервера.
Насчет PowerShell - несомненно интересно! На мой взгляд, очень недооцененный аспект работы. Позволяет многие действия заскриптовать. А также, сделать что-то, что по-другому или просто невозможно, или затруднительно, например Загрузка-выгрузка файлов по RDP с докачкой
(28) Благодарю на добром слове!
Подобные кейсы у меня также встречались.
Думал написать статью про использование PS для 1Сника. Может и сделать.
Самый частый вариант использования - когда нужно что-то проверить или сделать на сервере, к которому нет доступа.Т.е. Вы не ставя в известность админов заказчика (или вопреки их мнению) что-то делаете на серверах заказчиков :)?
И если что-то идет не так - оно само :)?
(31) это жесть, если менять конфигурацию сервера без согласования.
А проверить доступ к каталогу это вроде не страшно :)
А проверить доступ к каталогу это вроде не страшно :)Каталоги и разрешения к ним не возникают просто так :) Как правило - они необходимы для решения какой-либо задачи и их наличие и доступ к ним определенных аккаунтов известны заранее и должны-бы быть документированы.
В любом случае можно написать электронное письмо людям, которые отвечают за поддержку сервера. Я полагаю, что в 99% эти люди не звери и ответят на ваш запрос (если это не беспорядочные вопросы каждые 5 минут).
И если Вы не все в одном лице - надо работать в команде.
(33) вы не совсем поняли.
Админ пишет что доступ предоставлен, но все равно не работает. Он говорит что проблема в 1С. Вы проверяете доступ. Пишите админу.
Админ пишет что доступ предоставлен, но все равно не работает.В нормальной ситуации - вероятность того, что доступ не предоставлен стремится к нулю. Конечно все мы люди и можем ошибиться. Можно попросить перепроверить и прислать скриншот. Полагаю, что это не займет много времени и решит проблему.
Опять-таки нужно уметь/желать работать в команде и выстраивать отношения с коллегами. В конце концов, Вам могут при необходимости делегировать соответствующие привилегии. Т.е. Вы не ставя в известность админов заказчика (или вопреки их мнению) что-то делаете на серверах заказчиков :)?
И если что-то идет не так - оно само :)?
Юрий, мне не хотелось бы углубляться в диалог в предлагаемом Вами направлении, но всё же отвечу:
Любой инструмент можно использовать во благо или во зло. Скажем, топором можно что-то построить, а можно убить. К счастью, я знаю что, как и зачем я использую.
Если Администраторы адекватные, необходимости в таком подходе не возникает.
Но если для того, чтобы включить/изменить ТЖ на таком сервере, да еще и в нерабочее (для админов) время, нужно несколько дней переписки, у меня не остается другого выхода.
Если для того, чтобы проверить, есть ли со стороны сервера доступ к необходимому ресурсу (внешнему или внутри сети), например из-за того, что встали регламентные операции, опять требуется затяжная переписка, у меня нет другого выхода, кроме как использовать такой подход.
Примеры можно продолжать и продолжать..
Приведенные примеры - из разряда, когда ответственность за работу Системы несем мы (Подрядчик), но при этом все технические средства сосредоточены в руках Заказчика. На высшем уровне принято решение что все необходимые действия будут выполнять сотрудники Заказчика, потому что "безопасность". При этом те самые сотрудники Заказчика либо не обладают достаточными компетенциями, либо слишком заняты, либо просто игнорят просьбы.
Опять же, если "Администратор" (именно в кавычках) запустил службу сервера 1С с административными правами, из-за того, что что-то у него не получалось настроить, и я могу пользователем USR1CV8 сделать что-то "нехорошее", то вообще-то надо такого гнать.
На правильно настроенном сервере, пользователь процессов 1С не должен иметь возможности сделать "нехорошее". Но мне такие не попадались пока.
По поводу правильно настроенного сервера, рекомендую посмотреть доклад Антона Дорошкевича "Взломать за 60 секунд".
>И если что-то идет не так - оно само :)?
Обычно меня подключают, когда что-то уже пошло не так и нужно выяснить что, почему и когда.
PS. На "нормальных" проектах, где под нашу Систему строится полный контур с продуктивной, тестовой, разработочной зонами (при этом продуктивный и тестовый - это кластеры из нескольких серверов, плюс СУБД), эти сервера целиком находятся в моем ведении.
Подобного плана проблемы возникают на проектах, где в силу недостаточности ресурсов, начинаются совмещения вида "вот у нас уже есть сервер 1С, давайте мы просто туда добавим нужные базы и обслуживать будем сами".
Платформа 1С великолепна, замечательна и просто мощная. Обширный функционал доступен из коробки, а технология внешних компонент делает ее практически безграничной в части расширения возможностей. Но иногда.
Иногда все это не помогает и для достижения результатов, решения задачи - приходиться использовать сторонний софт. И ладно, если бы это были COM-объекты, которые хоть и являются устаревшей технологией, но до сих пор часто используются и даже получили некоторую вторую жизнь с последними событиями. Но есть и другой путь - запуск приложений напрямую из кода встроенного языка.
Сегодня мы поговорим о запуске приложений программным способом. А также о некоторых проблемах и способах их решений под Windows и Linux.
Часть подходов, которые будут описаны ниже, применяются в разработке "Командный интерпретатор для 1С", но скачивать ее для изучения не обязательно. Все есть здесь. Там лишь все это организовано в удобном виде для использования.
Исполни это
Причин, когда такое может понадобиться - много, очень много. Все их рассматривать точно не будем. Остановимся на одном простейшем примере - запуск команды ping, чтобы узнать доступность какого-либо ресурса в сети средствами 1С. Иногда еще ping запускают для эмулирования ожидания (метода Sleep), но мы такое извращение делать не будем :)
Наша задача - запустить какое-либо приложение с параметрами и получить результат его работы. И сделать мы это должны безопасным способом!
Последнее означает, что если запускаемое приложение зависнет, запросит интерактивных действий от пользователя (а на сервере мы ничем ему в этом случае помочь не сможем) или просто будет выполняться дольше выделенного для него времени, то мы должны завершить его работу и продолжить выполнение кода в обычном режиме и обработать исключение. Никому ведь не нужны зависшие сеансы 1С?
Мы рассмотрим несколько решений как для Windows, так и для Linux. И так, поехали.
My Little Windows
По классике, сначала мы сделаем плохо, а потом сделаем хорошо. Прежде чем начать дам несколько служебных функций, которые будут использоваться в примерах ниже.
Решения не идеальные, но простые. Например, там можно найти как сохранить файл в кодировке UTF-8 без BOM, получить путь к файлу PowerShell.exe и др. Решения всегда можно улучшать.
Плохой пример
И так, как обычно выполняется запуск приложений из кода встроенного языка? Правильно - с помощью процедуры "ЗапуститьПриложение()":
Первым параметром передаем строку команды запуска и параметры по необходимости. Во втором устанавливаем каталог, что не обязательно. Третий параметр позволяет дождаться завершения приложения, а четвертый получить код возврата. Обычно если код возврата не равен 0, значит что-то пошло не так.
Вариант рабочий и позволяет запускать большую часть команд и целых скриптов. Комментарии даны исчерпывающие. Используются только штатные возможности платформы 1С для выполнения команд. И это плюс. Но у этого подхода есть и большой минус - низкая надежность и непредсказуемость результата в тех случаях, когда точно не известно, как долго будет команда выполняться и не потребует ли приложение интерактивных действий пользователя. Если интерактивные действия потребуются на стороне сервера, где мы об этом даже и не узнаем, то сеанс 1С может подвиснуть на всегда.
В качестве решения может быть реализация таймаута выполнения команды, но для процедуры "ЗапуститьПриложение" такое реализовать практически невозможно. Можно, конечно, попробовать запустить приложение и ожидать файла-результата какое-то время, но это решит проблему частично. Зависания не будет, но приложение будет запущено и дальше, ожидая внешней команды.
WScript.Shell нас спасет
Мы же в среде Windows. Давайте используем ее средства в виде COM-Объекта "WScript.Shell":
Безопасный запуск команды / скрипта через WScript.ShellВот такая портянка для безопасного запуска приложений.
Если кратко, то для выполнения команды добавили таймаут. По истечении времени выполнения, приложение завершается и вызывается исключение.
Теперь приложение не зависнет и в случае чего мы сможем завершить его работу принудительно.
Мое имя Power, PowerShell
Пойдем дальше и сделаем наше решение более интересным. Что, если нам нужно запустить не простую команду CMD или BAT'ник, а команду или скрипт PowerShell, но на тех же условиях! Для примера опять же оставим запуск бесконечного пинга :)
Еще одна портянка кода, но куда без них.
Принцип тот же самый, что и в примере выше. Отличие находится в области "ПодготовкаСкриптаPowerShell", где выполняется подготовка скрипта PowerShell для запуска и установка необходимых параметров для приложения PowerShell.exe. Иначе параметры безопасности не дадут нормально запустить скрипт. Подробнее об этом читайте на MSDN.
Фактически, теперь можно запускать любые скрипты хоть CMD, хоть PowerShell. А если сильно хочется, то можно и GIT Bash под Windows использовать или даже подсистему WSL под Windows 10. Но все это уже другая история. Осталось поговорить про Linux.
*.nix is my own
Под *.nix привычнее всего использовать bash для выполнения команд. Можно ли использовать bash из встроенного языка платформы 1С? Да, можно. Можно запускать как отдельные команды, так и целые скрипты. При этом получать результат и, что самое главное, делать это безопасно как в примерах выше.
В далеком 2015 году на Mista была поднята тема "Запуск файлов *.sh в самой 1с". Возможно, информация ниже будет ответом на вопрос, т.к. точного ответа так там и нет. Но может быть я не прав :)
Запускаем bash-скрипты
Первое, что нужно понять - в Linux нет COM-объектов. Значит придется обойтись штатными средствами платформы 1С. Выглядеть это будет так:
Здесь мы устанавливаем произвольный текст команды для Bash и выполняем его. В чем то прием аналогичен тому, что мы делали для Windows. Комментарии даны полные, но на паре моментов остановимся подробнее.
Некоторые нюансы
Первое, что может показаться интересным - это вызов "dos2unix" для сформированного ранее файла скрипта. Зачем это нужно? В операционной системе Windows по умолчанию для переноса строк в файлах используется последовательность символов "\r\n" (перевод каретки + перенос строки). В Unix-подобных системах используется только символ переноса строки "\n". Для Windows символ перевода каретки был добавлен для того, чтобы в древние времена можно было отправлять на печать текст без каких-либо особых драйверов. Телетайп навсегда! Этот легаси остался и по сей день и никому не мешает, ну почти.
Нам же он может сильно помешать по двум причинам:
- Несмотря на то, что сервер 1С установлен под Linux - все равно стандартный перенос строки платформа формирует как "\r\n". Даже если для таких классов как "ЗаписьТекста" или "ТекстовыйДокумент" устанавливать символ переноса строки другой (например, Симполв.ПС или по коду символа переноса строки равному 10), то платформа все равно использует символ перевода каретки.
- Еще может быть ситуация, когда текст команды для выполнения передается с клиента под управлением Windows на сервер под Linux и символы перевода каретки будут там присутствовать.
Мешать они будут потому что Bash не понимает что с ними делать. Если в файле скрипта будет содержаться символ "\r", то мы получим ошибку:
Вот, например, обсуждение подобной проблемы. Так вот, с помощью команды "dos2unix" можно убрать все символы, несовместимые содержимым скрипта Bash и сделать его корректным. На скриншоте ниже показан пример преобразования содержимого скрипта. (Да, я использую Notepad++ даже в Linux, если Вы его узнали).
Конечно, тут есть минус - пакет "dos2unix" должен быть установлен на сервер. Сделать это проще простого. Вот так это, например, выглядит для Ubuntu:
Но это не единственная особенность. Для того, чтобы ограничить время выполнения команды мы используем штатные возможности - команду timeout. С ее помощью мы можем указать сколько времени выделяется для выполнения команды / скрипта.
В примере выше мы выполняем некоторый скрипт с таймаутом 10 секунд. Подробнее смотрите мануал :)
Теперь Вы можете запускать приложения, скрипты или команды с помощью Bash из Linux безопасным способом.
Скрытая угроза
Частным случаем запуска процессов небезопасным образом является использование COM-объектов. Не все COM-объекты порождают процессы, которые нужно контролировать. Но, например, всеми любимые Word и Excel, которые часто до сих пор ставят на сервера, делают именно так. Они запускают соответствующий процесс "word.exe" или "excel.exe" и дальше управляют им. Не говоря уже про чистоту использования лицензий (эта тема касалась здесь), это еще и не всегда безопасно с точки зрения работы этих приложений.
Тут все просто - в момент создания объекта документа для его обработки как-раз и создается процесс "word.exe". После завершения всех необходимых действий, метод "Quit" закрывает приложение и все работает как надо. Но что, если в момент выполнения алгоритма заполнения произойдет ошибка? Правильно, метод "Quit" не будет выполнен и процесс Word'а останется "висеть". Конечно, можно попытаться обезопасить себя как это рекомендует стандарт разработки 1С и добавить "попытку":
Тут мы пытаемся закрыть приложение и освободить все связанные ресурсы. Часть кейсов это решит, но, к сожалению, не все. Если, например, в момент работы с COM-объектом возникнет не исключение, а падение рабочего процесса, то никакие действия по освобождению ресурсов выполнены не будут и процесс останется висеть в памяти до перезагрузки сервера / компьютера. Ну или пока не будет "убит" принудительно.
К сожалению, при непредвиденном завершении рабочего процесса мы особо ничего не можем сделать для контроля завершения всех запущенных процессов из кода встроенного языка. Все-таки это нештатная ситуация и решать ее можно только нештатными средствами. Почти все "костыли" по этой теме дают сбои в той или иной степени.
А у Вас на сервере бывают ситуации с десятком запущенный процессов "excel.exe"? :)
Альтернативные подходы
В качестве многоточия для этой темы хотел бы упомянуть и альтернативные способы решения проблем с освобождением ресурсов запущенных из 1С процессов:
- Организовать bat/ps/bash скрипт, который будет ночью "убивать" определенные процессы. Например, те же "excel.exe". Костыль? Да. Работает? Да.
- Сохранять в базе 1С (например, в регистре сведений) информацию о запущенных процессах (идентификатор процесса, имя и др.). Ночью или в другое время запускать регл. задание, которое будет проверять завершение этих процессов. Костыль? Да. Работает? Да.
- Перезагружать сервер с периодичностью в несколько дней. О сколько проблем можно решить! :) Костыль? Да. Работает? Да :)))
Список можно продолжать и дальше. Но возможно правильным вариантом будет - поиск решения задач иным способом, а не запуском сторонних процессов. Если такое, конечно, возможно.
Удачи, друзья!
Всем чистого кода, хороших решений и меньше "костылей"! До следующих встреч!
А как Вы работаете со сторонними процессами из 1С?
Другие ссылки
-
- инструмент для выполнения команд CMD / PowerShell из 1С
Авторские разработки
Транслятор запросов 1С в SQL - инструмент для трансляции запросов платформы 1С в SQL, а также их диагностики.
Просмотр и анализ структуры базы данных (отчет на СКД) - отчет для просмотра и анализа структуры базы данных с поддержкой файловых баз (ограниченный режим), а также баз на SQL Server и PostgreSQL.
Просмотр и анализ журнала регистрации (отчет на СКД) - отчет на базе системы компоновки данных (СКД) для просмотра записей журнала регистрации.
История работы пользователей (отчет на СКД) - отчет для просмотра истории работы пользователей (СКД, просмотр для любого пользователя).
Экспорт журнала регистрации. Набор инструментов (приложения + исходный код) - набор инструментов для экспорта данных журнала регистрации во внешние хранилища для Windows и Linux. Готовые приложения и исходный код.
Путеводитель по истории релизов - отчет по истории выпуска релизов продуктов фирмы "1С" и анализа информации по обновлениям.
-
Помощник работы с идентификаторами объектов - инструмент для расширенного анализа идентификаторов объектов.
Анализ производительности APDEX (бесплатный) - отчет для просмотра и анализа замеров производительности в конфигурациях на базе БСП.
Обозреватель криптографии - отчет для просмотра доступных провайдеров и сертификатов криптографии на сервере и клиенте.
Пакетная выгрузка / загрузка внешних отчетов и обработок - пакетная выгрузка / загрузка внешних отчетов и обработок для массовый манипуляций с ними.
Мастер полнотекстового поиска - набор инструментов для работы с полнотекстовым индексом платформы 1С. Стандартные и расширенные возможности.
Командный интерпретатор для 1С - инструмент для выполнения команд CMD / PowerShell из 1С
Полезного тут наверно только метод скрытия окошка скрипта, это весь текст до "$connector = new-object -comobject "V81.COMConnector"", а все что после - это работа с 1С через COM - думаю уже не раз обсуждалось.
Может кому, что и пригодится, скрипт можно вставлять в планировщик например, или кинуть ярлык пользователю, чтоб одним щелчком запускалась заложенная процедура. Удачи всем!
P.S. Текст скрипта для гостей:
Специальные предложения
Отдельное спасибо за избавление от "чёрного окошка".
Просмотры 20428
Загрузки 36
Рейтинг 12
Создание 23.09.11 21:00
Обновление 26.09.11 11:27
№ Публикации 91715
Конфигурация Конфигурации 1cv8
Операционная система Не имеет значения
Страна Россия
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Не указано
Ключевую часть курса составляет практическая работа по командам над проектами. Управление ИТ-проектами. Agile: продвинутый курс по гибкому управлению проектами.См. также
Универсальная выгрузка/загрузка данных для отличающихся конфигураций (JSON, Такси+ОФ) Промо
Простой перенос через JSON данных между двумя базами 1С (документов, справочников, ПВХ, ПВР, счетов). Аналогична произвольной выгрузке в типовой "Выгрузка/загрузка XML", но может использоваться для отличающихся конфигураций. Подходит для любых пар баз с любым интерфейсом (управляемый + обычный). Без настроек. Не требует идентичности конфигураций и платформ. При переносе типы данных сопоставляются по наименованиям метаданных, объекты и ссылки по UID.
1 стартмани
22.10.2014 225238 4383 ekaruk 184
У вас "Ошибка преобразования данных XML" или "Error transforming XML data"? Решение
Рассмотрим варианты возникновения данной ошибки и рассмотрим способ решения, одной из причин.
2 стартмани
01.11.2021 992 0 markers 0
Восстановление РИБа, ошибки РИБ на управляемых формах, создание начального образа с файлами
Ошибка при вызове метода контекста (ПрочитатьИзменения): Данные принимаются от узла с другим набором расширений, меняющих структуру данных. Необходимо произвести перенос расширений конфигурации в узел. При выгрузки первоначального образа вылетает по не понятным причинам.
1 стартмани
22.10.2021 729 0 user1479207 0
Восстановление 1С РИБ (распределенная база) при проблемах обмена конфигураций и расширений
Работая с 1С РИБами в разных конфигурациях: типовых, переписанных, отраслевых, доработанных, с расширениями и пр. Неоднократно сталкивался с различными проблемами, связанными с обменом в распределенных узлах. Например, некорректно проходит обмен, не принимается обновления конфигурации, после обновления крашится база на расширении или на объекте конфигурации, либо просто перестает запускать в режим предприятия по какой то причине. На самом деле проблемы с распределенной базой возникают довольно часто, в данной статье рассмотрим самые основные, с которыми приходилось сталкиваться. Описанные методы никогда не подводили и всегда работали, что бы с базой ни случилось. Делюсь опытом, кому-то будет спасательным кругом.
1 стартмани
23.09.2021 1043 12 ClickUp 4
Соответствия объектов обмена Промо
Обработка позволяет проверять, исправлять ошибки, добавлять и удалять соответствия объектов в обменах данными между конфигурациями на основе «Комплексной автоматизации 1.1» или похожими конфигурациям. Подходит для обменов с использованием регистра сведений «СоответствиеОбъектовДляОбмена».
В некоторых ситуациях может появиться необходимость выполнения некоторых команд от имени платформы 1С. Чаще всего это задачи по проверке доступа сервера 1С к определенному каталогу, проверить качество связи с каким-либо узлом, получить список запущенных процессов или служб и др. Все это можно сделать стандартными средствами администрирования, но иногда это не представляется возможным, или может занять значительно больше времени. Ведь не всегда администраторы считают своей проблемой то, что у 1Ски нет доступа и им нужно это доказать / показать / объяснить / обосновать. В этих случаях эта обработка может помочь, но с условием, что у Вас есть права в информационной базе для открытия внешней обработки или прикрепления ее в справочник дополнительных отчетов и обработок.
В конце демонстрации Выше была выполнена команда для завершения всех рабочих процессов (rphost). Никогда так не делайте на рабочем окружении! Это только для примера.
Инструмент ни в коем случае не является заменой стандартных средств администрирования, а лишь является небольшим дополнением к ним в особых случаях.
Проверено на 8.3.10, на всякий случай также на 8.3.6.
Основные возможности инструмента:
- Интерактивное выполнение произвольных команд / скриптов из 1С (поддерживается CMD и PowerShell).
- Привычное оформление консоли (почти).
- Защита от большинства причин зависаний с помощью таймаута выполнения (при выполнении "бесконечных" команд или ожидании интерактивных действий).
- Выбор контекста выполнения скрипта (на клиенте или на сервере).
- Сделано с душой :)
Только для тех, кто понимает что и для чего он делает. Метод "тыка" тут не приветствуется.
Примеры использования
Вот несколько примеров, для чего мне пригодилась обработка в свое время.
Получим настройки прав доступа на каталог.
В результате получим информацию о настроенных правах доступа.
Проверим доступ к узлу в сети.
И получим привычного вида информацию.
Конечно, это не решает полностью задачу проверки доступа узла в сети, но с чего-то же надо начинать.
Ни больше, ни меньше.
Простой скрипт для получения размера каталога сеансовых данных сервера 1С. Работает только для простых случаев, когда служба на сервере одна и каталог с сеансовыми данными находится по стандартному пути.
Всегда можно его поменять под собственные нужды.
Все зависит от конкретной ситуации и потребностей.
Если Вы случайно запустите скрипт, который требует интерактивных действий для завершения, то он, конечно, не будет выполнен. Вместо этого по истечению таймаута ожидания команды будет выдана ошибка.
Используйте так как Вам нужно!
Пока что все
Повторюсь, инструмент не является заменой стандартных возможностей для администрирования и должен использоваться только в особых случаях.
В случае, если к разработке будет интерес, то в будущем можно добавить поддержку Linux.
P.S. Если Вы дочитали до конца, то по возможности прошу написать интересен ли Вам PowerShell и стоит ли делать публикации по нему? Ваше мнение?
Авторские разработки
Анализ производительности APDEX - отчет для просмотра и анализа замеров производительности в конфигурациях на базе БСП.
Путеводитель по истории релизов - отчет по истории выпуска релизов продуктов фирмы "1С" и анализа информации по обновлениям.
Просмотр и анализ структуры базы данных (отчет на СКД) - отчет для просмотра и анализа структуры базы данных с поддержкой файловых баз (ограниченный режим), а также баз на SQL Server и PostgreSQL.
Просмотр и анализ журнала регистрации (отчет на СКД) - отчет на базе системы компоновки данных (СКД) для просмотра записей журнала регистрации.
Обозреватель криптографии - отчет для просмотра доступных провайдеров и сертификатов криптографии на сервере и клиенте.
Пакетная выгрузка / загрузка внешних отчетов и обработок - пакетная выгрузка / загрузка внешних отчетов и обработок для массовый манипуляций с ними.
Другие ссылки
Специальные предложения
PowerShell наше все!
(поклонникам OneScript не бить :))
(2) Я павершелл не смог осилить. Ну негуманоидный он, блин ((( (27) дело привычки, но без практики с ним можно и правда запутаться :) 3. Vladimir Litvinenko 2636 15.11.19 15:53 Сейчас в темеБыло бы классно увидеть в списке bash/sh. При установке git (mingw) даже на Windows-сервере bash уже будет доступен как другие инструменты командной стоки. А есть еще Linux Subsystem на Windows. Поддержка bash сделала бы инструмент более вездеходным, как впрочем и применяемые скрипты, а разработать и отладить работу с ним можно и без доступа к Linux.
Нет ли планов расширить функционал?
(3) у меня 80% времени - это работа с Windows, поэтому пока не стал на Linux портировать.
Но в конце публикации сделал ремарку, что если интерес будет к Linux, то сделаю.
Может на январских выходных "побалуюсь".
Что за особые случаи, когда штатного функционала не хватает?
(5) обычно это ситуации из разряда "мы все настроили, это Ваша 1С не работает" и приходится смотреть детальней.Чаще как-раз в связке со стандартными инструментами. отличная тема обязательно скачаю когда добавите bash
Ждать только до следующего года придется. (:
(12) а так можно будет ?cat Справочники.Контрагенты | grep ООО Ромашка
:)
Думаю, что сделаю, как на пенсию выйду :))))))
Просто скрипты и ничего больше. Т.к. разработка ориентирована на Windows была, то используется старый добрый WshShell для управления процессами, запуском скрипта, управление выводом и другим.
Зачем усложнять такую простую задачу. Для Linux потребуется уже другой подход.
Т.е. у Вас COM-объекты. Потому и спросил о том, что в основе.
Если не сложно - пожалуйста добавьте пару строк об этом, чтобы было сразу понятно. Командную строку, то пилить фигня. А повершел через активпош?
Или что-то свое?
Это как рассказать что умеете, но не сказать как. (19) выходит одноразовое использование? Результат программно использовать можно?
(20) Вы можете взять из обработки ту часть кода, что выполняет скрипт и делать с результатом все что посчитаете нужным.
У меня уже не разовое использование, поэтому обработка и появилась :)
(21) тогда осталось только в публикации упомянуть выше названное ограничение.Единственное не знаю использует ли скрипт как компонента, либо он в ядро винды вшит? (22) это не ограничение, а скорее незаявленная функциональность. В публикации об этом ни слова.
Юрий, отличный инструмент!
Пользуюсь подобным самодельным, очень выручает. Самый частый вариант использования - когда нужно что-то проверить или сделать на сервере, к которому нет доступа. Администраторы Заказчиков зачастую очень ревностно относятся к предоставлению доступа к серверам. При этом, добиться от них получения какой-то информации или, например, изменения настроек ТЖ, стоит каких-то неимоверных усилий и дней переписки. В таких случаях данный инструмент становится просто незаменимым. Разумеется, дальше всё зависит от прав пользователя, под которым работают процессы. Практически всегда это "стандартный" USR1CV8, создаваемый при установке Сервера.
Насчет PowerShell - несомненно интересно! На мой взгляд, очень недооцененный аспект работы. Позволяет многие действия заскриптовать. А также, сделать что-то, что по-другому или просто невозможно, или затруднительно, например Загрузка-выгрузка файлов по RDP с докачкой
(28) Благодарю на добром слове!
Подобные кейсы у меня также встречались.
Думал написать статью про использование PS для 1Сника. Может и сделать.
Самый частый вариант использования - когда нужно что-то проверить или сделать на сервере, к которому нет доступа.Т.е. Вы не ставя в известность админов заказчика (или вопреки их мнению) что-то делаете на серверах заказчиков :)?
И если что-то идет не так - оно само :)?
(31) это жесть, если менять конфигурацию сервера без согласования.
А проверить доступ к каталогу это вроде не страшно :)
А проверить доступ к каталогу это вроде не страшно :)Каталоги и разрешения к ним не возникают просто так :) Как правило - они необходимы для решения какой-либо задачи и их наличие и доступ к ним определенных аккаунтов известны заранее и должны-бы быть документированы.
В любом случае можно написать электронное письмо людям, которые отвечают за поддержку сервера. Я полагаю, что в 99% эти люди не звери и ответят на ваш запрос (если это не беспорядочные вопросы каждые 5 минут).
И если Вы не все в одном лице - надо работать в команде.
(33) вы не совсем поняли.
Админ пишет что доступ предоставлен, но все равно не работает. Он говорит что проблема в 1С. Вы проверяете доступ. Пишите админу.
Админ пишет что доступ предоставлен, но все равно не работает.В нормальной ситуации - вероятность того, что доступ не предоставлен стремится к нулю. Конечно все мы люди и можем ошибиться. Можно попросить перепроверить и прислать скриншот. Полагаю, что это не займет много времени и решит проблему.
Опять-таки нужно уметь/желать работать в команде и выстраивать отношения с коллегами. В конце концов, Вам могут при необходимости делегировать соответствующие привилегии. Т.е. Вы не ставя в известность админов заказчика (или вопреки их мнению) что-то делаете на серверах заказчиков :)?
И если что-то идет не так - оно само :)?
Юрий, мне не хотелось бы углубляться в диалог в предлагаемом Вами направлении, но всё же отвечу:
Любой инструмент можно использовать во благо или во зло. Скажем, топором можно что-то построить, а можно убить. К счастью, я знаю что, как и зачем я использую.
Если Администраторы адекватные, необходимости в таком подходе не возникает.
Но если для того, чтобы включить/изменить ТЖ на таком сервере, да еще и в нерабочее (для админов) время, нужно несколько дней переписки, у меня не остается другого выхода.
Если для того, чтобы проверить, есть ли со стороны сервера доступ к необходимому ресурсу (внешнему или внутри сети), например из-за того, что встали регламентные операции, опять требуется затяжная переписка, у меня нет другого выхода, кроме как использовать такой подход.
Примеры можно продолжать и продолжать..
Приведенные примеры - из разряда, когда ответственность за работу Системы несем мы (Подрядчик), но при этом все технические средства сосредоточены в руках Заказчика. На высшем уровне принято решение что все необходимые действия будут выполнять сотрудники Заказчика, потому что "безопасность". При этом те самые сотрудники Заказчика либо не обладают достаточными компетенциями, либо слишком заняты, либо просто игнорят просьбы.
Опять же, если "Администратор" (именно в кавычках) запустил службу сервера 1С с административными правами, из-за того, что что-то у него не получалось настроить, и я могу пользователем USR1CV8 сделать что-то "нехорошее", то вообще-то надо такого гнать.
На правильно настроенном сервере, пользователь процессов 1С не должен иметь возможности сделать "нехорошее". Но мне такие не попадались пока.
По поводу правильно настроенного сервера, рекомендую посмотреть доклад Антона Дорошкевича "Взломать за 60 секунд".
>И если что-то идет не так - оно само :)?
Обычно меня подключают, когда что-то уже пошло не так и нужно выяснить что, почему и когда.
PS. На "нормальных" проектах, где под нашу Систему строится полный контур с продуктивной, тестовой, разработочной зонами (при этом продуктивный и тестовый - это кластеры из нескольких серверов, плюс СУБД), эти сервера целиком находятся в моем ведении.
Подобного плана проблемы возникают на проектах, где в силу недостаточности ресурсов, начинаются совмещения вида "вот у нас уже есть сервер 1С, давайте мы просто туда добавим нужные базы и обслуживать будем сами".
Читайте также: