//////////////////////////////////////////////////////////////////////////////// // ПЕРЕМЕННЫЕ МОДУЛЯ Перем глСерверТО; Перем мКлиентТО; Перем глОбработкаАвтоОбменДанными Экспорт; Перем глЗапрашиватьПодтверждениеПриЗакрытии Экспорт; Перем глОбщиеЗначения Экспорт; Перем АдресРесурсовОбозревателя Экспорт; // В переменной содержится значение // адреса ресурса данной конфигурации Перем глФормаДляОткрытия Экспорт; // Юра 25.05.12 Перем icq Экспорт; // Юра //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ // функция вызова формы редактирования настройки файла обновления конфигурации // Процедура ОткрытьФормуРедактированияНастройкиФайлаОбновления() Экспорт Если НЕ ПравоДоступа("Чтение", Метаданные.Константы.НастройкаФайлаОбновленияКонфигурации) Тогда Предупреждение("Нет прав на чтение данных константы ""Настройка файла обновления конфигурации""", 30, "Настройка файла обновления конфигурации"); Возврат; КонецЕсли; ФормаРедактирования = ПолучитьОбщуюФорму("НастройкаФайлаОбновленияКонфигурации"); ФормаРедактирования.СтруктураПараметров = ПроцедурыОбменаДанными.ПолучитьНастройкиДляФайлаОбновленияКонфигурации(); ФормаРедактирования.Открыть(); КонецПроцедуры // Функция возвращает объект для взаимодействия с торговым оборудованием. // // Параметры: // Нет. // // Возвращаемое значение: // <ОбработкаОбъект> - Объект для взаимодействия с торговым оборудованием. // Функция ПолучитьСерверТО() Экспорт Если глСерверТО = Неопределено Тогда глСерверТО = Обработки.ТОСервер.Создать(); КонецЕсли; Возврат глСерверТО; КонецФункции // ПолучитьСерверТО() // Процедура проверки необходимости сбросить пароль пользователя // Процедура ПроверкаНаСбросПароля() ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); Если ПустаяСтрока(ПользовательИБ.Имя) Тогда //это пользователь по умолчанию Возврат; КонецЕсли; ПарольУстановлен = ПользовательИБ.ПарольУстановлен; //если в хранилище пароль не установлен, а у пользователя установлен Если Не ПарольУстановлен Тогда Если ПользовательИБ.ЗапрещеноИзменятьПароль Тогда Предупреждение("У текущего пользователя отсутствует пароль, но смена пароля запрещена! |Сеанс будет завершен.", 20); ЗавершитьРаботуСистемы(Ложь); Возврат; КонецЕсли; НовыйПароль = ПолучитьОбщуюФорму("ФормаСменыПароля").ОткрытьМодально(); Если ПустаяСтрока(НовыйПароль) Тогда ЗавершитьРаботуСистемы(Ложь); Возврат; КонецЕсли; ПользовательИБ.Пароль = НовыйПароль; ПользовательИБ.Записать(); Предупреждение("Пароль был успешно изменен!", 10); КонецЕсли; КонецПроцедуры // Процедура осуществляет проверку на необходимость обмена данными с заданным интервалом // Процедура ПроверкаОбменаДанными() Экспорт Если глОбработкаАвтоОбменДанными = Неопределено Тогда Возврат; КонецЕсли; ОтключитьОбработчикОжидания("ПроверкаОбменаДанными"); // проводим обмен данными глОбработкаАвтоОбменДанными.ПровестиОбменДанными(); КоличествоСекундОпросаОбмена = глЗначениеПеременной("глКоличествоСекундОпросаОбмена"); ПодключитьОбработчикОжидания("ПроверкаОбменаДанными", КоличествоСекундОпросаОбмена); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ СИСТЕМЫ // Обработать параметр запуска программы. // Реализация функции может быть расширена для обработки новых параметров. // // Параметры // ПараметрЗапуска – Строка – параметр запуска, переданный в конфигурацию // с помощью ключа командной строки /C. // // Возвращаемое значение: // Булево – Истина, если необходимо прервать выполнение процедуры ПриНачалеРаботыСистемы. // Функция ОбработатьПараметрыЗапуска(Знач ПараметрЗапуска) // есть ли параметры запуска Если ПустаяСтрока(ПараметрЗапуска) Тогда Возврат Ложь; КонецЕсли; // Параметр может состоять из частей, разделенных символом ";". // Первая часть - главное значение параметра запуска. // Наличие дополнительных частей определяется логикой обработки главного параметра. ПараметрыЗапуска = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ПараметрЗапуска,";"); ЗначениеПараметраЗапуска = Врег(ПараметрыЗапуска[0]); Результат = УправлениеСоединениямиИБ.ОбработатьПараметрыЗапуска(ЗначениеПараметраЗапуска, ПараметрыЗапуска); Возврат Результат; КонецФункции // Процедура выполняется перед нначалом работы системы // Процедура ПриНачалеРаботыСистемы() НомерВерсии = Константы.НомерВерсииКонфигурации.Получить(); ПервыйЗапуск = (НомерВерсии = ""); ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(); // отработка параметров запуска системы Если ОбработатьПараметрыЗапуска(ПараметрЗапуска) Тогда Возврат; КонецЕсли; УправлениеСоединениямиИБ.УстановитьКонтрольРежимаЗавершенияРаботыПользователей(); // Выполнить проверку разницы времени с сервером приложения Если НЕ ПроверкаРазницыВремениКлиент.ВыполнитьПроверку() Тогда Возврат; КонецЕсли; // Проверка наличия комплекта обновления конфигурации ПроверятьПриЗапуске = ВосстановитьЗначение("ПроверкаНаличияОбновленияПроверятьПриЗапуске"); ПроверятьПриЗапуске = ?(ТипЗнч(ПроверятьПриЗапуске) = Тип("Неопределено"), Ложь, ПроверятьПриЗапуске); Если ПроверятьПриЗапуске И (Не ПервыйЗапуск) Тогда Обозреватель = Обработки.Обозреватель.Создать(); Форма = Обозреватель.ПолучитьФорму("ПроверкаНаличияОбновления"); Если Обозреватель.Проверить(Форма.ЭлементыФормы) Тогда ПоказПриПоявленииНовойВерсии = ВосстановитьЗначение("ПроверкаНаличияОбновленияПоказПриПоявленииНовойВерсии"); ПоказПриПоявленииНовойВерсии = ?(ТипЗнч(ПоказПриПоявленииНовойВерсии)=Тип("Неопределено"),Ложь,ПоказПриПоявленииНовойВерсии); ВерсияДистрибутива = ВосстановитьЗначение("ПроверкаНаличияОбновленияПоследняяВерсия"); Если ПоказПриПоявленииНовойВерсии Тогда Если ВерсияДистрибутива <> Форма.ЭлементыФормы.ВерсияДистрибутива.Значение Тогда Форма.Открыть(); КонецЕсли; Иначе Форма.Открыть(); КонецЕсли; КонецЕсли; КонецЕсли; // Проверка наличия комплекта обновления обработок обслуживания торгового оборудования ПроверятьООПриЗапуске = ВосстановитьЗначение("ПроверкаНаличияОбновленияОбработокОбслуживанияПриЗапуске"); ПроверятьООПриЗапуске = ?(ПроверятьООПриЗапуске = Неопределено, Ложь, ПроверятьООПриЗапуске); Если ПроверятьООПриЗапуске И (Не ПервыйЗапуск) Тогда АдресИПараметрыСервера = Новый Структура; АдресИПараметрыСервера.Вставить("АдресОбработок", ПолучитьСерверТО().ПолучитьАдресОбновленияОбработокОбслуживания()); Если РаботаСТорговымОборудованием.ПроверитьДоступностьНовыхОбработок(АдресИПараметрыСервера, Истина) Тогда Ответ = Вопрос("Доступны новые обработки обслуживания торгового оборудования. |Открыть форму проверки и обновления обработок обслуживания?", РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Да Тогда РаботаСТорговымОборудованием.ОткрытьОбновлениеОбработокОбслуживания(АдресИПараметрыСервера); КонецЕсли; КонецЕсли; КонецЕсли; ЭтоФайловаяИБ = ОпределитьЭтаИнформационнаяБазаФайловая(); Если ЭтоФайловаяИБ Тогда ПользовательДляВыполненияРеглЗаданий = Константы.ПользовательДляВыполненияРегламентныхЗаданийВФайловомВарианте.Получить(); Если глЗначениеПеременной("глТекущийПользователь") = ПользовательДляВыполненияРеглЗаданий Тогда // с интервалом секунд вызываем процедуру работы с регламентными заданиями ПоддержкаРегламентныхЗаданиеДляФайловойВерсии(); ИнтервалДляОпроса = глЗначениеПеременной("глКоличествоСекундОпросаОбмена"); ПодключитьОбработчикОжидания("ПоддержкаРегламентныхЗаданиеДляФайловойВерсии", ИнтервалДляОпроса); КонецЕсли; КонецЕсли; глОбработкаАвтоОбменДанными = ПроцедурыОбменаДанными.ВыполнитьИнициализациюАвтообменаПриНачалеРаботы(); // автообмен данными Если глОбработкаАвтоОбменДанными <> Неопределено Тогда // подключим обработчик обменов данными ПодключитьОбработчикОжидания("ПроверкаОбменаДанными", глЗначениеПеременной("глКоличествоСекундОпросаОбмена")); КонецЕсли; ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); РежимАдминистрирования = ПравоДоступа("Администрирование", Метаданные); ПроверятьПароль = Константы.ПроверятьУстановкуПароляПользователяПриСтарте.Получить(); Если ПроверятьПароль Тогда //если пароль пользователя пустой, установим новый пароль ПроверкаНаСбросПароля(); КонецЕсли; Если Не (РежимАдминистрирования ИЛИ ЗначениеЗаполнено(ПараметрыСеанса.ТекущийМагазин)) Тогда МассивМагазиновДоступныхВСеансе = УправлениеПользователями.ПолучитьМассивМагазиновДоступныхВСеансе(ПараметрыСеанса.ТекущийПользователь); Если МассивМагазиновДоступныхВСеансе.Количество() = 0 Тогда Если ПараметрыСеанса.ТекущийПользователь.ДоступныеМагазины.Количество() > 0 Тогда //пользователю нельзя здесь работать Предупреждение("Не найдено магазинов, доступных для работы! |Приложение будет закрыто."); ЗавершитьРаботуСистемы(Ложь); КонецЕсли; Иначе Форма = Обработки.СменаТекущегоМагазина.ПолучитьФорму("ФормаВыбора"); Результат = Форма.ОткрытьМодально(); Если Не ЗначениеЗаполнено(Результат) Тогда ЗавершитьРаботуСистемы(Ложь); КонецЕсли; КонецЕсли; Иначе РаботаСДиалогами.УстановитьЗаголовок(); КонецЕсли; Если УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОткрыватьВертикальноеМенюПриЗапуске") Тогда Обработка = Обработки.ВертикальноеМеню.Создать(); Форма = Обработка.ПолучитьФорму(); Форма.Открыть(); КонецЕсли; Если ПараметрЗапуска = "ТОКлиент" Тогда Если ПолучитьСерверТО().ПолучитьСписокУстройств(Перечисления.ВидыТорговогоОборудования.СканерШтрихКода).Количество() > 0 ИЛИ ПолучитьСерверТО().ПолучитьСписокУстройств(Перечисления.ВидыТорговогоОборудования.СчитывательМагнитныхКарт).Количество() > 0 Тогда мКлиентТО = Обработки.ТОКлиент.Создать(); мКлиентТО.НачатьРаботу(); Сообщить("Информационная база работает с торговым оборудованием в режиме регистрации рабочего времени сотрудников!"); КонецЕсли; КонецЕсли; // Если текущая ИБ - переферийный узел плана обмена "По кассе" // то устанавливает интерфейс "РМК" Если ПроцедурыОбменаДаннымиПоКассе.ЭтоУзелКассы() Тогда ГлавныйИнтерфейс.ПереключитьИнтерфейс("УзелРИБПоКассе"); КонецЕсли; // Если система запущена от пользователя, содержащего роль "РМК", //тогда откроем рабочее место кассира глПереходВРежимРМК = РольДоступна("РМК"); // Юра 14.09.2010 глПереходВРежимРМК = РольДоступна("РМК_Пиво"); // Юра Если глПереходВРежимРМК Тогда РМК.ОткрытьМеню(); КонецЕсли; // Форма помощника обновления конфигурации выводится поверх остальных окон. Если РольДоступна(Метаданные.Роли.ПолныеПрава) Тогда ОбработкаОбновлениеКонфигурации = Обработки.ОбновлениеКонфигурации.Создать(); ОбработкаОбновлениеКонфигурации.ПроверитьНаличиеОбновлений(); КонецЕсли; // Юра 25.05.12 //ИмяВК="AddIn.DushelovICQ"; // //Попытка // ПодключитьВнешнююКомпоненту(ИмяВК); //Исключение // Предупреждение("Не удалось подключить компоненту "+ИмяВК); //КонецПопытки; // //Попытка // icq = Новый(ИмяВК); //Исключение // Предупреждение("Ошибка создания объекта внешней компоненты: "+ ИмяВК); //КонецПопытки; // Юра КонецПроцедуры // Процедура - обработчик внешнего событие, которое возникает при посылке // внешним приложением сообщения, сформированного в специальном формате. // Внешнее событие сначала обрабатывается всеми открытыми формами, имеющими // обработчик этого события, а затем может быть обработано в процедуре модуля // приложения с именем ОбработкаВнешнегоСобытия(). // // Параметры: // Источник - <Строка> // - Источник внешнего события. // // Событие - <Строка> // - Наименование события. // // Данные - <Строка> // - Данные для события. // Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные) Если мКлиентТО <> Неопределено Тогда мКлиентТО.ВнешнееСобытие(Источник, Событие, Данные); КонецЕсли; ПолучитьСерверТО().ЗавершитьОбработкуВнешнегоСобытия(Источник, Событие, Данные); КонецПроцедуры // ОбработкаВнешнегоСобытия() // Процедура выполняется перед заавершением работы системы // Процедура ПередЗавершениемРаботыСистемы(Отказ) ЗапрашиватьПотверждение = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ЗапрашиватьПодтверждениеПриЗакрытии"); Если ЗапрашиватьПотверждение Тогда Ответ = Вопрос("Завершить работу с программой?", РежимДиалогаВопрос.ДаНет); Отказ = (Ответ = КодВозвратаДиалога.Нет); КонецЕсли; Если НЕ Отказ Тогда // отдельно получаем настройки для которых нужно выполнить обмен при выходе из программы ПроцедурыОбменаДанными.ВыполнитьОбменПриЗавершенииРаботыПрограммы(глОбработкаАвтоОбменДанными); КонецЕсли; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ КЭШИРОВАНИЯ ПЕРЕМЕННЫХ // Функция возвращает значение экспортных переменных модуля приложений // // Параметры // Имя - строка, содержит имя переменной целиком // // Возвращаемое значение: // значение соответствующей экспортной переменной Функция глЗначениеПеременной(Имя) Экспорт Возврат ОбщегоНазначения.ПолучитьЗначениеПеременной(Имя, глОбщиеЗначения); КонецФункции // Процедура установки значения экспортных переменных модуля приложения // // Параметры // Имя - строка, содержит имя переменной целиком // Значение - значение переменной // Процедура глЗначениеПеременнойУстановить(Имя, Значение, ОбновлятьВоВсехКэшах = Ложь) Экспорт ОбщегоНазначения.УстановитьЗначениеПеременной(Имя, глОбщиеЗначения, Значение, ОбновлятьВоВсехКэшах); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ РАБОЧЕГО МЕСТА КАССИРА // Процедура открывает меню РМК // Процедура ОткрытьМенюРМК() Экспорт ФормаМенюРМК = Обработки.МенюРМК.ПолучитьФорму(); Если Не ФормаМенюРМК.Открыта() Тогда Ответ = ФормаМенюРМК.ОткрытьМодально(); Если Ответ = "ЗавершитьРаботуСистемы" Тогда ЗавершитьРаботуСистемы(Ложь); КонецЕсли; КонецЕсли; КонецПроцедуры // Процедура открывает форму документа ЧекККМ "ФормаРегистрацииПродаж" // Процедура ОткрытьРежимРегистрацииПродажРМК() Экспорт Форма = Документы.ЧекККМ.ПолучитьФорму("ФормаРегистрацииПродаж"); Форма.ОткрытьМодально(); КонецПроцедуры Процедура ПолныйДействие() Экспорт // Вставить содержимое обработчика. КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ // Не допускается изменять значение данной переменной Если Найти(ВРег(Метаданные.Имя), "БАЗОВАЯ") > 0 Тогда АдресРесурсовОбозревателя = "RetailUkrBase"; Иначе АдресРесурсовОбозревателя = "RetailUkr"; КонецЕсли; глОбработкаАвтоОбменДанными = Неопределено;