Передача данных между сеансами и Повторное использование значений между сеансами

Публикация № 844632 09.06.18

Разработка - Механизмы платформы 1С

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

Про повторное использование значений в рамках одного сеанса сказано уже достаточно. Давайте подумаем, как сделать то же самое, но глобально для ИБ в рамках всех сеансов. Спойлер: без вэб-сервера ничего не получится.

Upd: Внимание! Приведенный метод не является универсальным инструментом на все случаи жизни и имеет существенные ограничения. Прежде чем пилить код - обязательно читайте главу "Update: Потокобезопасность"

В чем проблема

Банальная инициализация параметров какого-то длительного фонового действия может занимать по нескольку секунд. А если это действие распараллелить - то с ростом производительности за счет многопоточной обработки - мы получим рост издержек на инициализацию параметров. Даже в пользовательских сеансах встречаются операции а-ля получения каких-то значений по-умолчанию, продолжающихся достаточно длительное время. Особой проблемы в рамках одного сеанса это как правило не представляет, но если 200 сеансов "долбят" базу данных одними и теми-же вопросами - это уже становится ощутимо.

Согласитесь, было бы здорово прочитать, например, параметры обмена данными один раз и использовать их дальше из оперативной памяти. В общем то такое уже встречается сплошь и рядом: в типовой УТ наверно сотня модулей с повторным использованием возвращаемых значений. Но есть проблема: все это работает только в рамках одного сеанса и у нас нет средства для передачи данных между сеансами (кроме разве что базы данных, но ее использование в этом качестве само по себе является анти-паттерном)

Надо сказать, что в части случаев разделение возвращаемых значений по сеансам действительно оправдано: никто не даст гарантии, что одному пользователю доступны, например, те же склады, что и второму. Или организация по умолчанию у них одинаковая. Но есть и другие ситуации: например, ответственные лица организации от сеанса к сеансу никак не изменятся (сама организация может быть недоступна, но если уж у тебя спрашивают список ответственных лиц по этой организации - двух ответов тут быть не может). Как и правила регистрации объектов, часто используемые классификаторы и т.д.

Решение

С версии 8.3.9 в платформе появилась возможность "завесить" один сеанс и обращаться к нему со всякими дурацкими вопросами с HTTP запросами. Как и в любом другом сеансе, результаты вызова функций можно кэшировать с помощью платформенной функциональности повторного использования возвращаемых значений. Сам механизм предназначен конечно несколько для другого, но для нашей цели тоже вполне применим.

Схематично все это можно изобразить так:

Таким образом, мы как-бы "заворачиваем" вызовы из разных сеансов в один посредством REST сервиса, а в нем уже используем штатную функциональность модулей с повторным использованием возвращаемых значений.

Детали

Для того, чтобы все это взлетело - необходимо создать HTTP сервис и установить в нем параметр Повторное использование сеансов в значение Использовать автоматически. Время жизни сеанса устанавливайте по своему усмотрению, у меня стоит 2.592.000 (месяц). Будьте внимательны: это не время жизни сеанса, это время бездействия сеанса, после которого он будет завершен. Дополнительно, в файле default.vrd (файл описания сервиса, лежит в папке публикации) необходимо установить параметр poolSize="1". Все это вполне легальные действия, никакой партизанщины.

Далее, варианты могут быть разными, вы можете писать какие-то специфичные функции установки и чтения параметров, но в случае написания универсальной процедуры, "оборачивающей" любую процедуру в повторно-используемую оболочку - получится следующее.

Программный интерфейс:

Функция ВыполнитьСПовторнымИспользованием(ИмяМетода, МассивПараметровМетода) Экспорт
    
    ПараметрыСоединения = ПараметрыСоединенияСЭтойБазой();
    
    HTTPСоединение = Новый HTTPСоединение(ПараметрыСоединения.Сервер, ПараметрыСоединения.порт, ПараметрыСоединения.Пользователь, ПараметрыСоединения.Пароль);
    
    HTTPЗапрос = Новый HTTPЗапрос(ПараметрыСоединения.АдресРесурса);
    
    ПараметрыВызова = Новый Структура();
    ПараметрыВызова.Вставить("ИмяМетода", ИмяМетода);
    ПараметрыВызова.Вставить("МассивПараметров", МассивПараметровМетода);
    HTTPЗапрос.УстановитьТелоИзСтроки(XMLСтрока(Новый ХранилищеЗначения(ПараметрыВызова)));
    
    HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
    
    Если HTTPОтвет.КодСостояния = 200 Тогда
        ТекстОтвета = HTTPОтвет.ПолучитьТелоКакСтроку();
        Возврат XMLЗначение(Тип("ХранилищеЗначения"), ТекстОтвета).Получить();
    Иначе
        ВызватьИсключение HTTPОтвет.ПолучитьТелоКакСтроку();
    КонецЕсли;
    
КонецФункции

Функция ПараметрыСоединенияСЭтойБазой()
    
    ПараметрыСоединения = Новый Структура();
    
    ПараметрыСоединения.Вставить("Сервер", "127.0.0.1");
    ПараметрыСоединения.Вставить("Порт", 8008);
    ПараметрыСоединения.Вставить("Пользователь", "Справочная");
    ПараметрыСоединения.Вставить("Пароль", "123");
    ПараметрыСоединения.Вставить("АдресРесурса", "/TM/hs/Reference/GetReference");
    
    Возврат ПараметрыСоединения;
    
КонецФункции

Здесь параметры соединение введены хардкодом, что как бы не очень хорошо, но если мы будем делать все по-правильному и читать их каждый раз из БД - эффект от повторного использования возвращаемых значений может быть существенно снижен.

Метод сервиса:

Функция GetReference(Запрос)
    
    ПараметрыСтрока = Запрос.ПолучитьТелоКакСтроку();
    
    СтруктураПараметров = XMLЗначение(Тип("ХранилищеЗначения"), ПараметрыСтрока).Получить();
    
    Если СтруктураПараметров.МассивПараметров.Количество() = 0 Тогда
        ВозвращаемоеЗначение = СправочнаяСлужебныйПовтИсп.ПовторноИспользуемыйМетод0(СтруктураПараметров.ИмяМетода);
    ИначеЕсли СтруктураПараметров.МассивПараметров.Количество() = 1 Тогда
        ВозвращаемоеЗначение = СправочнаяСлужебныйПовтИсп.ПовторноИспользуемыйМетод1(СтруктураПараметров.ИмяМетода, СтруктураПараметров.МассивПараметров[0]);
    ИначеЕсли СтруктураПараметров.МассивПараметров.Количество() = 2 Тогда
        ВозвращаемоеЗначение = СправочнаяСлужебныйПовтИсп.ПовторноИспользуемыйМетод2(СтруктураПараметров.ИмяМетода, СтруктураПараметров.МассивПараметров[0], СтруктураПараметров.МассивПараметров[1]);
    ИначеЕсли СтруктураПараметров.МассивПараметров.Количество() = 3 Тогда
        ВозвращаемоеЗначение = СправочнаяСлужебныйПовтИсп.ПовторноИспользуемыйМетод3(СтруктураПараметров.ИмяМетода, СтруктураПараметров.МассивПараметров[0], СтруктураПараметров.МассивПараметров[1], СтруктураПараметров.МассивПараметров[2]);
    /// тут дальнейшая идея думаю понятна...
    Иначе
        Ответ = Новый HTTPСервисОтвет(500);
        Ответ.УстановитьТелоИзСтроки("Количество параметров более 9 не поддерживается");
        Возврат Ответ;
    КонецЕсли;
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки(XMLСтрока(Новый ХранилищеЗначения(ВозвращаемоеЗначение)));
    Возврат Ответ;
    
КонецФункции

Функции повторно-используемого модуля:

Функция ПовторноИспользуемыйМетод0(ИмяМетода) Экспорт
    
    Возврат Вычислить(ИмяМетода);
    
КонецФункции

Функция ПовторноИспользуемыйМетод1(ИмяМетода, Параметр1) Экспорт
    
    Возврат Вычислить(ИмяМетода + "(Параметр1)");
    
КонецФункции

Функция ПовторноИспользуемыйМетод2(ИмяМетода, Параметр1, Параметр2) Экспорт
    
    Возврат Вычислить(ИмяМетода + "(Параметр1, Параметр2)");
    
КонецФункции

Функция ПовторноИспользуемыйМетод3(ИмяМетода, Параметр1, Параметр2, Параметр3) Экспорт
    
    Возврат Вычислить(ИмяМетода + "(Параметр1, Параметр2, Параметр3)");
    
КонецФункции

/// и так далее...

Подводные камни

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

  • Первый вызов (в рамках которого происходит инициализация общего сеанса) в моем случае длится около 1 секунды. Этот параметр зависит от того, что у вас за конфа. У меня УТ 11.3.
  • Последующие вызовы, которые не инициализируют сеанс, а обращаются к уже готовому, занимают 0,015 - 0,02с, что вполне неплохо (это только время самой сетевой транзакции, если будет выполняться трехэтажный запрос - реальное время будет больше). Но я подозреваю, что тут все сильно зависит от сетевой архитектуры.

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

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

Дополнительные возможности

В рассмотренном случае, механизм повторного использования сеанса REST сервиса используется для получения функциональности повторного использования возвращаемых значений между сеансами, но это не единственная возможность. Видится возможным использовать этот механизм для организации других видов межсеансового взаимодействия, например:

  • передача данных между сеансами
  • хранение актуальных состояний и управление общим оборудованием, например, одним фискальником на несколько рабочих мест
  • управление соединением с другой ИБ (иметь COM-коннект в одном сеансе и использовать его из остальных)

И не стоит забывать, что все это будет работать только в версии 8.3.9 и выше. Удачи!

Update: Потокобезопасность

Комментарий Юрия Дешина подтолкнул меня к, как теперь кажется, очевидной мысли: заворачивание вызова нескольких сеансов в один, при некоторых обстоятельствах может привести к образованию очереди и массовому отказу в обслуживании вызовов. Так, пока сеанс Х выполняет какие-то вычисления, "заказанные" сеансом 1, сеанс 2 не сможет получить никакие данные (в том числе ранее закэшированные) от сеанса Х. При этом сеанс 2 будет "висеть", пока не будет достигнут тайм-аут (параметр poolTimeout в файле default.vrd), по достижении тайм-аута будет возвращен ответ 500.

В общем, как обычно, когда кто-то встает и спрашивает "а что там с потокобезопастностью?" - все становится сильно сложнее чем было до этого. Но это не значит, что задавать такие вопросы не нужно.

Что же нам со всем этим делать?

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

Во-вторых, можно наметить следующие пути снижения рисков образования очереди в высоконагруженных системах:

  1. Не использовать универсальных обработчиков, которые отвечают сразу за все (например такие, как описано выше). Т.е. если сервис будет отвечать и за расчет себестоимости и за соединение с соседней базой по COM - неизбежно будут возникать ситуации, когда мы не можем подключиться к соседней базе, потому что считаем себестоимость в этой (я утрирую, но мысль думаю понятна). Однако, если мы примем концепцию типа "одно значение - один сервис", то все будет логично: пока значения нет - все сеансы сидят и ждут когда оно появится. Появилось значение - раздали его всем.
  2. Увеличивать число сеансов, раздающих значения. (параметр poolSize в файле default.vrd). Это экстенсивный путь, но до какой-то степени его можно считать рабочим, поскольку такое решение позволит избежать завешивания: при занятости одного сеанса - платформа автоматически переключит вызов на второй, третий, пятый и т.д., но в этом случае значение вычисленное в сеансе Х1 не будет доступно в сеансе и Х2 и будет вычисляться там заново. Можно думать об этом примерно так: все значения кэшируются в сеансе Х1, но он может быть недоступен, в этом случае вызов будет обработан сеансом Х2 (Х3...Хn), но значение будет вычислено заново.
  3. Городить более сложные схемы взаимодействия с кэширующими сеансами, при которых использование сервиса сильно усложнится, но и вероятность получить отказ будет минимальной. Например такую:

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

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

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Lem0n 406 09.06.18 10:47 Сейчас в теме
эту задачу решает РС с измерениями: имя метода, хеш параметров, и ресурсом хранилищем + все названные ограничения снимаются(остается только ограничение на несериализуемые данные)
3. Lem0n 406 09.06.18 11:13 Сейчас в теме
(2)
1. Британские ученые
2. Сокеты, а не http протокол
Проверить бы все на реалиях 1С
4. m-rv 951 09.06.18 11:19 Сейчас в теме
(3)
1. а вы считаете себя умнее?
2. such as sockets
так кто ж мешает то?
jONES1979; +1 Ответить
5. пользователь 09.06.18 11:28
Сообщение было скрыто модератором.
...
6. awk 738 09.06.18 16:41 Сейчас в теме
7. t.v.s. 107 09.06.18 17:36 Сейчас в теме
Плюсик за идею, возьму на вооружение
Оффтоп
8. blackhole321 1274 09.06.18 19:33 Сейчас в теме
У Вас в качестве примера доп. возможностей приведена возможность использования com объектов. Как будут обстоять дела с потокобезопасностью?
Или все сводится к последовательным вызовам в одном сеансе, т.е. по сути это один поток выполнения?
m-rv; kote; +2 Ответить
10. m-rv 951 12.06.18 09:31 Сейчас в теме
(8) Спасибо за комментарий, дополнил статью (раздел Потокобезопасность)
9. zeegin 104 09.06.18 21:53 Сейчас в теме
Согласитесь, было бы здорово прочитать, например, параметры обмена данными один раз и использовать их дальше из оперативной памяти.


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

