Имя: Пароль:
1C
1C 7.7
v7: загрузка процедур и функций из внешней обработки
0 SanchoPancho
 
30.07.13
16:13
Есть документ с пустым модулем формы.
Процедуры и функции в него подгружаются из внешнего текстового файла
#ЗагрузитьИзФайла .\Работа.txt

Есть желание подгружать тоже самое только из внешней обработки, но, инструкция
ОткрытьФорму("Отчет",,КаталогИБ()+"Extforms\Работа.ert");

не работает
подскажите что не так
1 Ёпрст
 
гуру
30.07.13
16:14
чего подгружать и куда ?
и при чем тут ОткрытьФорму ?
2 SanchoPancho
 
30.07.13
16:26
(1) непонятно? есть документ, у него есть форма с кнопками и пр. элементами
нажатие на кнопку вызывает соответствующую процедуру.
Все процедуры хранятся не в форме документа, а подгружаются из текстового файла.

Мне надо подгружать процедуры не из текста, и из внешней обработки. Как это сделать?
3 Rie
 
30.07.13
16:29
(0) Посмотри на 1С++. Там есть соответствующие средства.
4 Ёпрст
 
гуру
30.07.13
16:31
(2) зачем?
есть turbomd.dll для этих целей.

Если нужно извращений - класс.ВыполняемыйМодуль, либо через доп глобальник формекса, либо через ПриЗагрузкеМодуля подменять на нужный.. и т.д.
5 SanchoPancho
 
30.07.13
16:34
(3) (4) как раз, хотелось бы без извращений и лишних внешних средств
6 ДенисЧ
 
30.07.13
16:38
(5) То есть ты хочешь извращение, но без извращений? :-)
7 SanchoPancho
 
30.07.13
16:42
(6) ну, из текста же загружается все как надо!
но, с текстом неудобно работать
я подумал - почему бы не подгружать это из внешней обработки?
8 ДенисЧ
 
30.07.13
16:44
(7) А что неудобного в тексте? Режим отображения текста как программного модуля в 77 есть...
9 SanchoPancho
 
30.07.13
16:52
(8) цвета нету, отладки в привычном режиме
10 ДенисЧ
 
30.07.13
16:58
(9) Цвет есть, отладка - да, напряжно.
11 пипец
 
30.07.13
17:05
перекурил паходу ;)))
12 Хряк
 
30.07.13
17:09
фсё работает
ты в открываемую форму контекст не передаешь
13 SanchoPancho
 
30.07.13
17:23
(12) подскажите, что ей передать в качестве контекста?
14 Zhuravlik
 
30.07.13
17:31
(0) Самый лучший вариант - использование TurboMD
15 Rie
 
30.07.13
17:33
(12) И что он во внешней обработке с этим контекстом делать будет? Ему же не что-то сделать, ему, судя по (0), процедуры импортировать.
16 Попытка1С
 
30.07.13
17:35
Сорри за офф, народ а есть у кого турбомд для 2008 сервака? или скажите где взять можно?
17 Ёпрст
 
гуру
30.07.13
17:52
turbomd от версии винды не зависит
18 Попытка1С
 
01.08.13
16:24
(17) Так у меня ругается.. На 2003 не ругался..
19 Ёпрст
 
гуру
01.08.13
16:27
и как ругается хоть ?
20 Попытка1С
 
01.08.13
16:31
Ошибка при создании объекта из компоненты C:\DLL_1C\dll\TurboMD.dll (отсутствует CLSID)

На regsvr32 C:\DLL_1C\dll\TurboMD.dll
ругается на то что не удается загрузить модуль
21 Ёпрст
 
гуру
01.08.13
16:32
зарегь её под админом
22 Ёпрст
 
гуру
01.08.13
16:33
эту команду в батник, батник с шифтом - запустить от имени админа
23 Попытка1С
 
01.08.13
16:46
Пробовал.
Запустить под админом можно просто запустив cmd под админом.
http://rghost.ru/47822394.view
24 Ёпрст
 
гуру
01.08.13
16:54
ну и не регь её тогда, она и так работает
25 Ёпрст
 
гуру
01.08.13
16:55
2008 x64 у меня, по крайней мере
26 Ёпрст
 
гуру
01.08.13
16:59
27 Попытка1С
 
01.08.13
17:09
(25) А как ты решил проблему разбора по копиям?
(26) Спс
28 Ёпрст
 
гуру
01.08.13
17:10
(27) у меня нет такой проблемы :)
никак не решал..
а че там ?
29 Попытка1С
 
01.08.13
17:13
(28) Галка разобрать по копиям не работает.. Вообще винда ее не видит ни в какую.

v7: Win Server 2008 + 1C 77 +  "разобрать по копиям";
Вот это все юзал.

А почему у тебя нет такой проблемы?
30 Ёпрст
 
гуру
01.08.13
17:16
так это баян.. она всё посылает одним заданием
31 varelchik
 
01.08.13
17:26
+ (29) а у меня была проблемка с наездом текста на соседние ячейки,т.е. когда стоит Авто, то текст если не влазит в ячейку то должен обрезаться.
Так вот ан 2003 все было пучком, на 2008 вылезло.
Пришлось использовать диалог печати от Excel все получилось даже очень.
На счет разбора не пробовал но думаю должно проканать.
Вот:

Перем гТаблица;
Перем Сервис;

Функция ВернутьПараметр(ИТЗ,Имя,Реж=0)
    значение=0;
    Если ИТЗ.НайтиСтроку("инд",Имя,,1)>0 Тогда
        значение=ИТЗ.Значение;
        Если Реж=1 Тогда
            значение=Число(значение);
        КонецЕсли;
    КонецЕсли;
    Возврат значение;
КонецФункции    // ВернутьПараметр

Процедура ПриОткрытии()
    СпУмолч=СоздатьОбъект("СписокЗначений");
    СпУмолч.ДобавитьЗначение("Orient",1);
    СпУмолч.ДобавитьЗначение("Paper",9);
    СпУмолч.ДобавитьЗначение("FitToPage",1);
    
    СпУмолч.ДобавитьЗначение("Scale",100);
    СпУмолч.ДобавитьЗначение("Bottom",10);
    СпУмолч.ДобавитьЗначение("Top",10);

    СпУмолч.ДобавитьЗначение("Left",10);
    СпУмолч.ДобавитьЗначение("Right",10);
    //СпУмолч.ДобавитьЗначение("FitToPage",1);
    //page.Orientation = ВернутьПараметр(ИТЗ,"Orient",1); // portrait
    ////Paper
    //page.PaperSize = ВернутьПараметр(ИТЗ,"Paper"); // Excel.XlPaperSize.xlPaperA4;
    //ПоШирине=ВернутьПараметр(ИТЗ,"FitToPage",1);
    //Если ПоШирине=1 Тогда
    //    Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
    //    Скрипт.Language="javascript";
    //    Скрипт.AddObject("ПараметрыСтраницы",page);
    //    Скрипт.Eval("ПараметрыСтраницы.Zoom=false");                //page.FitToPagesTall = 1;
    //    Скрипт.Eval("ПараметрыСтраницы.FitToPagesTall=false");                //pageFitToPagesTall = 1;
    //    page.FitToPagesWide = 1;
    //Иначе
    //    page.Zoom = ВернутьПараметр(ИТЗ,"Scale",1);
    //КонецЕсли;
    //// Отступы задаются в точках!
    ////Bottom
    //page.BottomMargin = ВернутьПараметр(ИТЗ,"Bottom",1);
    ////Top
    //page.TopMargin = ВернутьПараметр(ИТЗ,"Top",1);
    ////Left
    //page.LeftMargin = ВернутьПараметр(ИТЗ,"Left",1);
    ////Right
    //page.RightMargin = ВернутьПараметр(ИТЗ,"Right",1);
    
    
    //Версия=?(ПустоеЗначение(глВерсияОС)=1,глСервис.ВерсияОС(),глВерсияОС);
    Форма.Параметр=0;
    СтатусВозврата(0);
    //Если Найти(Версия,"Server40")>0 Тогда
        Если глСервис.АктивныйКонтекст (гТаблица) = 1 Тогда
            Если ТипЗначенияСтр (гТаблица) = "Таблица" Тогда
                Документ=СоздатьОбъект("ТабличныйДокумент");
                Документ.ЗагрузитьИзТаблицы(гТаблица);
                ИмяФайла=КаталогВременныхФайлов()+глСервис.ПолучитьGUID()+".xls";
                Документ.Записать(ИмяФайла,1);
                Реестр=СоздатьОбъект("РеестрWin");
                Реестр.ОткрытьКлюч("HKEY_CURRENT_USER","Software\1C\1Cv7\7.7\Titles","KEY_READ");
                НазваниеБазы="";
                Реестр.ЗапроситьЗначение(КаталогИБ(),НазваниеБазы);
                //Сообщить(НазваниеБазы);
                Ключ="Software\1C\1Cv7\7.7\"+НазваниеБазы+"\V7\"+ИмяПользователя()+"\Moxel\Default";
                стат=Реестр.ОткрытьКлюч("HKEY_CURRENT_USER",Ключ,"KEY_READ");
                ИмяЗначения="";
                Значение="";
                КодИБ="";
                ИТЗ=СоздатьОбъект("ИндексированнаяТаблица");
                ИТЗ.НоваяКолонка("Имя");
                ИТЗ.НоваяКолонка("Значение");
                ИТЗ.ДобавитьИндекс("инд","Имя");
                Если стат<>0 Тогда
                    Кво=Реестр.ВыбратьЗначения();
                    ИмяЗначения="";
                    Пока Реестр.ПолучитьЗначение(ИмяЗначения)=1 Цикл
                        Реестр.ЗапроситьЗначение(ИмяЗначения,Значение);
                        ИТЗ.НоваяСтрока();
                        ИТЗ.Имя = ИмяЗначения;
                        ИТЗ.Значение = Значение;
                    КонецЦикла;
                КонецЕсли;
                Если ИТЗ.КоличествоСтрок()=0 Тогда
                    Для н=1 По СпУмолч.РазмерСписка() Цикл
                        Значение="";
                        ИмяЗначения=СпУмолч.ПолучитьЗначение(н,Значение);
                        ИТЗ.НоваяСтрока();
                        ИТЗ.Имя = ИмяЗначения;
                        ИТЗ.Значение = Значение;
                    КонецЦикла;
                КонецЕсли;
                Попытка
                    excel = СоздатьОбъект("Excel.Application");
                Исключение
                    Форма.Параметр=1;
                    Возврат;
                КонецПопытки;
                
                excel.WindowState = -4143;
                
                last_height = excel.Height;
                last_width = excel.Width;
                excel.Height = 0;
                excel.Width = 0;
                excel.WindowState = -4140;
                excel.WindowState = -4143; // xlNormal
                excel.Visible = 0;
                book = excel.Workbooks.Open(ИмяФайла); // книга
                page = excel.ActiveSheet.PageSetup; // параметры страницы
                //Orient
                page.Orientation = ВернутьПараметр(ИТЗ,"Orient",1); // portrait
                //Paper
                page.PaperSize = ВернутьПараметр(ИТЗ,"Paper"); // Excel.XlPaperSize.xlPaperA4;
                ПоШирине=ВернутьПараметр(ИТЗ,"FitToPage",1);
                Если ПоШирине=1 Тогда
                    Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
                    Скрипт.Language="javascript";
                    Скрипт.AddObject("ПараметрыСтраницы",page);
                    Скрипт.Eval("ПараметрыСтраницы.Zoom=false");                //page.FitToPagesTall = 1;
                    Скрипт.Eval("ПараметрыСтраницы.FitToPagesTall=false");                //pageFitToPagesTall = 1;
                    page.FitToPagesWide = 1;
                Иначе
                    page.Zoom = ВернутьПараметр(ИТЗ,"Scale",1);
                КонецЕсли;
                // Отступы задаются в точках!
                //Bottom
                page.BottomMargin = ВернутьПараметр(ИТЗ,"Bottom",1);
                //Top
                page.TopMargin = ВернутьПараметр(ИТЗ,"Top",1);
                //Left
                page.LeftMargin = ВернутьПараметр(ИТЗ,"Left",1);
                //Right
                page.RightMargin = ВернутьПараметр(ИТЗ,"Right",1);
                dialog = excel.Dialogs(8);
                dialog.Show();
                null=0;
                book.Saved = 1; // не спрашивать про сохранение документа
                excel.Visible = 0;
                excel.Height=last_height ;
                excel.Width=last_width ;
                //Сообщить(last_height);
                //Сообщить(last_width);
                excel.Quit();
                //Возврат;
                //Окна.Максимизировать();
                //Система.ПоказатьОкно("Печать",1);
                Система=СоздатьОбъект("AddIn.SystComm");
                Система.АктивироватьОкноРабочейПрограммы();
                ФС.УдалитьФайл(ИмяФайла);
                Форма.Параметр=1;
                //глСервис.ОбработкаОжидания("АктивизироватьПечать",0);
            КонецЕсли;
        КонецЕсли;
    //КонецЕсли;
    //СтатусВозврата(0);
    Возврат;
КонецПроцедуры    // ПриОткрытии
32 Попытка1С
 
01.08.13
17:27
(30) Так как решить этот боян?
И слушай если не сложно кинь турбу мне на мыло, что-то ссылка не качается.
33 Попытка1С
 
01.08.13
17:31
(31) Извини, а это куды пихать?
34 varelchik
 
01.08.13
17:41
(33) ну скажем в обработку.А в глобальник добавить следующее:
В приначалеРаботыСистемы()
ЗагрузитьВнешнююКомпоненту("RWidjets.dll")
и добавить дополнительную процедуру:
Процедура ПриПолученииКоманды(Команда,Флаг) Экспорт
//    Сообщить(Команда);
    Если Команда=32805 Тогда
        Ответ=Вопрос("Запрещено блокировать сеанс!
        |Выйти их системы?","Да+Нет");
        Флаг=1;
        Если Ответ="Да" Тогда
            глВыходВопрос=1;
            ЗавершитьРаботуСистемы(0);
        КонецЕсли;
    ИначеЕсли Команда=57604 Тогда
        Конт=1;
        ОткрытьФормуМодально("Обработка.СохранениеТаблицы",Конт);
        Если Конт=1 Тогда
            Флаг=1;
        КонецЕсли;
    ИначеЕсли Команда=33899 Тогда
        Флаг=1;
        ОткрытьФорму("Обработка.АктивныеПользователи");
    ИначеЕсли Число(глКонвертировать)=1 Тогда
        Если Команда=57607 Тогда
            Конт=1;
            ОткрытьФормуМодально("Обработка.ПреобразованиеMXL",Конт);
            Если Конт=1 Тогда
                Флаг=1;
            КонецЕсли;
        КонецЕсли;    
    КонецЕсли;
КонецПроцедуры    // ПриПолученииКоманды

Ну и все.
35 varelchik
 
01.08.13
17:42
(30) Кстати спасибо за ссылку на управление списком пользователей их пофигуратора.
Отличная идея.
Вот только жаль что из одной базы управлять другими списками незя.
А было бы круто.
36 varelchik
 
01.08.13
17:43
опечатка не их пофигуратора, а не из конфигуратора а из предприятия.