Оповещение Даты Окончание Карты

1. G_100243392280997043603 03.02.22 12:24 Сейчас в теме
Друзья здавствуйте. есть проблема))) Значит у меня есть документ с ТЧ.. Внутри есть инфо про бонусных карт которую раздает например банк. У каждой карты есть дата окончание. п.с "Дата Окончание" - внутри Табличной части.. Теперь есть задачка. Нужно Сделать так что, Если например дата окончание карты 02,02,2022 то Сегодня когда я открываю систему, что бы система меня оповищала о том что дата карты Закончилос..

Теперь о том что я сделал..
Открыл общий модул с названием "ПроверкаКарт"
а внутри написал функцию
Функция ПроверкаДействияКарт() Экспорт

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

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


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

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

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

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

Потом в модуле приложение написал процедуры 

Процедура ПриНачалеРаботыСистемы()
	ПодключитьОбработчикОжидания("ПроверкаСрокаДействияКарт",3);

КонецПроцедуры

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


У меня выдает ошибку


{МодульУправляемогоПриложения(8,17)}: Переменная не определена (ПроверкаКарт)
массивОтвета = <<?>>ПроверкаКарт.ПроверкаДействияКарт(); (Проверка: Тонкий клиент)


Прошу помочь Управляемая Форма
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
16. STELEICE 08.02.22 18:49 Сейчас в теме
(1) Если вы вызываете процедуру общего модуляя из модуля управляемого приложения то общий модуль должен быть глобальным иначе не взлетит
2. uk09 03.02.22 12:43 Сейчас в теме
Добрый день!

Для начала, проверьте , точно ли ПроверкаКарт - общий модуль, и не для серверных, а для клиентских вызовов ( у Вас вызов происходит из ТонкогоКлиента). Откройте конфигуратор в директиве &НаКлиенте, напишите ПроверкаКарт, поставьте точку. Если увидите процедуры общего модуля , то все правильно и наоборот...
3. G_100243392280997043603 03.02.22 12:47 Сейчас в теме
(2)
из ТонкогоКлиента). Откройте конфигуратор в директиве &НаКлиенте,
Вы этого имеете ввиду? если да то сейчас так. Но я проверил. Убрал галку из сервера и поставил на клиент тогда ошибку не выдает система открывает но после открытие выходит опять ошибка..


Ошибка инициализации модуля: ОбщийМодуль.ПроверкаКарт.Модуль
по причине:
{ОбщийМодуль.ПроверкаКарт.Модуль(5,16)}: Тип не определен (Запрос)
Запрос = Новый <<?>>Запрос;
Прикрепленные файлы:
4. Airlord 03.02.22 12:59 Сейчас в теме
Добрый день!А почему вы НаКлиенте делаете запрос?
5. G_100243392280997043603 03.02.22 13:09 Сейчас в теме
(4)Ну может вы скажете чуть чуть по другому сделать ? Я открыт всяким новинкам ))) Самое главное что бы заработала )
6. Vlan 36 03.02.22 13:26 Сейчас в теме
(5) Вы можете у модуля сделать признаки и клиента, и сервера, а нужный режим выбирать конструкцией
#Если Клиент (Сервер) Тогда
Для запроса использовать сервер, для вывода клиентских данных - клиент.
7. G_100243392280997043603 03.02.22 13:38 Сейчас в теме
(6)
апроса использовать сервер, для вывода клиентских данных - клиент.
Давайте так. Я 100 раз думал когда писал этот код, да и правильно ли написал или нет не знаю еще.. мне конкретно нужно сказать, вот это поменяй на это и все)) А то реально голова уже не варит ))
8. Vlan 36 03.02.22 13:56 Сейчас в теме
(7) Я не вдаюсь в смысл процедур, просто объясняю, как их поделить на серверные и клиентские.
#Если Клиент Тогда
Функция ПроверкаДействияКарт() Экспорт

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

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

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

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

#КонецЕсли

#Если Сервер Тогда
Функция ПолучитьРезультатЗапроса()

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


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

Результат = Запрос.выполнить().Выбрать();
Возврат Результат;
КонецФункции
#КонецЕсли
Показать
9. G_100243392280997043603 03.02.22 14:05 Сейчас в теме
(8)
 #Если Клиент Тогда
Функция ПроверкаДействияКарт() Экспорт

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

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

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

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

#КонецЕсли

#Если Сервер Тогда
Функция ПолучитьРезультатЗапроса()

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


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

Результат = Запрос.выполнить().Выбрать();
Возврат Результат;
КонецФункции
#КонецЕсли
Показать


А то что в модуле приложение я написал там как будет ? потому что у меня в этот раз там ошибку дает.
Процедура ПроверкаСрокаДействияКарт() Экспорт  
	массивОтвета = ПроверкаКарт.ПроверкаДействияКарт();
Для каждого СтрокаОтвета из массивОтвета  цикл
Сообщить(Строка(СтрокаОтвета) + "  Срок использования карты истек  ");
КонецЦикла;
КонецПроцедуры


{МодульУправляемогоПриложения(8,17)}: Переменная не определена (ПроверкаКарт)
массивОтвета = <<?>>ПроверкаКарт.ПроверкаДействияКарт(); (Проверка: Тонкий клиент)
10. Vlan 36 03.02.22 14:08 Сейчас в теме
(9) Если честно, вообще не вникал. в суть. Процедуру ПроверкаДействияКарт() делайте на клиенте, т.к. там вы сообщаете пользователю, а все остальное на сервере. Мою предыдущую фигню можно игнорировать.
11. G_100243392280997043603 03.02.22 14:35 Сейчас в теме
(10)
пользовател
А галка ? остается как на сервере?
12. Vlan 36 03.02.22 14:35 Сейчас в теме
(11) И сервер, и клиент, если это все в одном модуле.
13. user790708 03.02.22 18:55 Сейчас в теме
Суть в том, что работа с данными происходит НаСервере, модуль УправляемогоПриложения работает НаКлиенте.
Если у общего модуля стоят галочки Сервер и Клиент, то это означает, что функции этого модуля могут быть вызваны и на сервре и на клиенте, контекст определяется местом откуда вы вызвали эти процедуры.
Можно конечно смешать в кучу и процедуры использующие клиентский контекст и серверный контекст, отделив их соответствующими командами препроцессора, но решение так себе.
Лучше сделайте отдельный отчет и его вызывайте при ПриНачалеРаботыСистемы
И там уже разносите по Серверному и Клиентскому контекстам получение данных и их отображение
14. 1395969 63 06.02.22 16:01 Сейчас в теме
Сложностей никаких нет
Что нужно сделать:
1) В свойствах общего модуля "ПроверкаКарт" поставить две галочки. "Сервер" и "Вызов сервера". После этого сможете вызывать процедуры этого модуля откуда угодно: и с Клиента и с Сервера. Разумеется при наличии ключевого слова Экспорт
2) .. это все..
15. 1395969 63 06.02.22 16:36 Сейчас в теме
И еще
Если планируется большое количество таких документов, то лучше бы создать и использовать не периодический Регистр Сведений с реквизитами БанковскаяКарта и Дата. Иначе тормоз при каждом выполнении запроса обеспечен
При проведении документа заполняй этот регистр и в запросе обращайся именно к нему. Запрос будет выполняться намного быстрее. Не забудь указать, что реквизит Дата - индексируемый
Оставьте свое сообщение

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