1С Расширение для работы с файлами. Конец.

«О, эфемерность! О, самое бессильное и позорное время в жизни моего народа – время от рассвета до открытия магазинов! Сколько лишних седин оно вплело во всех нас, в бездомных и тоскующих шатенов! Иди, Веничка, иди.»
Венедикт Ерофеев. Москва-Петушки.

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

И у меня для Вас плохая/хорошая новость. Расширения доступа к файлам 1С в брузерах (выпуска 2022 года) не дает записать файл на локальном диске.
Итак немного предыстории 2013 год: https://mista.ru/topic/679824

И таки да, так долго делать расширения для работы с файлам в браузере, переводить весь код из БСП на авто установку этого расширения, ломая простой код для тонкого и ТОЛСТОГО клиента и в результате через два года не работает запись файла на диск в веб-клиент с расширением.
Современное обсуждение: https://mista.ru/topic/896088

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

Главное не стоит беспокоиться!
Бесконтрольное чтение файлов с локального диска, скачивание файлов с помощью curl (Выполнение произвольного кода) прекрасно работает в вэб-клиенте с расширением от 1С.
Пример можно взять из описания функции БСП ФайловаяСистемаКлиент.ЗапуститьПрограмму

Причем, что самое интересное ПолучитьИмяВременногоФайла() недоступна из Web-клиента!

«О, эфемерность! О, тщета! О, гнуснейшее, позорнейшее время в жизни моего народа – время от закрытия магазинов до рассвета!..» «Ничего, ничего, Ерофеев..»
Венедикт Ерофеев. Москва-Петушки.

PostgreSQL не запускается служба

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

Оригинал статьи
PostgreSQL не запускается службаТензор-М Help.

Для начала нужно убедится что у папки PostgreSQL есть права необходимые для корректной работы базы данных. Если права папке выданы и служба все ещё не запускается то можно переходить к следующему шагу.
Следующий шаг это сбросить лог.

Для сброса лога:

1. Запустите командную строку (не от имени администратора).

2. Зайдите в папку «bin» (по умолчанию C:\Program Files (x86)\PostgreSQL\9.3\bin), найдите и перетащите pg_resetxlog.exe в командную строку, дописав в начале созданной строки «CD». Это нужно для того, чтобы перейти в нужную директорию. И нажмите ENTER.

3. Затем введите в команду pg_resetwal.exe -f «C:\Program Files (x86)\PostgreSQL\12.1\data» (где C:\Program Files\PostgreSQL\12.1\data — это путь по умолчанию).

4. После очистки лога запустите службу PostgreSQL. Если с первого раза служба не запустилась, то потребуется еще раз чистить и снова пробовать.

Если при первом вызове службы была ошибка:

pg_resetxlog: lock file «postmaster.pid» exists Is a server running? If not, delete the lock file and try again.

То удалите файл «postmaster.pid» (по умочанию C:\Program Files\PostgreSQL\9.3\data\postmaster.pid), чтобы сброс лога нормально отработал.

И немного лекций от 1С
Настройка и тонкости эксплуатации PostgreSQL для 1С

Можно Вам задать Вопрос асинхронно? А в 1С?

Обращение в службу поддержки 1С — Здравствуйте, а не подскажите где поставить флажок в 1С чтобы не переписывать функцию Вопрос на Ждать ВопросАсинх и убрать непонятную приставку Асинх из функций?

Ответ от телеграмм канала 1С:  «А что непонятного то? Уж куда проще, чем ОписаниеОповещения»…

 

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

Так почему же простая функция Вопрос в 1С вдруг стала Ждать ВопросАсинх, а до этого вообще непонятная реализация через ОписаниеОповещения(callback)?

1. С самого начала

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

Старая добрая Windows функция обработчик (Пример кода)

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

Как все аналогично как с 1С программированием? Модальный вызов функции MessageBox в терминах 1С?  Практически один в один код для 1С

Именно поэтому в терминологии 1С возникают такие понятия как модальные окна, которые скорее переходят в модальные вызовы и далее в не рекомендованные модальные вызовы. Это путь которым шла 1С.

 

2. Современный браузер

Если мы посмотрим на современный браузер, то там модальных диалоговых окон (модальных вызовов)  просто нет. Запрет на использование дополнительных окон. Тенденция изолирования вкладок. Это обосновано с точки зрения безопасности. Но реализовать визуально «модальный» диалог мы  можем через функцию обработчик событий. Делаем затемненным  затемненным всю остальную часть и специально выводим область для окна диалога в центр (Нажми — реализация диалога через callback)

Для каждой кнопки как и всегда описываем свой обработчик событий. Можно сделать общий обработчик для всех кнопок диалога. Вот 1С и предложила нам такой же подход когда ввела специальный объект ОписанияОповещения. Отдельно описываем функцию куда вернется результат выбора (Документаия от 1С). По сути создаем callback и делаем его обработчиком. Как же это совместимо с предыдущим подходом? Никак. Куча возмущений от 1С-ников и инфоповод разобраться.

Количество таких ОписанияОповещения (callback) обработчиков возрастает в приложении неимоверно, что ужасно влияет на читаемость и отладку кода. Это навызается callbackhell или АдОписалокОповещений.

 

3. Найти решение

Так как же нам просто сделать единый код без создания обработчиков событий для «модальных диалоговых окон»?
И тут явно 1С решило использовать новую конструкцию в браузерах :

И мы видим аналогичный код в 1С.

То есть 1С не изобрела ничего нового, но решила использоваться новыми стандартными языка javascript — promise. Шаг в правильную сторону, но в плане реализации задания интерактивного взаимодействия с пользователем по сути является некоторой надстройкой на надстройкой. Желание некоторых переписать весь код под новую конструкцию с полной точки зрения не является удовлетворительным.

Р.S. Для особо любознательных: Пример реализации для браузера
И для тех кто любит много слов — https://курсы-по-1с.рф/news/async-metods-article/

Ну пример в bootstrap как это сделать изменением стилей (где здесь асинхронность?): Пример диалоговых окон от bootstrap 5

Возрождение Эратосфена

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

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

В предыдущее обсуждение https://blog.sikuda.ru/?p=3188

Мы получили что скорость выполнение кода jvm, .net принципиальна выше скриптовых языков. Это и понятно. Но остался вопрос, почему скорость работы на jvm иногда падает в 10 раз, а иногда нет. И с какими настройками или механизмами это связано?

Углубляемся в документацию:

Виртуальные машины Java/Android выделяют объекты очень быстро. Сборка мусора также идет весьма быстро. Однако при выделении большого количества объектов за короткий промежуток времени можно столкнуться с проблемой под названием «перемешивание памяти» (memory churn). В таком случае виртуальная машина не будет успевать выделять объекты в таком темпе, а сборщик мусора – их утилизировать, и приложение начнет притормаживать, а в экстремальных случаях даже израсходует всю память.

https://habr.com/ru/company/piter/blog/497858/

И если мы попробуем выполнить java/kotlin алгоритм на телефоне:

Получаем на телефоне время выполнения 1-4 сек. Но мы совершенно безобразно используем память, выделяем огромный кусище и никак его не используем в дальнейшем и поэтому неудивительно, что иногда это приводит к нехватке памяти. Мы в телефоне с ограниченными ресурсами для всех, а не на десктопе. Мы конечно в манифесте  поставим параметр — android:largeHeap="true", это спасает на старых телефонах. Но сам факт выполнения на телефоне с ART быстрее , чем на десктопе с oscript, php, python и 1C говорит о многом.

Р.S. Исходник программы на Котлин(Android) — Эратосфен мобайл

 

Милая моя, где ты или геопозиционирование в 1С

Где я? Найти себя!

Настало время позаниматься мобильными приложениям в 1С. Начнет с простейшего — определение координат для приложения из модуля ‘СредстваГеопозиционирования’.

Всякий нормальный человек, когда хочет определить где он находится. Посмотрим по сторонам. Смотрит на некоторые таблички на домах. Посмотрит в свой мобильный. То первое есть совершит первое — некоторое длительные действия. Второе попытается определить свое местонахождение по нескольким источникам. И если второе вполне разумно, то длительный процесс с длительным зависание основного потока делают большинство начинающих программистов.

Как это стандартно в 1С

В 1С это ‘ОбновитьМестоположение’ при длительном определении — крутим колёсико — подвешиваем интерфейс ввода. Висим мы время зависимое от параметра этой функции. Если не определили за это время не беда возвратим неопределённое. Ну не могло ещё устройство определить координаты. Получается для надёжности многие делают это несколько раз из разных источников — в общем ждать приходится ещё больше.
ITS — https://its.1c.ru/db/v836doc#bookmark:dev:TI000000910

Возможный пример использования:

 

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

Как это стандартно для мобильных приложений

Блокировать основой поток приложения нельзя.

Мы можем запустить определение координат асинхронно и не ограничивая жестко времени но сильно заранее. Перед основным действием при котором нам точно надо будет определить координаты. Например вы делаете фотографию и Вам нужны координаты места фотографии.  Запускаем процесс определения гео-координат при начале съёмки.

Необходимо постоянно экономить электроэнергию.

Значит нам надо к моменту получения координат делать предварительные правильные действия, а потом правильные действия чтобы прекратить бурное потребление энергии. Записываем данные координаты например в реквизиты формы и можем продолжать обновлять координаты для более точной геолокации. Когда по бизнес логике надо закрывать форму и записывать данные, записываем вместе и координаты. И самое главное отключаем асинхронно определение координат, энергия на мобильном устройстве должна жёстко экономиться.

Пример использования:

Список сссылок:
https://its.1c.ru/db/v836doc#bookmark:dev:TI000000910
https://infostart.ru/public/256078/
https://habr.com/ru/post/210162/

Р.S. И под конец лошка дегтя в наш мед. Если мы берем телефон с Android Go то вышеприведенный код может вызывать вылет приложения 1С. Вы такого быть не может? Это просто у Вас мало опыта работы с разными SDK и под разным железом. И обязательно тестируйте приложение на тех телефонах на которых оно должно работать.

В общем пожелаю Вам спокойных ночей!

