|
|
|
|
|
13.01.2014, 13:22
|
|
БАЗИС 9 - Скрипты
Igor_482
VIP
Регистрация: 03.09.2008
Сообщений: 174
Сказал(а) спасибо: 34
Поблагодарили 794 раз(а) в 113 сообщениях
13.01.2014, 13:22
Рейтинг:
()
ВНИМАНИЕ! Правила выкладывания скриптов.
1. Если в скрипте нет ссылок на фурнитуру, фрагменты и.т.д то достаточно его упаковать в архив и выложить.
2. Если в скрипте есть ссылки на фурнитуру, фрагменты и т.д. то архив должен содержать папку с самим скриптом и всеми файлами на которые есть ссылки в тексте скрипта.
Т.к. при запуске скрипта на другом компе возникает ошибка о не возможности открыть то или иной файл и скрипт до конца не отрабатывает свой текст. Не соблюдается "чистота проверки" работы скрипта.
__________________________________________________ _______________
Интересует информация по редактору скриптов в БМ8. Существует ли справочная документация и примеры использования скриптов в БМ8. Какие возможности дает данная функция? Владеющим информацией по данному вопросу просьба поделиться ею.
Для работы скриптов от Igor_482 необходим установленный ODBC драйвер FireBird, установленные и зарегистрированные в ОС модули FBDBDialog.dll, MSDATGRD.OCX, MSCOMCTL.OCX и MSSTDFMT.DLL ( сообщение с описанием установки этих модулей в ОС, ссылка на модули и исходник "FBDBDialog.dll") а так же файл "ADODB.ini" с настройками соединения к БД в папке со скриптом.
ADODB.ini
[General]
FDBServ = t001
FBSPort = 14357
FDBFile = D:\DBBM\Библиотека\БД\BMDB09.FDB
FBCFile = C:\Windows\System32\fbclient.dll
----------------------------------------------
Переменные .ini:
FDBServ - имя ПК на котором находится сервер FireBird с используемой БД (если локально, то параметр: localhost или 127.0.0.1);
FBSPort - в настройке не нуждается (по умолчанию: 14357);
FDBFile - локальный путь к БД на сервере FireBird;
FBCFile - путь к файлу "fbclient.dll" (находится в корневой папке программы Базис).
[свернуть]
Последний раз редактировалось systland; 23.09.2016 в 11:52..
|
Просмотров: 996939
|
Пользователь сказал cпасибо:
|
|
27.03.2016, 01:41
|
#1031
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 387
|
Проверка существования папки:
Скрытый текст
dir = "C:\\!заказы\\__________ПО\\Bazis8\\Scripts\\Расстекловка\\СкриптыФасадов"
FolderExist(dir)
function FolderExist(dir) {
fso = NewCOMObject("Scripting.FileSystemObject")
if (fso.FolderExists(dir)) {
system.log("папка Cуществует: " + dir)
return true
} else {
system.log("папка не существует: " + dir)
return false
}
}
[свернуть]
myfunction()
system.require('123.js');
myfunction()
myfunction()
Функция есть и в текущем и в подключенном.
Надо выполнить функцию
из текущего,
потом из подключенного,
потом из текущего.
Как?
Как-то отключить подключенный?
Или какой-то путь
текущий.myfunction()
подключенный.myfunction()
???
Последний раз редактировалось DTioutiou; 27.03.2016 в 06:28.
|
|
|
28.03.2016, 07:32
|
#1032
|
Новичок
Регистрация: 27.10.2015
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 5 сообщениях
Вес репутации: 0
|
Цитата:
Сообщение от v22884
Или какой-то путь...
|
Этот опыт с include-файлами, -возможно что-то прояснит:
Имеем такую зависимость программных модулей(файлов):
PHP код:
main.js
| |
| |_ module2.js
| |
|______|_____ module1.js
Код модулей -см.ниже..
Выполнение даст результат:
PHP код:
log: вызов fnCounter №1
log: вызов fnCounter №2
log: вызов fnCounter №3
Т.е. можем сделать вывод, что инициализация модуля происходит 1 раз,
и предположить, что JS-движок кеширует подключаемые модули.
модуль "main.js":
Скрытый текст
PHP код:
system.require("C://module1.js")
fnCounter();
system.require("C://module2.js")
fnCounter();
[свернуть]
модуль "module1.js":
Скрытый текст
PHP код:
//Функция выводит число вызовов самой себя.
//Т.к. Static переменных здесь нет, то используем возможность JS-Функций иметь собственные Свойства чтобы хранить текущее состояние :
function fnCounter() {
if(typeof fnCounter.counter == 'undefined') {
fnCounter.counter = 0; //если не существует, -создать
}
fnCounter.counter++;
system.log("вызов fnCounter №"+fnCounter.counter.toString());
}
[свернуть]
модуль "module2.js":
Скрытый текст
PHP код:
system.require("C://module1.js")
fnCounter();
[свернуть]
|
|
|
Пользователь сказал cпасибо:
|
|
02.04.2016, 13:13
|
#1033
|
VIP
Регистрация: 03.09.2008
Сообщений: 174
Сказал(а) спасибо: 34
Поблагодарили 794 раз(а) в 113 сообщениях
Вес репутации: 367
|
Решение для работы с БД через диалоговое окно в скрипте.
Ниже приведен код скрипта для замены номенклатурных наименований сборок. Скрипт использует написанный на VB6 ActiveX модуль (FBDBDialog.dll) который реализует связь с БД через ODBC драйвер Firebird и представляет собой диалоговое окно для выбора номенклатуры (окно подобно стандартному диалогу Базиса "Выбор материала и комплектующих").
Скрытый текст
PHP код:
var FDBServ = 't001'; //Сервер FireBird
var FBSPort = '14357'; //Порт FireBird
var FDBFile = 'D:\\DBBM\\Библиотека\\БД\\BMDB09.FDB'; //БД
var FBCFile = 'C:\\Windows\\System32\\FBCLIENT.DLL'; //FBCLIENT.DLL (в корневой папке программы Базис)
var ConnectionString = 'Driver={Firebird/InterBase(r) driver};' +
'Dbname=' + FDBServ + '/' +
FBSPort + ':' +
FDBFile + ';' +
'CHARSET=NONE;' +
'PWD=masterkey;' +
'UID=SYSDBA;' +
'Client=' + FBCFile + ';';
var FBDB = NewCOMObject('FBDBDialog.FBDB');
var Objects = new Object();
function SetSelection(Control) {
var List = Objects[Control.Name];
UnSelectAll();
for (var i = 0; i < List.length; i++) {
List[i].Selected = true;
};
};
function SetParameter(Control) {
var List = Objects[Control.Name];
for (var i = 0; i < List.length; i++) {
Undo.Changing(List[i]);
List[i].Name = Control.Value;
};
};
function GetFBDBDialog(Control) {
var Result = FBDB.Dialog(ConnectionString);
if (Result != '') {
Control.Value = Result;
};
};
Model.forEach(function(Object) {
if ((Object == '[object TFurnAsm]' ||
Object == '[object TAsmKit]') &&
(Object.Owner != '[object TFurnAsm]' &&
Object.Owner != '[object TAsmKit]')) {
var ObjectName = Object.Name.split('\r')[0];
if(typeof(Objects[ObjectName]) == 'undefined') {
Objects[ObjectName] = new Array();
};
Objects[ObjectName].push(Object);
};
});
var i = new Number();
for (var Key in Objects) {
var NewSelector =
'Selector' + i + '= Action.Properties.NewSelector(Key, Key);\n' +
'Selector' + i + '.CanClear = false; \n' +
'Selector' + i + '.OnActivate = function() { \n' +
' SetSelection(Selector' + i + '); \n' +
'}; \n' +
'Selector' + i + '.OnClick = function() { \n' +
' GetFBDBDialog(Selector' + i + '); \n' +
'}; \n' +
'Selector' + i + '.OnValueChange = function() { \n' +
' SetParameter(Selector' + i + '); \n' +
'}; ';
eval(NewSelector);
i++;
};
Action.Properties.NewButton('Завершить').OnClick = function() {
Action.Finish();
};
Action.Continue();
[свернуть]
Для работы скрипта необходим установленный ODBC драйвер Firebird, установленные и зарегистрированные в ОС модули FBDBDialog.dll, MSDATGRD.OCX и MSCOMCTL.OCX, а так же настройка переменных FDBServ, FDBFile и FBCFile в самом скрипте.
VB6 исходник ActiveX модуля FBDBDialog.dll, сам модуль и необходимые *.OCX для его работы: ссылка
ODBC драйвер для работы с БД Firebird: страница оф. сайта для загрузки драйвера
Стандартное место хранения модулей MSCOMCTL.OCX и MSDATGRD.OCX:
для Windows x64 -: %windir%\SysWOW64, для Windows x32 - %windir%\System32
При отсутствии модулей в системе их необходимо скопировать и зарегистрировать. Для регистрации необходимо запустить командную строку (cmd.exe) и выполнить команду - пример: regsvr32 %windir%\SysWOW64\FBDBDialog.dll
Последний раз редактировалось Igor_482; 03.04.2016 в 11:12.
Причина: Строка "split(/\r/)" исходного текста сообщения отображалась как "split(/r/)"
|
|
|
7 пользователя(ей) сказали cпасибо:
|
|
09.04.2016, 01:28
|
#1034
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 387
|
Уважаемые разработчики Базис-Скрипта, не появилось ли в версии 9.0.6 предусмотренной возможности получить контур панели с подрезкой канта?
в ключах панели не вижу.
|
|
|
11.04.2016, 17:59
|
#1035
|
VIP
Регистрация: 03.09.2008
Сообщений: 174
Сказал(а) спасибо: 34
Поблагодарили 794 раз(а) в 113 сообщениях
Вес репутации: 367
|
Развитие инструментария для БМ на основе ActiveX модуля (FBDBDialog.dll) из предыдущего сообщения. Представленный скрипт позволяет редактировать параметры установленного в модели крепежа: менять размеры и тип отверстий, добавлять/удалять составные части и устанавливать/снимать флаг учета крепежа/составных частей в смете. Для работы скрипта требуются те же компоненты что и в прошлом сообщении, а также наличие файла "ADODB.ini" с настройками соединения в папке со скриптом.
Содержание ADODB.ini
[General]
FDBServ = t001
FBSPort = 14357
FDBFile = D:\DBBM\Библиотека\БД\BMDB09.FDB
FBCFile = C:\Windows\System32\fbclient.dll
[свернуть]
Переменные .ini:
FDBServ - имя ПК на котором находится сервер FireBird с используемой БД (если локально, то параметр: localhost или 127.0.0.1);
FBSPort - в настройке не нуждается (по умолчанию: 14357);
FDBFile - локальный путь к БД на сервере FireBird;
FBCFile - путь к файлу "fbclient.dll" (находится в корневой папке программы Базис).
|
|
|
11 пользователя(ей) сказали cпасибо:
|
|
18.04.2016, 15:05
|
#1036
|
Пользователь
Регистрация: 21.08.2009
Адрес: Санкт-Петербург
Сообщений: 59
Сказал(а) спасибо: 73
Поблагодарили 15 раз(а) в 9 сообщениях
Вес репутации: 187
|
Подскажите, пожалуйста, чем отличается GetObject и GetPanel. Ведь и в первом и втором случае можно выделить панель. И возможно запросить именно блок?
|
|
|
19.04.2016, 09:09
|
#1037
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 387
|
Спасибо, Igor_482, за подключение к базе.
Кто-нибудь подключил базу к 1с 8?
я подключил. но ошибка 104 при считывании данных. Кто-нибудь решил?
|
|
|
19.04.2016, 17:04
|
#1038
|
Пользователь
Регистрация: 08.07.2008
Сообщений: 75
Сказал(а) спасибо: 45
Поблагодарили 5 раз(а) в 2 сообщениях
Вес репутации: 0
|
приветствую!
возможно ли скриптом раскидать на разные слои отверстия, контур панели и объединив все это в блок, экспортировать в DXF?
|
|
|
20.04.2016, 01:07
|
#1039
|
Местный
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 387
|
Цитата:
Сообщение от dimasinka
возможно ли скриптом раскидать на разные слои отверстия, контур панели и объединив все это в блок, экспортировать в DXF?
|
Ебстественно.
я пока тока работаю над этим. сделаю можь через месяц.
Пока с отверстиями разбираюсь. по мере свободного времени. и с подрезкой.
Добавлено через 19 минут
Подключение из 1с полувручную:
Скрытый текст
Перем Соединение;
//*******Подключились к базе************************************************
Процедура ПодключениеКБазе()
Соединение = Новый COMОбъект("ADODB.Connection");
Команда = Новый COMОбъект("ADODB.Command");
НаборЗаписей = Новый COMОбъект("ADODB.RecordSet");
Соединение.ConnectionString = "DRIVER={Firebird/InterBase(r) driver};ROLE={C:\Program Files (x86)\Firebird\Firebird_2_5\bin\fbclient.dll};CHARSET=NONE;UID=SYSDBA;PWD=masterkey;DBNAME=tehnologzak-pc/14357:C:\!Заказы\__________ПО\Bazis8\MTDB с Операциями.FDB";
Соединение.ConnectionTimeOut = 1200;
Соединение.CursorLocation = 3;
try
Соединение.Open(Соединение.ConnectionString);
//Сообщить("Соединение успешно уставнолено !!!");
except
Сообщить("Невозможно установить соединение с Firebird:
| "+ОписаниеОшибки());
Возврат;
endtry;
КонецПроцедуры
//*********Загружаем данные в базу***********************************************************************
Процедура ЗагрузитьКонтрагентов()
ТекстЗапроса ="
|SELECT *
|FROM
|ACCESS_OBJECT
|
|";
Попытка
// Выборка данных и перебор результата запроса
ВыборкаСтрокС = Соединение.Execute(ТекстЗапроса);
Пока ВыборкаСтрокС.EOF=0 Цикл //Цикл по запися
Сообщить(Строка(ВыборкаСтрокС.Fields("ID_AO").value)+" "+Строка(ВыборкаСтрокС.Fields("NAME_OBJECT").value));
ВыборкаСтрокС.MoveNext();
КонецЦикла;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
&НаСервере
Процедура ПрочитатьНаСервере()
ПодключениеКБазе();
ЗагрузитьКонтрагентов();
КонецПроцедуры
&НаКлиенте
Процедура Прочитать(Команда)
ПрочитатьНаСервере();
КонецПроцедуры
[свернуть]
http://infostart.ru/public/85844/
но всётаки хочица средствами 1с, автоматически, в дереве конфигурации. у кого получилось?
|
|
|
Пользователь сказал cпасибо:
|
|
20.04.2016, 21:55
|
#1040
|
Новичок
Регистрация: 27.10.2015
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 5 сообщениях
Вес репутации: 0
|
Цитата:
Сообщение от v22884
хочица средствами 1с
|
этот код работает на платформе v8.2:
Скрытый текст
PHP код:
Процедура КнопкаВыполнитьНажатие(Кнопка)
sConnect = "DRIVER=Firebird/InterBase(r) driver;Charset=win1251;UID=SYSDBA;PWD=masterkey;DBNAME=";
sFDB = "127.0.0.1/14357:C:\1FBase\Bazis.fdb"; //!ВашСервер!/порт/!ВашПутькFDB!
cnn = New COMОбъект("ADODB.Connection");
cnn.ConnectionTimeout = 4;
cnn.Open(sConnect+sFDB);
rs = New COMОбъект("ADODB.RecordSet");
rs.ActiveConnection = cnn;
rs.CursorLocation = 2; //adUseServer
rs.LockType = 3; //adLockOptimistic
rs.CursorType = 1; //adOpenKeyset
//Первых 100 Материалов в Базисе 8 (в Б9 не проверялось, -там возможно другие имена объектов БД)
rs.Open("select first 100 ID_M,NAME_MAT,ARTICLE from MATERIAL");
while rs.EOF=0 do
message("" + rs.Fields(0).value + char(9) + " : " + rs.Fields(1).value);
rs.MoveNext();
endDo;
КонецПроцедуры
[свернуть]
заполнить справочник Контрагенты(как и любой) не проблема,
вот вычистить не нужные записи, - это та еще эпопея,
в 1с строгий контроль ссылочной целостности, пока есть
хотя бы одна ссылка на удаляемую запись -система не позволит ее удалить.
1) Поэтому нужно полуавтоматически загружать - дать возможность оператору поискать контрагента по ЧастиНаименования или ИНН, если не найден - то жмем кнопку [Добавить].
2) Хорошо бы в конфигураторе добавить справочнику Контрагенты новое поле - "КодБазиса" (тип=Число10) - соответствует в FDB полю ID Контрагента.
Тогда алгоритм такой:
Запросом ищем в 1с Контрагента по полю "КодБазиса",
-нашли, - добавлять не надо, идем по логике дальше...
-не нашли, - дать возможность оператору поискать...
-оператор не нашел - жмет [добавить] добавляется из FDB Контрагент вместе с полем "КодБазиса"...
|
|
|
5 пользователя(ей) сказали cпасибо:
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 09:30. Часовой пояс GMT +3.
|