Все это решение - антипаттерн. Не следует кешировать данные в целом, просто потому что не следует вообще кешировать данные вне сеанса.

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

В целом утверждение, что повторно используемые модули кешируются на время сенаса - ложь. Время жизни 20 минут, но в некоторых случаях 6 минут.

Попытка кэшировать через HTTP сервер - хорошая идея, но глупая. Время жизни сенасов HTTP контроллируется только с версии 8.3.10 и по умолчанию соединение может повторно использоваться только 20 секунд. Фактически вы кеш с 20 минут изменили на 20 секунд.

Кроме того многие повторно используемые модули могут зависит от прав пользователя, которые рассчитаны для конкретного сеанса, кеширование таких значений для базы потенциально приводит к проблемам.
wowik; PLAstic; asdf_88; anchovy; a_titeev; max_st; CSiER; +7 1 Ответить
11. Pixar0000 12.06.18 13:45 Сейчас в теме
(9) еще дописать RLS на кешируемые данные )))
идея, голой воды идея, но автору за то, что расписал - респект
12. SShipilov 25.06.19 11:09 Сейчас в теме
(9)
Ingvar, очень категорично отзываетесь. Да, автор не описал некоторые важные моменты в реализации решения, например особенности публикации отдельных http-сервисов для такого решения.
Однако решение всё-таки отличное для ряда случаев. Например:
- когда в определенный период времени сервис должен выдавать заполненную страницу с фиксированными данными,
- на сторону сервиса для выполнения запроса часто поступает набор одинаковых параметров;
Действительно нет смысла заполнять страницу сначала по каждому такому запросу. Поэтому аргумент
Не следует кешировать данные в целом, просто потому что не следует вообще кешировать данные вне сеанса.
совсем не уместен.

Относительно времени "жизни" конкретного кэшированного значения в рамках сеанса - вы высказались верно. В таких случаях действительно придет на помощь временное хранилище. А вот сеанс, который обслуживает наш сервис можно подерживать дополнительными запросами со стороны, например через регламентное задание. Лучше мелкие вызовы для поддержки сеанса, чем заполнение данных.

Требование к безопасности, понимание потенциальной зависимости кэшированных данных от прав пользователя, а также методика хранения данных по конкретному запросу, полностью на совести разработчика. Но это тема вовсе для другой статьи.
Прикрепленные файлы:
Оставьте свое сообщение

См. также

Методы работы с универсальным отчетом в подсистеме "Варианты отчетов" на БСП

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данной статье рассмотрим типовую подсистему "Варианты отчетов" БСП на примере применения в универсальном отчете любой современной конфигурации.

30.05.2023    2259    quazare    4    

72

Расширение глобального поиска 1С, или Глобальный поиск "на максималках"

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Мало кто знает, что поле "Глобального поиска" в 1С можно доработать. Добавить свои варианты поиска, кнопочки в результатах и даже целые пользовательские меню.

27.03.2023    4325    SeiOkami    9    

121

Версионирование объектов VS История данных

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Давайте разберемся в механизме «История данных» и поэкспериментируем для наглядности. Сравним «Версионирование объектов» и «Историю данных».

06.03.2023    6139    dsdred    37    

126

Идентификатор объекта в запросе. Вы этого хотели?

Запросы Механизмы платформы 1С Платформа 1С v8.3 Запросы Бесплатно (free)

В платформе 8.3.22 появилась возможность получать идентификатор в запросе. Лично я ждал этого давно, но по итогу ждал большего. Что не так?

12.01.2023    13749    dsdred    17    

68

Практическая шпаргалка по новым возможностям языка запросов 1С

Механизмы платформы 1С Запросы Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

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

21.11.2022    16563    quazare    34    

113

1С и Unicode

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Разбираемся, как 1С работает с текстом и отдельными символами в контексте Unicode.

05.09.2022    4895    Irwin    30    

80

Шпаргалка по функциям АСИНХ

Механизмы платформы 1С Платформа 1С v8.3 Россия Бесплатно (free)

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

29.07.2022    17829    zeltyr    17    

151

Быстрое обновление базы 1С из XML-файлов конфигурации (EDT-GIT)

DevOps и автоматизация разработки EDT Обновление 1С Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Быстрое обновление конфигурации и базы данных 1С, вместо долгого обновления из EDT (1C:Enterprise Development Tools) при использовании хранилища GIT. Непосредственное обновлении базы на сервере баз данных (минуя сервер 1С) из XML-файлов конфигурации при помощи утилиты автономного сервера 1С - ibcmd.

1 стартмани

13.07.2022    9460    7    Bitnikov    19    

51

Экспертный кейс. История расследования одного небыстрого закрытия месяца в 1C:ERP. Пример неочевидных путей расследования в виде детективной истории

HighLoad оптимизация Механизмы платформы 1С Запросы Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

В данной статье хотим рассказать об одном нашем непростом расследовании, в котором удалось собрать сразу несколько проблем на разных уровнях инфраструктуры заказчика и изначальной методологии ведения учета. Само расследование в какой-то момент стало напоминать детективную историю, с роялями в кустах, ошибками платформы, странным поведением пользователей и магическим поведением хорошо знакомых механизмов. Но мы реалисты, поэтому все проблемы были выявлены и устранены ;)

11.07.2022    5831    it-expertise    27    

57

Последовательность выполнения расширений

Механизмы платформы 1С Бесплатно (free)

Вынес в отдельную статью порядок применения нескольких расширений для одного метода

23.06.2022    4842    kuzyara    7    

58

Точка останова с условием. Приемы и хитрости использования

Механизмы платформы 1С Платформа 1С v8.3 Абонемент ($m)

“Точка останова с условием“ - применима в самых разнообразных ситуациях, и грамотное её применение экономит много времени разработчика 1С.

1 стартмани

10.06.2022    5319    Onwardv    8    

58

Динамическое обновление - это зло?

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Копнем глубже в тему "Что же такое динамическое обновление" и почему оно может привести к проблемам. И может ли?

09.05.2022    18584    Infostart    80    

229

Отборы динамического списка

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Динамический список предоставляет несколько объектов "Отбор". В статье разбирается, какой для чего нужен и как их использовать на форме. Рассматриваются только возможности платформы (без БСП).

28.03.2022    29888    Gladkov_Anton    7    

74

Фишки платформы 1С 8.3 для начинающего разработчика

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

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

11.03.2022    11274    Dimbayyyy    98    

61

Использование флажков в динамических списках 2.0

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Пример реализации динамического списка с пометками в режиме множественного и единичного выбора.

1 стартмани

13.01.2022    12493    34    mr_sav    31    

53

Стек технологий для 1С

Инструментарий разработчика Рефакторинг и качество кода Групповая разработка (Git, хранилище) Механизмы платформы 1С Бесплатно (free)

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

29.11.2021    32596    mrXoxot    63    

429

Несколько простых приемов для удобной работы в конфигураторе

Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

12.11.2021    13711    acces969    95    

142

Как спроектировать структуру регистра сведений

Механизмы платформы 1С Платформа 1С v8.3 Запросы Бесплатно (free)

«Что может быть проще?» — это первое, что приходит в голову. Но что, если это не так? В этой статье мы попробуем затронуть некоторые вопросы, которые могут возникнуть при проектировании больших регистров.

08.11.2021    9263    Neti    60    

108

Обработчик ожидания. Нюансы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

ПодключитьОбработчикОжидания: некоторые подробности и особенности работы

24.08.2021    27580    Yashazz    26    

65

Семеро одного не ждут? Асинхронное исследование асинхронности

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Все уже, наверное, знают о появлении в новых версиях платформы асинхронных функций и конструкций Асинх/Ждать. Многие, возможно, уже их используют. Но что будет, если создать свои асинхронные функции, запустить и не дожидаться окончания их выполнения? Неужели можно запустить несколько процессов параллельно?

1 стартмани

08.06.2021    10032    Alxby    55    

59

Новичок новичку: как добавить программно кнопку на форму путем расширения

Механизмы платформы 1С Платформа 1С v8.3 Россия Бесплатно (free)

Рассказываю очень простым языком, как добавить программно кнопку в типовую конфигурацию. Сам новичок в этом деле и рассказываю на "новичковом" языке.

13.05.2021    45630    user1312100    29    

74

Программное создание расширения

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Создание нового расширения "на лету", только штатными средствами 1С.

06.04.2021    7521    Yashazz    16    

77

Советы из Желтой тетради 📒 #1

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

15.03.2021    6642    builin    122    

