Файловая система из 1С, как это работает.

Доброго времени суток!

Долгое время, изучая изменения функций работы с файлами в 1С, я не понимал, что же нам предлагают. Нет, старый дубовый подход со времен 7.7 был прост и понятен. Но новый, «безмодальный», «асинхронный» и еще «Расширения для работы с Файлами» в браузере в принудительном варианте всегда вызывали вопросы. Пришло время разобраться.

Так что же мы имели раньше?

Для программиста получение информации о файле всегда сопровождалось работой с объектами файловой системы или функциями типа file_exists (в php) или Файл.Существует() (в 1С) — получаем сразу результат и пишем дальше алгоритм действий. Ведь просто же получим объект Файл, смотрим результат Файл.Существует() и в зависимости от результата делаем дополнительные действия:

Но с 2009 года в 1С стало все по-другому и теперь мы имеем встроенный метод НачатьПроверкуСуществования. И результат этой проверки мы получим не сразу, а уже внутри другой функции, специально указанной внутри вызова. Получается неудобно, длинно и непонятно где искать. Но так нам говорят необходимо для web. И маркетологи уже шепчут нам в ухо — это же асинхронно…

И вот тут у меня возникает диссонанс. То есть нам хотят сказать, что получение существования файла это длительный процесс запроса к удаленной системе и ожидание ответа от нее? Стоп, но на сервере не нужно никаких НачатьПроверку, там все прекрасно работает Файл.Существует().

Так как же нам работать (что делать)  и как во всем этом разобраться (кто виноват).

На первый вопрос практика и стальные нервы  принесут нас плоды успеха.

Для циклической проверки существования файлов мы используем зацикливание на себя типа:

Многие скажут, что стоит подождать еще немного и с 8.3.18 можно будет писать в циклах

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

Так что же нам предложили в 2009 году как прикладным программистам? Получается нам предложили callback, завернутый в ОписаниеОповешения(). И даже функции работы с обещаниями в 8.3.18 не меняют этой сути, а просто перепаковывают ее как программистам javascript свои callback-и.

 

В второе важное, будем разбираться.

В Web всегда была важна безопасность. Локальная файловая система отделена от доступа скриптов в браузере. Но 1С здесь решила сделать «все для пользователей» в результате при установке Расширений для работы с файлами, мы получаем доступ к локальной файловой системе. Да с подтверждением разрешения, но пускает и в техническом понимании это вызывает взрыв мозга.

Берем вот так просто и копируем выделенные файлы с сервера на указанную папку пользовательской машины в браузере.

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

 

А функция НачатьЗапускПриложения с доступностью в браузере заставляет сердце йокать и подозревать что-то сильно нехорошее.

 

 

Но главное же быть полезным, а не правдивым ведь правда 😉

И для ИСКЛЮЧИТЕЛЬНО для полезности предлагаю обработку для работы с файловыми системами клиента и сервера в виде всеми любимых двух панелей по типу FAR, Norton Commander. — https://infostart.ru/public/1295065/

Р.S.

Проблема в мобильной приложении это поиск корневых папок, Android это будет типа /storage/emulated/0 или другое специально подобранное и доступ опять такой как у всей платформы 1С. Возможность накосячить большая 😉

Воспроизведение звука в 1С. Доступно и всерьез. 8.3.14

Доброго времени суток!

С момента предыдущей публикации infostart.ru/public/248770/ прошло много времени. И честно говоря, если вы запустите старую обработку на  Windows 10 и новой платформе  8.3.14, то звук уже не будет воспроизводиться. За это время многие уже перебрались на платформу выше 8.3.14, а значит, и html поле теперь всегда новое и это не зависит от режима совместимости 😉 и режима классических форм. Все старое перестало работать! Значит, есть основание сделать мир лучше!

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

Прежде всего скажем, что будем использовать поле html, интернет стандарты это единственное, на чем можно основываться в нашем проприоритетном мире. И конечно если мы доделываем для Web клиента, то других вариантов у нас просто нет.

Итак начнем с самых основ звука в html5 и тега audio (https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_audio_all):

Проблема номер один ссылка на файл в контексте сервера. Где должен быть расположен файл по отношению сервера 1С, локального компьютера ил того подобного.

Ответ 1: полная ссылка на звуковой файл типа — https://blog.sikuda.ru/1c/sound1c.mp3 — ВСЕ ПРЕКРАСНО и для Вэб-клиента это пока единственный вариант.

Ответ 2: Прописывание звука в тело html типа — src=’data:audio/mpeg;base64 НЕ ПРОХОДИТ 1С клиент.

Ответ 3: Указание ссылки Адрес во временном хранилище у меня НЕ ЗАРАБОТАЛО.

Ответ 4: Использовать временные локальные файлы на клиенте file:// вместе с ПолучитьИмяВременногоФайла — РАБОТАЕТ даже в тонком клиенте.

 

И вторая проблема с которой я столкнулся, это однократное воспроизведение звука. Я так понял это проблема кэширования самой 1С html поля с этим сложно бороться. Простое решение работает если перезагружать страницу с кодом:

