Вход | Регистрация


Форумы на Кубань.Ру


1С:Предприятие ::

Метки:

Почему не получается?

Ø
Я
   Bee2005
29.11.04 - 12:00
Привет!
Вот пробую одну вещь и не получается, а как делать не пойму... :(
Из формы элемента справочника из проц. ПриОткрытии вызывается некая глобальная функция, которая при выполнении определенного условия должна записать этот самый элемент справочника. Проблема в том, что не записывает (говорит, что элемент не выбран) хотя в отладчике ясно видно, что всё выбрано (даже Выбран() 1 возвращает) насколько я понимаю проблема в том, что элемент справочника уже открыт? Можно в данной ситуации что-нибудь придумать???
 
 
   eNik
1 - 29.11.04 - 12:05
Листинг функции в глобальнике в студию.
   dma
2 - 29.11.04 - 12:06
Дык, она еще не открылась, а ты уже хотИшь ее записать?
   Vadim
3 - 29.11.04 - 12:08
перед вызовом глобальной процедуры нужно закрывать форму справочника, а при окончании выполнения глобальной процедуры нужно открывать форму справочника
   bsg
4 - 29.11.04 - 12:09
Надо подождать, пока она откроется. Тогда сработает.
   Bee2005
5 - 29.11.04 - 12:10
Вот вариант, после целого дня мытарств, как есть так и выкладываю, но пробовал в разных вариантах
Функция глПроверитьТаймингиКонтрагента(Конт,Пользователь) Экспорт
...
...
    Конт.ТекущийЭлемент().Записать();
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
вот здесь ошибка
   Bee2005
6 - 29.11.04 - 12:13
(4) т.е. функцию нельзя вызывать из ПриОткрытии?
   Bee2005
7 - 29.11.04 - 12:16
А откуда же тогда ее вызвать? :(
   Митхун Чакраборти
8 - 29.11.04 - 12:18
Может попробовать
 Конт.Записать();
   Человек дождя
9 - 29.11.04 - 12:18
(3) Ну ты сморозил ;-)))) Форму справчоника какого закрывать то?
   Bee2005
10 - 29.11.04 - 12:21
(8) Тогда пишет что-то типа нельзя записать элемент диалога, не получается короче.
 
  Рекламное место пустует
   bsg
11 - 29.11.04 - 12:22
Сорри, (4) не прокатит. Когда форма откроется записать ее извне не получится.
Попробуй вызвать процедуру не в ПриОткрытии(), а после описания всех функций и процедур // ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ).
   dma
12 - 29.11.04 - 12:23
ПриОткрытии формы элемента еще не существует. Попробуй вызвать из функции ВводНового()
   Bee2005
13 - 29.11.04 - 12:24
(11) уже попробовал, не прокатило :((
   Skifi
14 - 29.11.04 - 12:32
Делать изменение реквизитов объекта в ПриОткрытии() - дурной тон, ИМХО.
   Skifi
15 - 29.11.04 - 12:34
(12)
обработка ПриОткрытии() идет после ВводНового()
   Bee2005
16 - 29.11.04 - 12:35
(14) уже согласен, а как правильно сделать?
   Skifi
17 - 29.11.04 - 12:37
А что ты хочешь сделать?
Как передаешь контекст в глобальную функцию?
   bsg
18 - 29.11.04 - 12:37
Надо копать в сторону (3). Правда, что будет с новыми?
   Skifi
19 - 29.11.04 - 12:39
(11), (18) - бред.
   Bee2005
20 - 29.11.04 - 12:42
(17) В общем случае задача выглядит следующим образом. У клиента есть некий признак обзовем его "Статус", при открытии карточки клиента, надо выполнить проверку и если (к примеру) клиент давно ничего не покупал присвоить ему статус = Старый.
   bsg
21 - 29.11.04 - 12:45
Так присвой, зачем это записывать сразу?
   Skifi
22 - 29.11.04 - 12:45
(20) Чем регламентная обработка (пробежаться по всем и выставить нужный признак) не подходит?
   Bee2005
23 - 29.11.04 - 12:48
(22) подходит это будет делаться по ночам, но сам панимаешь оперативность... опять же простое "хочу"
   Bee2005
24 - 29.11.04 - 12:51
(21) может быть и так... но что если пользователь закроет форму без сохранения? (что-то мне подсказывает, чтто это единственный вариант)
   Lys
25 - 29.11.04 - 12:52
Функция глПроверитьТаймингиКонтрагента(Конт,Пользователь) Экспорт
...
...
Спр = СоздатьОбъект("Справочник.Контрагенты");
Если Спр.НайтиЭлемент(Конт.ТекущийЭлемент()) = 1 Тогда
    Спр.Записать();
КонецЕсли;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   bsg
26 - 29.11.04 - 12:53
Вот при закрытии и сохраняй принудительно.
   Lys
27 - 29.11.04 - 12:54
(0) Ну что, (25) не помогло?
   Bee2005
28 - 29.11.04 - 12:57
(25) Сегодня с утра я с этого и начал, представляешь как сильно я был удивлен когда ничего не получилось :))
А не получается видимо потому, что элемент справочника уже открыт и доступа к нему нет соответственно.
   Lys
29 - 29.11.04 - 13:02
(28) Сорри, немного затупил. Похоже, единственный вариант - перенести функцию "глПроверитьТаймингиКонтрагента" в форму элемента справочника, и тогда прокатит просто
Записать();
Без всяких "Конт.ТекущийЭлемент()" и прочей лабудени...
   МимохожийОднако
30 - 29.11.04 - 13:05
(28) В процедуре ПриЗакрытии() добавь СтатусВозврат(0) Если был изменен реквизит Статус и не был сохранен текущий элемент.
Но удобнее применить обработку, которая проводит те же проверочные действия без открытия формы элемента. К тому же эта обработка может обрабатывать элементы справочника списком по заданнным признакам
   Skifi
31 - 29.11.04 - 13:18
(23)
Оперативность - каков критерий "давно не покупал". Не думаю, что задержка на один-два дня (неделю) будет влиять на "оперативность данных";
Если все-же необходимо, тогда в ПриОткрытии()выставляй ТвойРеквизит = ТвойСтатус(безо всяких записать). Если закроют без сохранение - бог с ним - потом обработкой пройдешься. Ну и на крайняк - В ПриЗакрытии() сделай Записать().
   Bee2005
32 - 29.11.04 - 14:27
Всем, спасибо :)
Действительно немного перестарался, посовещавшись решили, что можно и обработкой обойтись, но тема получилась интересная по-моему :))
   Bee2005
33 - 29.11.04 - 14:32
(29) не хочется перегружать форму элемента справочника излишним кодом
 
  Рекламное место пустует
   Light
34 - 29.11.04 - 14:41
Блин сегодня парился с такой же проблемой, но ничего не получилось.
Необходимо заполнить справочник на основании документа.
В документе Открытьформу("Элемент.Договора", ТекущийДокумент())
В справочнике ДатаДог = Форма.Параметр.ДатаДок; Записать();
В Проц. ВводНового, ПриОткрытии, в конце модуля метод Записать() - не работает.
Необходимость записать возникакает для того, чтобы создать подчиненые элементы.
   bsg
35 - 29.11.04 - 14:43
(34) Так создай его програмно и запиши. Зачем его открывать то?




Список тем форума

Форум Территория 1С

Рекламное место пустует  
Ошибка? Это не ошибка, это системная функция.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует