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

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

Если Вы в 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С Мобильное приложение.
Купили тут дешевые телефоны 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 меньше секунды

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

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

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

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

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

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

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

Динамический список в 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
И на некоторых версиях, если у Вас у одно и тот же списка скорость  прокрутки кардинально различается — то возможно Вам поможет очистка всех неиспользуемых отборов 😉

 

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

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

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

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

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

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

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

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

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

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

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

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

Так что же нам предложили в 2009 году как прикладным программистам? Получается нам предложили callback, завернутый в ОписаниеОповешения(). И даже функции работы с обещаниями в 8.3.18 не меняют этой сути, а просто перепаковывают примерно как программисты javascript свои callback-и в promise. Но в отличие от Web вся остальная схема работы 1С осталась синхронной. Взаимодействие с сервером в 1С само синхронно — последовательно вызываются функции клиента и сервера, ответ у HTTPЗапрос — получаем последовательно. А ОписаниеОповещения повесили на клиента и функции взаимодействия с пользователем. Бардак в головах?

Нет не все функции в 1С будут прикрывать столь срамную реализацию. Есть и правильная тенденция в ПолучитьФайлССервера с несколькими Оповещениями(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 запрос

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