1с неудачная попытка создания окна
В чем суть этого оператора? В ходе выполнения программы часто могут возникать ошибки, такие как деление на ноль, корень из отрицательного числа и прочие. Эти ошибки приводят к «крушению» программы – это значит, что программа прекратит свою работу и ни какие операторы после ошибки выполняться не будут. Чтобы обойти исключительную ситуацию и продолжить выполнение программы, в языке программирования 1С существует оператор Попытка…Исключение.
Рассмотрим его синтаксис.
Попытка
//операторы попытки
Исключение
//операторы исключения.
КонецПопытки
Разберем этот синтаксис.
Ключевое слово Попытка открывает список операторов, выполнение которых может привести к исключительной ситуации, все операторы между ключевыми словами Попытка и Исключение это Операторы попытки.
Ключевое слово Исключение открывает список операторов, которые будут выполняться в том случае, если вызвана исключительная ситуация операторами попытки. Т.е. если во время выполнения программы один из операторов попытки вызвал ошибку выполнения программы (исключительную ситуацию), то выполнение данного оператора прерывается и управление передается на первый Оператор исключения. Причем обращаю Ваше внимание, что управление будет передано и в том случае, если исключительную ситуацию вызвали функции и процедуры, разработанные программистом и применяемые в качестве операторов попытки. Естественно, что если ошибка произошла в процедуре или функции, то ее выполнение будет прервано.
Описание ошибки в 1С
В коде выше я использовал собственное выражение для описания ошибки, но можно использовать метод ОписаниеОшибки(), который возвращается описание ошибки с точки зрения разработчиков платформы 1С. Это функция, которая возвращает текст с описанием ошибки. Например, код выше можно переделать так:
Тогда, при выполнении выйдет «стандартизированное» описание ошибки.
Оператор ВызватьИсключение в 1С
Оператор ВызватьИсключение можно использовать отдельно для «эмуляции» вызова исключение. Например, при выполнении этой команды формы:
Будет вызвано исключение.
Причём, в открывавшемся окне можно посмотреть место в коде, где было вызвано исключение.
Попытка внутри попытки в 1С
В платформе 1С 8.3 можно один оператор попытки разместить в другом операторе. Например, на управляемой форме обработки разместим несколько реквизитов с типом Число.
И по команде с формы попытаемся вычислить корень из каждого реквизита, при этом сделаем это в двух вложенных операторах попытки.
И результат работы этой обработки:
Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника.
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
Казалось бы безобидный запрос работает под SQL некорректно из-за того, что разные реквизиты ссылаются на один и тот же справочник.
По отдельности работать будет (а также если перенести вторую группировку вперед и поставить между свойствами еще какую-то гуппировку). Можете попробовать.
Вот пример для ТиС:
ЗначениеСвойства = Справочник.Контрагенты.ОсновноеСвойство.ЗначениеСвойства;
ЗначениеСвойства1 = Справочник.Контрагенты.ОсновноеСвойство1.ЗначениеСвойства;
Группировка ЗначениеСвойства;
Группировка ЗначениеСвойства1;
Вот просто отсебятина:
|Организация = Справочник.МестаХранения.Организация;
|Организация1 = Справочник.МестаХранения.Организация1;
|Группировка Организация;
|Группировка Организация1;
Тип реквизитов Организация и Организация1 - "Справочник.Контрагенты"
Как найти битую ссылку?
А вот так можно, например:
ЗЫ. Аккуратно с непосредственным удалением объектов
Как узнать является ли строка числом?
Примеры: "0004" - число, "440ф0" - не число, "43.045" - число, "-33" - число, "5453.54.4" - не число и т.п.
Есть некоторые специфические ситуации вроде "+1", с которыми эта функция не справится. Приспосабливайте.
Сохранение настроек множественного фильтра
Scaner1C.dll. Компонента не загружена
Установите атоловский драйвер (скачать можно на официальном сайте АТОЛа)
Как узнать размер картинки и размер файла в 1с 7.7?
Размер файла узнать очень просто. Используем штатную работу с файлами
Запуск 1С в терминальном режиме. Как запустить проводник, как показать рабочий стол?
Некоторые нехорошие люди дают доступ к серверу весьма ограниченный. Заходишь в терминал и сразу же запускается 1С. А хочется передать файл какой-то себе по почте, полазить по папкам
Если не помогает Ctrl+Alt+End, запуск диспетчера задач (в котором можно выбрать "New Task" и набрать Explorer.exe), то пробуем действовать так: в 1С: Предприятии выполняем Меню - Сервис - Табло. В табло набираем ЗапуститьПриложение("explorer") и нажимаем Ввод.
Также можно действовать через Меню - Файл - Открыть: кликаем правой кнопкой мыши на любой папке и выбираем Проводник или "Открыть в новом окне" (за этот совет спасибо посетителю сайта).
Создание документов по OLE (ОЛЕ) - "Неизвестная ошибка"
Поиском можно найти разные пути решения этой ошибки: долгое время выполнения операции, неправильные данные в реестре, ошибки в конструкциях языка и проч. Недавно столкнулся с такой ошибкой, когда переделывал чужую обработку. Ошибка возникала то на одном документе, то на другом. Мне помогло вот что: убрал загрузку внешних компонент и создание объектов типа "ODBCRecordSet" для служебного пользователя. Просто добавил код в ПриНачалеРаботыСистемы():
Также был убран код, который делал документы не проведенными перед записью (документы синхронизировались по номеру и дате, и менять дату проведенного документа не нужно было).
При переносе в другую группу справочника записать элемент (Объект заблокирован)
Как изменить реквизит элемента при переносе его в другую группу?
Добавляем запись родителя и статус возврата в код процедуры ПриПереносеЭлементаВДругуюГруппу()
Неудачная попытка создания объекта
Если такая ошибка возникает при попытке создания объекта, например:
и т. п., то нужно сделать следующее:
- Убедиться в том, что происходит загрузка соответсвующей внешней компоненты (если указана загрузка из каталога ИБ, то там она и должна находиться)
- Зарегистрировать ее если это нужно. В Пуск - Выполнить набрать, например, такую строку regsvr32 G:\DB77_SQL\Base1C\svcsvc.dll и нажать Ввод.
Как удалить Search Protect (HpUI.exe)?
Что делать, если заметили изменение домашней страницы на Search Protect и странную иконку в панели управления?
Нажимаем "Настройка", чтобы посмотреть что это за иконка.
Видим что это программа HpUI.exe.
Возвращаем обратно адрес домашней страницы и беспощадным образом удаляем в реестре (выполняя regedit) все, что связано с файлом HpUi.exe. Пытаемся снять процесс - ничего не получается, процесс запускается другим процессом.
Перезагружаем компьютер, выбираем загрузку в безопасном режиме и удаляем папку SupTab в Program Files (там находится этот файл).
Удаляем также папку C:\Program Files (x86)\MySearch (в случае 64-битной Windows) вместе со всем содержимым. На нее я бы не обратил внимания, если бы не установил антивирус (были найдены вредоносные файлы w.dll и w.x64.dll). Удаляем из реестра ветки, содержащие MySearch.
Все, вроде победили.
Программа была завершена аварийно. Выполнить переиндексацию?
Часто требуется, чтобы робот гарантированно отработал на файловой базе 1С 7.7. Как это организовать?
Очень просто, перед выполнением регламентного задания старта робота выполнить так же, по расписанию, батник (delcdx.bat), в котором написать:
Del D:\Base_1C\*.cdx
Далее запускать 1С в монопольном режиме, с ключом /m.
MercuryFPrt1C : System Error. Code: 5. Отказано в доступе
Такая ошибка может возникнуть, например, при использовании с 1С фискального регистратора. Первым делом нужно проверить, на какой порт подключено оборудование в настройках и не конфликтует ли оно с другим оборудованием (например, с дисплеем покупателя). Допустим, указан один и тот же порт - Com 1. Настройки могут слететь.
Ошибка проверки сертификата. Avest. Электронное декларирование
Переустановка криптопровайдера из старого комплекта поставки ничего не даст.
Как получить ссылку на перечисление по метаданным?
Как вариант: использование внешней компоненты 1cpp.dll. Загружаем ее и создаем объект.
Далее, используя вид перечисления и идентификатор, получаем представление объекта в базе данных.
Внешняя компонента "ControlContainer" для платформы "1С:Предприятие" v.8.2, 8.3 (8.3.10 и более ранние версии), реализующая размещение ActiveX объектов на управляемых формах системы 1С:Предприятие.
Есть вопрос по использованию данной компоненты.
Каким образом ее публиковать в системе? через regsvr32 выдается ошибка и соответственно дальше дело не идет
Сделала стандартным способом архив компоненты с манифестом.
Установка проходит, а компонента не подключается.
код инициализации пишу такой:
А какая именно ошибка выдаётся при регистрации через regsvr32?
В какой ОС пытаетесь регистрировать?
Какая разрядность у операционной системы?
Не зная всего этого, я не смогу Вам подсказать.
(2)
С регистрацией в системе разобралась. Надо было запустить регистрацию от администратора.
Собственно система win7
Хочется автоматизировать установку у пользователей
Windows 7 упрямая операционка в плане безопасности.
Попробуйте в каталог с компонентой поместить .bat или .cmd файл, содержащий вызов: regsvr32.exe CtrlCont.dll
и уже его запускать от имени администратора. По крайней мере запустить файл проще, чем писать в командной строке.
(5) Здравствуйте. Если бы Вы внимательно прочитали публикацию, Вы, наверняка, уже давно реализовали бы свою задачу. В описании есть несколько моментов, которые явно указывают на механизм поиска окна на управляемой форме.
ТипПоляФормы (обязательный)
Тип: Число.
Тип элемента формы, в который будет вставлен элемент управления.
Возможные значения:
0 - поле диаграммы (Диаграмма, ДиаграммаГанта, Дендрограмма)
1 - поле форматированого документа, поле HTML документа.
Поиск, соответственно, и производится по дочерним окнам формы с указанными классами.
Чтобы компонента могла правильно разместить элемент управления в поле формы,
следует размещать на форме только одно поле с указанным типом, иначе элемент
управления будет размещен в произвольном поле с подходящим типом,
не занятом другим элементом управления.
А по поводу технологии создания своих элементов управления, если Вы, конечно, имеете ввиду внешнюю компоненту, которой, собственно и является ActiveX контейнер, есть масса информации на дисках ИТС. С описанием и примерами.
Использование вашего контейнера позволит использовать любые ActiveX , которые зарекомендовали себя в обычных приложениях ?
Меня интересует Перехватчик клавишь , которым я пользовался на 8.1 . Подключить его в ваш контейнер не удалось .
Имеется ли у вас пример работы с перехватчиком клавишь , подобно данной публикации ? Мне нужно получать событие нажатия клавиши Enter , когда я пишу что-нибудь в Форматированном документе .
(7) qwsachka, отвечу по порядку:
Использование вашего контейнера позволит использовать любые ActiveX , которые зарекомендовали себя в обычных приложениях ?
Я тестировал контейнер на ActiveX объектах как сторонних производителей, так и разработанных мной. Все работали.
Меня интересует Перехватчик клавишь , которым я пользовался на 8.1 . Подключить его в ваш контейнер не удалось .
Если Перехватчик - это ActiveX объект, то должен был подключиться.
Имеется ли у вас пример работы с перехватчиком клавишь , подобно данной публикации ? Мне нужно получать событие нажатия клавиши Enter , когда я пишу что-нибудь в Форматированном документе .
В принципе, реализовать такой Перехватчик вполне возможно (я даже писал ВК с похожим функционалом для 1С 7.7). Но вот привязать его к какому-то конкретному элементу на управляемой форме будет достаточно проблематично.
Компонента подключается, располагается на форме и я ее вижу как СomОбъект.
Далее мне нужно заполнить некоторые свойства компоненты. При этом в компоненте происходят некоторые манипуляции(отключение от ридера, что конкретно происходит внутри - не знаю
После выполнения следующего кода
1с прерывает отладку, дальнейший код не выполняется и 1с вываливается с ошибкой платформы при любом действии.
В неуправляемой форме подобной ошибки не возникает, правда там не СomОбъект создается, а ActiveX родным методом подключается.
Кажется понял. Ошибка вываливается в тонком клиенте. Причем на платформе 8.3.6, в 8.3.5 всё работает.
(11) Да именно в тонком клиенте. Версия платформы - 8.3.4.437. Т.е ошибка именно из-за платформы?
Спасибо, вас и за контейнер и за ответы! На этот раз мне проще было переписать обработку под толстый клиент, но в дальнейшем надеюсь пригодится.
компонента работает великолепно
Но это не удобно, т.к. придется регистрировать на каждом клиенте.
Попытался сделать так:
ОбщийМакет.ActiveX_UF это макет (двоичные данные) в который загружен архив zip содержащий:
1. файл манифеста "MANIFEST.xml" :
УстановитьВнешнююКомпоненту отрабатывает на ура, но подключить не удается, строка подключения:
(13) pp77, дело в том, что регистрировать компоненту в любом случае придётся "От имени Администратора". Я так думаю, не все пользователи имеют такие права, поэтому из макета они просто не смогут зарегистрировать компоненту, не имея соответствующих прав. Предлагаю воспользоваться способом, описанном в посте 4.
Добрый день
На платформе 8.3.6, компонента не стабильно работает (управляемый интерфейс), часто 1С вываливается (например при закрытии обработки) Вы писали об этом в п.11. Будете ли Вы оптимизировать под 8.3.6?
Спасибо
pp77, Я написал в конце публикации, что исправил эту ошибку. При тестировании использовал самую последнюю версию платформы, которая была доступна на начало августа 2015 г.
Точно версию платформы не помню, но не ниже 8.3.6.2076. Причём тестировал на разных OS. Нестабильности не заметил. Вы как давно файл скачивали?
(16) premier\
Качали 26.08.2015,
Дата dll 11.08.2015
тестировали на 8.3.2041
попробуем под "совсем последней" платформой 8.3.2237
(17) pp77, мне кажется не в платформе дело. Возможно, проблема в ActiveX элементе, который Вы пытаетесь использовать совместно с контейнером. Я протестировал не меньше десятка ActiveX объектов. Последовательно вызывал их методы, изменял свойства, инициировал события. Закрывал форму, на которой расположен контейнер, снова открывал, закрывал 1С без закрытия формы - не было краха системы! Может, вышлете Вашу обработку с ActiveX объектом, естественно, для тестирования?
(19) pp77, действительно, не работает ни в тонком клиенте, ни в толстом. Будет время - потестирую. А на обычных формах пробовали запускать? Сам ActiveX - то хоть рабочий?
Да на в обычном приложении все работает замечательно.
Прикладываю обработку для обычного приложения, с внедренным Active X типовым способом.
Подключение карты в процедуре ПриОткрытии также сделано по умолчанию:C:\Program Files (x86)\Zulu 7.0\
Спасибо
(21) pp77, вот что я заметил при тестировании:
Если в процедуре ВыборОбъекта() заменить фрагмент кода
ИДОбъекта = ЭлементУправления1.CurrentID; // именно в этом месте платформа "падает"
на
ИДОбъекта = Число(ЭлементУправления1.CurrentID);
программа перестаёт "падать". Видимо, платформа не распознаёт тип значения CurrentID, хотя в отладчике тип указывается как число.
Причём обратное преобразование
ЭлементУправления1.CurrentID = ИДОбъекта;
происходит вполне корректно. Вот такая загадка платформы 8.3.
(22)
Добрый день!
Применили Ваши рекомендации
"Вариант 1: После открытия обработки и отображения карты "ткнутся" на любой объект карты - 1С закрывается. Воспроизводится почти всегда " - "исправился"
но если открыть обработку (с подгрузкой карты) закрыть, открыть заново, закрыть, открыть - "Падение 1С"
Т.е. стабильно с 3 раза "падает 1С".
(23) pp77, действительно, "падает 1С" при повторном открытии обработки. Но только с объектами Zulu. Обработка, приложенная, как пример использования, открывается сколько угодно раз. Я раз 20 открывал-закрывал эту обработку и это не приводило к падению 1С. Очевидно проблема в объекте Zulu, потому как контейнер, содержащий другие ActiveX объекты, при многократном открытии не приводит к краху системы.
(23) pp77, попробовал изменить Вашу обработку таким образом: контейнеры в ней создаются, но ActiveX объекты не устанавливаются. Обработка запускается множество раз и не "роняет" 1С. Стало быть, вывод сам собой напрашивается - дело не в контейнере, а в элементе управления.
Добрый день!
Получили ответ от разработчиков Zulu (они воспроизвели у себя ситуацию):
В сценарии работы формы получается так, что при закрытии формы элемент MapCtrl высвобождается раньше, чем объект connection point на IPropertyNotifySink, который форма-контейнер у него запросила. Стандартный сценарий подразумевает, что сначала высвобождаются запрошенные объекты у элемента, а потом уже сам элемент. Если элемент вставляется на форму через «прослойку», то тогда в этом коде нужно убедиться, что все connection point закрыты, прежде чем элемент будет высвобожден.
(27) pp77, Немного подправил код внешней компоненты. Сейчас обработка открывается - закрывается множество раз без "падения системы". Скиньте в личку e-mail. Я вышлю Вам ВК для тестирования.
Добрый день!
Обнаружил все же недочет, в рамках сеанса 1С все работает корректно, но при закрытии 1С, 1С закрывается с ошибкой.
Имя события проблемы: APPCRASH
Имя приложения: 1cv8c.exe
Версия приложения: 8.3.6.2299
Отметка времени приложения: 55f16760
Имя модуля с ошибкой: ntdll.dll
Версия модуля с ошибкой: 6.1.7601.18933
Отметка времени модуля с ошибкой: 55a69e20
Код исключения: c0000005
Смещение исключения: 00051365
Версия ОС: 6.1.7601.2.1.0.16.7
Код языка: 1049
Дополнительные сведения 1: 0a9e
Дополнительные сведения 2: 0a9e372d3b4ad19135b953a78882e789
Дополнительные сведения 3: 0a9e
Дополнительные сведения 4: 0a9e372d3b4ad19135b953a78882e789
(31) pp77, не удалось воспроизвести ошибку. Несколько раз в течение сеанса открывал - закрывал обработку. Потом закрыл приложение. Всё нормально отработало.
Да обработка "не валит" 1С. Возможно, что то не то сделали в функционале (будем смотреть) по результатам, отпишусь.
Компонента CtrlCont.dll успешно установлена. Но на Windows 10 при открытии обработок из архива сразу пишет:
SetActiveX : Неудачная попытка создания
элемента управления
MSDataGridLib.DataGrid.1.
SetActiveX : Неудачная попытка создания
элемента управления
MSChart20Lib.MSChart.2.
SetActiveX : Неудачная попытка создания
элемента управления
MSCAL.Calendar.7.
(35) Maxis, Все эти элементы управления - стандартные из поставки Windows 7 и взяты только для примера. В Windows10 ProgID этих элементов может быть другим, а может и элементов самих не быть.
Попробуйте вставить любой другой известный Вам элемент управления.
(35) Maxis, кстати, позвольте поинтересоваться: откуда у Вас эта внешняя компонента? В списке скачавших файл Вашего nick-name'а нет.
при попытке Контейнер1.УстановитьActiveX("Excel.Application.16", 1); умирает 1с
стоит win 10 x64, excel 2016, 1c 8.3.8.2027 также пробовал на excel 2013 по реестру смотрел PRogID корректный
(39)
проблема решена - у Excel не было ActiveX контрола. Excel.Application - контролом не является.
Установил "Надстройка Office 2003: веб-компоненты Office" (в ней есть нашелся контрол: "OWC11.Spreadsheet.11").
Заработало.
(40) tomasian, я, в принципе, это и предполагал, но, поскольку у меня установлен OpenOffice, проверить не смог.
Хотя, можно было догадаться: Excel.Application - это объект OLEAutomation, не из той оперы, как говорится.
А похожая утилита входит в поставку MS Visual Studio. Но всё равно за ссылку спасибо.
Доброго дня, Максим
А каким образом на форму добавляются сами контролы? И можно ли таким образом добавить на форму контролы из библиотеки Windows Forms типа ListBox и TextBox
Уже понял, что лист-бокс меня не спасет. В обычных формах я его юзал, вместо выпадающего списка (нужен был контроль нажатия клавиш и мышки внутри списка). А в управляемых формах даже если я это повторю, то все равно не смогу сделать из него "выпадающий" список, так чтобы он раскрывался поверх других элементов. При расширении списка он просто будет двигать другие элементы формы, а не "раскрываться" поверх.
(44) Не понял, в чём проблема использования? Все подписки на события элементов управления добавляются методом встроенного языка 1С: ДобавитьОбработчик , ;
. Естественно, надо будет знать количество и типы параметров, которые должен будет принимать вызываемый обработчик события.
(45)(46) Привязка к событиям скорее всего сработает. А вот "раскрывание" списка без смещения других элементов в УФ наверняка не получится. В обычных формах я список просто поверх других элементов накладывал и при "раскрытии" он закрывал все что оказывалось под ним. В УФ нельзя накладывать элементы друг на друга.
В любом случае спасибо за разъяснения
А в управляемых формах даже если я это повторю, то все равно не смогу сделать из него "выпадающий" список, так чтобы он раскрывался поверх других элементов. При расширении списка он просто будет двигать другие элементы формы, а не "раскрываться" поверх.
Добрый день Максим.
Хочу использовать Вашу разработку в нашем коммерческом продукте.
Ещё не скачивал, но судя по описанию, это то что мне надо. Раньше у нас всё было через HTML реализовано. Хотелось бы обсудить с Вами возможности, ограничения и условия.
С уважением, Александр. тел. 977-460-27-87
. На версии 14.ххх работать не будет, т. к. начиная с версии, по-моему 13.ххх у элементов управления нет окон, они прорисовываются платформой как web-browser прорисовывает элементы управления. А нет окон - некуда и контейнер вставлять.
(1,3) Как вариант - обработку можно запустить со "своим" паролем - передать в Форма.Параметр строку. (Например ОткрытьФормуМодально("Отчет","777","C:\. .\fn_lock.ert") - пароль будет "777" ).
(12) Зайти в конфигуратор - Открыть Конфигурацию - Интерфейсы - нужный интерфес - панели инструментов - там добавляешь пункт "Отчеты - Отчеты.ВнешнийОткрыть" на вкладке дополнительно указываешь путь к файлу (лучше положить его в ExtForms), назначеашь иконку/комбинацию клавиш
Добавил архив вместе с компонентой Альфа и обработкой.
Для тех, у кого еще нет єтой прекрасной компоненты
(14) и (9) Это для вас.
(21) Выражаю признательность за донесение искусства 1С до всяких, не особо умелых пользователей. Мерси.
(24) Отправь SMS на короткий номер ХХХХ со словом пароль и в ответ пришлют смс с паролем снятия блокировки. :))
(25) :) :) :)
(24) по-логике пустым.
но там немного мутно все с пользователями, у которых пароль "неопределён".
я думал что поборол проблемку, оказывается не совсем.
У меня ошибка такая.. У меня не прописан католог пользователя..
FN_LOCK.ERT(76)>: Поле агрегатного объекта не обнаружено (ПолучитьХэшПароляПользователя)
ХешПравильногоПароля=Сервис.ПолучитьХэшПароляПользователя(ИмяПользователя(), КаталогИБ());
(30) А есть проблемы с паролем? У меня все пароли цифровые - там проблем нет.
Если есть ошибка - пишите - я поправлю.
(31) Да, такая проблема есть - ввод большими буквами ее решает. У себя в обработке поднял регистр - проблемы нет.
Провел несколько экспериментов и сделал для себя открытие. Оказывается, пароль в 1С 7.7 регистронезависимый! :((((
Столько лет я верил что регистр имеет значение .
Исходя из этого, при проверке можно оставить только переменные: и . И условие упростить:
Если ХешПравильногоПароля=ХешПароля2 Тогда
. снять блокировку .
КонецЕсли;
(37) Размеры как раз и подбирал что бы покрасивше (но это уже дело вкуса).
по поводу регистронезависимого пароля - для меня тоже открытие (sarius подсказал), но так как я лично тестов не проводил, то просто добавил еще одну проверку.
Список контролируемых клавиш - хороший ход.
Но не понятно, зачем он здесь?
Разве не достаточно перехватывать только клавишу ?
(39) Нет, нужно перехватывать еще и хоткеи.
У меня используется обработка http://infostart.ru/projects/3800/ - так если вызывать с помощью хоткея какой-нибудь журнал - то он открывается под "экраном блокировки", что есть не очень-то красиво.
то же самое относиться к хоткеям на кнопках и пунктах меню.
(40) я комбинации горячих клавиш сам нигде не назначал, кроме тех, что по умолчанию заложены в конигурацию. Поэтому, у меня ни один хоткей под блокировкой не срабатывает.
Но уж сильно большой список нужных клавиш у тебя получился.
Я бы пошел по принципу "чего меньше". Меньше перечислений нужных или НЕ нужных. Проследил бы закономерность всех хоткеев, например, они все используют сочетание Контр+Шифт, или везде используются функциональные (F?) и т.д.
Но не подумай что я тебя учу? Тем более, что обработка уже написана и работает!
Хочу отметить - написана хорошо даже для не опытных или начинающих - только скачай и запускай! Это признак профессионализма!
(43) мерси за коплимант! (с) За двома Зайцами
:)
А по сути я и пошел по принципу "чего меньше" - просто у меня уже есть несколько обработок, которые содержат в себе списки "отфильтрованных" клавиш и я банально сделал копи-паст ;)
Красиво, но идейно не вполне верно - отсутствующий сотрудник может оставить на экране важные сведения, каковые всё равно видно, а это уязвимость. Лучше, если занавеска будет совсем сплошная, чтоб изображение рабочего окна 1С стало нечитабельным.
Для х=1 по 250 Цикл
х=х+14;
Форм.Прозрачность=х;
КонецЦикла;
Форм.Прозрачность=255;
P.S. у нас в компании важные данные вообще запрещено оставлять на экране даже при блокировке, в остальных случаях - наоборот присутствует определенная открытость - сотрудник временно отошел, но он работает и даже видно над чем.
Предлагаю при включении блокировки в цикл вставить задержку на 500 миллисекунд. Или другое число, кому как нравится :)
".
Для х=1 по 190 Цикл
х=х+14;
Форм.Прозрачность=х;
ВыполнитьЗадержку(500);
КонецЦикла;
. "
Когда экран затемняется постепенно, то очень красиво получается.
А для разблокировки задержка не нужна. Работать надо ведь быстро, правильно? :)
Вот код функции:
//-----------------------------------------------
Функция ВыполнитьЗадержку(мс=1000) Экспорт
// Устанавливает задержку в указанных миллисекундах
Попытка
TextScript ;
ScrptCtrl=CreateObject("MSScriptControl.ScriptControl");
ScrptCtrl.Language = "vbscript";
ScrptCtrl.AddCode(TextScript);
ScrptCtrl.Run("pause",1000);
ScrptCtrl=Пусто;
Возврат 1;
Исключение
Возврат 0;
КонецПопытки;
КонецФункции // ВыполнитьЗадержку
(48) Попробуй "обычную" задержку:
ТекВремя=ТекущееВремя(); Пока ТекВремя=ТекущееВремя() Цикл Состояние ("Пауза");КонецЦикла;
(46) функция не рабочая, прошу никого не копировать. Объект WScript с 1С-ом не подружен. Подружу, перевыложу.
(49) - задержка на 1 секунду. Это слишком много, миллисекунд 100 - с головой.
(46) и (51) - туфта все это!
Есть метод Sleep у объекта "Система" внешней компоненты 1С++.
При мощном ПК затухание смотрится красиво только при задержке 12 миллисекунд, не больше.
а у меня сделано так
//ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ
Перем ЕстьАктивность; //нужна для определения активности пользователя
//глобальная процедура внешней компоненты FormEx
//__________________________________________________________ ___________________
Процедура ПриНажатииКнопкиКлавиатуры(Конт, КодКл, кнАльт, кнШифт, кнКонтрол, Символ)
ЕстьАктивность = 1;
КонецПроцедуры
//__________________________________________________________ ___________________
Процедура ЗаблокироватьПрограмму()
//проверка активности пользователя
//в конце каждой минуты флаг активности выставляем в ноль
//если за минуту активность была то время неактивности обнуляем
//иначе время неактивности накапливаем
//как только время неактивности достигает значения переменной
//КолвоМинутДоБлокировки - блокируем программу.
Если ПустоеЗначение(глПользователь.КолвоМинутДоБлокировки) = 1 Тогда
Возврат;
КонецЕсли;
Если ЕстьАктивность = 0 Тогда
ВремяНеактивностиПользователя = 1 + ВремяНеактивностиПользователя;
Иначе
ВремяНеактивностиПользователя = 1;
КонецЕсли;
Если ВремяНеактивностиПользователя = глПользователь.КолвоМинутДоБлокировки Тогда //КолвоМинутДоБлокировки Тогда
Если глПрограммаЗаблокирована = 0 Тогда
глПрограммаЗаблокирована = 1;
ОткрытьФормуМодально("Обработка.ПроверкаПароля", "Блокировка");
КонецЕсли;
КонецЕсли;
ЕстьАктивность = 0;
КонецПроцедуры // ЗаблокироватьПрограмму
//__________________________________________________________ ___________________
Процедура парамОбработкаОжидания()
ЗаблокироватьПрограмму();
КонецПроцедуры // парамОбработкаОжидания
//__________________________________________________________ ___________________
Процедура ПриНачалеРаботыСистемы()
Если ЗагрузитьВнешниеКомпоненты() = 0 Тогда
СтатусВозврата(0);
Возврат;
КонецЕсли;
Если глПриНачалеРаботыСистемы() <> 1 Тогда
СтатусВозврата(0);
Возврат;
КонецЕсли;
//вызов процедуры парамОбработкаОжидания каждые 60 секунд (60000мС)
глСервис.ОбработкаОжидания("парамОбработкаОжидания", 60000);
КонецПроцедуры // ПриНачалеРаботыСистемы
В чем дело, программа пишет "Неудачная попытка создания объекта (AddIn.XMLParser)"?
Очевидно, что Вы запускаете обработку, которая использует внешнюю библиотеку v7plus.dll. В данном случае для работы с файлами формата XML. Но файл (библиотеку) v7plus.dll, обеспечивающий создание этого объекта (AddIn.XMLParser) программа не нашла.
Для нормальной работы этой библиотеки надо найти файл v7plus.dll (как правило находится в базе данных типовых после инсталяции) и скопировать его в Каталог Вашей информационной базы. А можно в каталог с исполняемыми файлами программы (C:\Program Files\1c77\bin\).
Первый вариант лучше для сетевой установки (не понадобится копировать эту библиотеку на каждый компьютер сети), второй для локальной, особенно, если у Вас установлено несколько баз (не понадобится копировать файл библиотеки во все базы).
Похожие FAQ
Cклонения по падежам 6
НаКлиенте Процедура Команда1(Команда) ФИО = " Иванов Иван Иванович" ; Падеж = 2; Пол = 1; Результат = СклонениеФИО(ФИО, Падеж, пол); Сообщить(Результат); КонецПроцедуры НаСервере Функция СклонениеФИО(ФИО, Падеж, пол) Результат = " " ; v7plus.dll - отсутствует CLSID либо отсутствует интерфейс llnitDone 0
При выгрузке отчетности в 1С 7.7 программа ругается на v7plus.dll и указывает, что отсутствует интерфейс llritDone. Что делать? 1) Поудалять нафиг все v7plus.dll из каталогов ИБ и папок пользователей 2) Оставить только в bin каталоге и зарегить чер Выгрузка / Загрузка данных посредством XML файлов? 1
В основе работы с XML-файлами лежит технология доступа SAX, которая осуществляет считывание по одному тегу. Для этого существует два типа данных – ЗаписьXML и ЧтениеXML . Запись данных справочника в XML-файл: Запись = Новый ЗаписьXML; Запись.О Загрузка данных из XML файла в Таблицу Значений и вывод в Табличный документ 0
Перем ИмяПути,ИмяФайла; Перем xmlParser; //пример чтения xml файла. Функция УстановитьКомпоненту() Если ЗагрузитьВнешнююКомпоненту(КаталогИБ()+" ExtFormsv7plus.dll" )=0 Тогда Если ЗагрузитьВнешнююКомпоненту(" v7plus.dll" )=0 Тогда Сообщит Запуск 1С:Предприятия 7.7 под Windows 7 1
Установка 1С 7.7 под Windows 7 : Установщик 1С 7.7 является 16-битным приложением, а в Windows 7 отключена поддержка таких программ. Поэтому я взял другой установщик 1С, 32-битный(Ищите в интернет или спросите у Франчайзи). Запустил его " от имени Посмотреть все результаты поиска похожих
Читайте также: