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

```1c
    ПользовательИнфБазы = ПользователиИнформационнойБазы.ТекущийПользователь().ПолноеИмя;

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | СоглашенияПоРаботеСпрограммой.Согласен КАК Согласен,
    | СоглашенияПоРаботеСпрограммой.ДатаПодписания КАК ДатаПодписания,
    | СоглашенияПоРаботеСпрограммой.Сотрудник КАК Сотрудник
    |ИЗ
    | РегистрСведений.СоглашенияПоРаботеСпрограммой КАК СоглашенияПоРаботеСпрограммой
    |ГДЕ
    | СоглашенияПоРаботеСпрограммой.Сотрудник.Наименование = &Наименование";

    Запрос.УстановитьПараметр("Наименование", ПользовательИнфБазы);
    РезультатЗапроса = Запрос.Выполнить().Выбрать();

    Пока РезультатЗапроса.Следующий() Цикл
    Если РезультатЗапроса.Согласен Тогда
    Отказ = Истина;
    Возврат;
    КонецЕсли;
    КонецЦикла;
```
---
возможно это связано с тем, что обработку надо было не "ПередНачаломРаботыСистемы" а "ПриНачалеРаботы.." поставить вызов.
Или дальше в коде что-то ему мешает
---
в рамках текущего дня чтобы не открывалась повторно, если уже была проставлена ? написать запрос по этому же регистру и проверять значение ресурса на текущий день
---
Нет, вообще в принципе. Если значение булево истина, то что бы не открывалась повторно ни завтра, ни после завтра.
---
тогда использовать виртуальную таблицу этого регистра "срез последних", если регистр периодический, конечно. Или просто условие ГДЕ Период <= &ТекущаяДата.
А в чём смысл, один раз проставили условие в истину и всё, больше никогда окошко не выйдет ?
---
Да, суть обработки в том, что когда человек запускает обработку и ставит галочку, то подтверждает свое ознакомление с инструкциями, что бы потом не было таких тем, как "А мне инструкцию никто не предоставил."
---
Странный способ для "доказательства потом") и вообще, галочку мог админ поставить :D
---
Ну, на админа можно свалить всё, т.к. конфа самописная, да, если и не самописная тоже можно ))))
---
ответили в (2)
ничем не отличается проверка в рамках текущего дня или вообще, только логикой проверки и возможно текстом запроса
проверку перед запуском обработки по регистру и запускать или нет обработку по результату
---
AndrewUs, Вы, все-таки, прислушайтесь к советам насчет каких-либо галочек в программе, как слабоватого доказательства чьего-то согласия. Вы на соглашения, выскакивающие при первом запуске серьезного ПО, не смотрите. У Вас другой случай. В дальнейшем будете показывать форму списка РС, где проставлены чек-боксы? Думаете, прокатит? Было бы славно, если так, но я что-то сомневаюсь.

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

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

```1c
    Процедура ПередНачаломРаботыСистемы()
    СтандартныеПодсистемыКлиент.ПередНачаломРаботыСистемы();
    КонецПроцедуры
```
,
где
Общий модуль "СтандартныеПодсистемыКлиент" содержит код

```1c
    ОткрытьФорму("Обработка.ПодтверждениеОбОзнакомленииСИнструкциями.Форма");
```

Общий модуль используется на клиенте.
---
в этой обработке присозданииНаСервере проверяете своё "условие" (запрос на дату) и если оно не выполнено то делаете Возврат; ну или Отказ = истина;
---
Это все хорошо, получилось как нужно, но перестала работать другая важная функция, а именно открытие поверх всех окон с блокировкой, т.е., если эта обработка открыта, то пока не закроешь эту обработку ничего в программе делать не получится.
Точнее в веб-клиенте блокируется остальной функционал, а вот в тонком продолжает работать, коряво, список документов не так открывается, но продолжает работать.
---
Перестала работать по другой причине видимо, выложите код, который вы написали в ПриСоздании обработки.
---
```1c
    ПользовательИнфБазы = ПользователиИнформационнойБазы.ТекущийПользователь().ПолноеИмя;
    Объект.Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию(ПользовательИнфБазы);

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | СоглашенияПоРаботеСпрограммой.Согласен КАК Согласен,
    | СоглашенияПоРаботеСпрограммой.ДатаПодписания КАК ДатаПодписания,
    | СоглашенияПоРаботеСпрограммой.Сотрудник КАК Сотрудник
    |ИЗ
    | РегистрСведений.СоглашенияПоРаботеСпрограммой КАК СоглашенияПоРаботеСпрограммой
    |ГДЕ
    | СоглашенияПоРаботеСпрограммой.Сотрудник.Наименование = &Наименование";

    Запрос.УстановитьПараметр("Наименование", ПользовательИнфБазы);
    РезультатЗапроса = Запрос.Выполнить().Выбрать();

    Пока РезультатЗапроса.Следующий() Цикл
    Если ПользовательИнфБазы = Объект.Сотрудник.Наименование Тогда
    Если РезультатЗапроса.Согласен = ИСТИНА Тогда
    Объект.Согласие = Истина;
    Объект.Дата = РезультатЗапроса.ДатаПодписания;
    Отказ = Истина;
    Сообщить("Подпись уже получена.");
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
```
---
ну, тут конечно, вместо пользователя в регистре должен был быть Пользователь...

```1c
    ПользовательИнфБазы = ПользователиИнформационнойБазы.ТекущийПользователь().ПолноеИмя;

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | СоглашенияПоРаботеСпрограммой.Согласен КАК Согласен,
    | СоглашенияПоРаботеСпрограммой.ДатаПодписания КАК ДатаПодписания,
    | СоглашенияПоРаботеСпрограммой.Сотрудник КАК Сотрудник
    |ИЗ
    | РегистрСведений.СоглашенияПоРаботеСпрограммой КАК СоглашенияПоРаботеСпрограммой
    |ГДЕ
    | СоглашенияПоРаботеСпрограммой.Сотрудник.Наименование = &Наименование";

    Запрос.УстановитьПараметр("Наименование", ПользовательИнфБазы);
    РезультатЗапроса = Запрос.Выполнить().Выбрать();

    Пока РезультатЗапроса.Следующий() Цикл
    Если РезультатЗапроса.Согласен Тогда
    Отказ = Истина;
    Возврат;
    КонецЕсли;
    КонецЦикла;
```
---
Не помогло, мне кажется дело не в коде, а в самой процедуре ПриСоздании, потому что ПриОткрытии отрабатывает правильно, даже при старом варианте кода
---
возможно это связано с тем, что обработку надо было не "ПередНачаломРаботыСистемы" а "ПриНачалеРаботы.." поставить вызов.
Или дальше в коде что-то ему мешает
---
Да, поменял на ПриНачалеРаботы и появилась блокировка при старте
---
По хорошему там бы пользователь в регистре, а не сотрудник.. ну и может регистр сделать периодическим, а там и переделать, например, раз в месяц вызывать её, пускай подтверждают :D
---
Да по хорошему, конфигурацию бы с БСП "смешать", но уже много чего наворочено, что "дороже" обойдется))))
---
Хотя когда просто открываю (ПриОткрытии продублировал код) срабатывает блокировка
---
Спасибо огромное за помощь