Здравствуйте друзья.. У меня такая задача..Есть справочник, где существуют уже готовые реквизиты..Сам справочник просто для хранине данных банковских карт.. Каждый новый банковский карт будет хранится в этом справочники со всеми данными.. Но как вы знаете у каждой карты есть своя дата окончание.. Теперь нужно что бы, когда настанет та дата которая указанно в справочники как "дата окончания" система предупридила что время карты заканчивается.. Например Написал в поле "Дата окончания" 10.12.2021 - это означает что в эту дату время истикает.. и в тот же день система меня оповищает о том что уже время.. Наверно все ясно :)
Я написал код и добавил его возле ПриНачалеРаботыСистемы()

```1c
    Процедура ПроверкаСрокаДействияКарт()
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | Справочник1.Ссылка
    |ИЗ
    | Справочник.Справочник1 КАК Справочник1
    |ГДЕ
    | Справочник1.ДатаОкончания = &Дата";

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

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

    Если ТЗРезультат.Количество() > 0 Тогда
    Для каждого Стр Из ТЗРезультат Цикл
    сообщить(Стр.Ссылка);
    КонецЦикла;
    КонецЕсли;
    КонецПроцедуры
```

А это в ПриНачалеРаботыСистемы()
    Е
```1c
    сли ИмяПользователя()="Пользователь" Тогда
    ПодключитьОбработчикОжидания("ПроверкаСрокаДействияКарт",3600);
    КонецЕсли;
```

Но реакции ноль.. От чего бы это могло бы быть ? кто может помочь ? может что-то не правильно написал ? Как то вот так) Заранее спасибо.. П.С - Обычный режим
---
Модуль приложения:

```1c
    Процедура ПриНачалеРаботыСистемы()
    Если ИмяПользователя()="ADMİN" Тогда
    Сообщить("Подключаем ожидание");
    ПодключитьОбработчикОжидания("ПроверкаСрокаДействияКарт",3600,Истина); // зачем каждый час проверять?
    КонецЕсли;
    КонецПроцедуры

    Процедура ПроверкаСрокаДействияКарт()
    массивОтвета = ПроверкаКарт.ПроверкаСрокаДействияКарт();
    Для каждого СтрокаОтвета из массивОтвета цикл
    Сообщить(СтрокаОтвета );
    КонецЦикла;
```

В общем модуле ПроверкаКарт

```1c
    Функция ПроверкаСрокаДействияКарт() Экспорт

    МассивОтвета = новый массив;

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

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

    Результат = Запрос.выполнить().Выбрать();
    Пока Результат.Следующий() цикл
    МассивОтвета.добавить(Результат.Карта);
    КонецЦикла;

    Возврат МассивОтвета

    КонецФункции
```
---
Если сравнивать ваш код и типовой(просто для примера), то в вашем коде необходимо экспортную процедуру указать в Модуле обычного приложения (а не в общем модуле) и будет вам счастье.

Либо (такое в типовом на скорую руку не встречал) в процедуре ПодключитьОбработчикОжидания - указать "ПроверкаКарт.ПроверкаСрокаДействияКарт"

Первый вариант, должен работать, а второй попробуйте - просто для интереса)
---
Типы не совпадают.
Минимум:

```1c
    |ГДЕ
    | НАЧАЛОПЕРИОДА(Справочник1.ДатаОкончания, ДЕНЬ) = НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ)";
```

И для очистки совести:

```1c
    Если ИмяПользователя()="Пользователь" Тогда
    Сообщить("Подключаем ожидание");
    ПодключитьОбработчикОжидания("ПроверкаСрокаДействияКарт",3600);
    КонецЕсли;
```
---
Исправить так?)
---
ПроверкаСрокаДействия должна находится в другом модуле и быть экспортной. Соответственно после переноса скорректируйте первый параметр ПодключитьОбработчикОжидания("ИмяМодуля.ИмяПроцедуры", 3600)
---
А где должно быть ?
---
в общем неглобальном модуле, где допускается вызов соответствующего клиента (управляемого или обычного приложения)
---
Сделал не получается все таки.. нимогу проверить..
---
Если бы сделал, то получилось бы.
---
Я сделал все то что вы сказали как даже много эксприментировал.. Но увы не получается.
---
А что именно? По шагам.
---
Вот из Синтакс-Помощника:
Имя экспортируемой процедуры модуля приложения (модуля обычного приложения) или общего глобального модуля.

То есть дезинформировал слегка :(
Если у вас ОбычноеПриложение, то запрос не выдаст ошибку, но может не сообщить, если будет пустой результат запроса.

Проблема в параметре.

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

В запросе вместо = ТекущаяДата нужно Поставить <= ТекущаяДата
Или использовать конструкцию Между.
---
так дело в том что никаких ошибок нету, он думает, но и нимогу проверить работоспасобность)
---
Равно подразумевает что ДатаОкончания карты будет равна именно 2021.04.18 15:42:42 если 41 или 43 - то не равна.
---
Так дело в том что я не програмист который работает годами. Я все написал так как понимаю.. Но вот проблема в том что куда и что написать этого мне не понятно...
---
В запросе вместо:

```1c
    Справочник1.ДатаОкончания = &Дата
```

 нужно написать

```1c
    Справочник1.ДатаОкончания <= &Дата
```

Или использовать конструкцию Между.

Ну а (2) тоже правильно с приведением к началу периода. Только вы не поняли, что скорее всего у вас в системе нет карт с окончанием на 18.04.2021
---
Модуль приложения выполняется на клиенте на сколько понимаю. Там запросы не допустимы.

```1c
    Процедура ПроверкаСрокаДействияКарт()
    МассивОтвета = *имяОбщегоМодуляССервернымВызовом(в свойствах стоит сервер = истина)*.ПроверкаСрокаДействияКарт();
    Для каждого карта из МассивОтвета цикл
    Сообщить(карта)
    КонецЦикла;
    КонецПроцедуры;
```

Где то в общем модуле

```1c
    Функция ПроверкаСрокаДействияКарт() Экспорт
    массивОтвета = новый массив;
    *тут в него набиваем что надо*
    возврат массивОтвета
    КонецФункции
```
---
Ну я на клиенте и делаю. только код другой
---
Можно более детально ? а то я ничего не понял
---
Создать общий модуль. "ПроверкаКарт" Указать что он серверный в свойствах модуля.
В нем создать функцию "ПроверкаСрокаДействияКарт" с пометкой Экспорт

"Функция ПроверкаСрокаДействияКарт() Экспорт"

В ней строим запрос к данным и формируем ответ, который возвращаем на клиента
В модуле приложения

```1c
    Процедура ПроверкаСрокаДействияКарт()
    МассивОтвета = ПроверкаКарт.ПроверкаСрокаДействияКарт();
    Для каждого Карта из МассивОтвета цикл
    Сообщить(карта)
    КонецЦикла;
    КонецПроцедуры;
```
---
ПроверкаСрокаДействияКарт() Экспорт сейчас проверю )
---
Значит что я сделал.. Я создал общий модуль, под названием "ПроверкаКарт" и там создал функцию

```1c
    Функция ПроверкаСрокаДействияКарт() Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | Карты.Ссылка
    |ИЗ
    | Справочники.Карты КАК Карты
    |ГДЕ
    | Карты.ДатаОкончанияКарты = &Дата";

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

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

    Если ТЗРезультат.Количество() > 0 Тогда
    Для каждого Стр Из ТЗРезультат Цикл
    сообщить(Стр.Ссылка);
    КонецЦикла;
    КонецЕсли;

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

потом зашел Модуль обычного приложение и там добавил этого

```1c
    Процедура ПриНачалеРаботыСистемы()
    Если ИмяПользователя()="ADMİN" Тогда
    Сообщить("Подключаем ожидание");
    ПодключитьОбработчикОжидания("ПроверкаКарт.ПроверкаСрокаДействияКарт",3600);
    КонецЕсли;
    КонецПроцедуры
```

  открыл программу и у меня сообщение выходит "Подключаем ожидание" он думает потом ошибку выдает
{МодульОбычногоПриложения(66)}: Ошибка при вызове метода контекста (ПодключитьОбработчикОжидания)
ПодключитьОбработчикОжидания("ПроверкаКарт.ПроверкаСрокаДействияКарт",3600);
по причине:
Недопустимое значение параметра (параметр номер '1')
 вот как то так..
---
Модуль приложения:

```1c
    Процедура ПриНачалеРаботыСистемы()
    Если ИмяПользователя()="ADMİN" Тогда
    Сообщить("Подключаем ожидание");
    ПодключитьОбработчикОжидания("ПроверкаСрокаДействияКарт",3600,Истина); // зачем каждый час проверять?
    КонецЕсли;
    КонецПроцедуры

    Процедура ПроверкаСрокаДействияКарт()
    массивОтвета = ПроверкаКарт.ПроверкаСрокаДействияКарт();
    Для каждого СтрокаОтвета из массивОтвета цикл
    Сообщить(СтрокаОтвета );
    КонецЦикла;
```

В общем модуле ПроверкаКарт

```1c
    Функция ПроверкаСрокаДействияКарт() Экспорт

    МассивОтвета = новый массив;

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

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

    Результат = Запрос.выполнить().Выбрать();
    Пока Результат.Следующий() цикл
    МассивОтвета.добавить(Результат.Карта);
    КонецЦикла;

    Возврат МассивОтвета

    КонецФункции
```
---
Процедура ПроверкаСрокаДействияКарт()
массивОтвета = ПроверкаКарт.ПроверкаСрокаДействияКарт();
Для каждого СтрокаОтвета из массивОтвета цикл
Сообщить(СтрокаОтвета );
КонецЦикла;
Сделал все так как вы сказали, выдает ошибку
{МодульОбычногоПриложения(24)}: Ошибка при вызове метода контекста (ПодключитьОбработчикОжидания)
ПодключитьОбработчикОжидания("ПроверкаСрокаДействияКарт",3600,Истина);
по причине:
Недопустимое значение параметра (параметр номер '1')
---
Вот на фотках
---
Попробуйте

```1c
    Процедура ПроверкаСрокаДействияКарт() Экспорт // добавил Экспорт
    массивОтвета = ПроверкаКарт.ПроверкаСрокаДействияКарт();
    Для каждого СтрокаОтвета из массивОтвета цикл
    Сообщить(СтрокаОтвета );
    КонецЦикла;
    КонецПроцедуры
```
---
цедура ПроверкаСрокаДействияКарт() Экспорт /
Ту же ошибку выдает :(
---
какие галочки стоят в настройках общего модуля? Общий модуль - Свойства
---
Клиент(Обычное приложение) - Только в этом галочка стоит и все
---
Если сравнивать ваш код и типовой(просто для примера), то в вашем коде необходимо экспортную процедуру указать в Модуле обычного приложения (а не в общем модуле) и будет вам счастье.

Либо (такое в типовом на скорую руку не встречал) в процедуре ПодключитьОбработчикОжидания - указать "ПроверкаКарт.ПроверкаСрокаДействияКарт"

Первый вариант, должен работать, а второй попробуйте - просто для интереса)
---
в Модуле обычного приложения (а не в общем модуле)
Можно скпаривать вес этот код и указать что и где? а то я на русском не так то уж лучше понимаю ) вот например наверху "Daemonold" указал что и куда я так и сделал
---
:) вам в (20) и дали ответ)

Только вот тут ошибка вместо

```1c
    Процедура ПроверкаСрокаДействияКарт()
    массивОтвета = ПроверкаКарт.ПроверкаСрокаДействияКарт();
    Для каждого СтрокаОтвета из массивОтвета цикл
    Сообщить(СтрокаОтвета );
    КонецЦикла;
```

это

```1c
    Процедура ПроверкаСрокаДействияКарт() экспорт //добавлен экспорт
    массивОтвета = ПроверкаКарт.ПроверкаСрокаДействияКарт();
    Для каждого СтрокаОтвета из массивОтвета цикл
    Сообщить(СтрокаОтвета );
    КонецЦикла;
```
---
Как я понял втарой вариант такой что ничего не трогаю только изменяю строку "ПроверкаСрокаДействияКарт" на строку "ПроверкаКарт.ПроверкаСрокаДействияКарт"- если я правильно понял вас, то так попробовал но не получилось выдает ошибку. а первый метод не полностью понял :(
---
отписался выше
---
Так я запутался))) Вы же говорите что в общем модуле ничего не писать ? Так выходит вес код нужно писать в модуле обычного приложение?
---
Сейчас изменения вносить необходимо только в МОДУЛЬ ОБЫЧНОГО ПРИЛОЖЕНИЯ. Там у вас должно быть 2 процедуры приведенные в (20) и одну процедуру необходимо изменить как в (24). И будет вам счастье. Функцию в общем модуле ПроверкаКарт НЕ ТРОГАТЬ
---
сейчас еще раз попробую..
---
{ОбщийМодуль.ПроверкаКарт.Модуль(1,9)}: Процедура или функция с указанным именем уже определена (ПроверкаСрокаДействияКарт)
Функция <<?>>ПроверкаСрокаДействияКарт() Экспорт (Проверка: Толстый клиент (обычное приложение))
---
Ошибка говорит, что у вас в общем модуле две одинаково названных процедуры или функции
Вы же знаете отличия Модуль обычного приложения и общий модуль?
---
Да но коды же вы как дали я одно и то же скопировал.. Вот даже сейчас скрин сделаю..
---
вот как сказали так и написал.
---
В Модуле обычного приложения процедуру ПроверкаСрокаДействияКарт перенесите ниже процедуры ПриНачалеРаботыСистемы
---
сделал опять одно и то же..
---
какая ошибка?
---
Та же {ОбщийМодуль.ПроверкаКарт.Модуль(1,9)}: Процедура или функция с указанным именем уже определена (ПроверкаСрокаДействияКарт)
Функция <<?>>ПроверкаСрокаДействияКарт() Экспорт (Проверка: Толстый клиент (обычное приложение))
---
cf- или dt-файл сможете сбросить?
---
можете подключиться через ани деск
---
мне ждать ?)))
---
еще актуально?
---
Спасибо большое, уже сам подумал, обдумал сделал) очень помогли и вы и все кто тут хотел помочь )
---
Как решили?
(50)
---
311 872 091- ани деск