Автоматизация сохранения отчета Л7 для импорта в АвтоПарк

Опять про работу, но безотносительно АвтоПарк.

Сообщение Леонид Сандал » Пятница 22.06.2007 15:59

Павел Штатнов писал(а):Не пойму прикола...
После выгрузки Л7 список макросов пуст, а если просто открыть EXEL - то макросы есть.
:roll:


Ага, пуст, включая макросы, записанные в autopark.xls. Проблема вот в чем. Каскад делает выгрузку в Excel, очевидно, используя Excel в качестве объекта автоматизации. В этом режиме (эквивалентном запуску excel.exe с ключом -automation) НЕ открываются книги, расположенные в каталоге автозагрузки (XLStart) - такова спецификация MS Excel. АвтоПарк в подобных ситуациях делает принудительное открытие autopark.xls.

Мы посмотрим, что можно сделать иными способами, чем помещение книги в XLStart.
Аватара пользователя
Леонид Сандал
pit
pit
 
Сообщения: 1382
Зарегистрирован: Среда 30.05.2007 18:54
Откуда: Полак АйТи

Сообщение Светлана Хорькова » Пятница 22.06.2007 19:59

Леонид Сандал писал(а): Я еще, в отличие от тебя, Света, надежду не потерял.


может я и не надеюсь, но лапки пока не сложила
Аватара пользователя
Светлана Хорькова
 
Сообщения: 1637
Зарегистрирован: Четверг 07.06.2007 11:23
Откуда: А/k-1792 г.Клин

Сообщение Павел Штатнов » Вторник 26.06.2007 08:11

Леонид Сандал писал(а):
Павел Штатнов писал(а):Не пойму прикола...
После выгрузки Л7 список макросов пуст, а если просто открыть EXEL - то макросы есть.
:roll:


Ага, пуст, включая макросы, записанные в autopark.xls. Проблема вот в чем. Каскад делает выгрузку в Excel, очевидно, используя Excel в качестве объекта автоматизации. В этом режиме (эквивалентном запуску excel.exe с ключом -automation) НЕ открываются книги, расположенные в каталоге автозагрузки (XLStart) - такова спецификация MS Excel. АвтоПарк в подобных ситуациях делает принудительное открытие autopark.xls.

Мы посмотрим, что можно сделать иными способами, чем помещение книги в XLStart.



Идеи не появились? Может попросить в МТА поддержать открытие книги с макросами???
Аватара пользователя
Павел Штатнов
 
Сообщения: 528
Зарегистрирован: Четверг 07.06.2007 11:20
Откуда: Ивантеевка

Сообщение Андрей Гуминов » Вторник 26.06.2007 09:11

Пока нет.
Аватара пользователя
Андрей Гуминов
pit
pit
 
Сообщения: 90
Зарегистрирован: Суббота 09.06.2007 11:42
Откуда: Полак АйТи

Сообщение Светлана Хорькова » Вторник 26.06.2007 14:21

Звонил Кисилев, после обсуждения этой темы на сайте мта.
Сказал, что Каскад выгружает в excel- пользуйте на здоровье сохраненный excel файл.
Для выполнения лишней автоматизации у отдела нет свободных людей. И в план поставить не могут, т.к нужно всего 2-м филиалам.

Зато СС обещали подумать
Аватара пользователя
Светлана Хорькова
 
Сообщения: 1637
Зарегистрирован: Четверг 07.06.2007 11:23
Откуда: А/k-1792 г.Клин

Сообщение Павел Штатнов » Вторник 26.06.2007 14:32

Светлана Хорькова писал(а):... т.к нужно всего 2-м филиалам.


Вот это больше всего огорчает, никого больше не волнуют эти проблемы что-ли?
Аватара пользователя
Павел Штатнов
 
Сообщения: 528
Зарегистрирован: Четверг 07.06.2007 11:20
Откуда: Ивантеевка

Сообщение Павел Штатнов » Вторник 26.06.2007 15:31

Идея есть! Что если создать Макрос в EXEL который напрямую обращается к базе SQL-servera и вытаскивает оттуда данные:

Имеется SQL запрос, который формирует форму Л7 в Каскаде Вот он:
"
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go




ALTER PROCEDURE [dbo].[Л7_Поездки_карты]
@dat_Beg as datetime ,@dat_End as datetime,@MARSH as varchar(5) ,@VIH as varchar(5) ,@SMENA as varchar(5) ,@pr as smallint
AS


SET NOCOUNT ON


SELECT dbo.Поездки.Время_входа, dbo.Поездки.Код_ПСУ, dbo.te_texotd.NA, dbo.Поездки.tabn, dbo.kd_Fio.f, LEFT(dbo.Поездки.Код_маршрута,
LEN(dbo.Поездки.Код_маршрута) - 3) + '/' + RIGHT(LEFT(dbo.Поездки.Код_маршрута, LEN(dbo.Поездки.Код_маршрута) - 1), 2)
+ '/' + RIGHT(dbo.Поездки.Код_маршрута, 1) AS Код_Маршрута, dbo.Поездки.Остановка_входа, dbo.Поездки.Остановка_выхода,
Стоимость_поездки,
dbo.Поездки.Номер_эмиссии, dbo.Типы_карт.Тип_карты as Тип_карты,dbo.Поездки.Код_Типа_карты
into #tmp_l17
FROM dbo.Поездки INNER JOIN
dbo.ta_spr_mars ON LEFT(dbo.Поездки.Код_маршрута, LEN(dbo.Поездки.Код_маршрута) - 3) = dbo.ta_spr_mars.N_MARS LEFT OUTER JOIN
dbo.kd_Fio ON dbo.Поездки.tabn = dbo.kd_Fio.TABN LEFT OUTER JOIN
dbo.te_texotd ON dbo.Поездки.innom_s = dbo.te_texotd.innom_s LEFT OUTER JOIN
dbo.Типы_карт ON dbo.Поездки.Код_Типа_карты = dbo.Типы_карт.Код_типа_карты
WHERE (Поездки.Дата>=@dat_Beg and Поездки.Дата<=@dat_End) AND LEFT(Поездки.Код_маршрута, LEN(Поездки.Код_маршрута) - 3) LIKE @MARSH
and RIGHT(LEFT(Поездки.Код_маршрута, LEN(Поездки.Код_маршрута) - 1), 2) like @VIH and RIGHT(Поездки.Код_маршрута, 1) like @SMENA and
(LEN(dbo.Поездки.Код_маршрута) - 3 > 0) AND (NOT (dbo.Поездки.Дата IS NULL)) AND (NOT (dbo.Поездки.Код_Типа_карты IN ('21', '22', '23','24', '25', '26', '27', '2B')))


if @pr=0
begin
SELECT Время_входа, Код_ПСУ, NA, tabn, f, Код_Маршрута, Остановка_входа, Остановка_выхода, Стоимость_поездки, Номер_эмиссии, Тип_карты,Код_Типа_карты
from #tmp_l17
where not Код_Типа_карты IN ('3A', '3B','3C')


SELECT sum(Стоимость_поездки) as Приход
from #tmp_l17
where not Код_Типа_карты IN ('3A', '3B','3C')
end

if @pr=1
begin
SELECT Время_входа, Код_ПСУ, NA, tabn, f, Код_Маршрута, Остановка_входа, Остановка_выхода, Стоимость_поездки, Номер_эмиссии,Тип_карты,Код_Типа_карты
from #tmp_l17
where Код_Типа_карты IN ( '3A', '3B','3C')


SELECT sum(Стоимость_поездки) as Приход
from #tmp_l17
where Код_Типа_карты IN ( '3A', '3B','3C')
end

if @pr=2
begin
SELECT Время_входа, Код_ПСУ, NA, tabn, f, Код_Маршрута, Остановка_входа, Остановка_выхода, Стоимость_поездки, Номер_эмиссии,Тип_карты,Код_Типа_карты
from #tmp_l17
--where Код_Типа_карты IN ( '3A', '3B','3C')


SELECT sum(Стоимость_поездки) as Приход
from #tmp_l17
--where Код_Типа_карты IN ( '3A', '3B','3C')
end
"

Вопрос за малым, как это реализовать в EXEL? может кто знает?
Аватара пользователя
Павел Штатнов
 
Сообщения: 528
Зарегистрирован: Четверг 07.06.2007 11:20
Откуда: Ивантеевка

