Имя: Пароль:
1C
1С v8
ошибка в процедуре ПриНачалеРаботыСистемы()
0 dr_t_j
 
14.01.14
13:32
Процедура ПриНачалеРаботыСистемы()
                Сообщить("Начало работы");
      ДатаПроба = Сертификаты.ДатаКонСерт;
      
      РазницаВДнях = (НачалоДня(ДатаПроба) - НачалоДня(ТекущаяДата())) / (60 * 60 * 24);  
      Сообщить(РазницаВДнях);
      КонецПроцедуры

выдает ошибку:

{МодульУправляемогоПриложения(3,15)}: Переменная не определена (Сертификаты)
      ДатаПроба = <<?>>Сертификаты.ДатаКонСерт; (Проверка: Тонкий клиент)
Необходимо при запуске 1с проверить сравнить элементы справочника по реквизиту дата с текущей датой и выдать оповещение на элементы с просроченной датой. Как лучше сделать?
1 H A D G E H O G s
 
14.01.14
13:34
Лучше всего - принять на работу программиста.
2 ДенисЧ
 
14.01.14
13:34
НаСервере делай. В тонком клиенте менеджер справочников не работает.
3 butterbean
 
14.01.14
13:35
(0) вытащи для начала все нужные элементы запросом
4 dr_t_j
 
14.01.14
13:39
Если добавить директиву &НаСервере то ничего не выводит на клиенте. С запросом тоже не получается.
5 alxxsssar
 
14.01.14
13:39
а Сертификаты - это у тебя что?
6 alxxsssar
 
14.01.14
13:39
может написать Справочники.Сертификаты?
7 alxxsssar
 
14.01.14
13:41
и делать ссыль на процедуру на сервере
8 dr_t_j
 
14.01.14
13:41
&НаСервере
    Функция ЗнчСпр()
    Возврат Сертификаты.ДатаКонСерт
    Конецфункции
    Процедура ПриНачалеРаботыСистемы()
                Сообщить("Начало работы");
        ДатаПроба = ЗнчСпр();
        РазницаВДнях = (НачалоДня(ДатаПроба) - НачалоДня(ТекущаяДата())) / (60 * 60 * 24);  
        Сообщить(РазницаВДнях);
        КонецПроцедуры
выдает ошибку
{МодульУправляемогоПриложения(7,15)}: Процедура или функция с указанным именем не определена (ЗнчСпр)
        ДатаПроба = <<?>>ЗнчСпр(); (Проверка: Тонкий клиент)
9 dr_t_j
 
14.01.14
13:42
Сертификаты - справочник.
10 dr_t_j
 
14.01.14
13:45
Все делается из модуля управляемого приложжения
11 Fram
 
14.01.14
13:50
подозрительно что не ругается на Сертификаты. глобальная переменная?
12 dr_t_j
 
14.01.14
13:51
нет не глобальная.
13 Dethmont
 
14.01.14
13:57
Модуль управляемого приложения компилируется исключительно на Клиенте
14 Dethmont
 
14.01.14
14:00
(0) Ответ на твою проблему дали в (1)
15 dr_t_j
 
14.01.14
14:01
А где тогда получить данные из справочника?
16 Dethmont
 
14.01.14
14:02
(15) На сервере
17 alxxsssar
 
14.01.14
14:04
Я еще не понял: у тебя в справочнике несколько сертификатов? тогда цикл надо вводить
18 dr_t_j
 
