|   |   | 
| 
 | УФ. Как получить доступ к объекту в модуле объекта. | ☑ | ||
|---|---|---|---|---|
| 0
    
        Полька 14.11.18✎ 15:24 | 
        Разбираюсь с УФ и регламентными операциями.
 Есть обработка. УФ. В реквизитах есть собственно ОБЪЕКТ, к которому из модуля формы есть доступ. Это ясно. Можно ли получить к нему доступ из модуля объекта? Собственно, нужно только структуру получить. | |||
| 1
    
        ДенисЧ 14.11.18✎ 15:26 | 
        ЭтотОбъект?
 РеквизитФормыВЗначение() ? | |||
| 2
    
        AlvlSpb naïve 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 naïve 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 naïve 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) если писан, то не понят, если понят, то не так......:))))
 пошла отлавливать их :) | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |