Имя: Пароль:
1C
1С v8
УФ. Как получить доступ к объекту в модуле объекта.
,
0 Полька
 
14.11.18
15:24
Разбираюсь с УФ и регламентными операциями.
Есть обработка. УФ. В реквизитах есть собственно ОБЪЕКТ, к которому из модуля формы есть доступ. Это ясно.
Можно ли получить к нему доступ из модуля объекта? Собственно, нужно только структуру получить.
1 ДенисЧ
 
14.11.18
15:26
ЭтотОбъект?
РеквизитФормыВЗначение() ?
2 AlvlSpb
 
14.11.18
15:27
(0) Вы смеетесь? Откуда ж еще проще получать доступ к Объекту как не из его же модуля?
3 Сияющий в темноте
 
14.11.18
15:58
В модуле обьекта доступны все поля(реквизиты)обьекта,получить доступ к обьекту можно только для передаяи его куда то наружу.
4 Полька
 
14.11.18
16:01
в модуле формы есть такое выражение:
ОбъектДляСервера = РеквизитФормыВЗначение("Объект")
перетаскиваю в модуль объекта - ругается на РеквизитФормыВЗначение. "Процедура или функция с указанным именем не определена"
5 segn
 
14.11.18
16:05
(4) Нахуа это перетаскивать в модуль объекта.
6 SeiOkami
 
14.11.18
16:08
(4), в модуле объекта нет такого метода. Он есть только на форме.

В модуле объекта уже есть ЭтотОбъект. С ним и работайте
7 Полька
 
14.11.18
16:11
(5) нужно из обработки сделать работающую в фоновом режиме.
8 Полька
 
14.11.18
16:20
вот эти строки из модуля формы нужно, чтобы выполнились в модуле объекта
ОбъектДляСервера = РеквизитФормыВЗначение("Объект");
ЗаполнитьЗначенияСвойств(ОбъектДляСервера, Объект);                    
ОбъектДляСервера.ВыполнитьЗагрузку();
9 AlvlSpb
 
14.11.18
16:50
(8) объясни толком какая задача стоит? Потому что это
ОбъектДляСервера = РеквизитФормыВЗначение("Объект");
ЗаполнитьЗначенияСвойств(ОбъектДляСервера, Объект);
масло масляное.  Получаешь объект и заполняешь его самим собою
10 singlych
 
14.11.18
16:50
(8) ВыполнитьЗагрузку()
так напиши в модуле
11 Полька
 
15.11.18
09:13
(9) нужно из стандартной обработки V8Exchan83 сделать регламентное задание по загрузке данных в 1C:Документооборот из .xml файла
Иду по самому простому пути- перенесла нужные процедуры из модуля формы в модуль объекта и пытаюсь их "причесать"
12 AlvlSpb
 
15.11.18
09:41
(11) ОбъектДляСервера = РеквизитФормыВЗначение("Объект")
Это в модуле формы получает Объект, в котором находишься. В модуле ОБЪЕКТА этого делать не надо. Вы уже в Объекте. Просто ЭтотОбъект.ВыполнитьЗагрузку()
13 ildary
 
15.11.18
10:21
(7) Вы путаетесь в показаниях - в шапке у Вас вопрос по модулю объекта, а в (7) - фоновое задание.
14 catena
 
15.11.18
10:40
(13) А вы умеете делать фоновое из других частей обработок?
15 Полька
 
16.11.18
14:28
Эпопея продолжается.
(12) спасибо. ругаться перестало :)))
и только :)
Регламентная операция отрабатывает, но результата нет.
В Журнале регламентных заданий пишет, что задание выполнено. В журнале регистрации вот записи по очереди:
..............
Фоновое задание.
Дополнительные отчеты и обработки. Команда ОткрытьОбработку: Запуск.
Дополнительные отчеты и обработки. Подключение, БезопасныйРежим = "Нет".
Фоновое задание. Запуск
Дополнительные отчеты и обработки. Команда ОткрытьОбработку: Завершение.
Сеанс. Завершение
Фоновое задание. Успешное завершение
Сеанс. Завершение
Фоновое задание. Отмена
Фоновое задание. Запуск
Сеанс. Завершение
Фоновое задание. Успешное завершение
...............................
Не понимаю- почему запуск несколько раз. И почему отмена свершилась. И почему тогда- "успешное завершение"
16 Полька
 