Ну а тем кто хочет использовать элементы управления звуком и не получить в стандартном 1С черный прямоугольник, рекомендую воспользоваться сторонним плеером (мне понравился https://plyr.io/#audio и вторая обработка)

Ну вот и все. Тестируем, критикуем, комментируем. Если найдете лучший метод не стесняйтесь рассказывайте.

Готовые обработки выложены на Infostart https://infostart.ru/public/1259789/

 

Как разнести простых толстых и web-клиентов на разные сервера 1С.

Доброго времени суток!

Добавляет функциональные требования для серверов.

Для толстых клиентов:

Для тонких и web клиентов:

 

 

И самое главное не забываем применить эти требования.

 

1С . Работа с Файлами раньше и завтра…

Доброго времени суток!

Вначале была Файл и файл был у системы 1С и файл был прост…
Загрузка файла:

Сохранение файла:

Но потом пришел Интернет и разделение локального контента и серверного у 1C. Поэтому ввели РасширениеДляРаботыСФайлами для браузеров как костыль для старой работы. И потом понеслось…

Привет ПоместитьФайл и пока с ошибкой совместимости…

Загрузка по новому которая пока работает https://infostart.ru/public/812886/
И улучшения https://wonderland.v8.1c.ru/blog/uluchshenie-raboty-s-faylami-v-veb-kliente

То есть все равно осталось две функции. Зачем?

А на javascript передача файла на сервер выглядит следующим образом:

Но не стоит расстраиваться, через некоторое время мы снова будем переписывать на новые функции

Проанализировав имеющиеся методы (ПолучитьФайл(), ПолучитьФайлы(), НачатьПолучениеФайлов()) мы решили ничего в них не менять, а просто отказаться от них. Вместо них мы сделали два новых асинхронных метода с понятными именами: НачатьПолучениеФайлаССервера() и НачатьПолучениеФайловССервера().

https://wonderland.v8.1c.ru/blog/unifikatsiya-metodov-raboty-s-faylami/?sphrase_id=168400

Сертификаты и httpСоединение из 1С

Доброго времени суток!

Если вы из 1С 8.3 подключаетесь: В корпоративной сети не забудьте параметр ИспользоватьАутентификациюОС = Истина. Иначе localhost может не работать.

И потом посылаете GET запрос

Если у Вас на тестовых серверах поставлены бесплатные простые сертификаты, ну как обычно. То строго:

 

 

 

Добавить, обновить сотрудников в Битрикс24

Доброго времени суток!

Пришла тут задача по обновлению сотрудников для Битрикс24 из 1С. Так как сами сотрудники переносились из Active Directory и Подразделения тоже не хотелось бы перетаскивать из-за несоответствия
То грузим по UserData(JSON) из POST запроса прямо из 1С(в файл _update1C.php):

И передающий код 1С из своей конфигурации

 

 

 

Python, pip и сертификаты

Доброго времени суток!

Если при запуске pip В увидели что-то вроде Fatal error in launcher: Unable to create process using ‘»d:\python37\python.exe» «C:\python3\Scripts\pip.exe» ‘
Это Вы переносили Python с другого компьютера
надо запускать python -m pip …

И далее если у Вас начинает ругать на сертификаты
Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by ‘SSLError(SSLCertVerificationError(1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)’))’: /simple/pyqt/

и далее Could not fetch URL https://pypi.org/simple/pyqt/

Надо указывать загрузку без проверки сертификата.
pip install —trusted-host=pypi.python.org —trusted-host=pypi.org —trusted-host=files.pythonhosted.org xlrd

Сделать резервную копию Битрикс? Да проще простого.

Доброго времени суток!

Если у вас не заработала восстановленная копия сайта Битрикс с локальной папки, Вы начинаете подозревать что резервная копия делается не всегда правильно.
Да это случается на больших сайтах, но зато стабильно.

Вот тут и начинаешь задумываться о параметрах выгрузки в Битрикс.

Стандартная 20 -1 не давала результата

Как описано тут https://web-aim.ru/blog/detail/Backup-problems-in-1%D0%A1-Bitrix/ попробовал 5/5 и о чудо действительно прошло на ура.

Вторая база выгрузилась с настройками 20/2 или это у же я перестраховался?

Отключаем NTML авторизацию на копии сайта Bitrix

Сделав копию корпоративного сайт, пытаемся его оживить и получаем переадресацию на порт 8890. Что это?

Это включена авторизация NLMT.

Намного колдовав и  найдя ответ в Интеренте 😉

Но затем надо преодолеть авторизацию и тут помогают жесткие методы SQL (есть доступ)
UPDATE b_user SET PASSWORD = MD5(‘123456’) WHERE ID=1;

Приятного всем тестирования!

Обновляем список пользователей по 1С в Битрикс

Доброго времени суток.

Возникла задача обновления пользователей на сайте Битрикс без стандартной загрузки из 1С.

Если отдельно Вы попытаетесь загрузить пользователей из 1С ЗУП то

  1. Они задвоятся
  2. Они попадут в новые подразделения, которые выгрузились из ЗУП

Как же найти то поле, которое отвечает за уникальность каждого элемента? После некоторых тестов выяснили, что это поле XML_ID у пользователей и подразделений. Оно равно уникальному идентификатору из 1С.

Напишем маленькие скрипты для тестирования:

Обязательный заголовок в страницу, чтобы понимались все внутренние объекты

Обновление поля XML_ID для подразделения id=475

Показ полей подразделения

Обновление поля для Пользователя id=2466

Показ полей пользователя

Ну и для красоты в конце

Ссылки: http://www.khtulhu.org.ua/veb-programmirovanie/590-bitriks-rabota-so-svojstvami-polzovatelya.html