Имя: Пароль:
1C
1С v8
Создание новых документов при помощи регламентного задания управляемые формы.
0 Валентинка123
 
21.10.14
17:37
Есть задание сделать загрузку документов регламентным заданием.
До этого была сделана обработка при помощи которой из базы SQL загружаются данные  и создается документ.  Как  эту обработку можно запустить при помощи регл. задания ? Буду благодарна за любые подсказки и идеи.

код обработки
&НаКлиенте
Процедура ВыполнитьЗагрузку(Команда) экспорт
        ПериодХ =Месяц(ДобавитьМесяц(ТекущаяДата(), -1));
        МассивЗначений= ВыбираемТРК(ПериодХ);  //МассивЗначений все трк для которых доступна информация в SQL таблице
        Для Индекс = 0 По МассивЗначений.Количество() - 1 Цикл
        Трк= МассивЗначений[Индекс];
        Трк = трк(трк);
         
        ключ = ЕстьЛиДокумент(Трк,ПериодХ);      // проверяем была ли загрузка за этот период у этого ТРК, если была то ключ равен ссылке на документ иначе НЕОПРЕДЕЛЕНО
        КлючПоиска = Новый Структура("Ключ", ключ);
        Форма = ОткрытьФорму("Документ.NOI.Форма.ФормаДокумента",КлючПоиска );   //Открываем форму документа по КлючуПоиска(или ссылка или новый документ)
        НовыйОбъект = Форма.Объект;
        Дата= День(НачалоМесяца(ТекущаяДата()));
        //месяц = ПериодХ;
    
        //Год = год(ДобавитьМесяц(ТекущаяДата(), -1));
        ЗаполнитьОбъект(НовыйОбъект,Трк, ПериодХ);  // заполняем данными из базы SQL  по ТРК за период
        
        КопироватьДанныеФормы(НовыйОбъект, Форма.Объект);
        КлючПоиска.Вставить("РежимЗаписи", РежимЗаписиДокумента.Проведение);
        
        форма.Записать(КлючПоиска);
        Форма.Закрыть();
        
        КонецЦикла;
    КонецПроцедуры
1 Валентинка123
 
21.10.14
17:39
Конфигурация самописная.  1с 8.2
2 Валентинка123
 
21.10.14
17:42
При переносе этого кода в общий модуль не работает  ОткрытьФорму("Документ.NOI.Форма.ФормаДокумента",КлючПоиска );


я новичок в программирование 1с и темболее в УФ.
4 Looser-1c
 
21.10.14
17:46
Подсказка.
Регламентное задание работает на сервере.
ОткрытьФорму - на клиенте.

Отсюда вывод - никак.
Нужно всё переделывать
5 IVT_2009
 
21.10.14
17:47
Аналогичная задача
1. Создаем новое регламентное задание с именем например: загрузкаДанных
2. Создаем общий модуль с именем: реглЗадания , ставим галки на нем сервер,внешнее соеденение,вызов сервера
3. в него поместим процедуру :

&наСервере
Процедура РегламентноеЗаданиеВыполнениеОбработки(Ключ) Экспорт
    ЗагрузкиДанных.читаемНаборФайлов();
    сообщить(текущаяДата());
    
КонецПроцедуры

4. В модуле загрузкиДанных создадим процедуру с именем читаемНаборФайлов()

