• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Автоматический запуск отчета в 1С УТ (по расписанию)

  • Автор темы Exo
  • Дата начала
E

Exo

Доброго времени суток, вопрос к знатокам.

Бизнес требует организации в 1С УТ (8.0.17.25) автоматического формирования отчета в определенное время и день.
Скажите, возможно ли такое и если да, каким средством этого можно достичь.

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

Может ли простой пользователь справиться с этой задачей?
 
K

krenk

Могу сказать за 7.7 (а в 8 думаю тем более): можно... сам недавно делал такой автоотчет.... :(

все зависит от того куда он должен потом деваться (мож сразу в файл запихивать), скольким пользователям он нужен...
 
K

KiR

сделать автоотчет теоретически можно. а вот насчет может ли его сделать простой пользователь - думаю что ответ отрицательный
 
P

puh14

Самый простой путь - через Task Shelduer - Задаешь заход в 1с под конкретным пользователем в конкретное время , в процедуре ПриНачалеРаботыСистемы() пишешь вызов процедуры отчета под условием захода этого пользователя, в процедуре отчета дописываешь кусок для создания и отправки итогового файла по мылу. Ой - просмотрел, это как в 7.7 реализовалось, в восьмерке можно сделать так-же, насчет внутренних настроек для такого - не знаю.
 
K

KiR

puh14, скажи плиз, а как сделать так чтобы можно было передавать параметр? Т.е. нужно чтобы по расписанию запускалась прога (по идее через bat файл можно прописать запуск проги и базы и юзверя и кинуть в шедулер), выполнялся отчет и потом все закрывалось. причем желательно так чтобы можно было передать проге какой-то параметр - написать к примеру в файл текстовый.
Буду благодарен за подобную инфу! 1C 7.7 буха
 
P

puh14

Программа 1с имеет следующие параметры:
1cv7.exe MODE [ /M | /D | /U | /N | /P ],

где MODE - режим запуска, может принимать только одно из трех значений:

config - режим конфигуратора;

debug - режим отладчика;

enterprise - нормальный (рабочий) режим 1С.



Режим enterprise можно применять со следующими ключами:

/M - запуск программы в монопольном режиме;

/D - каталог базы данных;

/U - рабочий каталог пользователя (каталог из списка пользователей игнорируется);

/N - имя пользователя;

/P - пароль пользователя;

/T<путь> - путь к временным файлам

/@<ИмяФайла> - для режима конфигуратора с указанием файла пакетного запуска

/W - инициализация Web расширения

Пример:



@echo off
Set pr=”C:\Program Files\1Cv77\BIN\” //путь к программе
Set db=”D:\archive\2SBDB\” //путь к базе


cd %pr% //переход в папку программы

start 1cv7s.exe config /D%db% /NUser1 /PPass1



//запуск конфигуратора для пользователя User1 с паролем Pass1



P.S. команда start используется для того, чтобы не выводилось черное окошко командной строки windows.

Если заменить последнюю команду на:

start 1cv7s.exe enterprise /D%db% /NUser1 /PPass1
то будет выполнен простой запуск программы 1с.

взял с

в процедуре ПриНачалеРаботыСистемы() прописываешь условие

Если ИмяПользователя() = "Отчет" Тогда
СформироватьОтчет();
КонецЕсли;

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

А под конец вызываешь ЗавершитьРаботуСистемы();
 
K

KiR

Проще наклепать разных пользователей 1с, либо прописать это в процедуре СФормироватьОтчет(), либо запускать из под разных пользователей системы(задается в TAskShelduer)
не понял что ты имеешь ввиду под этим...
 
P

puh14

Когда запускаешь файло из taskShelduer он просит сказать из-под какого ПОЛЬЗОВАТЕЛЯ ОПЕРАЦИОННОЙ СИСТЕМЫ надо запустить файл. Когда программа запущена ( например с ПОЛЬЗОВАТЕЛЕМ 1С "отчет") - через ИмяПользователя() ты вытаскиваешь ПОЛЬЗОВАТЕЛЯ 1С, каким-то образом ты можешь вытащить и ПОЛЬЗОВАТЕЛЯ ОПЕРАЦИОННОЙ СИСТЕМЫ, от имени которого был запущен батник в taskshelduer
 
K

KiR

ну ясно. я так понял СформироватьОтчет() - пишеться ручками. как мне записать туда вызов внешней обработки + заполнить ее параметрами, которые я могу взять из констант, а также как именнно выполнит эту внешнюю обработку?
 
P

puh14

Можешь СформироватьОтчет() в глобальнике записать, можешь внешнюю. Если внешнюю пишешь ОТкрытьФорму(), передаешь в неё контекст (константы, пользователь), там в ПриОТкрытии() выполняешь нужные действия, пишешь результат в файл отправляешь по мылу через dll и ЗавершитьРаботуСистемы()
 
K

KiR

а как получить эту внешнюю обработку - где и как указать в ней путь и параметры для запуска? Просто для нескольких баз нада - решили во внешеней чтобы глобальный не засорять...
 
P

puh14

Могу только в семерке подсказать. Прмерно так :

Процедура Материалка()
ИмяФайла = КаталогИБ() + "\extforms\материалка.ert";
открытьФорму("Отчет",Тз,ИмяФайла); // ТЗ - это таблица значений, передающаяся в обработку
КонецПРоцедуры

в внешней обработке

Процедура приОткрытии()// а вот тут собсно пишешь формирование отчета
Если ПустоеЗначение (Форма.Параметр) = 0 ТОгда
Док = Форма.Параметр;
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
Спр = СоздатьОбъект("Справочник.Номенклатура");
Спр.НайтиЭлемент(Док.Товар);
Сообщить(Док.Товар);
ВыбТовар.ДобавитьЗначение(Док.ТОвар);
КонецЦикла;
КонецЕсли;

КонецПроцедуры
 
K

KiR

спасибо большое! ща буду маньячить. если еще будут вопросы - напишу. лови пока свой плюс, бэтмэн)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!