16.11.18
14:28
Запускала из Журнала регламентных вручную.
17 palsergeich
 
16.11.18
14:30
(15) Успешное завершение - всего лишь означает что нет необработанных исключений и не гарантирует того что задание завершилось действительно успешно)
18 Полька
 
16.11.18
15:03
...
19 Бубка Гоп
 
16.11.18
15:18
(15) Отладка в помощь
20 ZDenis
 
16.11.18
15:24
(18) А что делает эта обработка? может там в интерактивном виде реквизиты есть, а фоновое задание то про них не знает.
21 Полька
 
16.11.18
15:41
(20) нужно из стандартной обработки V8Exchan83 сделать регламентное задание по загрузке данных в 1C:Документооборот из .xml файла
Иду по самому простому пути- перенесла нужные процедуры из модуля формы в модуль объекта.
22 Бубка Гоп
 
16.11.18
15:54
(21) возьми УниверсальныйОбменДаннымиXML из любой типовой, там в модуле все есть, зачем из формы то лепить?
23 Бубка Гоп
 
16.11.18
16:03
(21) давай я погуглю за тебя
http://catalog.mista.ru/public/86109/
24 Полька
 
19.11.18
09:37
В общем, так.

Делаю в ручном режиме. В модуле формы:
&НаКлиенте
Процедура ВыполнитьЗагрузку(Команда)
    Объект.ИмяФайлаОбмена = "\\трам-пам-пам.xml";
    Объект.ЗагружатьДанныеВРежимеОбмена=ИСТИНА;
    Объект.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты=ИСТИНА;
    Объект.ОбъектыПоСсылкеЗагружатьБезПометкиУдаления=ИСТИНА;
    Объект.ОптимизированнаяЗаписьОбъектов=ИСТИНА;
    Объект.ЗаписыватьРегистрыНаборамиЗаписей=ИСТИНА;
    Объект.РежимОбмена="Загрузка";
    
    ВыполнитьЗагрузкуНаСервере1();
        
КонецПроцедуры


&НаСервере
Процедура ВыполнитьЗагрузкуНаСервере1()

    ОбъектДляСервера = РеквизитФормыВЗначение("Объект");
    ЗаполнитьЗначенияСвойств(ОбъектДляСервера, Объект);
    ОбъектДляСервера.ВыполнитьЗагрузку();
    
КонецПроцедуры

загружается
...........................................
делаю в фоновом. в модуле объекта:
    ЭтотОбъект.ИмяФайлаОбмена = "трам-пам-пам.xml";
    ЭтотОбъект.ЗагружатьДанныеВРежимеОбмена=ИСТИНА;
    ЭтотОбъект.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты=ИСТИНА;
    ЭтотОбъект.ОбъектыПоСсылкеЗагружатьБезПометкиУдаления=ИСТИНА;
    ЭтотОбъект.ОптимизированнаяЗаписьОбъектов=ИСТИНА;
    ЭтотОбъект.ЗаписыватьРегистрыНаборамиЗаписей=ИСТИНА;
    ЭтотОбъект.РежимОбмена="Загрузка";

    ЭтотОбъект.ВыполнитьЗагрузку();      

не загружается
25 catena
 
19.11.18
10:11
(24)"не загружается" - это не симптом. Ищите ошибку, недостаточность выборки данных, на чем стопорится, чего не хватает.


ЭтотОбъект.ВыполнитьЗагрузку();      
Что это?
26 Полька
 
19.11.18
10:24
(25) а то я не понимаю, что где-то что-то не взлетает и надо искать:)))))
поскольку делаю все в 1 раз: и УФ вижу, и конфигурацию Документооборот и фоновые задания то и пытаюсь разобраться.
"не загружается"- именно симптом, ибо явных ошибок нет, файл выгрузки нормален, что подтверждает загрузка вручную. А как понять- чего не хватает?
27 Полька
 
19.11.18
10:27
в Журнале регистрации выходит
Фоновое задание. Отмена
Вот как понять- почему это выходит?
28 Новиков
 
19.11.18
10:30
(27) ты умеешь отлаживать фоновые задания? Отладка - подключение - автоматическое подключение - поставь все галки. Затем поставь точку останова в точке входа - и иди пошагам пока не улетишь в ошибку, если она есть. И твои вопросы отпадут.
29 Полька
 
19.11.18
10:48
(28) не умею.
Поставила галки. Открыла базу в режиме отладки.
Поставила точку останова в процедуре
ВыполнитьКоманду(ИдентификаторКоманды)
не останавливается
30 Полька
 
19.11.18
13:12
...
31 Полька
 
19.11.18
13:34
Ребят, ну как отладку наладить? Подскажите, плиз.
32 Полька
 
19.11.18
13:46
Вообще извратилась :))))
Из модуля формы вызвала процедуру модуля объекта ВыполнитьКоманду().
Запустила вручную.
Все загрузилось.
А в фоновом не загружается. Значит, проблема не в коде.
33 Fuas4
 
19.11.18
14:41
(32) В коде. В фоне что-то такое используете, чего нет в фоне. Обращение к текущему пользователю, например. По идее, в списке рег заданий должна ошибка выводиться
34 Полька
 
19.11.18
14:52
(33) Обращения нет. Ошибка не выводится. Выводится: "Задание выполнено".
Может, я фоновое где-то не правильно настроила? Первый раз же.
35 Полька
 
19.11.18
14:55
В Доп.отчетах и обработках добавила обработку.
Загрузила ее из внешнего файла.
Настроила расписание на 1 раз в день.
Но пока запускаю из журнала "Регламентные и фоновые задания" кнопкой "Выполнить сейчас"
36 Fuas4
 
19.11.18
15:45
(34) надо отладчиком смотреть. Если не получается отладчиком, надо запись в текстовый файл делать и там смотреть что происходит. М.б. там все задание внутри попытки, тогда не будет ошибок в выполнении рег задания. Оно попыталось, у него не получилось, все ок, оно молодец
37 Fuas4
 
19.11.18
15:45
(35) Фоновое правильно настроено
38 dezss
 
19.11.18
15:54
покажи что у тебя в

Функция СведенияОВнешнейОбработке() Экспорт

написано.
39 Полька
 
19.11.18
16:01
(38)
Функция СведенияОВнешнейОбработке() Экспорт

ДанныеДляРег = Новый Структура();
ДанныеДляРег.Вставить("Наименование", "Загрузка из УПП в ДОК");
ДанныеДляРег.Вставить("БезопасныйРежим", ЛОЖЬ);
ДанныеДляРег.Вставить("Версия", "ver.: 1.001");
ДанныеДляРег.Вставить("Информация", "Загрузка из УПП в ДОК справочников Должности, СтруктураПредприятия и Сторудники");
ДанныеДляРег.Вставить("Вид", "ДополнительнаяОбработка");

ТабЗнКоманды = Новый ТаблицаЗначений;
ТабЗнКоманды.Колонки.Добавить("Идентификатор");
ТабЗнКоманды.Колонки.Добавить("Использование");
ТабЗнКоманды.Колонки.Добавить("Представление");

НовСтрока = ТабЗнКоманды.Добавить();
НовСтрока.Идентификатор = "ОткрытьОбработку";
//НовСтрока.Использование = "ОткрытиеФормы";
НовСтрока.Использование = "ВызовСерверногоМетода";
НовСтрока.Представление = "Открыть обработку";
ДанныеДляРег.Вставить("Команды", ТабЗнКоманды);

Возврат ДанныеДляРег;
40 Deon
 
19.11.18
16:02
А поясните мне глубинный смысл этой конструкции:
    ОбъектДляСервера = РеквизитФормыВЗначение("Объект");
    ЗаполнитьЗначенияСвойств(ОбъектДляСервера, Объект);
41 Полька
 
19.11.18
16:03
(40) это вопрос к создателям обработки V8Exchan83 :)
42 Deon
 
19.11.18
16:12
Кстати, если отладка не работает, понапихай в код ЗаписьЖурналаРегистрации(), да смотри, до куда доходит
43 Полька
 
19.11.18
16:13
Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт

ЗаписьЖурналаРегистрации("Соединение с базой",,,,СтрокаСоединенияИнформационнойБазы());
        
        
    ЭтотОбъект.ИмяФайлаПравилОбмена = "\\SRV1C83\Store\Обмен\Правила выгрузки УПП ДОК.xml";
    ЭтотОбъект.ИмяФайлаОбмена = "\\SRV1C83\Store\Обмен\Выгрузка УПП ДОК ПредпДолж.xml";
    ЭтотОбъект.ЗагружатьДанныеВРежимеОбмена=ИСТИНА;
    ЭтотОбъект.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты=ИСТИНА;
    ЭтотОбъект.ОбъектыПоСсылкеЗагружатьБезПометкиУдаления=ИСТИНА;
    ЭтотОбъект.ОптимизированнаяЗаписьОбъектов=ИСТИНА;
    ЭтотОбъект.ЗаписыватьРегистрыНаборамиЗаписей=ИСТИНА;
    ЭтотОбъект.РежимОбмена="Загрузка";

    ЭтотОбъект.ВыполнитьЗагрузку();        
    
                                                                     
КонецПроцедуры

Собственно, вот и все.
44 dezss
 
19.11.18
16:14
(43) вот только хотел спросить про то, есть ли экспортная ВыполнитьКоманду)))
45 Полька
 
19.11.18
16:17
(44) с Функция СведенияОВнешнейОбработке() Экспорт нормально?
46 dezss
 
19.11.18
16:20
(45) ну я там, собственно, хотел увидеть, чем заполняется
НовСтрока.Использование = "ВызовСерверногоМетода";

И когда увидел ВызовСерверногоМетода, то и подумал про ВыполнитьКоманду.
47 Полька
 
19.11.18
16:25
(42) поставила.
похоже, что проходит по процедуре. только загрузку не выполняет.
48 dezss
 
19.11.18
16:29
(47) добавь еще после
    ЭтотОбъект.ВыполнитьЗагрузку();
49 dezss
 
19.11.18
16:33
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
50 Deon
 
19.11.18
17:10
(47) А у пользователя, под которым агент сервера запущен, есть права на каталоги, в которых файлики лежат?
51 Полька
 
20.11.18
09:27
Продолжаю бодаться :))))
(48) делала. в журнале выводит 2 записи, те, что ставила
ДО  ЭтотОбъект.ВыполнитьЗагрузку(); И ПОСЛЕ
между ними ничего не пишет в журнал.
(49) а в качестве параметров что?
(50) есть. и в ручном режиме отрабатывает из под этого пользователя и промежуточный файл записывала в этот каталог.
52 catena
 
20.11.18
09:32
(51)Гениально. Это и так было понятно, что будет две записи. Для отладки нужно залезть внутрь процедуры и навтыкать там в стратегических местах. Анализировать, до какого момента исполняется.
53 Полька
 
20.11.18
09:45
(52) вся процедура
Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт
    
    ЭтотОбъект.ИмяФайлаПравилОбмена = "\\SRV1C83\Store\Обмен\Правила выгрузки УПП ДОК.xml";
    ЭтотОбъект.ИмяФайлаОбмена = "\\SRV1C83\Store\Обмен\Выгрузка УПП ДОК ПредпДолж.xml";
    ЭтотОбъект.ЗагружатьДанныеВРежимеОбмена=ИСТИНА;
    ЭтотОбъект.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты=ИСТИНА;
    ЭтотОбъект.ОбъектыПоСсылкеЗагружатьБезПометкиУдаления=ИСТИНА;
    ЭтотОбъект.ОптимизированнаяЗаписьОбъектов=ИСТИНА;
    ЭтотОбъект.ЗаписыватьРегистрыНаборамиЗаписей=ИСТИНА;
    ЭтотОбъект.РежимОбмена="Загрузка";

    ЭтотОбъект.ВыполнитьЗагрузку();        
    
                                                                    
КонецПроцедуры
стратегическое место одно :))))
54 dezss
 
20.11.18
09:53
(51) >>(49) а в качестве параметров что?
Ну просто для вызова серверного метода написано, что должны быть такие параметры у процедуры. Что будет, если одного из них, я хз.
Один параметр вообще для вызова клиентского метода.
55 Полька
 
20.11.18
09:56
(54) если ставить Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
то что-то нужно передать в ПараметрыВыполненияКоманды.
56 Мимохожий Однако
 
20.11.18
10:02
(53) В процедуру ВыполнитьЗагрузку() попадаешь отладчиком?
57 DrWatson
 
20.11.18
10:09
(53) не одно. ЭтотОбъект.ВыполнитьЗагрузку() - это же целая процедура там много чего делается.
Ох, лучше всё-таки поработать в направлении отладки фонового задания.
58 Полька
 
20.11.18
10:13
(56) (57) Тогда что нужно для отладки фонового?
Служба на сервере с ключом debug загружена.
Отладка-Подключение-Автоматическое подключение- "галки" поставила.
Точки останова поставила.
Запускаю регламентное- останова нет.
59 DrWatson
 
20.11.18
10:21
Помню с отладкой регламентных был один тонкий момент - строка имена базы и сервера при запуске твоего конфигуратора должны совпадать со строкой запуска сервера с точностью до регистра букв.
Проверяется так: Выполнить СтрокаСоединенияИнформационнойБазы в фоновом, записать результат в журнал регистрации. Там посмотреть и сверить что у тебя написано в списке баз.
Может это и и справили, но проверить стоит.
60 Полька
 
20.11.18
10:22
(59) совпадает. проверяла
61 dezss
 
20.11.18
10:24
(55) ну ты же не передаешь ИдентификаторКоманды, параметры тоже не передавай...
я просто не проверял, важно ли совпадение по количеству параметров.
62 Полька
 
20.11.18
10:26
(61) если не передаю, то в ОбщемМодуле вываливается на ошибку. Потому что там
Если ПараметрыКоманды = Неопределено Тогда
            
            ВнешнийОбъект.ВыполнитьКоманду(ИдентификаторКоманды);
            
        Иначе
            
            ВнешнийОбъект.ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыКоманды);
            
        КонецЕсли;
63 ZDenis
 
20.11.18
10:31
(62) Не совсем понимаю как вы собираетесь отлаживать внешнюю подключенную обработку. Куда вы там точки останова то ставите?

Я бы предложил сделать заведомо ошибку через Попытка Исключение и поставить галочку "остановка по ошибке". И вот тогда уже попасть в этот исполняемый модуль.
64 DrWatson
 
20.11.18
10:32
(60) Ну, что ещё там может быть?
debug ведь напрямую в реестр прописывали? Службу после этого надо перезапускать.
Брандмауэр, наверняка, может блокировать. При первом запуске конфигуратора с новым релизом он спрашивает, я всегда разрешаю.
Больше не знаю, у меня просто работало. Разве что только какая нибудь путаница со службами, портами, если их несколько.
А обычная-то серверная отладка работает?
65 DrWatson
 
20.11.18
10:34
+(63) Кстати, да. Работает или нет отладка фоновых нужно проверять точкой останова на коде фонового, а не внешней обработки.
66 Полька
 
20.11.18
10:35
(63) у меня и внешняя есть.  и встроила уже в конфигурацию.
67 Полька
 
20.11.18
10:36
(64) это сисадмины делали. клянутся, что сделали :) службу перезапускали еще вчера.
68 ZDenis
 
20.11.18
10:41
(66) Попробуй настроить без обращения к объекту, т.е. без ЭтотОбъект....

Прописать в ВыполнитьЗагрузку() напрямую необходимые переменные
69 ZDenis
 
20.11.18
10:43
Ну и попробуй все таки (63), чтобы точно в модуль попасть
70 Полька
 
20.11.18
10:45
Запустила обработку в ручном режиме с отладкой. В процедуре
&НаКлиенте останавливается. &НаСервере
- нет
71 ZDenis
 
20.11.18
10:50
(70) значит соврамши админы, не перезапустили с debug
72 catena
 
20.11.18
10:55
(71)Или не прописали. Или прописали, но не там.
73 Полька
 
20.11.18
10:57
(71) (72) если писан, то не понят, если понят, то не так......:))))
пошла отлавливать их :)