Добавлено:
Пятница 22.06.2007 15:59
Леонид Сандал
Павел Штатнов писал(а):Не пойму прикола...
После выгрузки Л7 список макросов пуст, а если просто открыть EXEL - то макросы есть.
Ага, пуст, включая макросы, записанные в autopark.xls. Проблема вот в чем. Каскад делает выгрузку в Excel, очевидно, используя Excel в качестве объекта автоматизации. В этом режиме (эквивалентном запуску excel.exe с ключом -automation) НЕ открываются книги, расположенные в каталоге автозагрузки (XLStart) - такова спецификация MS Excel. АвтоПарк в подобных ситуациях делает принудительное открытие autopark.xls.
Мы посмотрим, что можно сделать иными способами, чем помещение книги в XLStart.
Добавлено:
Пятница 22.06.2007 19:59
Светлана Хорькова
Леонид Сандал писал(а): Я еще, в отличие от тебя, Света, надежду не потерял.
может я и не надеюсь, но лапки пока не сложила
Добавлено:
Вторник 26.06.2007 08:11
Павел Штатнов
Леонид Сандал писал(а):Павел Штатнов писал(а):Не пойму прикола...
После выгрузки Л7 список макросов пуст, а если просто открыть EXEL - то макросы есть.
Ага, пуст, включая макросы, записанные в autopark.xls. Проблема вот в чем. Каскад делает выгрузку в Excel, очевидно, используя Excel в качестве объекта автоматизации. В этом режиме (эквивалентном запуску excel.exe с ключом -automation) НЕ открываются книги, расположенные в каталоге автозагрузки (XLStart) - такова спецификация MS Excel. АвтоПарк в подобных ситуациях делает принудительное открытие autopark.xls.
Мы посмотрим, что можно сделать иными способами, чем помещение книги в XLStart.
Идеи не появились? Может попросить в МТА поддержать открытие книги с макросами???
Добавлено:
Вторник 26.06.2007 14:21
Светлана Хорькова
Звонил Кисилев, после обсуждения этой темы на сайте мта.
Сказал, что Каскад выгружает в excel- пользуйте на здоровье сохраненный excel файл.
Для выполнения лишней автоматизации у отдела нет свободных людей. И в план поставить не могут, т.к нужно всего 2-м филиалам.
Зато СС обещали подумать
Добавлено:
Вторник 26.06.2007 14:32
Павел Штатнов
Светлана Хорькова писал(а):... т.к нужно всего 2-м филиалам.
Вот это больше всего огорчает, никого больше не волнуют эти проблемы что-ли?
Добавлено:
Вторник 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? может кто знает?
Добавлено:
Вторник 26.06.2007 15:35
Светлана Хорькова
А Гремушкин подсказал еще проще -
"а проще нельзя обойтись...просто если select * from Поездки что то вроде такого?"
только что с этим делать
Добавлено:
Вторник 26.06.2007 15:38
Павел Штатнов
Светлана Хорькова писал(а):А Гремушкин подсказал еще проще -
"а проще нельзя обойтись...просто если select * from Поездки что то вроде такого?"
только что с этим делать
Ты не забывай, что АвтоПарк поддерживает пока только импорт Л7. Нужно подумать - какие нам данные нужны для импорта, т.к. в Л7 много лишнего.
Добавлено:
Четверг 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. (Наконец-то то, зачем всё и начали. Наш макрос
) В меню 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.
Добавлено:
Четверг 28.06.2007 14:46
Павел Штатнов
Красиво обошли эту проблему. Может скоро вообще от КАСКАДА откажемся???
Добавлено:
Пятница 06.07.2007 10:44
Леонид Сандал
Есть просьба всем, кто это читает - пожалуйста, отпишите здесь - воспользовались ли Вы информацией из этой темы.