Мьютексы в 1С 7.7

Публикация № 72534

Разработка - Системная интеграция - Файловые протоколы обмена, FTP

10
Существует ряд задач, которые требуют строго последовательного исполнения. Чаще всего это возникает при многопоточном программировании, в этом случае используются критические секции, но иногда надо синхронизировать и разные приложения - для этого существуют такие объекты ядра операционной системы как Мьютекс-ы. http://ru.wikipedia.org/wiki/Мьютекс
В статье рассказывается как можно сделать аналогичный объект средствами 1С v7.7

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

В википедии есть подробная статья про них, если кому интересно: http://ru.wikipedia.org/wiki/Мьютекс

Для чего это может понадобится в 1С ?

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

Отсюда вытекает задача объекта синхронизации, владеть которым в момент времени мог бы только один сеанс. Я предлагаю для этого обходится стандартными возможностями 7.7

Полное описание к задаче:

  • Должен быть объект который монопольно можно захватить из 1С.
  • Обращаться к объекту должно быть можно их разных запущенных сеансов, разных компьютеров, в идеале разных ИБ
  • При аварийном завершении сеанса захватившего объект - захват должен сниматься, что бы не оказалось подвисших блокировок.

 

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

Таким свойством обладает открытый через XBase файл dbf. На этом и построен алгоритм.

Всего работа с синхронизацией состоит в данном случае из 2х функций: Lock() и UnLock(): первая пытается захватить объект и если это получается - возвращает (1), если не получается по каким - либо причинам - возвращает (0) и тут уже делайте, что хотите: завершайте работу или в цикле пробуйте получить объект себе во владение, как угодно. Снятие блокировки происходит при вызове UnLock() или при завершении обработки (разрушении объекта XBase).

//Ж*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖSЖЖPЖЖ*ЖЖ*Ж

Перем ФайлСинхронизации, ИмяФайлаСинхронизации;

//Ж*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖSЖЖPЖЖ*ЖЖ*Ж

Функция Lock()
    Если ПустоеЗначение(ФайлСинхронизации) = 0 Тогда
        //Трас("Объект блокировки уже создан");
        Возврат 1;
    КонецЕсли;

    Попытка

        ФайлСинхронизации = СоздатьОбъект("XBase");
        ФайлСинхронизации.КодоваяСтраница(1);
        ФайлСинхронизации.ДобавитьПоле("Name","S", 64, 0);
        ФайлСинхронизации.СоздатьФайл(ИмяФайлаСинхронизации);
        ФайлСинхронизации.Добавить();
        ФайлСинхронизации.Name = ИмяПользователя();
        ФайлСинхронизации.Записать();
        ФайлСинхронизации.ЗакрытьФайл();

        Если ФС.СуществуетФайл(ИмяФайлаСинхронизации) = 1 Тогда

            ФайлСинхронизации.ОткрытьФайл(ИмяФайлаСинхронизации);

            Если ФайлСинхронизации.Первая() = 1 Тогда
                Если НРег(СокрЛП(ФайлСинхронизации.Name)) = НРег(СокрЛП(ИмяПользователя())) Тогда
                    Возврат 1;
                Иначе
                    //Трас("Не удалось получить блокировку, файл перехватил: " + ФайлСинхронизации.Name, "!");
                КонецЕсли;
            Иначе
                //Трас("Не удалось спозиционироваться в файле блокировки", "!");
            КонецЕсли;
            ФайлСинхронизации.ЗакрытьФайл();
        Иначе
            //Трас("Не удалось создать файл блокировки", "!");
        КонецЕсли;

    Исключение
        //Трас("Исключение при блокировке: " + ОписаниеОшибки(), "!");
    КонецПопытки;

    //Трас("Очищен объект блокировки (после неудачной попытки захвата)");
    ФайлСинхронизации = ПолучитьПустоеЗначение();
    Возврат 0;
КонецФункции

//Ж*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖ*ЖЖSЖЖPЖЖ*ЖЖ*Ж
Процедура UnLock()
    Если ПустоеЗначение(ФайлСинхронизации) = 1 Тогда
        //Трас("Объект блокировки не был создан");
    КонецЕсли;

    Попытка
        ФайлСинхронизации.ЗакрытьФайл();
    Исключение
        //Трас("Исключение при снятии блокировки: " + ОписаниеОшибки(), "!");
    КонецПопытки;

    //Трас("Очищен объект блокировки");
    ФайлСинхронизации = ПолучитьПустоеЗначение();
КонецПроцедуры

Перед первым вызовом началом работы надо задать полное имя для файла, который будет объектом синхронизации в ИмяФайлаСинхронизации.

 

Удачного кодинга!

 

10

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

См. также

Использование классов .Net в 1С для новичков 147

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Практика программирования Разработка внешних компонент Универсальные функции

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    62582    Serginio    104       

Процедура расшифровки ячейки таблицы в отчетах 1С 7.7 11

Статья Программист Нет файла v7.7 1cv7.md Windows Бесплатно (free) Практика программирования Универсальные функции

Хочу поделиться с вами универсальной процедурой для расшифровки ячеек печатной формы отчетов в 1С 7.7.

24.09.2015    13697    Anzhey    13       

Получение характеристик и управление текущим процессом 1С на основе WMI 36

Статья Программист Нет файла v7.7 v8 1cv8.cf 1cv7.md Windows Бесплатно (free) Универсальные функции

Функционал для работы из 1С с текущим процессом класса Win32_Process. Пример получает текущее значение ОЗУ занятое процессом 1С. По описанной методике можно получать значения пиковых нагрузок на ОЗУ, время запуска текущей сессии 1С с точностью до миллисекунд. Определять загрузку активного ядра процессом и даже поменять приоритет самого процесса.

09.07.2012    18922    dusha0020    8       

Хитрость. Использование БУЛЕВО при OLE обмене/подключении из 7.7 к 8 17

Статья Системный администратор Программист Нет файла v7.7 v8 1cv8.cf 1cv7.md Windows Бесплатно (free) Перенос данных из 1С7.7 в 1C8.X Универсальные функции

Как известно, при OLE обмене доступны только типы СТРОКА, ЧИСЛО, ДАТА. А вот БУЛЕВО (ИСТИНА, ЛОЖЬ) использовать при подключении из 7.7 к 8 не получается. Как же быть? Есть хитрость, как использовать тип булево в семерке при обмене с 1С8! :)

28.09.2011    14016    bsturtle    9       

Быстрый поиск подчиненного документа, с помощью прямого запроса 1

Статья Программист Нет файла openconf 1cv7.md Россия Бесплатно (free) Практика программирования Универсальные функции

При ситуации, когда необходимо проверить, есть ли у документа подчиненный документ, конкретного вида или нет, если есть, вывести на экран, в этой ситуации будет полезна следующая функция глобального модуля. Работает только в SQL версии и при установленной внешней компоненте 1С++ !

26.05.2011    11459    Vix    1       

Посчитать людей по XML-файлам, выгруженным для ПФ 2010 7

Инструменты и обработки Программист Бухгалтер Внешняя обработка (ert,epf) v77::Расчет 1С7:ЗиК БУ НУ Windows Управление персоналом (HRM) ФОМС, ПФ, ФСС Бесплатно (free) Обмен через XML Универсальные функции

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

24.01.2011    10367    81    kserdyukov    1       

Универсальный фильтр 8

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::ОУ v77::БУ v77::Расчет 1cv7.md Windows Бесплатно (free) Универсальные функции

Удобный фильтр. Нет необходимости вешать на форму N-ое количество списков значений.

08.07.2010    8704    115    ShEvOvIcH    8       

Обработка для поиска Контрагентов 9

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::ОУ v77::БУ v77::Расчет 1cv7.md Windows Бесплатно (free) Поиск данных Обработка справочников Универсальные функции

Не первая и не последняя.. Не лучшая, и не худшая. Просто вариант поиска контрагентов по нескольким словам или их частям в наименовании.

19.05.2010    8645    108    aka AMIGO    7       

Как получить GUID без v7plus.dll в Предприятии 7.7 10

Статья Программист Нет файла v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free) Практика программирования Универсальные функции

Часто в терминальных сессиях у пользователю Windows не хватает прав на регистрацию v7plus.dll. Соответственно нельзя воспользоваться, например методом СоздатьGUID() класса V7SysInfo.

12.05.2010    12214    prolancer    5       

Алгоритм расчета периодов 3

Статья Программист Нет файла v7.7 1cv7.md Россия Бесплатно (free) Практика программирования Универсальные функции

Вычисление периодов в формате ГГММДД. Вычисление дат по формуле Дата + ГГММДД. Примечание: Даты передаем в виде 'ДД.ММ.ГГГГ', периоды - "ГГ-ММ-ДД". Пользуйтесь.

10.03.2010    8249    arithmometr    1       

Интервал дат прописью 8

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Бесплатно (free) Универсальные функции

Иногда возникает необходимость подсчитать количество дней, недель, месяцев или лет в интервале дат и вывести результат прописью. Обработка предназначена для демонстрации работы функции ПолучитьИнтервалДат(Дата1,Дата2,Период) Используется стандартный файл прописи для рублей. Специально не оптимизировал функции, чтобы каждый мог настроить их под свои требования.

15.02.2010    7750    143    Vlan    3       

Обработка "Заявка на перечисление ЗП" в Сбербанк в формате DBF 11

Инструменты и обработки Бухгалтер Внешняя обработка (ert,epf) v77::Расчет 1С7:ЗиК Windows Банковские операции Зарплата Бесплатно (free) Универсальные печатные формы Файловые протоколы обмена, FTP Обмен с банком

Еще одна внешняя обработка по подготовке DBF-файла и печатной формы "Заявки на перечисление ЗП в Сбербанк". Выполняется автоматический или ручной подбор еще не отправленных ведомостей выплаты ЗП через банк.

15.01.2010    12773    211    BorisBelov    7       

1С Предприятие 7.7 и Mozilla Thunderbird. Отправка писем из командной строки 5

Статья Системный администратор Программист Нет файла v77::ОУ v77::БУ 1cv7.md 1С7:Бух Windows Бесплатно (free) Универсальные функции Email

Клиент захотел чтобы у него из 1С формировались письма с вложениями и отправлялись через Mozilla Thunderbird. Из этого вышла маленькая процедура.

30.11.2009    12457    kasperok    15       

Транслитерация в латиницу 39

Статья Программист Нет файла v7.7 1cv7.md Россия Бесплатно (free) Практика программирования Универсальные функции

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

02.10.2009    24260    yuraer    17       

Альтернатива стандартному предупреждению(вопросу) 18

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::ОУ v77::БУ v77::Расчет 1cv7.md Windows Бесплатно (free) Работа с интерфейсом Универсальные функции

Начальство решило, что на предупреждения оформляемые стандартными средствами 1С малоприметны... В результате родилась прикольная штучка... Вывод текста сообщения бАААААльшими буквами, цвет можно задавать. 7 кнопок видимость и текст задаются при вызове Возвращает текст нажатой кнопки..... ВК у нас не применяются...

28.08.2009    9111    59    nikakoy    29       

Создаем сортировку по подразделению в любом документе (Зарплата и Кадры 7.7) 3

Статья Программист Нет файла v77::Расчет 1С7:ЗиК Windows Бесплатно (free) Универсальные функции

Создаем сортировку по подразделению (Зарплата и Кадры 7.7) на примере документа Выплата заработной платы

27.05.2009    10726    Craig    67       

Напоминалка дня рождения по ИНН 2

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::БУ 1cv7.md Украина Windows Бесплатно (free) Разное Универсальные функции

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

01.04.2009    8450    117    stalker    9       

Импорт для всех конф семерки! 89

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Бесплатно (free) Файловые протоколы обмена, FTP Загрузка и выгрузка в Excel 1С7.7<->1C7.7

Переносит любые справочники, документы и т.д. Работаю с ней уже год - все отлично при любом количестве строк.

06.02.2009    13364    1907    floraukraine    21       

Функция перезагрузки Таблицы Значений по условиям 1

Статья Программист Нет файла v7.7 1cv7.md Россия Бесплатно (free) Универсальные функции

Возвращает таблицу значений, отфильтрованную по условию в заданной колонке (равно, не равно, больше, меньше, содержит, равны две указанные колонки)

06.11.2008    4536    stellavolf    9       

Пакетный ввод на основании без изменения форм и модулей 20

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::ОУ v77::БУ v77::Расчет 1cv7.md Windows Бесплатно (free) Универсальные функции

Обработка демонстрирует подход для ввода на основании большого количества документов без правки модулей, с вызовом метода "ОткрытьФорму" - что позволяет не перетягивать код из модуля формы документа, и не менять его...

10.10.2008    20875    1014    Fragster    22       

Экспорт платежек из 1С в .dbf файл для клиент-банка 14

Инструменты и обработки Бухгалтер Внешняя обработка (ert,epf) v77::ОУ v77::БУ v77::Расчет 1С7:Комплекс Россия Windows Банковские операции Бесплатно (free) Обработка документов Файловые протоколы обмена, FTP Обмен с банком

Экспорт платежек из 1С в .dbf файл для клиент-банка Sberbank (Западно-Уральский Банк Сбербанка России). Работает. После формирования файла в программе клиент-банк достаточно нажать "ИМПОРТ" и платежки уже там. -=Не забываем плюсовать, дамы и господа!=-

14.07.2008    16897    291    andrybar    9       