&НаСервере
процедура читаемНаборФайлов() экспорт
//*
//* пробуем прочитать файлы из каталога и разобрать заголовок
//* для удобного поиска в базе данных
//*
    вт = поискФайлов("\\192.168.100.6\obmen\outSR\","*.xml");
    для ее = 0 по вт.количество()-1 цикл
        а3 = справочники.ТТНбк.НайтиПоРеквизиту("РеквизитФайла",УП(вт[ее].реквизит));
        если а3.Пустая() = истина тогда
            г = читаемХМЛ2014дом(вт[ее].путь,переделатьДату(вт[ее].реквизит));
            выполнитьЗаписьТЧ(г) ;
            //сообщить(УП(вт[ее].рнк)+" "+УП(вт[ее].реквизит));
            ПараметрыСеанса.последняяТТН = вт[ее].рнк;
        конецЕсли;    
    конецЦикла;
конецПроцедуры //процедура читаемНаборФайлов()


ее содержимое свое поставите.
6 IVT_2009
 
21.10.14
17:49
Единственное замечание , это вызывается по планировщику и работает в фоне . В планировщике настроите вызав как вам нужно
у меня стоит повторять каждый день с инервалом в 27 секунд
7 IVT_2009
 
21.10.14
17:50
еще в моем примере подцепим в задании РегламентноеЗаданиеВыполнениеОбработки(Ключ) как процедуру выполнения. У меня грузит документы в базу на удаленном складе так. Решение рабочее
8 Валентинка123
 
21.10.14
18:08
IVT_2009, спасибо, буду пробовать.
9 Валентинка123
 
21.10.14
18:23
Looser-1c, ваша подсказка мне не помогла, т к это понятно изначально, вопрос и состоит в том "как переделать?" . На данный момент даже в теории не могу представить как создать документ без открытия и т.д.
10 Валентинка123
 
22.10.14
15:14
Запускаю регламентное задание, оно вызывает общий модуль сервер, внешнее соединение. Переписала процедуру в общий модуль. Заменила ОткрытьФорму() на ПолучитьФорму(), но теперь дошла до момента получения форма.Объект, на сервере Объект не получить. Как теперь я могу выполнить такую задачу  без объекта ?? Люди спасите утопающего!!!
11 Repey
 
22.10.14
15:33
Не нужна тебе форма. Бери сразу объект.
12 Валентинка123
 
22.10.14
15:42
а как объект взять на сервере?
13 Repey
 
22.10.14
15:48
- создать
- найти
- найти запросом
Все зависит от того - какой объект тебе нужен.
14 DrZombi
 
гуру
22.10.14
15:52
(2) Используй ПолучитьФорму :)
Без открытия ;)
15 Валентинка123
 
22.10.14
15:52
вот что было  и что работает  если сделать все руками
ключ = ЕстьЛиДокумент(Трк,ПериодХ);      // проверяем была ли загрузка за этот период у этого ТРК, если была то ключ равен ссылке на документ иначе НЕОПРЕДЕЛЕНО

        КлючПоиска = Новый Структура("Ключ", ключ);
        Форма = ОткрытьФорму("Документ.NOI.Форма.ФормаДокумента",КлючПоиска );   //Открываем форму документа по КлючуПоиска(или ссылка или новый документ)

        НовыйОбъект = Форма.Объект;


форма.объект мне по идее нужна, для того чтобы туда записать данные и сохранить этот новый документ.
16 DrZombi
 
гуру
22.10.14
15:53
(10) Зачем тебе вообще Форма?
"Кто её будет на сервере смотреть?" ;)

Переписывай на тривиальную обработку
17 DrZombi
 
гуру
22.10.14
15:55
(15) >>> форма.объект мне по идее нужна, для того чтобы туда записать данные и сохранить этот новый документ


Жесть, всю жизнь писал документы на серверах без форм, а тут оказывается по другому оно не пишет :DDDDD
18 Валентинка123
 
22.10.14
15:57
Откройте секрет как это делается?? может есть примерчик ?
19 DrZombi
 
гуру
22.10.14
15:57
(15) Учись...

ключ = ЕстьЛиДокумент(Трк,ПериодХ);
ОбъектДок = ключ.ПолучитьОбъект();

ОбъектДок.<Твои реквизиты документа> = <Новое значение>;

ОбъектДок.Записать(<Режим записи, либо просто запись, либо с проведением>) :)
20 Repey
 
22.10.14
15:58
Бяялл!!

Если ключ = неопределено тогда
ДокумОбъект = Документ.NOI.СоздатьДокумет();
иначе
ДокумОбъект = ключ.получитьОбъект();
КонецЕсли

Гюльчатай, пора уже как-то выразить свою благодарность за терпение нечеловеческое!
21 DrZombi
 
гуру
22.10.14
15:58
+(18) Если документа нет, то

ОбъектДок = Документ.<Твой документ>.СоздатьДокумент()
22 Валентинка123
 
22.10.14
16:03
Огромное спасибо :)!!! И за терпение в том числе!
23 Валентинка123
 
22.10.14
16:14
ОГРОМНОЕ СПАСИБО ВСЕ ПОЛУЧИЛОСЬ!!