Модераторы: stron
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> автозапуск 1С с параметрами, ночью запустить отчёт и сохранить 
:(
    Опции темы
dionisiu
Дата 26.6.2007, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 13.5.2006
Где: Крым

Репутация: нет
Всего: 2



Здравствуйте, уважаемые!

подскажите, пожалуйста, существует ли принципиальная возможность запуска в командной строке 1С77 (на дбф-ах) с тем, чтобы открыть определённый отчёт, выставить там необходимые параметры, запустить его, а по готовности - сохранить в эксель - то есть на полном автомате.

предполагается запуск под утро (пока базой никто не пользуется) по расписанию, а то к концу месяца время сохранения отчёта (который в мокселе весит 16-17 метров) в эксель занимает уже по 40-50 минут, а отчёт нужен не позднее 08:10 утра, для последующей обработки (с учётом, что контора открывается в 08:00 - предложения приходить на час раньше не приветствуются).

ссылки на документацию приветствуются и плюсуются.

Я с работы ухожу около 7-ми вечера, но ночные операторы склада ещё до часу ночи могут колупаться, потом до трёх база индексируется, а после - нужно запустить мой отчёт.
PM MAIL ICQ   Вверх
SaschaL
Дата 26.6.2007, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 880
Регистрация: 13.12.2006
Где: Челябинская обл г .Нязепетровcк

Репутация: 8
Всего: 9



В принципе 1С поддерживает запуск из под командной строки и её можно запустить по расписанию. Методика запуска и синтакси подробно описан в литературе поставляемой в комплекте 1С. А вот с запуском отчета все гораздо сложнее. Можно конечно создать пользователя и написать для него специально обработку которая бы формировала отчет и сливала бы его в Экселевский формат. Но это только теоретически сам не пробовал воплотить такое в жизнь как то надобности не было.
Глобальный модуль придется тоже немного модернизировать (процедуру ПриНачалеРаботыСистемы()).
Лично я выбрал реализацию такого варианта.
Хотя можно и строними способами сделать такой отчет, предварительно выяснив структуру базы.
PM MAIL ICQ   Вверх
Zero
Дата 26.6.2007, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 15
Всего: 24



Если 1С постоянно включена, то можно в глобальник добавить ОбработкаОжидания, куда встаить условие, типа если время такоето, тогда запустить такую-то процедуру формирования отчёта и после выгрузки.
PM MAIL ICQ   Вверх
evGenie
Дата 28.6.2007, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 7.6.2007
Где: Челябинск

Репутация: 1
Всего: 1



Цитата(SaschaL @  26.6.2007,  22:16 Найти цитируемый пост)
Можно конечно создать пользователя и написать для него специально обработку которая бы формировала отчет и сливала бы его в Экселевский формат. Но это только теоретически сам не пробовал воплотить такое в жизнь как то надобности не было.

Именно так и нужно сделать. В ПриНачалеРаботыСистемы() анализировать какой пользователь вошел. Если текущий пользователь - специальный, то запустить соответствующую обработку и, потом, закрыть 1С.
PM ICQ   Вверх
SaschaL
Дата 28.6.2007, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 880
Регистрация: 13.12.2006
Где: Челябинская обл г .Нязепетровcк

Репутация: 8
Всего: 9



Можно так же использовать два способа приведенные выше:
Первый Способ это Ввести условие в процедуру "ПриНачалеРаботыСистемы()", в которой бы провелось условие на предмет кто из пользователей запустил програму. При этом если запущено под нужным пользователем, то открывалась бы нужная форма отчета.
При этом на эту форму можно установить ОбработкуОжидания которая бы сама запустила после некоторого момента формирование отчета, а так же выгрузку в Эксель!
PM MAIL ICQ   Вверх
Zero
Дата 28.6.2007, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 15
Всего: 24



Цитата(evGenie @  28.6.2007,  08:02 Найти цитируемый пост)
Именно так и нужно сделать. В ПриНачалеРаботыСистемы() анализировать какой пользователь вошел. Если текущий пользователь - специальный, то запустить соответствующую обработку и, потом, закрыть 1С. 

Нахрен нужен лишний пользователь? Достаточно в обработке ожидания всё описать один раз и негемороиться. И в процедуре ПриНачалеРаботыСистемы ненадо нечё лишнего писать. Потом со всеми этими лишними доработками натыкаными в разных концах модуля, тем более глобальника, при обновлении потом проблем не оберёшся.
PM MAIL ICQ   Вверх
dionisiu
Дата 29.6.2007, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 13.5.2006
Где: Крым

Репутация: нет
Всего: 2



То есть, только в конфигураторе копаться  smile 

у меня доступа к конфигу нет и никто не даст, а с разработчиками общаться невозможно.

облом.
PM MAIL ICQ   Вверх
evGenie
Дата 29.6.2007, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 7.6.2007
Где: Челябинск

Репутация: 1
Всего: 1



Цитата(Zero @  28.6.2007,  23:33 Найти цитируемый пост)
Нахрен нужен лишний пользователь? Достаточно в обработке ожидания всё описать один раз и негемороиться.

В условии задачи сказан именно запуск 1С. А если ее оставлять на ночь, то как она индекситься будет?
Можно конечно запустить под каким-нибудь уже существующим пользователем и сработает ОбработкаОжидания(), но хранить пароль существующего пользователя в батнике в незашифрованном виде - чистое зло. Как раз с лишним пользователем геморроя будет меньше. Нужно не перегружать функционал существующих вещей, а использовать каждый механизм для целей, для которых он и предназначен.
PM ICQ   Вверх
SaschaL
Дата 29.6.2007, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 880
Регистрация: 13.12.2006
Где: Челябинская обл г .Нязепетровcк

Репутация: 8
Всего: 9



Разделяю снение <b>evGenie</b> что ни какого гемороя не должно быть если написать все правильно, на вставить то нужно всего одно условие которое не должно ни куда касатьсь кроме этого пользователя.

Цитата

Если ИмяПользователя() = "НужныйПользователь" тогда
        // Здесь пишется условие которое должно быть выполнено если пользователь опознан
        // если же опознан тогда все запускается в стандартном режиме
КонецЕсли;

PM MAIL ICQ   Вверх
dionisiu
Дата 29.6.2007, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 13.5.2006
Где: Крым

Репутация: нет
Всего: 2



Привожу текст процедуры ПриНачалеРаботыСистемы()
В базе есть пользователь с достаточными правами для отчёта, но недостаточными для просмотра других документов ("Гость"), его пароль не составляет секрета и может быть использовано в батнике.
вопрос только в следующем: как сделать, чтоб среди ночи батник запустил 1С, потом эта процедура проверила пользователя, при совпадении с именем "Гость" вывела окошко, что через 60...30...0 секунд (в смысле, нужно вывести убывающее время) будет запущен отчёт, для отмены нажать "ОТМЕНА" (на случай визита контролирующих органов, чтоб у них была возможность отменить отчёт, а выполнять свой).

И ещё вопрос в догонку: как, открыв отчёт, вызвать его сохранённую настройку (меню Действие/Открыть настройку)?





Код

    Процедура ПриНачалеРаботыСистемы()
        Перем Спр,Док, стр, наз, ин, пр, Найден, к, ф, зн, ТЗ, пТЗ;
        
        СтатусВозврата(0);
        Если ПустоеЗначение(НазваниеНабораПрав(1))=1 тогда 
            ин=?(ПустаяСтрока(НазваниеНабораПрав(0))=1, "неопределённым", "неконтролируемым");
            ЗаписьЖурналаРегистрации("Попытка входа с "+ин+" правом доступа!
            |Компьютер "+ИмяКомпьютера(),"ОбщиеСобытия", "Нарушение авторизации",,5);
            Предупреждение("Запрещено входить с "+ин+" правом доступа!",2);
            возврат; 
        ИначеЕсли ПустоеЗначение(НазваниеИнтерфейса())=1 тогда
            ЗаписьЖурналаРегистрации("Попытка входа с пустым интерфейсом!
            |Компьютер "+ИмяКомпьютера(),"ОбщиеСобытия", "Нарушение авторизации",,5);
            Предупреждение("Запрещено входить с пустым интерфейсом!",2);
            возврат; 
        КонецЕсли;    
        
        //Проверка присутствия в справочнике "НаборыПравДоступа"
        УжеЕстьТакойНаборПрав = 0;
        СпрНаборыПрав = СоздатьОбъект("Справочник.НаборыПравДоступа"); 
        СпрНаборыПрав.ВыбратьЭлементы();
        Пока СпрНаборыПрав.ПолучитьЭлемент()=1 Цикл 
            Если СпрНаборыПрав.ПометкаУдаления()=1 Тогда Продолжить; КонецЕсли;//("В справочнике ""Наборы прав доступа"" не может быть помеченных на удаление.");                    
            Если НРег(СпрНаборыПрав.Наименование) = НРег(НазваниеНабораПрав()) Тогда
                УжеЕстьТакойНаборПрав = 1;        
            КонецЕсли;
        КонецЦикла;   
        //Запись набора прав пользователя    
        Если    УжеЕстьТакойНаборПрав = 0 Тогда
            СпрНаборыПрав.Новый();
            СпрНаборыПрав.Наименование   = СокрЛП(НазваниеНабораПрав());
            СпрНаборыПрав.Контролировать = Да;
            СпрНаборыПрав.Записать();
        КонецЕсли; 
        
        ф=0; Пользователь="";
        ин=СоздатьОбъект("Справочник.Сотрудники");
        Если ин.ВыбратьЭлементыПоРеквизиту("ИмяДля1С",ИмяПользователя(),0,0)=1 тогда
            СтатусВозврата(0);
            сп=СоздатьОбъект("ТаблицаЗначений");
            сп.НоваяКолонка("Сотрудник","Справочник"); 
            сп.НоваяКолонка("КодИБ","Строка",3);
            сп.НоваяКолонка("ИД","Строка");
            сп.НоваяКолонка("Право","Число");
            Пока ин.ПолучитьЭлемент()=1 Цикл сп.НоваяСтрока();
                сп.Сотрудник=ин.ТекущийЭлемент();
                сп.ИД=ЗначениеВСтрокуВнутр(ин.ТекущийЭлемент());
                сп.Право=ин.ПравоДоступа.ПорядковыйНомер();
                Если сп.Право=0 тогда сп.Право=Перечисление.НаборыПравДоступа.КоличествоЗначений(); КонецЕсли;
                к=ИБСозданияОбъекта(сп.Сотрудник);
                Если (ПустоеЗначение(к)=1) или (ЦентральнаяИБКод()=к) тогда ф=ф+1;
                Иначе сп.КодИБ=к;
                КонецЕсли;
            КонецЦикла;
            
            к="";
            Если сп.КоличествоСтрок()=1 тогда
                Пользователь=сп.ПолучитьЗначение(1,"Сотрудник");
            ИначеЕсли сп.КоличествоСтрок()>1 тогда
                к.Сортировать("Право-,ИД-");
                Если ТекущаяИБЦентральная()=1 тогда
                    Если ф=1 тогда сп.НайтиЗначение("   ",к,"КодИБ"); КонецЕсли;
                ИначеЕсли сп.НайтиЗначение(ТекущаяИБКод(),к,"КодИБ")=1 тогда
                ИначеЕсли сп.НайтиЗначение("   ",к,"КодИБ")=1 тогда
                Иначе //прервать, т.к. объекты пришли из разных распределённых баз
                КонецЕсли;
                
                Если ПустоеЗначение(к)=1 тогда
                    Предупреждение("Под именем «"+ИмяПользователя()+"» в 1С Предприятие входят несколько пользователей!
                    |Обратитесь к администратору для устранения конфликта логинов пользователей 1С!",30);
                    Возврат;
                КонецЕсли;
                ин.НайтиЭлемент(сп.ПолучитьЗначение(к,"Сотрудник"));
                к=Вопрос("Под именем «"+ИмяПользователя()+"» в 1С Предприятие входят несколько пользователей!
                |Ввести новое имя входа в 1С Предприятие для сотрудника "+ин.ТекущийЭлемент()+" ?","ОК+Отмена",30);
                Если к="ОК" тогда
                    стр=СокрЛП(ин.ИмяДля1С);
                    зн=СоздатьОбъект("Справочник."+ин.Вид());
                    пр=Метаданные.Справочник(ин.Вид()).Реквизит("ИмяДля1С").Длина;
                    Пока ВвестиСтроку(стр,"Новое имя входа в 1С Предприятие для сотрудника "+ин.ТекущийЭлемент(),пр,0,300)=1 Цикл
                        ф=СокрЛП(стр);
                        Если ПустоеЗначение(ф)=1 тогда продолжить; КонецЕсли;
                        стр=глФильтроватьСимволыДляИмени1С(ф);
                        Если ф <> стр тогда
                            Предупреждение("Имя может содержать только из цифры и буквы!",10);
                        ИначеЕсли зн.ВыбратьЭлементыПоРеквизиту("ИмяДля1С",стр,0,0)=1 тогда
                            Предупреждение("Имя «"+стр+"» для входа в 1С уже используется другим пользователем!",10);
                        Иначе
                            НачатьТранзакцию();
                            Попытка
                                ин.ИмяДля1С=стр;
                                ин.Записать();
                                ЗафиксироватьТранзакцию();
                                Предупреждение("Теперь сотрудник "+ин.ТекущийЭлемент()+" должен входить под именем «"+стр+"»!
                                |Если необходимо, то отредактируйте список пользователей 1С Предприятия!
                                |    ———— Войдите в 1С Предприятие ещё раз !! ————",30);
                            Исключение
                                ОтменитьТранзакцию();
                                Сообщить("Ошибка записи информации по сотруднику "+ин.ТекущийЭлемент()+"
                                |"+ОписаниеОшибки(),"!");
                                Предупреждение("Ошибка записи справочника!",60);
                            КонецПопытки;
                            Прервать;
                        КонецЕсли;
                    КонецЦикла;
                КонецЕсли;
                
                СтатусВозврата(0);
                Возврат;
            КонецЕсли;
        КонецЕсли;
        


кстати, а есть на форуме тэги для кода 1С?

PM MAIL ICQ   Вверх
SaschaL
Дата 29.6.2007, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 880
Регистрация: 13.12.2006
Где: Челябинская обл г .Нязепетровcк

Репутация: 8
Всего: 9



Батник прицепи к новому заданию, через планировщик задач!
Там же и время назначается!
PM MAIL ICQ   Вверх
evGenie
Дата 3.7.2007, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 7.6.2007
Где: Челябинск

Репутация: 1
Всего: 1



Цитата(dionisiu @  29.6.2007,  17:47 Найти цитируемый пост)
И ещё вопрос в догонку: как, открыв отчёт, вызвать его сохранённую настройку (меню Действие/Открыть настройку)?

Не получится этого сделать.
Цитата(dionisiu @  29.6.2007,  17:47 Найти цитируемый пост)
вывела окошко, что через 60...30...0 секунд (в смысле, нужно вывести убывающее время) будет запущен отчёт, для отмены нажать "ОТМЕНА" (на случай визита контролирующих органов, чтоб у них была возможность отменить отчёт, а выполнять свой).

Просто выведи Вопрос() с нужным интервалом ожидания ответа.
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "1C: Предприятие, SAP, ERP и учётные системы"
stron

Запрещается!

1. Обсуждение крэков, кейгенов и других подобных программ

Пробуйте искать сами или обращайтесь в приват к участникам форума.

Темы с подобными вещами будут немедленно удаляться, а нарушители - получать предупреждения.

Также запрещается обсуждение проблем работы этих программ (что куда вписать, куда что скопировать и т.п...)

2. Давать ссылки на взломанные продукты

  • Пожалуйста, пользуйтесь поиском перед тем, как задать вопрос - возможно ответ уже есть на форуме.
  • Название темы должно отражать её суть
  • Действия модераторов можно обсудить здесь

С уважением, stron, Pegas.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | 1C: Предприятие, SAP, ERP и учётные системы | Следующая тема »


 




[ Время генерации скрипта: 0.1018 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.