Загрузка любых справочников 7.7 29

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v7.7 1cv7.md БУ Windows Бесплатно (free) Обработка справочников Файловые протоколы обмена, FTP Загрузка и выгрузка в Excel

Универсальная загрузка справочников 7.7 из xls, dbf, txt доработана для загрузки справочников, в которых реквизитом является счет из плана счетов

03.06.2008    9175    562    ge_ni    4       

Функция загрузки из DBF-файлов 51

Статья Программист Нет файла v7.7 1cv7.md Windows Бесплатно (free) Практика программирования Файловые протоколы обмена, FTP

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

24.05.2008    16798    fAngel    13       

Горячая печать реквизитов (их значений ) документов с использованием FormEx 19

Статья Программист Нет файла v7.7 1cv7.md Windows Бесплатно (free) Печатные формы документов Универсальные функции

Иногда хочется увидеть все реквизиты документа, в том числе и те, которые на форме отсутствуют. Особенно, если они автоматом понаустанавливались. Приведенный код позволяет по горячим клавишам CTRL+ALT+P получить распечатку ВСЕХ реквизитов, начиная от общих, заканчивая ТЧ. Код необходимо вставить в Глобальный модуль, или в Дополнительный глобальный модуль, подключенный с помощью Formex

14.04.2008    16197    Abadonna    11       

Обработка "ВыгрузкаСбербанк" в формате DBF, TXT и MXL 115

Инструменты и обработки Бухгалтер Внешняя обработка (ert,epf) v77::Расчет 1С7:ЗиК Россия Windows Банковские операции Зарплата Бесплатно (free) Обработка документов Файловые протоколы обмена, FTP Обмен с банком

Многие учреждения сегодня перечисляют зарплату сотрудников в Сбербанк на пластиковые карточки или книжки и при этом пользуются программой, которую им дает Сбербанк. Здесь же этот процесс автоматизирован. Документ "Перечисление зарплаты в Сбербанк" позволяет согласно сформированных Платежных Ведомостей, сформировать файл (и записать его на магнитный носитель) для сбербанка, а так же получить все необходимые печатные формы. После того, как файл сформирован (записан), остается только (при необходимости) его "подписать" цифровой подписью, для чего нужно запустить программу (которую установил сбербанк для формирования и подписи файла) и "подписать" файл на магнитном носителе. Примечание. Формат файла для разных сбербанков может быть различным. Данная обработка пока содержит ШЕСТЬ РАЗНЫХ ФОРМАТОВ выгрузки и по мере необходимости количество форматов будет добавляться.

20.12.2007    20101    1164    ivnik    34       

Конвертер таблиц из 1С (7.7) в MS Office Word 23

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Бесплатно (free) Загрузка и выгрузка в Excel Работа с интерфейсом Универсальные функции

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

10.12.2007    12651    219    Джуниор    8       

Выгрузка данных для начисления заработной платы на пластиковые карты АКБ "Россия" (в формате DBF) 2

Инструменты и обработки Бухгалтер Внешняя обработка (ert,epf) v77::Расчет 1С7:ЗиК Россия Windows Банковские операции Зарплата Бесплатно (free) Печатные формы документов Файловые протоколы обмена, FTP Обмен с банком

Простенькая обработка предназначена для формирования DBF-файла по данным начисленной заработной платы сотрудников для перечисления на пластиковые карты системы "Клиент-банк АКБ "Россия".

12.11.2007    7780    33    kubiky    2       

FormEx. Быстрый поиск в поле ввода 2.1 27

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Бесплатно (free) Поиск данных Разработка внешних компонент Универсальные функции

Универсальный инструмент пользователя, требует FormEx v2.0.5.0 - http://dorex.pro/?projects&formex&download Реализация механизма быстрого поиска элемента по первым символам непосредственно в поле ввода. Ограничения: Не работает для полей ввода многострочной части.

26.09.2007    15431    261    item    27       

Загрузка данных из DBF 302

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Бесплатно (free) Файловые протоколы обмена, FTP

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

30.11.2006    18870    1530    Diamond    30       

[МФ] Тривиальный шаблон обработки с использованием множественного фильтра (МФ) 17

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::ОУ 1cv7.md Windows Бесплатно (free) Универсальные функции

Надоело копи-пастить МФ... Простой шаблон обработки с использованием МФ. На форме - минимально требуемые реквизиты для типового МФ, в коде - обработка этих реквизитов... Т.е. - типа "облагороженный" кусок из кода типовой ТиС для быстрого клонирования для своих обработок

15.09.2006    15433    89    CheBurator    10