Импортозамещение с 1С Мобильное приложение.

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

Импортозамещение будем делать на примере 1С Мобильное приложение.
Купили тут дешевые телефоны HONOR 9S без Google-сервисов. Хотели использовать для 1С мобильного приложения. Казалось ничто не предвещало проблем. Но проблемы с определением местонахождения обнаружились сразу и очень жестко. В других моделях телефонов проблем не было. Сначала думали, можно будет немного подправить и все заработает.

Разбираем код 1С:

Долго копались, но ответ оказался неожиданным. Необходимо установить Google-сервисов или воспользоваться приложением типа GSpace. Запустить 1С внутри GSpace.
Спасибо https://forum.infostart.ru/forum92/topic261437/#message2645088
Вот такие сложное взаимозависимости оказалось. США накладывает санкции на китайские корпорации, а не работает русская 1С.

Решето или грехопадение Исполнителя 1С

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

Ну не мог я пройти мимо тестирования 1С executer и oscript — https://youtu.be/A1CedCgm1eA

Из документации 1С:
Язык «1С:Исполнителя» строго типизирован. У каждой переменной, параметра и метода, возвращающих значения, должны быть заданы типы или перечисление возможных типов через вертикальную черту «|» – нельзя передать переменную непредусмотренного типа.

И что мы имеем в Исполнителе с Массивом?
Новый Массив()
А в java на технологиях которого работает он:
ArrayList<Boolean>

Время работы исполнителя 216 сек, время oscript 97 сек, а jvm меньше 1 сек.

Для сравнения приведем что там реально на Диком Западе в динамической типизации?

Python3 27 сек

PHP7 19 сек

И вне конкурса — статическая типизация
JAVA меньше секунды

P.S. Комментарий от создателя Перфоленты

я уже понял, что достаточно флага «-XX:+UseParallelGC» что бы Джава быстро работала… в моём последнем тесте Джава, Шарп и Перфолента показали почти одинаковые результаты… +/- пару процентов…

То есть оптимизация сборщика мусора в задаче безумного использования огромного массива все расставляет на свои места.

2024 год. Ситуация меняется
1С 8.3.12 — 382 сек.
1С 8.3.22 — 518 сек
1С 8.3.25 — 523 сек
1С Executer 2020.2.5-23 U(JVM 17) — 50 сек
OneScript — 50 сек
1С Executer 5.2 U(JVM 17) — 28 сек
https://mista.ru/topic/895098

Блеск и нищета 1С JSON

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

Если вы используете JSON внутри 1C и очень любите из него грузить данные могу Вас порадовать — это делается очень быстро и сразу получаются объекты 1С

СерилиазоторXDTO.ЗаписьJSON(ЗаписьJSON);

Но могу Васи сильно огорчить, если вы попытаетесь загрузить то что нет в вашей конфигурации, скажем нет у нас справочника СекретныйСправочник

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

И прямой вылет программы 😉

Работа с дополнительными полями в Битрикс

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

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

Для того, чтобы получить в выборе значения дополнительных полей их надо указать UF_INN в параметре SELECT

Источники:
https://dev.1c-bitrix.ru/support/forum/forum6/topic36976/
https://dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LESSON_ID=3496&LESSON_PATH=3913.4776.4804.3496

Динамический список в 1С…

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

Доброе время суток!

Как же легко и просто создать в 1С динамический список, написать понятный запрос и проставить необходимые поля.Но с течением времени количество таблиц в запросе увеличивается в 2-4 раза, количество полей в таблице растет. А количество записей  растет очень быстро и за год может достигать миллиона и более в основной таблице.

И вот тут-то и начинается ОСОБЕННОСТИ работы динамических списков. Первоначальное открытие формы начинает висеть долго, но не у всех и не всегда. Но новые пользователи конечно же должны первоначально прождать минут 20 для получения первичных данных.

И тут приходит время «Доработать» эти списки…

Первое до чего хотят добраться руки — Убрать динамическое считывание данных.

Из its 1C: Динамическое считывание данных включено (рекомендуется) https://its.1c.ru/db/v8std#content:732:hdoc:_top:%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA

Но это позволит убрать долгое зависание при прокрутке списка.

Второе  это убрать загрузку кучи картинок привязной к этому списку, ну если до Вас этот список писали студенты на макете из трех документов…

Третье уже более существенное это вытащить все дополнительные данные в ПриПолученииДанныхНаСервере(https://wonderland.v8.1c.ru/blog/obrabotka-i-oformlenie-dannykh-dinamicheskogo-spiska/) чтобы разгрузить основной запрос.

Важно понимать, что по этим данным мы не может сортировать или отбирать строки списка.

 

В четвертых —  одно из самых  главных  это вставить отборы сразу в функцию ПриСозданииНаСервере — это уменьшит кардинально количество получаемых данных.

Кнопка выбора периода работает на фильтрацию полученных данных, лучше переопределить ее

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


&nbsp
И на некоторых версиях, если у Вас у одно и тот же списка скорость  прокрутки кардинально различается — то возможно Вам поможет очистка всех неиспользуемых отборов 😉