Сообщение Светлана Хорькова » Вторник 26.06.2007 15:35

А Гремушкин подсказал еще проще -
"а проще нельзя обойтись...просто если select * from Поездки что то вроде такого?"

только что с этим делать
Аватара пользователя
Светлана Хорькова
 
Сообщения: 1637
Зарегистрирован: Четверг 07.06.2007 11:23
Откуда: А/k-1792 г.Клин

Сообщение Павел Штатнов » Вторник 26.06.2007 15:38

Светлана Хорькова писал(а):А Гремушкин подсказал еще проще -
"а проще нельзя обойтись...просто если select * from Поездки что то вроде такого?"

только что с этим делать


Ты не забывай, что АвтоПарк поддерживает пока только импорт Л7. Нужно подумать - какие нам данные нужны для импорта, т.к. в Л7 много лишнего.
Аватара пользователя
Павел Штатнов
 
Сообщения: 528
Зарегистрирован: Четверг 07.06.2007 11:20
Откуда: Ивантеевка

Сообщение Андрей Гуминов » Четверг 28.06.2007 11:33

Решение проблемы с макросом нашли. Если оформить его как надстройку Excel, то всё работает.
Вот инструкция.

1. В Excel создать пустую книгу.
2. Нажать Alt-F11
3. В окне ”Project-VBAProject” (слева) на VBAProject – Эта книга щёлкнуть правой кнопкой мыши и выбрать ViewCode.
4. Скопировать в открывшееся окно текст:
Код: Выделить всё
Option Explicit

Private Sub AddButton(ByRef Where As Object, _
              ByVal ButtonName As String, _
              ByVal Action As String, _
              ByVal Face As Long, _
     Optional ByVal Position As Variant, _
     Optional ByVal Tip As String, _
     Optional ByVal BeginGroup As Boolean)
  Dim Button As CommandBarControl
  Dim oldButton As CommandBarControl
  For Each oldButton In Where.Controls
   If oldButton.Caption = ButtonName Then
    Set Button = oldButton
    GoTo Already
   End If
  Next
  If VarType(Position) = vbError Then
   Set Button = Where.Controls.Add(msoControlButton)
  Else
   Set Button = Where.Controls.Add(msoControlButton, , , Position)
  End If
  Button.Caption = ButtonName
Already:
  Button.OnAction = Action
  Button.TooltipText = Tip
  Button.FaceId = Face
  Button.BeginGroup = BeginGroup
End Sub

Private Sub AddControl(ByRef What As CommandBarControl, _
               ByRef Where As CommandBarControls, _
               ByVal ControlName As String, _
      Optional ByVal Position As Variant)
  Dim OldCM As CommandBarControl
  For Each OldCM In Where
   If OldCM.Caption = ControlName Then
    Set What = OldCM
    GoTo Already
   End If
  Next
  Set What = Where.Add(Type:=msoControlPopup, Temporary:=False, Before:=Position)
  What.BeginGroup = True
  What.Caption = ControlName
Already:
End Sub

Const MyAddInsControlName = "Мои приблуды" 'такой пункт меню добавим в Excel

Private Sub Workbook_AddinInstall()
Dim newCM As CommandBarControl
Application.CommandBars.DisplayTooltips = True
AddControl newCM, Application.CommandBars("Worksheet Menu Bar").Controls, MyAddInsControlName
AddButton newCM, "Сохранить форму Л7", "AddInCode.SaveL7ForAutoPark", 1790, 1, "Сохраняет отчет в файл для импорта в АвтоПарк", True
End Sub

Private Sub Workbook_AddinUninstall()
Dim OldCM As CommandBarControl
On Error Resume Next
Application.CommandBars("Worksheet Menu Bar").Controls(MyAddInsControlName).Delete
End Sub

5. (Наконец-то то, зачем всё и начали. Наш макрос :wink:) В меню VBA выполнить Insert – Module, нажать F4, в окне “Properties – Module1” изменить свойство Name на “AddInsCode”.
6. Скопировать в текст модуля следующий текст:
Код: Выделить всё
Sub SaveL7ForAutoPark()
Title = "Сохранение Л7"

Path = "\\сервер\AutoPark\TXT\Kaskad"  'Укажите свой путь