14.01.14
14:05
с циклом все понятно. С получением элемента справочника никак не получается :(
19 hhhh
 
14.01.14
14:07
(18) ну &НаСервере
    Функция ЗнчСпр()

загоните в общий модуль
20 alxxsssar
 
14.01.14
14:08
Вынеси весь расчет в функцию на сервер и оттуда получай только результат в процедуру на клиенте
21 dr_t_j
 
14.01.14
14:17
Модуль управляемого приложения:
Процедура ПриНачалеРаботыСистемы()
                Сообщить("Начало работы");
                Сообщить(Спр.ЗнчСпр());
        КонецПроцедуры
Общий модуль:
&НаСервере
    Функция ЗнчСпр() Экспорт
    СпрСерт = Справочники.Сертификаты.ПолучитьСсылку();    
    ДатСпр = СпрСерт.ДатаКонСерт;
    Возврат ДатСпр
    
Конецфункции


{МодульУправляемогоПриложения(4)}: Метод объекта не обнаружен (ЗнчСпр)
                Сообщить(Спр.ЗнчСпр());
22 dr_t_j
 
14.01.14
14:17
выдает вот такую ошибку.
23 Dethmont
 
14.01.14
14:19
ИмяОбщегоМодуля.ЗнчСпр() - у ОМ должна быть галочка ВЫЗОВ сервера
24 Infsams654
 
14.01.14
14:28
(21) СпрСерт = Справочники.Сертификаты.ПолучитьСсылку();
ДатСпр = СпрСерт.ДатаКонСерт;

что Вы этим хотите получить в результате?
25 dr_t_j
 
14.01.14
14:34
Галочка стоит.
26 dr_t_j
 
14.01.14
14:35
Элемент справочника Сертификаты
27 dr_t_j
 
14.01.14
14:36
Причем как только не пытался получить этот элемент. все равно выскакивает ошибка.
28 Infsams654
 
14.01.14
14:40
(26) какой элемент справочника Сертификаты ? Читай ПолучитьСсылку в СП. Это совершенно из другой оперы, элементы справочника получают по-другому.
29 Fish
 
14.01.14
14:43
(27) А СП не пробовал читать?
30 dr_t_j
 
14.01.14
14:44
просто приведи рабочий пример
31 dr_t_j
 
14.01.14
14:46
СпрСерт = Справочники.Сертификаты.Выбрать();    
    ДатСпр = СпрСерт.ДатаКонСерт;
32 dr_t_j
 
14.01.14
14:46
выдало ошибку:
{МодульУправляемогоПриложения(4)}: Метод объекта не обнаружен (ЗнчСпр)
                Сообщить(Спр.ЗнчСпр());
33 Fish
 
14.01.14
14:58
(31) Загляни всё-таки в СП и подумай немного.
34 Fish
 
14.01.14
14:59
+(33) Там, кстати, и примеры есть.
35 evorle145
 
14.01.14
15:01
(32), зачем в модуле управляемого приложения пишешь  &НаСервере ?
36 dr_t_j
 
14.01.14
15:03
Потому что уже не знаю что и делать
37 vicof
 
14.01.14
15:03
(36) Читаем внимательно книжки от Радченко и Со. Профразработка само то.
38 dr_t_j
 
14.01.14
15:04
Игорь намекни как это сделать. А то уже что то совсем идей нету
39 evorle145
 
14.01.14
15:04
(36), но ведь  (13) же вам сказал, что "Модуль управляемого приложения компилируется исключительно на Клиенте", а это значит что там не может быть &НаСервере...
40 dr_t_j
 
14.01.14
15:07
да вынес я уже все в общий модуль
41 Fish
 
14.01.14
15:07
(38) Намекаю: пересилить себя, всё-таки открыть любую книгу для разработчика или СП и подумать. Если понять написанное не удаётся, то см. пост (1). А методом тыка ты программировать не научишься.
42 evorle145
 
14.01.14
15:08
(40), Экспорт не забыл написать у свой функции?
43 dr_t_j
 
14.01.14
15:10
нет не забыл. стоят галки нужные.
44 alxxsssar
 
14.01.14
15:12
(43) и какой теперь текст?
45 dr_t_j
 
14.01.14
15:17
&НаСервере
    Функция ЗнчСпр() Экспорт
    СпрСерт = Справочники.Сертификаты.Выбрать();    
    ДатСпр = СпрСерт.ДатаКонСерт;
    Возврат ДатСпр
    Конецфункции
46 zladenuw
 
14.01.14
15:17
(0) я бы добавил обработку и при открытие ее делал то что тебе нужно. а не эти танцы с бубном. так как при создание обработки идет вызов сервера где ты можешь обработать все что нужно и открыть в форме ну или просто заполнить сообщение пользователю и вызвать метод сообщить
47 zladenuw
 
14.01.14
15:17
(45) мда....
48 Fish
 
14.01.14
15:19
(45) Ответь на вопрос: что возвращает метод Справочники.Сертификаты.Выбрать();?
49 evorle145
 
14.01.14
15:20
(45), в коде ошибка. В СП написано, что надо так делать?
Выборка = Номенклатура.Выбрать(,,Отбор, "Наименование Убыв");
Пока Выборка.Следующий()  Цикл
...
50 alxxsssar
 
14.01.14
15:21
(45) пля, как цикл в восьмерке сделать не знаем? кроме того что Выбрать() надо пока элемент следующий() юзать
51 evorle145
 
14.01.14
15:24
(50), да знает наверное, просто волнуется =)
52 dr_t_j
 
14.01.14
15:25
Даст ссылку на справочник. След. команда выберет элемент справочника. Следущий() признак наличия указатель на следующий элемент справочника.
53 Fish
 
14.01.14
15:26
(52) "Даст ссылку на справочник" - это ты сам придумал, или прочитал где?
54 dr_t_j
 
14.01.14
15:27
И вообще я новичок в 1с
55 dr_t_j
 
14.01.14
15:27
сам придумал:)
56 Fish
 
14.01.14
15:27
Процитирую:
СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
Выбрать (Select)
Синтаксис:

Выбрать(<Родитель>, <Владелец>, <Отбор>, <Порядок>)

...
...

Возвращаемое значение:

Тип: СправочникВыборка.

Описание:

Формирует выборку элементов справочника по заданным условиям.

Доступность:

Сервер, толстый клиент, внешнее соединение.

А дальше сам смотри в СП.
57 acsent
 
14.01.14
15:28
Завязывай с 1с лучше
58 Fish
 
14.01.14
15:28
(54) Тогда стоит для начала почитать умные книжки.
59 zladenuw
 
14.01.14
15:29
делаешь запрос

ЗАпрос = новый Запрос("ВЫБРАТЬ
    Сертификаты.Ссылка
ИЗ
    Справочник.Сертификаты КАК Сертификаты
ГДЕ
    НАЧАЛОПЕРИОДА(Сертификаты.ДатаКонСерт,ДЕНЬ)<&ТекДата
Запрос.установитьПараметр("ТекДата",НачалоДня(ТекущаяДата());
Выборка = Запрос.выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить("Просрочено - "+ Выборка.Ссылка);
КонецЦикла;
60 evorle145
 
14.01.14
15:29
(57), почему ему лучше завязывать с 1с? Обоснуй. Или это твое личное субъективное мнение? если так, то где ИМХО?
61 dr_t_j
 
14.01.14
15:30
спасибо сейчас попробую
62 zladenuw
 
14.01.14
15:36
(61) и не надо сообщение. можно этот запрос запихнуть в динамический список и если есть данные открываешь обработку пользователю. с заполнен дз. где есть список просроченных.
63 dr_t_j
 
14.01.14
15:39
Спасибо Кирилл
64 rinatru
 
14.01.14
15:49
эх.. .мне бы твои проблемы...
65 dr_t_j
 
15.01.14
12:46
&НаСервере
Процедура Сервозвр() Экспорт
Выборка = Справочники.Спр.Выбрать();
Пока Выборка.Следующий()  Цикл
    Справ = Выборка.ПолучитьОбъект();
    Если ТекущаяДата() >= Справ.Дан
    Тогда     Сообщить ("Сертификат " + Справ.Наименование + " просрочен");
    КонецЕсли;        
КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура Команда1()
    Сервозвр();
КонецПроцедуры
66 dr_t_j
 
15.01.14
12:47
как теперь заставить в модуле управляемого приложения работать?
67 GROOVY
 
15.01.14
12:53
(65) Объект получать не надо.
68 dr_t_j
 
15.01.14
12:55
не получается выдает ошибку
69 GROOVY
 
15.01.14
12:57
(68) Что не получается? Какую ошибку выдает?
70 dr_t_j
 
15.01.14
13:00
Процедура ПриНачалеРаботыСистемы()
Выборка = Справочники.Спр.Выбрать();
Пока Выборка.Следующий()  Цикл
    Если ТекущаяДата() >= Выборка.Дан
    Тогда     Сообщить ("Сертификат " + Выборка.Наименование + " просрочен");
    КонецЕсли;        
КонецЦикла;
КонецПроцедуры

выдает ошибку:
{МодульУправляемогоПриложения(3,11)}: Переменная не определена (Справочники)
Выборка = <<?>>Справочники.Спр.Выбрать(); (Проверка: Тонкий клиент)
{МодульУправляемогоПриложения(3,11)}: Переменная не определена (Справочники)
Выборка = <<?>>Справочники.Спр.Выбрать(); (Проверка: Тонкий клиент)
71 GROOVY
 
15.01.14
13:03
Тебе же сказали, менеджер справочников недоступен на клиенте. Перенеси все в общий модуль.
72 dr_t_j
 
15.01.14
13:07
все равно выскакивает ошибка
73 Kupogun
 
15.01.14
13:08
(72) НаСервере? какая?
74 dr_t_j
 
15.01.14
13:09
{ОбщийМодуль.ОбщийМодуль1.Модуль(2,11)}: Переменная не определена (Справочники)
Выборка = <<?>>Справочники.Спр.Выбрать(); (Проверка: Тонкий клиент)
75 dr_t_j
 
15.01.14
13:10
стоят галки сервер клиент и вызов сервера на общем модуле
76 dr_t_j
 
15.01.14
13:11
Ура заработало!!!!!!!!!!!! убрал галку клиент!!!
77 dr_t_j
 
15.01.14
13:11
Процедура Сервозвр() Экспорт
Выборка = Справочники.Спр.Выбрать();
Пока Выборка.Следующий()  Цикл
    Справ = Выборка.ПолучитьОбъект();
    Если ТекущаяДата() >= Справ.Дан
    Тогда     Сообщить ("Сертификат " + Справ.Наименование + " просрочен");
    КонецЕсли;        
КонецЦикла;
КонецПроцедуры
78 GROOVY
 
15.01.14
13:14
Общий модуль. Имя общего модуля "ОбщийМодуль1". Установлены галки "Вызов сервера", "Сервер". Галка "Глобальный" НЕ установлена. Другие галки также не установлены.

Функция ПолучитьПросроченныеСертификаты(Дата) Экспорт
Запрос = Новый Запрос("ВЫБРАТЬ Наименование ИЗ Справочник.Спр ГДЕ Дан < &Дата");
Запрос.Установитьпараметр("Дата", Дата);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат Неопределено;
КонецЕсли;

Массив = Результат.Выгрузить().ВыгрузитьКолонку("Наименование");
Возврат Массив;


Модуль управляемого приложения

Процедура ПриНачалеРаботыСистемы()

ПросроченныеСертификаты = ОбщийМодуль1.ПолучитьПросроченныеСертификаты(ТекущаяДата());
Если ПросроченныеСертификаты <> Неопределено Тогда
Для каждого Элем ИЗ ПросроченныеСертификаты Цикл
Сообщить(Элем);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
79 dr_t_j
 
15.01.14
13:26
крут
80 dr_t_j
 
15.01.14
13:26
спасибо
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан