Напоминание от системы

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

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



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


Но реакции ноль.. От чего бы это могло бы быть ? кто может помочь ? может что-то не правильно написал ? Как то вот так) Заранее спасибо.. П.С - Обычный режим
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
22. Daemonold 19 18.04.21 18:00 Сейчас в теме
(20) Модуль приложения:

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

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


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

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

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

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

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

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

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

КонецФункции
Показать
29. user1135816 4 19.04.21 14:30 Сейчас в теме
(28) Если сравнивать ваш код и типовой(просто для примера), то в вашем коде необходимо экспортную процедуру указать в Модуле обычного приложения (а не в общем модуле) и будет вам счастье.

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

Первый вариант, должен работать, а второй попробуйте - просто для интереса)
Остальные ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. DenisCh 18.04.21 04:32 Сейчас в теме
Типы не совпадают.
Минимум:
|ГДЕ
| НАЧАЛОПЕРИОДА(Справочник1.ДатаОкончания, ДЕНЬ) = НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ)";


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

Если ИмяПользователя()="Пользователь" Тогда
Сообщить("Подключаем ожидание");
ПодключитьОбработчикОжидания("ПроверкаСрокаДействияКарт",3600);
КонецЕсли;
5. user1087014 18.04.21 11:55 Сейчас в теме
3. Leon75 18.04.21 08:14 Сейчас в теме
ПроверкаСрокаДействия должна находится в другом модуле и быть экспортной. Соответственно после переноса скорректируйте первый параметр ПодключитьОбработчикОжидания("ИмяМодуля.ИмяПроцедуры", 3600)
4. user1087014 18.04.21 11:54 Сейчас в теме
6. Leon75 18.04.21 12:37 Сейчас в теме
(4)в общем неглобальном модуле, где допускается вызов соответствующего клиента (управляемого или обычного приложения)
7. user1087014 18.04.21 12:39 Сейчас в теме
(6)Сделал не получается все таки.. нимогу проверить..
8. Leon75 18.04.21 13:35 Сейчас в теме
(7)Если бы сделал, то получилось бы.
9. user1087014 18.04.21 13:45 Сейчас в теме
(8) Я сделал все то что вы сказали как даже много эксприментировал.. Но увы не получается.
14. Leon75 18.04.21 14:42 Сейчас в теме
(9)А что именно? По шагам.
15. Leon75 18.04.21 15:26 Сейчас в теме
(9)Вот из Синтакс-Помощника:
Имя экспортируемой процедуры модуля приложения (модуля обычного приложения) или общего глобального модуля.

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

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



В запросе вместо = ТекущаяДата нужно Поставить <= ТекущаяДата
Или использовать конструкцию Между.
16. user1087014 18.04.21 15:47 Сейчас в теме
(15) так дело в том что никаких ошибок нету, он думает, но и нимогу проверить работоспасобность)
18. Leon75 18.04.21 15:52 Сейчас в теме
(16)Равно подразумевает что ДатаОкончания карты будет равна именно 2021.04.18 15:42:42 если 41 или 43 - то не равна.
19. user1087014 18.04.21 15:56 Сейчас в теме
(18) Так дело в том что я не програмист который работает годами. Я все написал так как понимаю.. Но вот проблема в том что куда и что написать этого мне не понятно...
21. Leon75 18.04.21 16:15 Сейчас в теме
(19)В запросе вместо:
Справочник1.ДатаОкончания = &Дата

нужно написать
Справочник1.ДатаОкончания <= &Дата

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

Ну а (2) тоже правильно с приведением к началу периода. Только вы не поняли, что скорее всего у вас в системе нет карт с окончанием на 18.04.2021
10. Daemonold 19 18.04.21 13:50 Сейчас в теме
Модуль приложения выполняется на клиенте на сколько понимаю. Там запросы не допустимы.
Процедура ПроверкаСрокаДействияКарт() 
    МассивОтвета = *имяОбщегоМодуляССервернымВызовом(в свойствах стоит сервер = истина)*.ПроверкаСрокаДействияКарт();
Для каждого карта из  МассивОтвета  цикл
Сообщить(карта)
КонецЦикла;
КонецПроцедуры;


Где то в общем модуле
Функция ПроверкаСрокаДействияКарт() Экспорт
массивОтвета = новый массив;
*тут в него набиваем что надо*
возврат массивОтвета
КонецФункции
11. user1087014 18.04.21 14:02 Сейчас в теме
(10) Ну я на клиенте и делаю. только код другой
12. user1087014 18.04.21 14:03 Сейчас в теме
(10)Можно более детально ? а то я ничего не понял
13. Daemonold 19 18.04.21 14:17 Сейчас в теме
(12) Создать общий модуль. "ПроверкаКарт" Указать что он серверный в свойствах модуля.
В нем создать функцию "ПроверкаСрокаДействияКарт" с пометкой Экспорт

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

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

Процедура ПроверкаСрокаДействияКарт()
МассивОтвета = ПроверкаКарт.ПроверкаСрокаДействияКарт();
Для каждого Карта из МассивОтвета цикл
Сообщить(карта)
КонецЦикла;
КонецПроцедуры;
17. user1087014 18.04.21 15:47 Сейчас в теме
(13)
ПроверкаСрокаДействияКарт() Экспорт
сейчас проверю )
20. user1087014 18.04.21 16:01 Сейчас в теме
Значит что я сделал.. Я создал общий модуль, под названием "ПроверкаКарт" и там создал функцию
Функция ПроверкаСрокаДействияКарт() Экспорт
	Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Карты.Ссылка
|ИЗ
| Справочники.Карты КАК Карты
|ГДЕ
| Карты.ДатаОкончанияКарты = &Дата";

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

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

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

КонецФункции
Показать

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

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

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

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


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

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

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

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

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

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

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

КонецФункции
Показать
23. user1087014 18.04.21 18:47 Сейчас в теме
(22)
Процедура ПроверкаСрокаДействияКарт()
массивОтвета = ПроверкаКарт.ПроверкаСрокаДействияКарт();
Для каждого СтрокаОтвета из массивОтвета цикл
Сообщить(СтрокаОтвета );
КонецЦикла;

Сделал все так как вы сказали, выдает ошибку
{МодульОбычногоПриложения(24)}: Ошибка при вызове метода контекста (ПодключитьОбработчикОжидания)
ПодключитьОбработчикОжидания("ПроверкаСрокаДействияКарт",3600,Истина);
по причине:
Недопустимое значение параметра (параметр номер '1')
Прикрепленные файлы:
24. user1087014 18.04.21 18:53 Сейчас в теме
(22) Вот на фотках
Прикрепленные файлы:
25. Daemonold 19 18.04.21 19:24 Сейчас в теме
(24) Попробуйте

Процедура ПроверкаСрокаДействияКарт() Экспорт // добавил Экспорт
массивОтвета = ПроверкаКарт.ПроверкаСрокаДействияКарт();
Для каждого СтрокаОтвета из массивОтвета  цикл
Сообщить(СтрокаОтвета );
КонецЦикла;
КонецПроцедуры
26. user1087014 18.04.21 19:44 Сейчас в теме
(25)
цедура ПроверкаСрокаДействияКарт() Экспорт /

Ту же ошибку выдает :(
27. user1135816 4 19.04.21 13:51 Сейчас в теме
(24) какие галочки стоят в настройках общего модуля? Общий модуль - Свойства
28. user1087014 19.04.21 14:19 Сейчас в теме
(27) Клиент(Обычное приложение) - Только в этом галочка стоит и все
29. user1135816 4 19.04.21 14:30 Сейчас в теме
(28) Если сравнивать ваш код и типовой(просто для примера), то в вашем коде необходимо экспортную процедуру указать в Модуле обычного приложения (а не в общем модуле) и будет вам счастье.

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

Первый вариант, должен работать, а второй попробуйте - просто для интереса)
30. user1087014 19.04.21 14:48 Сейчас в теме
(29)
в Модуле обычного приложения (а не в общем модуле)

Можно скпаривать вес этот код и указать что и где? а то я на русском не так то уж лучше понимаю ) вот например наверху "Daemonold" указал что и куда я так и сделал
32. user1135816 4 19.04.21 14:59 Сейчас в теме
(30) :) вам в (20) и дали ответ)

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

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


это

Процедура ПроверкаСрокаДействияКарт() экспорт //добавлен экспорт
массивОтвета = ПроверкаКарт.ПроверкаСрокаДействияКарт();
Для каждого СтрокаОтвета из массивОтвета  цикл
Сообщить(СтрокаОтвета );
КонецЦикла;
31. user1087014 19.04.21 14:56 Сейчас в теме
(29)Как я понял втарой вариант такой что ничего не трогаю только изменяю строку "ПроверкаСрокаДействияКарт" на строку "ПроверкаКарт.ПроверкаСрокаДействияКарт"- если я правильно понял вас, то так попробовал но не получилось выдает ошибку. а первый метод не полностью понял :(
33. user1135816 4 19.04.21 15:00 Сейчас в теме
34. user1087014 19.04.21 15:04 Сейчас в теме
(33) Так я запутался))) Вы же говорите что в общем модуле ничего не писать ? Так выходит вес код нужно писать в модуле обычного приложение?
35. user1135816 4 19.04.21 15:06 Сейчас в теме
(34) Сейчас изменения вносить необходимо только в МОДУЛЬ ОБЫЧНОГО ПРИЛОЖЕНИЯ. Там у вас должно быть 2 процедуры приведенные в (20) и одну процедуру необходимо изменить как в (24). И будет вам счастье. Функцию в общем модуле ПроверкаКарт НЕ ТРОГАТЬ
36. user1087014 19.04.21 15:09 Сейчас в теме
(35) сейчас еще раз попробую..
37. user1087014 19.04.21 15:13 Сейчас в теме
(35){ОбщийМодуль.ПроверкаКарт.Модуль(1,9)}: Процедура или функция с указанным именем уже определена (ПроверкаСрокаДействияКарт)
Функция <<?>>ПроверкаСрокаДействияКарт() Экспорт (Проверка: Толстый клиент (обычное приложение))
38. user1135816 4 19.04.21 15:18 Сейчас в теме
(37) Ошибка говорит, что у вас в общем модуле две одинаково названных процедуры или функции
Вы же знаете отличия Модуль обычного приложения и общий модуль?
39. user1087014 19.04.21 15:19 Сейчас в теме
(38)Да но коды же вы как дали я одно и то же скопировал.. Вот даже сейчас скрин сделаю..
40. user1087014 19.04.21 15:22 Сейчас в теме
(38)
вот как сказали так и написал.
Прикрепленные файлы:
41. user1135816 4 19.04.21 15:51 Сейчас в теме
(40) В Модуле обычного приложения процедуру ПроверкаСрокаДействияКарт перенесите ниже процедуры ПриНачалеРаботыСистемы
42. user1087014 19.04.21 15:58 Сейчас в теме
(41) сделал опять одно и то же..
43. user1135816 4 19.04.21 15:58 Сейчас в теме
45. user1087014 19.04.21 15:59 Сейчас в теме
(43) Та же {ОбщийМодуль.ПроверкаКарт.Модуль(1,9)}: Процедура или функция с указанным именем уже определена (ПроверкаСрокаДействияКарт)
Функция <<?>>ПроверкаСрокаДействияКарт() Экспорт (Проверка: Толстый клиент (обычное приложение))
44. user1135816 4 19.04.21 15:59 Сейчас в теме
(42) cf- или dt-файл сможете сбросить?
46. user1087014 19.04.21 15:59 Сейчас в теме
(44) можете подключиться через ани деск
48. user1087014 19.04.21 16:04 Сейчас в теме
49. user1135816 4 19.04.21 16:58 Сейчас в теме
50. user1087014 19.04.21 17:17 Сейчас в теме
(49) Спасибо большое, уже сам подумал, обдумал сделал) очень помогли и вы и все кто тут хотел помочь )
51. user1135816 4 19.04.21 17:18 Сейчас в теме
47. user1087014 19.04.21 16:02 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот