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

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 Сейчас в теме
Оставьте свое сообщение
Вакансии
Программист 1С
Казань
зарплата от 150 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 200 000 руб. до 300 000 руб.
Полный день

Программист 1С (удаленно)
Самара
зарплата от 230 000 руб. до 230 000 руб.
Полный день

Руководитель группы разработки 1С
Москва
зарплата от 250 000 руб. до 250 000 руб.
Полный день

Специалист техподдержки
Санкт-Петербург
зарплата от 100 руб. до 150 руб.
Полный день