Вывод колонтитулов программно ВерхнийКолонтитул, НижнийКолонтитул Колонтитул является специальным текстом, выводимым вверху или внизу каждой страницы при выводе документа на печать. В тексте колонтитула можно использовать следующие управляющие конструкции:
[&НомерСтраницы]] ([&Page
Num ber]]) - при печати в данном месте будет выведен номер страницы,
[&СтраницВсего]] ([&PagesTotal]]) - при печати в данном месте будет выведено общее количество страниц,
[&Дата]] ([&Date]]) - при печати в данном месте будет выведена текущая дата,
[&Время]] ([&Time]]) - при печати в данном месте будет выведено текущее время.
Код 1C v 8.х
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("ЗаявкаНаОплату");
//...
// код заполнения табличного документа
//...
ТабДок.НижнийКолонтитул.НачальнаяСтраница = 1;
ТабДок.НижнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Низ;
ТабДок.НижнийКолонтитул.ТекстВЦентре= строка(ИмяПользователя())+" [&Дата] - [&Время]";
ТабДок.НижнийКолонтитул.ТекстСлева="?";
ТабДок.НижнийКолонтитул.Выводить = Истина;
Категория:
Табличный документ Функция проверки типа значения Код 1C v 8.х
// Функция возвращает Истина при соответствии типов, ложь в обратном случае
Функция НужныйТипЗнач(ИсхЗнач,ТипЗнач)
Возврат ТипЗнч(ИсхЗнач) = Тип(ТипЗнач);
КонецФункции
// Некоторые примеры обращения
// ИсхЗнач - проверяемое значение
// НужныйТипЗнач(ИсхЗнач,"Строка")
// НужныйТипЗнач(глЗначениеПеременной("глТекущийПользователь"),"СправочникСсылка.Пользователи")
// НужныйТипЗнач(ИсхЗнач,"Форма")
// НужныйТипЗнач(ИсхЗнач,"Булево")
// НужныйТипЗнач(ИсхЗнач,"Строка")
// НужныйТипЗнач(ИсхЗнач,"Число")
// НужныйТипЗнач(ИсхЗнач,"Дата"))
// НужныйТипЗнач(ИсхЗнач,"Массив")
// НужныйТипЗнач(ИсхЗнач,"Структура")
// НужныйТипЗнач(ИсхЗнач,"Соответствие")
// НужныйТипЗнач(ИсхЗнач,"СписокЗначений")
// НужныйТипЗнач(ИсхЗнач,"ТаблицаЗначений")
// НужныйТипЗнач(ИсхЗнач,"ДеревоЗначений")
// НужныйТипЗнач(ИсхЗнач,"ПланСчетовСсылка.Хозрасчетный")
// НужныйТипЗнач(ИсхЗнач,"ПланСчетовСсылка.Налоговый")
// НужныйТипЗнач(ИсхЗнач,"ХранилищеЗначения")
// НужныйТипЗнач(ИсхЗнач,"Картинка")
// НужныйТипЗнач(ИсхЗнач,"ПолеВвода")
// НужныйТипЗнач(ИсхЗнач,"Панель")
// НужныйТипЗнач(ИсхЗнач,"Флажок")
// НужныйТипЗнач(ИсхЗнач,"РегистрРасчетаНаборЗаписей.УправленческиеНачисления")
// НужныйТипЗнач(ИсхЗнач,"ПланВидовРасчетаСсылка.ОсновныеНачисленияОрганизаций")
// НужныйТипЗнач(ИсхЗнач,"ДокументСсылка.ОтпускПоУходуЗаРебенком")
// НужныйТипЗнач(ИсхЗнач,"ИнтернетПочтовоеСообщение")
// НужныйТипЗнач(ИсхЗнач, "БизнесПроцессСсылка.м_Документооборот")
Код 1C v 7.x
// Функция возвращает 1 при соответствии типов, 0 в обратном случае
Функция НужныйТипЗнач(ИсхЗнач,ТипЗнач)
Если ТипЗначенияСтр((ИсхЗнач) = ТипЗнач тогда
Возврат 1;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
// Некоторые примеры обращения
// ИсхЗнач - проверяемое значение
// НужныйТипЗнач(ИсхЗнач,"Строка")
// Значения типов данных:
// ''Число'' (''Num ber'') - числовой тип данных;
// ''Строка'' (''String'') - строковый тип данных;
// ''Дата'' (''Date'') - тип данных Дата;
// ''Перечисление'' (''Enum '') - агрегатный тип данных ''Перечисление'';
// ''Справочник'' (''Reference'') - агрегатный тип данных ''Справочник'';
// ''Документ'' (''Document'') - агрегатный тип данных ''Документ'';
// ''Регистр'' (''Register'') - агрегатный тип данных ''Регистр'';
// ''Календарь'' (''Calendar'') - агрегатный тип данных ''Календарь'';
// ''ВидРасчета'' (''Calculation'') - агрегатный тип данных ''ВидРасчета'';
// ''ЖурналРасчетов'' (''CalcJournal'') - агрегатный тип данных ''ЖурналРасчетов'';
// ''ПланСчетов'' (''ChartOfAccounts'') - агрегатный тип данных ''ПланСчетов'';
// ''Счет'' (''Account'') - агрегатный тип данных ''Счет'';
// ''Операция'' (''Operation'') - агрегатный тип данных ''Операция'';
// ''КорректныеПроводки'' (''CorrectEntries'') - агрегатный тип данных ''КорректныеПроводки'';
// ''БухгалтерскиеИтоги'' (''BookkeepingTotals'') - агрегатный тип данных ''БухгалтерскиеИтоги'';
// ''Таблица'' (''Table'') - агрегатный тип данных ''Таблица'';
// ''Текст'' (''Text'') - агрегатный тип данных ''Текст'';
// ''Запрос'' (''Query'') - агрегатный тип данных ''Запрос'';
// ''СписокЗначений'' (''ValueList'') - агрегатный тип данных ''СписокЗначений'';
// ''ТаблицаЗначений'' (''ValueTable'') - агрегатный тип данных ''ТаблицаЗначений'';
// ''Периодический'' (''Periodic'') - агрегатный тип данных ''Периодический'';
// ''Картинка'' (''Picture'') - агрегатный тип данных ''Картинка'';
// ''ГрупповойКонтекст'' (''GroupContext'') - контекст программного модуля или Формы;
// ''OLE'' (''OLE'') - OLE-объект.
// ''НеизвестныйОбьект'' (''UnknownObject'') - для типов, для которых в системе не предусмотрено специальное строковое обозначение;
// '''' (пустая строка) - неопределенный тип данных.
Категория:
Работа с Типами данных Получение списка баз 1С 7.7 из реестра Ниже приведено несколько способов получения списка баз 1С 7.7 из реестра:
Код получения списка баз 1С 7.7 из 8.х
Код 1C v 8.х функция сзПолучитьСписокБаз()
попытка
олеСкрипт = новый COMОбъект("MSScriptControl.ScriptControl");
олеСкрипт.Language = "VBScript";
стрКод =
"function strGetListBase()
| const RootKey = &H80000001
| set Reg = GetObject(""winmgmts:{impersonationLevel=impersonate}!\\."" &_
| ""\root\default:StdRegProv"")
| PathKey = ""Software\1C\1Cv7\7.7\Titles""
| Reg.Enum Values RootKey, PathKey, Arr
| Answer = ""{""""#"""",4772b3b4-f4a3-49c0-a1a5-8cb5961511a3,"" & chr(10)
| Answer = Answer & ""{3,1e512aab-1b41-4ef6-9375-f0137be9dd91,0,0,"" & chr(10)
| Answer = Answer & ""{"" & (UBound(Arr) + 1) & "","" & chr(10)
| for x = LBound(Arr) to UBound(Arr)
| call Reg.GetStringValue(RootKey, PathKey, Arr(x), Value)
| Answer = Answer & ""{1e512aab-1b41-4ef6-9375-f0137be9dd91,"" & chr(10) &_
| ""{"""""" & replace(Value, """""""", """""""""""") & """""",0,"" &_
| chr(10) & ""{""""S"""","""""" & Arr(x)& """"""},"" &_
| chr(10) & ""{3,0,"" & chr(10) & ""{0},"""""""",-1,-1,0,0}"" &_
| chr(10) & ""}"" & chr(10) & ""}""
| if x <> UBound(Arr) then Answer = Answer & "",""
| Answer = Answer & chr(10)
| next
| Answer = Answer & ""},"" & chr(10) & ""{""""Pattern""""}"" & chr(10) &_
| ""}"" & chr(10) & ""}""
| strGetListBase = Answer
|end function";
олеСкрипт.AddCode(стрКод);
стрОтвет = олеСкрипт.Run("strGetListBase");
Ответ = ЗначениеИзСтрокиВнутр(стрОтвет);
Ответ.СортироватьПоПредставлению();
исключение
Ответ = новый СписокЗначений;
Ответ.Добавить("Базы 1С:Передприятия 7.7 не обнаруженны!");
конецпопытки;
возврат Ответ;
конецфункции
Код для 1С 7.7
Код 1C v 7.x
Функция ПолучитьСписокБаз1()
Перем Value,arrValues;
Scr = CreateObject("MSScriptControl.ScriptControl");
Scr.Language = "vbscript";
Scr.Timeout=-1;
HKEY_CURRENT_USER = 2147483649;
strKeyPath = "Software\1C\1Cv7\7.7\Titles";
Locator=СоздатьОбъект("WbemScripting.SWbemLocator");
ServiceDef=Locator.ConnectServer(".","root\default");
oReg = ServiceDef.Get("StdRegProv");
Dict=СоздатьОбъект("Scripting.Dictionary");
Scr.AddObject("Dict",Dict);
Scr.AddObject("oReg",oReg);
Scr.ExecuteStatement("dim arrValues,Value:");
Scr.ExecuteStatement("oReg.Enum Values "+HKEY_CURRENT_USER+","""+strKeyPath+""",arrValues:");
Scr.ExecuteStatement("for i=lbound(arrValues) to ubound(arrValues):Dict.add ""pj"" & i, arrValues(i):next");
ТЗБаз=СоздатьОбъект("ТаблицаЗначений");
ТЗБаз.НоваяКолонка("Путь");
ТЗБаз.НоваяКолонка("Описание");
Для к=0 По Dict.count Цикл
Д=Dict.Item("pj"+к);
Scr.ExecuteStatement("oReg.GetStringValue "+HKEY_CURRENT_USER+","""+strKeyPath+""","""+Д+""",Value");
ТЗБаз.НоваяСтрока();
ТЗБаз.Путь = Д;
ТЗБаз.Описание = Scr.eval("Value");
КонецЦикла;
//Посмотрим что в ТЗ
//ТЗБаз.ВыбратьСтроку();
Возврат ТЗБаз;
КонецФункции
Процедура ПолучитьСписокБаз2()
Попытка
scrptCtrl=createobject("MSScriptControl.ScriptControl");
scrptCtrl.language="vbscript";
scrptCtrl.addcode("Function Get1CV77Titles()
|const HKEY_CURRENT_USER = &H80000001
|Set oReg=GetObject(""winmgmts:{impersonationLevel=impersonate}!\\."" &_
|""\root\default:StdRegProv"")
|strKeyPath = ""Software\1C\1Cv7\7.7\Titles""
|oReg.Enum Values HKEY_CURRENT_USER, strKeyPath, arrValues
|strInfo=vbNullString
|For i = LBound(arrValues) To UBound(arrValues)
| call oReg.GetStringValue(HKEY_CURRENT_USER,strKeyPath,arrValues(i),Value)
| strInfo=strInfo & arrValues(i) & ""="" & Value & vbCrLF
|Next
|Get1CV77Titles = strInfo
|End Function");
Сообщить(scrptCtrl.run("Get1CV77Titles"));
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
<Сообщил Gloom>
Процедура ПолучитьСписокБаз3()
Ключ="HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles";
ИмяКаталога=СокрЛП(КаталогПользователя());
ИмяБазы=СокрЛП(каталогИБ());
Если прав(ИмяКаталога,1)<>"\" Тогда ИмяКаталога=ИмяКаталога+"\" КонецЕсли;
Если прав(ИмяБазы,1)<>"\" Тогда ИмяБазы=ИмяБазы+"\" КонецЕсли;
ИмяБазыСтр=Симв(34)+СтрЗаменить(ИмяБазы,"\","\\")+Симв(34);
ИмяФайла="USER.TXT";
Команда="Regedit /ea "+Симв(34)+ИмяКаталога+ИмяФайла+Симв(34)+" "+Симв(34)+Ключ+Симв(34);
КомандаСистемы(Команда);
Текст=СоздатьОбъект("Текст");
Текст.КодоваяСтраница(0);
Текст.Открыть(ИмяКаталога+ИмяФайла);
Текст.Показать();
Стр=""; Нашли=0;
Для сч=1 по Текст.КоличествоСтрок() Цикл
Стр=СокрЛП(Текст.ПолучитьСтроку(сч));
Сообщить(Стр);
Если Найти(стр,ИмяБазыСтр)<>0 Тогда
Нашли=1;
прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Категория:
COM-объекты, WMI, WSH Как сравнить похожие строки (неполное совпадение строк)? Ниже привожу пример функции нечеткого сравнения строк. Возвращаемое значение - от 0 (вообще не совпадает) до 1 (совпадает полностью)
По опыту, результат сравнения можно считать достоверным при совпадении больше 0.8 (80%)
Код CREATE FUNCTION fn_FuzzyCompareString(
@Stri1 varchar(250),
@Stri2 varchar(250),
@MaxLen int)
RETURNS float
AS
BEGIN
DECLARE @Str1 varchar(250), @Str2 varchar(250), @SCountVar int,
@SCountEq int, @LenStr int, @Res float
DECLARE @Num SymbStr2 int
DECLARE @Cnt1 int, @Cnt2 int
DECLARE @SubStr varchar(250)
SELECT
@LenStr=1,
@SCountVar=0 ,
@SCountEq=0,
@res=0
Set @Str1 = replace(LTRIM(RTRIM(upper(@Stri1))),'.',' ')
Set @Str2 = replace(LTRIM(RTRIM(upper(@Stri2))),'.',' ')
if ((@MaxLen <= 0) or (Len(@Str1)=0) or (Len(@Str2)=0))
Begin
Set @Res=0
End
else
begin
While (@LenStr<=@MaxLen)
BEGIN
Set @Num SymbStr2=1
Set @Cnt2=0
While ((@Cnt2+@LenStr)<=LEN(@Str2))
BEGIN
Set @SubStr = '%'+SUBSTRING(@Str2,@Num SymbStr2,@LenStr)+'%'
if (PATINDEX(@SubStr, @Str1)<>0)
begin
Set @SCountEq=@SCountEq+1
end
Set @SCountVar=@SCountVar+1
Set @Num SymbStr2=@Num SymbStr2+1
Set @Cnt2 = @Cnt2+1
END
Set @Num SymbStr2=1
Set @Cnt2=0
While ((@Cnt2+@LenStr)<=LEN(@Str1))
BEGIN
Set @SubStr = '%'+SUBSTRING(@Str1,@Num SymbStr2,@LenStr)+'%'
if (PATINDEX(@SubStr, @Str2)<>0)
begin
Set @SCountEq=@SCountEq+1
end
Set @SCountVar=@SCountVar+1
Set @Num SymbStr2=@Num SymbStr2+1
Set @Cnt2 = @Cnt2+1
END
Set @LenStr=@LEnStr+1
END
end
if @SCountVar=0
SET @Res=0
Else
BEGIN
SET @Res=Convert(Num eric (10,5),@SCountEq)/Convert(Num eric (10,5),@SCountVar)
END
RETURN @Res
END
Использование этой функции (на примере прямого запроса к справочнику ФизЛица для 1С:ТиС 7.7): в выборку попадут все физлица, у которых релевантность выше 0.8
Код DECLARE @FIO varchar(250)
Set @FIO = 'Иванов Петр'
SELECT
Спр.Code as [ФизЛицоКод],
Спр.ID as [ФизЛицо],
Спр.DESCR as [ФИО],
dbo.fn_FuzzyCompareString(dbo.fn_FIO(Спр.DESCR),@FIO,3) As [Релевантность]
FROM
SC503 as Спр (nolock)
where
ISMARK = 0
and
ISFOLDER = 2
and
dbo.fn_FuzzyCompareString(dbo.fn_FIO(Спр.DESCR),@FIO,3)>=0.8
GO
Категория:
Полезные, Универсальные Функции