53

Вызов демонов в 1С

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Вызываем демонов прямо из 1С!

28.01.2021    16277    322    ixijixi    41    

96

Расширенный автоподбор при вводе по строке в поле ввода в управляемых формах

Механизмы платформы 1С Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Бесплатно (free)

Началось все с того, что штатный автоподбор при вводе по строке в поле ввода для некоторых больших справочников устраивать перестал. Вообще, для способа поиска строки "Любая часть" он работает на первый взгляд очень хорошо: работает как полнотекстовый (т.е. по нескольким словам) даже без активации полнотекстового поиска, красиво подсвечивает слова поиска в результатах. Казалось бы, все отлично. Но есть неприятное ограничение - всего лишь 10 значений в результирующем списке (у вас может быть несколько больше, так как платформа неявно добавляет результаты поиска по истории ввода). Для небольших справочников или справочников с разнородным ассортиментом все хорошо. Но не в моей ситуации. А простых путей увеличить количество выдаваемых строк на момент написания статьи мне обнаружить не удалось. Пришлось полностью переопределять автоподбор. Ниже речь пойдет именно об этом. И, к слову, в типовых конфигурациях для некоторых справочников используются похожие приемы для увеличения количества строк результата автоподбора.

21.01.2021    11508    herfis    9    

54

О формах 1С замолвите слово... Необычное использование знакомого всем объекта

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

13.01.2021    10897    CyberCerber    46    

101

Наследование свойств элементов, или Как пользователь может сломать вашу форму

Механизмы платформы 1С Платформа 1С v8.3 Платформа 1C v8.2 Конфигурации 1cv8 Бесплатно (free)

В 1С можно установить свойства ТолькоПросмотр, Доступность и Видимость не только на элементы формы, но и на группы элементов. Но стоит ли так делать? Оказывается, пользователь может обойти запреты, которые установлены на папку. Об этом подробнее в видео.

12.01.2021    6851    SeiOkami    27    

112

Установка отбора для поля ввода управляемой формы через ПараметрыВыбора (без переопределения событий "НачалоВыбора", "Автоподбор")

Механизмы платформы 1С Платформа 1С v8.3 Управляемые формы Бесплатно (free)

Зачастую возникает необходимость ограничить вывод элементов какого-нибудь справочника или перечисления при редактировании поля ввода (отфильтровать доступные для выбора элементы) эта публикация показывает простой и эффективный способ реализации этого.

15.11.2020    18731    Eugen-S    11    

71

Лайфхаки для разработчиков 1С. Часть 1

Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Россия Бесплатно (free)

Собрали 20 лайфхаков, которые используют наши программисты при работе с 1С. Формы, контрагенты, СКД, процедуры, глюки платформы и многое другое. В этой статье публикуем первую часть.

30.09.2020    9710    Neti    47    

69

Новое отображение ошибок в 1С

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим развитие механизма отображения ошибок в 1С (начиная с 8.3.17)

10.08.2020    40592    SeiOkami    45    

147

Использование флажков в динамических списках

Механизмы платформы 1С Управляемые формы Бесплатно (free)

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

04.08.2020    25655    nekit_rdx    38    

131

Загрузка, скачивание, удаление файлов с помощью НачатьПомещениеФайлаНаСервер() и НачатьПолучениеФайлаССервера()

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

25.07.2020    26525    Flashill    18    

55

Вы запускаете приложения, но делаете это без уважения

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

О запуске сторонних приложений и скриптов из кода встроенного языка платформы 1С.

21.07.2020    16249    Infostart    32    

138

Использование Стека вызовов в качестве условия оператора Если [...] Тогда

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Делюсь интересным приёмом, позволяющим использовать данные стека исполнения кода 1С в качестве условия, накладываемого на выполнение кода.

12.07.2020    13770    sapervodichka    65    

93

Серверные вызовы, которые нельзя вызывать

Механизмы платформы 1С Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Бесплатно (free)

Не баян, а классика. Рассмотрим особенность платформы настолько же древнюю, как сами УФ.

12.05.2020    14621    SeiOkami    34    

150

Как ограничить поля отбора в динамическом списке и ничего не сломать

Механизмы платформы 1С Управляемые формы Конфигурации 1cv8 Бесплатно (free)

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

06.05.2020    13991    SeiOkami    4    

71

Совместимость работы со строками. Жизнь до 8.3.6 и после

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Немного о совместимости со старыми версиям платформы 1С в работе со строками.

21.02.2020    7350    Infostart    25    

65