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

У меня вопрос такой, как реализовать дату запрета по определенным документам и по пользователям, чтоб этот запрет можно было использовать при закрытии месяца (Обработка Закрытия месяца) или установив запрет для определенных пользователей ?

Помогите пожалуйста советами или какими нибудь наводками
---
Если хочешь установить одну общую дату запрета, то создай константу

Если Для каждого пользователя\фирмы\вид документа то Регистр или лучше справочник. Добавь реквизиты пользователя\фирмы\вид документа и дату запрета

Создай один общий модуль для проверки :

```1c
    ///Это на сервере, если что )
    Функция ВключенаДатаЗапретаЭкспорт(Ссылка) экспорт

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

    Запрос.УстановитьПараметр("Пользователь", Ссылка);
    Запрос.УстановитьПараметр("ТекущаяДата", Конецдня(ТекущаяДата()));

    РезультатЗапроса = Запрос.Выполнить().Выбрать();

    Если РезультатЗапроса.Следующий() Тогда
    Возврат Истина;
    Иначе
    возврат Ложь;
    КонецЕсли;

    КонецФункции
```

И в форме документа(Документов где хочешь установить дату) прописать приСоздании:

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    Если НЕ Объект.ссылка.Пустая() Тогда ///Проверяем не новый ли документ
    ЭтаФорма.Доступность = ОбщийМодульСервер.ВключенаДатаЗапретаЭкспорт(Пользователи.ТекущийПользователь());
    //ЭтаФорма.Доступность = ОбщийМодульСервер.ВключенаДатаЗапретаЭкспорт(Организация такая то);
    КонецЕсли;

    КонецПроцедуры
```
---
Получилось спасибо огромное !

Создал Справочник: "Даты запрета", в нем реквизит: "Дата запрета".

в общем модуле:

```1c
    Функция ВключенаДатаЗапретаЭкспорт(ДатаДокумента) экспорт

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ДатыЗапрета.Ссылка КАК Ссылка,
    | ДатыЗапрета.ДатаЗапрета КАК ДатаЗапрета
    |ИЗ
    | Справочник.ДатыЗапрета КАК ДатыЗапрета
    |ГДЕ
    | ДатыЗапрета.ДатаЗапрета >= НАЧАЛОПЕРИОДА(&ДатаЗапрета, ДЕНЬ)";

    Запрос.УстановитьПараметр("ДатаЗапрета", ДатаДокумента);

    РезультатЗапроса = Запрос.Выполнить().Выбрать();

    Если РезультатЗапроса.Следующий() Тогда
    Возврат Истина;
    Иначе
    возврат Ложь;
    КонецЕсли;

    КонецФункции
```

и в форме документов которых нужно запрещать редактирование:

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    Если НЕ Объект.ссылка.Пустая() Тогда ///Проверяем не новый ли документ
    ЭтаФорма.ТолькоПросмотр = ОбщийМодульДатыЗапрета.ВключенаДатаЗапретаЭкспорт(Объект.Дата);
    //ЭтаФорма.Доступность = ОбщийМодульСервер.ВключенаДатаЗапретаЭкспорт(Организация такая то);
    КонецЕсли;

    КонецПроцедуры
```
---
в 1С:Платежные документы 8 - это не возможно!
---
Во-первых, неизвестно, какая у вас конфигурация. Предположим БП 3.0. Администрирование->Сервис->Дата запрета изменения данных. Можно для каждого сотрудника выбрать конкретную дату. Дата может быть общая или по разделам. Дата действует на изменение данных. На обработку Закрытие месяца она не действует, но изменения, которые производятся этой обработкой будут выполнены только, если они не запрещены датой запрета редактирования.
---
Давайте все вместе посоветуем коллеге - не стоит начинать изучение 1С с написания собственной конфигурации с нуля под собственное предприятие...
---
Я бы посоветовал относиться к коллегам не как к телепатам и гадалкам
---
))
---
Да я тоже посоветую, дело нелегкое )
---
Создай свой РегистрСведений с необходимой информацией по Запретам.
В Форме каждого документа ПриОткрытии() вставь код

```1c
    Если ЕстьМойЗапрет(Объект) Тогда
    Отказ = Истина;
    Сообщить("Запрет");
    Возврат;
    КонецЕсли;
```
---
Забыл написать извиняюсь, у меня Не типовая конфигурация
---
Будьте добры пожалуйста очень хочу реализовать это ))
---
Нетиповая на управляемых формах или обычных?
---
Управляемые формы
(10)
---
в Типовой Конфигурации УНФ 1.6 расмотривал коды, В обработке Закрытие месяца получается параметры сеанса, свойства разделов и установленные даты запретов, исходя чего выполняются дальнейшие действия Либо перенести дату запрета либо установить. Хотел бы узнать основы как организовать это все, какие можете дать советы
---
Проще в БП3.0 посмотреть модули установки даты запрета изменения данных.
УНФ - своя специфика.
---
аха ясно, стоит посмотреть тогда
---
Если хочешь установить одну общую дату запрета, то создай константу

Если Для каждого пользователя\фирмы\вид документа то Регистр или лучше справочник. Добавь реквизиты пользователя\фирмы\вид документа и дату запрета

Создай один общий модуль для проверки :

```1c
    ///Это на сервере, если что )
    Функция ВключенаДатаЗапретаЭкспорт(Ссылка) экспорт

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

    Запрос.УстановитьПараметр("Пользователь", Ссылка);
    Запрос.УстановитьПараметр("ТекущаяДата", Конецдня(ТекущаяДата()));

    РезультатЗапроса = Запрос.Выполнить().Выбрать();

    Если РезультатЗапроса.Следующий() Тогда
    Возврат Истина;
    Иначе
    возврат Ложь;
    КонецЕсли;

    КонецФункции
```

И в форме документа(Документов где хочешь установить дату) прописать приСоздании:

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    Если НЕ Объект.ссылка.Пустая() Тогда ///Проверяем не новый ли документ
    ЭтаФорма.Доступность = ОбщийМодульСервер.ВключенаДатаЗапретаЭкспорт(Пользователи.ТекущийПользователь());
    //ЭтаФорма.Доступность = ОбщийМодульСервер.ВключенаДатаЗапретаЭкспорт(Организация такая то);
    КонецЕсли;

    КонецПроцедуры
```
---
спасибо за подробный совет, попробую делать так
---
Получилось спасибо огромное !

Создал Справочник: "Даты запрета", в нем реквизит: "Дата запрета".

в общем модуле:

```1c
    Функция ВключенаДатаЗапретаЭкспорт(ДатаДокумента) экспорт

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ДатыЗапрета.Ссылка КАК Ссылка,
    | ДатыЗапрета.ДатаЗапрета КАК ДатаЗапрета
    |ИЗ
    | Справочник.ДатыЗапрета КАК ДатыЗапрета
    |ГДЕ
    | ДатыЗапрета.ДатаЗапрета >= НАЧАЛОПЕРИОДА(&ДатаЗапрета, ДЕНЬ)";

    Запрос.УстановитьПараметр("ДатаЗапрета", ДатаДокумента);

    РезультатЗапроса = Запрос.Выполнить().Выбрать();

    Если РезультатЗапроса.Следующий() Тогда
    Возврат Истина;
    Иначе
    возврат Ложь;
    КонецЕсли;

    КонецФункции
```

и в форме документов которых нужно запрещать редактирование:

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    Если НЕ Объект.ссылка.Пустая() Тогда ///Проверяем не новый ли документ
    ЭтаФорма.ТолькоПросмотр = ОбщийМодульДатыЗапрета.ВключенаДатаЗапретаЭкспорт(Объект.Дата);
    //ЭтаФорма.Доступность = ОбщийМодульСервер.ВключенаДатаЗапретаЭкспорт(Организация такая то);
    КонецЕсли;

    КонецПроцедуры
```
---
работает . Но, в общем модуле дает ошибку если сравнить дату запрета с текущей :

```1c
    Функция ВключенаДатаЗапретаЭкспорт(Ссылка) экспорт

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ДатыЗапрета.Ссылка КАК Ссылка,
    | ДатыЗапрета.ОбъектБлокировки КАК ОбъектБлокировки,
    | ДатыЗапрета.ДатаЗапрета КАК ДатаЗапрета
    |ИЗ
    | Справочник.ДатыЗапрета КАК ДатыЗапрета
    |ГДЕ
    | ДатыЗапрета.ОбъектБлокировки = &ОбъектБлокировки
    | И ДатыЗапрета.ДатаЗапрета = < &ТекущаяДата";

    Запрос.УстановитьПараметр("ОбъектБлокировки", Ссылка);
    Запрос.УстановитьПараметр("ТекущаяДата", Конецдня(ТекущаяДата()));

    РезультатЗапроса = Запрос.Выполнить().Выбрать();

    Если РезультатЗапроса.Следующий() Тогда
    Возврат Истина;
    Иначе
    возврат Ложь;
    КонецЕсли;

    КонецФункции
```
---
= < Это что за сравнение ?)

>= либо <=
---
я раньше с этим не сталкивался, вот и практиковал )) спасибо вам за помощь !
---
и еще Цикл поменял на Тогда, правильно ли я сделал ? потому что Цикл давал ошибку
---
да, я исправил же сразу