On Error Resume Next
t = Right(Worksheets("Лист1").Cells(1, 1).Value, 8)
If Err.Number <> 0 Then
  Dummy = MsgBox("Похоже, что это не Форма Л7", vbExclamation, Title)
  GoTo Finish
End If
filenamenew = Path & "\kaskad_20" & Right(t, 2) & Left(Right(t, 5), 2) & Left(t, 2)
ChDir Path
If Err.Number <> 0 Then
  Dummy = MsgBox("Не найдена папка " & Path, vbExclamation, Title)
  GoTo Finish
End If
ActiveWorkbook.SaveAs Filename:=filenamenew, FileFormat:=xlCSVMSDOS, CreateBackup:=False, Local:=True
Dummy = MsgBox("Сохранен файл " & filenamenew & ".csv", vbOKOnly, Title)
Finish:
End Sub

7. В тексте указать свой путь к папке, в которую следует сохранять файлы для АвтоПарка.
8. В VBA выполнить пункт меню Save.
9. В меню Excel открыть Файл – Свойства, на вкладке «Документ» заполнить свойства название, заметки. В свободной форме, например, название «Разные примочки», в заметках «сохранение Л7 для АП и прочие полезные макросы».
10. В меню Excel выполнить Файл – Сохранить как. Выбрать тип файла “Надстройка Microsoft Office Excel (*.xla)”, сохранить в папку "C:\Documents and Settings\”+<Ваш Login>+”\Application Data\Microsoft\AddIns\" (Эта папка буде предложена при выборе типа файла). Альтернативный путь - "C:\Program Files\Microsoft Office\OFFICE11\Library\" – в этом случае надстройка будет доступна всем пользователям данного компьютера. Имя файла любое, например “MyAddIns”.
11. Закрыть книгу, создать новую чистую книгу.
12. Открыть в меню Сервис – Надстройки. Найти созданную Вами надстройку (она там под названием, которое Вы дали ей в пункте 9), установить галочку. Нажать “OK”.

В Excel появится пункт меню Мои приблуды – Сохранить форму Л7.
Если требуется установить надстройку более чем на одном компьютере, следует скопировать файл, созданный в п.10 в аналогичную папку на втором компьютере и выполнить в нём п. 12.
Аватара пользователя
Андрей Гуминов
pit
pit
 
Сообщения: 90
Зарегистрирован: Суббота 09.06.2007 11:42
Откуда: Полак АйТи

Сообщение Светлана Хорькова » Четверг 28.06.2007 13:59

о сколько понаписали! :shock:
Аватара пользователя
Светлана Хорькова
 
Сообщения: 1637
Зарегистрирован: Четверг 07.06.2007 11:23
Откуда: А/k-1792 г.Клин

Сообщение Павел Штатнов » Четверг 28.06.2007 14:46

Красиво обошли эту проблему. Может скоро вообще от КАСКАДА откажемся??? :wink:
Аватара пользователя
Павел Штатнов
 
Сообщения: 528
Зарегистрирован: Четверг 07.06.2007 11:20
Откуда: Ивантеевка

Сообщение Леонид Сандал » Пятница 06.07.2007 10:44

Есть просьба всем, кто это читает - пожалуйста, отпишите здесь - воспользовались ли Вы информацией из этой темы.
Аватара пользователя
Леонид Сандал
pit
pit
 
Сообщения: 1382
Зарегистрирован: Среда 30.05.2007 18:54
Откуда: Полак АйТи

Сообщение Павел Штатнов » Пятница 06.07.2007 10:47

Леонид Сандал писал(а):Есть просьба всем, кто это читает - пожалуйста, отпишите здесь - воспользовались ли Вы информацией из этой темы.


Я воспользовался :wink:
Аватара пользователя
Павел Штатнов
 
Сообщения: 528
Зарегистрирован: Четверг 07.06.2007 11:20
Откуда: Ивантеевка

Сообщение Леонид Сандал » Среда 18.07.2007 15:44

Тема закрыта - см. здесь http://forum.autopark.ru/viewtopic.php?t=78
Аватара пользователя
Леонид Сандал
pit
pit
 
Сообщения: 1382
Зарегистрирован: Среда 30.05.2007 18:54
Откуда: Полак АйТи

Пред.

Вернуться в Не АвтоПарк

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

cron