Здравствуйте друзья.. У меня такая задача..Есть справочник, где существуют уже готовые реквизиты..Сам справочник просто для хранине данных банковских карт.. Каждый новый банковский карт будет хранится в этом справочники со всеми данными.. Но как вы знаете у каждой карты есть своя дата окончание.. Теперь нужно что бы, когда настанет та дата которая указанно в справочники как "дата окончания" система предупридила что время карты заканчивается.. Например Написал в поле "Дата окончания" 10.12.2021 - это означает что в эту дату время истикает.. и в тот же день система меня оповищает о том что уже время.. Наверно все ясно :)
Я написал код и добавил его возле ПриНачалеРаботыСистемы()
А это в ПриНачалеРаботыСистемы()
Е
Но реакции ноль.. От чего бы это могло бы быть ? кто может помочь ? может что-то не правильно написал ? Как то вот так) Заранее спасибо.. П.С - Обычный режим
Я написал код и добавил его возле ПриНачалеРаботыСистемы()
Процедура ПроверкаСрокаДействияКарт()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Справочник1.Ссылка
|ИЗ
| Справочник.Справочник1 КАК Справочник1
|ГДЕ
| Справочник1.ДатаОкончания = &Дата";
Запрос.УстановитьПараметр("Дата", ТекущаяДата);
ТЗРезультат = Запрос.Выполнить().Выгрузить();
Если ТЗРезультат.Количество() > 0 Тогда
Для каждого Стр Из ТЗРезультат Цикл
сообщить(Стр.Ссылка);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
ПоказатьА это в ПриНачалеРаботыСистемы()
Е
сли ИмяПользователя()="Пользователь" Тогда
ПодключитьОбработчикОжидания("ПроверкаСрокаДействияКарт",3600);
КонецЕсли;
Но реакции ноль.. От чего бы это могло бы быть ? кто может помочь ? может что-то не правильно написал ? Как то вот так) Заранее спасибо.. П.С - Обычный режим
По теме из базы знаний
- "Процессы 3.0: CRM, Бизнес-процессы, Управление по целям". Универсальная система управления процессами и показателями для любой конфигурации 1С
- Подсистемы "Сообщения" (только средства 1С)
- Система взаимодействия - расширение для конфигурации "INFOSTART ERP community edition"
- АКАМ: Торги
- 1С-ники могут все, но они не могут все сразу. Рекомендации по внедрению Канбан-системы для проектов 1С
Найденные решения
(20) Модуль приложения:
В общем модуле ПроверкаКарт
Процедура ПриНачалеРаботыСистемы()
Если ИмяПользователя()="ADMİN" Тогда
Сообщить("Подключаем ожидание");
ПодключитьОбработчикОжидания("ПроверкаСрокаДействияКарт",3600,Истина); // зачем каждый час проверять?
КонецЕсли;
КонецПроцедуры
Процедура ПроверкаСрокаДействияКарт()
массивОтвета = ПроверкаКарт.ПроверкаСрокаДействияКарт();
Для каждого СтрокаОтвета из массивОтвета цикл
Сообщить(СтрокаОтвета );
КонецЦикла;
ПоказатьВ общем модуле ПроверкаКарт
Функция ПроверкаСрокаДействияКарт() Экспорт
МассивОтвета = новый массив;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Карты.Ссылка как Карта
|ИЗ
| Справочники.Карты КАК Карты
|ГДЕ
| НАЧАЛОПЕРИОДА(Карты.ДатаОкончанияКарты,день) = НАЧАЛОПЕРИОДА(&Дата,День)";
Запрос.УстановитьПараметр("Дата", ТекущаяДата());
Результат = Запрос.выполнить().Выбрать();
Пока Результат.Следующий() цикл
МассивОтвета.добавить(Результат.Карта);
КонецЦикла;
Возврат МассивОтвета
КонецФункции
Показать
(28) Если сравнивать ваш код и типовой(просто для примера), то в вашем коде необходимо экспортную процедуру указать в Модуле обычного приложения (а не в общем модуле) и будет вам счастье.
Либо (такое в типовом на скорую руку не встречал) в процедуре ПодключитьОбработчикОжидания - указать "ПроверкаКарт.ПроверкаСрокаДействияКарт"
Первый вариант, должен работать, а второй попробуйте - просто для интереса)
Либо (такое в типовом на скорую руку не встречал) в процедуре ПодключитьОбработчикОжидания - указать "ПроверкаКарт.ПроверкаСрокаДействияКарт"
Первый вариант, должен работать, а второй попробуйте - просто для интереса)
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Типы не совпадают.
Минимум:
И для очистки совести:
Минимум:
|ГДЕ
| НАЧАЛОПЕРИОДА(Справочник1.ДатаОкончания, ДЕНЬ) = НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ)";
И для очистки совести:
Если ИмяПользователя()="Пользователь" Тогда
Сообщить("Подключаем ожидание");
ПодключитьОбработчикОжидания("ПроверкаСрокаДействияКарт",3600);
КонецЕсли;
(9)Вот из Синтакс-Помощника:
Имя экспортируемой процедуры модуля приложения (модуля обычного приложения) или общего глобального модуля.
То есть дезинформировал слегка :(
Если у вас ОбычноеПриложение, то запрос не выдаст ошибку, но может не сообщить, если будет пустой результат запроса.
Проблема в параметре.
В запросе вместо = ТекущаяДата нужно Поставить <= ТекущаяДата
Или использовать конструкцию Между.
Имя экспортируемой процедуры модуля приложения (модуля обычного приложения) или общего глобального модуля.
То есть дезинформировал слегка :(
Если у вас ОбычноеПриложение, то запрос не выдаст ошибку, но может не сообщить, если будет пустой результат запроса.
Проблема в параметре.
Запрос.УстановитьПараметр("Дата", ТекущаяДата);
В запросе вместо = ТекущаяДата нужно Поставить <= ТекущаяДата
Или использовать конструкцию Между.
(19)В запросе вместо:
нужно написать
Или использовать конструкцию Между.
Ну а (2) тоже правильно с приведением к началу периода. Только вы не поняли, что скорее всего у вас в системе нет карт с окончанием на 18.04.2021
Справочник1.ДатаОкончания = &Дата
нужно написать
Справочник1.ДатаОкончания <= &Дата
Или использовать конструкцию Между.
Ну а (2) тоже правильно с приведением к началу периода. Только вы не поняли, что скорее всего у вас в системе нет карт с окончанием на 18.04.2021
Модуль приложения выполняется на клиенте на сколько понимаю. Там запросы не допустимы.
Где то в общем модуле
Процедура ПроверкаСрокаДействияКарт()
МассивОтвета = *имяОбщегоМодуляССервернымВызовом(в свойствах стоит сервер = истина)*.ПроверкаСрокаДействияКарт();
Для каждого карта из МассивОтвета цикл
Сообщить(карта)
КонецЦикла;
КонецПроцедуры;
Где то в общем модуле
Функция ПроверкаСрокаДействияКарт() Экспорт
массивОтвета = новый массив;
*тут в него набиваем что надо*
возврат массивОтвета
КонецФункции
(12) Создать общий модуль. "ПроверкаКарт" Указать что он серверный в свойствах модуля.
В нем создать функцию "ПроверкаСрокаДействияКарт" с пометкой Экспорт
"Функция ПроверкаСрокаДействияКарт() Экспорт"
В ней строим запрос к данным и формируем ответ, который возвращаем на клиента
В модуле приложения
В нем создать функцию "ПроверкаСрокаДействияКарт" с пометкой Экспорт
"Функция ПроверкаСрокаДействияКарт() Экспорт"
В ней строим запрос к данным и формируем ответ, который возвращаем на клиента
В модуле приложения
Процедура ПроверкаСрокаДействияКарт()
МассивОтвета = ПроверкаКарт.ПроверкаСрокаДействияКарт();
Для каждого Карта из МассивОтвета цикл
Сообщить(карта)
КонецЦикла;
КонецПроцедуры;
Значит что я сделал.. Я создал общий модуль, под названием "ПроверкаКарт" и там создал функцию
потом зашел Модуль обычного приложение и там добавил этого
открыл программу и у меня сообщение выходит "Подключаем ожидание" он думает потом ошибку выдает
{МодульОбычногоПриложения(66)}: Ошибка при вызове метода контекста (ПодключитьОбработчикОжидания)
ПодключитьОбработчикОжидания("ПроверкаКарт.ПроверкаСрокаДействияКарт",3600);
по причине:
Недопустимое значение параметра (параметр номер '1')
вот как то так..
Функция ПроверкаСрокаДействияКарт() Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Карты.Ссылка
|ИЗ
| Справочники.Карты КАК Карты
|ГДЕ
| Карты.ДатаОкончанияКарты = &Дата";
Запрос.УстановитьПараметр("Дата", ТекущаяДата());
ТЗРезультат = Запрос.Выполнить().Выгрузить();
Если ТЗРезультат.Количество() > 0 Тогда
Для каждого Стр Из ТЗРезультат Цикл
сообщить(Стр.Ссылка);
КонецЦикла;
КонецЕсли;
КонецФункции
Показатьпотом зашел Модуль обычного приложение и там добавил этого
Процедура ПриНачалеРаботыСистемы()
Если ИмяПользователя()="ADMİN" Тогда
Сообщить("Подключаем ожидание");
ПодключитьОбработчикОжидания("ПроверкаКарт.ПроверкаСрокаДействияКарт",3600);
КонецЕсли;
КонецПроцедуры
открыл программу и у меня сообщение выходит "Подключаем ожидание" он думает потом ошибку выдает
{МодульОбычногоПриложения(66)}: Ошибка при вызове метода контекста (ПодключитьОбработчикОжидания)
ПодключитьОбработчикОжидания("ПроверкаКарт.ПроверкаСрокаДействияКарт",3600);
по причине:
Недопустимое значение параметра (параметр номер '1')
вот как то так..
(20) Модуль приложения:
В общем модуле ПроверкаКарт
Процедура ПриНачалеРаботыСистемы()
Если ИмяПользователя()="ADMİN" Тогда
Сообщить("Подключаем ожидание");
ПодключитьОбработчикОжидания("ПроверкаСрокаДействияКарт",3600,Истина); // зачем каждый час проверять?
КонецЕсли;
КонецПроцедуры
Процедура ПроверкаСрокаДействияКарт()
массивОтвета = ПроверкаКарт.ПроверкаСрокаДействияКарт();
Для каждого СтрокаОтвета из массивОтвета цикл
Сообщить(СтрокаОтвета );
КонецЦикла;
ПоказатьВ общем модуле ПроверкаКарт
Функция ПроверкаСрокаДействияКарт() Экспорт
МассивОтвета = новый массив;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Карты.Ссылка как Карта
|ИЗ
| Справочники.Карты КАК Карты
|ГДЕ
| НАЧАЛОПЕРИОДА(Карты.ДатаОкончанияКарты,день) = НАЧАЛОПЕРИОДА(&Дата,День)";
Запрос.УстановитьПараметр("Дата", ТекущаяДата());
Результат = Запрос.выполнить().Выбрать();
Пока Результат.Следующий() цикл
МассивОтвета.добавить(Результат.Карта);
КонецЦикла;
Возврат МассивОтвета
КонецФункции
Показать
(22)
Сделал все так как вы сказали, выдает ошибку
{МодульОбычногоПриложения(24)}: Ошибка при вызове метода контекста (ПодключитьОбработчикОжидания)
ПодключитьОбработчикОжидания("ПроверкаСрокаДействияКарт",3600,Истина);
по причине:
Недопустимое значение параметра (параметр номер '1')
Процедура ПроверкаСрокаДействияКарт()
массивОтвета = ПроверкаКарт.ПроверкаСрокаДействияКарт();
Для каждого СтрокаОтвета из массивОтвета цикл
Сообщить(СтрокаОтвета );
КонецЦикла;
массивОтвета = ПроверкаКарт.ПроверкаСрокаДействияКарт();
Для каждого СтрокаОтвета из массивОтвета цикл
Сообщить(СтрокаОтвета );
КонецЦикла;
Сделал все так как вы сказали, выдает ошибку
{МодульОбычногоПриложения(24)}: Ошибка при вызове метода контекста (ПодключитьОбработчикОжидания)
ПодключитьОбработчикОжидания("ПроверкаСрокаДействияКарт",3600,Истина);
по причине:
Недопустимое значение параметра (параметр номер '1')
Прикрепленные файлы:
(28) Если сравнивать ваш код и типовой(просто для примера), то в вашем коде необходимо экспортную процедуру указать в Модуле обычного приложения (а не в общем модуле) и будет вам счастье.
Либо (такое в типовом на скорую руку не встречал) в процедуре ПодключитьОбработчикОжидания - указать "ПроверкаКарт.ПроверкаСрокаДействияКарт"
Первый вариант, должен работать, а второй попробуйте - просто для интереса)
Либо (такое в типовом на скорую руку не встречал) в процедуре ПодключитьОбработчикОжидания - указать "ПроверкаКарт.ПроверкаСрокаДействияКарт"
Первый вариант, должен работать, а второй попробуйте - просто для интереса)
(30) :) вам в (20) и дали ответ)
Только вот тут ошибка вместо
это
Только вот тут ошибка вместо
Процедура ПроверкаСрокаДействияКарт()
массивОтвета = ПроверкаКарт.ПроверкаСрокаДействияКарт();
Для каждого СтрокаОтвета из массивОтвета цикл
Сообщить(СтрокаОтвета );
КонецЦикла;
это
Процедура ПроверкаСрокаДействияКарт() экспорт //добавлен экспорт
массивОтвета = ПроверкаКарт.ПроверкаСрокаДействияКарт();
Для каждого СтрокаОтвета из массивОтвета цикл
Сообщить(СтрокаОтвета );
КонецЦикла;
(29)Как я понял втарой вариант такой что ничего не трогаю только изменяю строку "ПроверкаСрокаДействияКарт" на строку "ПроверкаКарт.ПроверкаСрокаДействияКарт"- если я правильно понял вас, то так попробовал но не получилось выдает ошибку. а первый метод не полностью понял :(
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот