Category: it

Category was added automatically. Read all entries about "it".

spaghetti

Изменение номера COM-портов / Отображение скрытых устройств

http://cs-cs.net/izmenenie-nomera-com-portov-otobrazhenie-skrytyx-ustrojstv

...
Как удалить записи об отключённых и ненужных устройствах и сменить номер COM-порта в Windows. Написано будет про Windows XP, думаю, по другие винды надо будет действовать по аналогии.
...
Переменная среды DEVMGR_SHOW_NONPRESENT_DEVICES заставляет Диспетчер устройств показывать все-все устройства, записи о которых есть в базе данных Windows (часть хранится где-то в системных папках, часть в реестре – поэтому я пишу о базе данных).

Переменные среды
Нам же нужны “Системные переменные“, и конкретно DEVMGR_SHOW_NONPRESENT_DEVICES. Посмотрите в списке, если её нет – тогда нажимаем кнопку “Создать“, и заполняем открывшееся окошко “Новая системная переменная“. Если же переменная есть в списке – проверьте правильность её написания и значение – 1.

В диспетчере смотрим скрытые устройства и удаляем старые и ненужные
spaghetti

Cтатическое сжатие JS, CSS

http://webo.in/articles/habrahabr/07-gzip-all/

Включаем статическое сжатие

Однако, существует способ обойтись просто парой строчек в конфиге (.htaccess), если потратить пару минут и самому заархивировать все необходимые файлы. Предположим, что у нас есть JS-библиотека prototype.js на сервере. Заархивируйте ее через gzip (при помощи 7-zip или еще чего-нибудь, если вы работаете под Windows). В итоге, у вас должен появиться файл prototype.js.gz. Положите его в ту же директорию на сервере, что и исходный файл. Если вы работаете через командную строку в шеле, то достаточно выполнить:

01

gzip foo.js -c > foo.js.gz

Теперь добавим следующие строки в .htaccess в корень вашего сайта (прим. лично я бы рекомендовал записать прямо в конфиге апача). При этом нужно будет включить RewriteEngine, если он еще не подключен:

01
02
03
04
05

AddEncoding gzip .gz
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{HTTP_USER_AGENT} !Safari
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule ^(.*)$ $1.gz [QSA,L]

В первой строке мы сообщаем серверу, что файлы с расширением .gz нужно отдавать с gzip encoding-type, чтобы браузер понял, что перед ним архив, а не текстовый файл. Второй строкой проверяется, принимает ли браузер архивированные файлы, при этом следующие строки просто не отработают, если этот тест провалится. Далее мы исключаем Safari, у которого проблемы с правильным восприятием архивированного содержимого. На четвертой строке мы проверяем, что архивный файл существует, и если это так, то добавляем .gz к существующему имени файла.

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

Ограничение числа субконто в регистре бухгалтерии и производительность

1С в книге "Профессиональная разработка в 1С:Предприятие 8.0" на странице 307 в разделе "Количество полей в индексе" утверждает, что "SQL Server имеет ограничение на количество полей в индексе, равное 16.
Поиск по полям, учатсвующим в индексе, осуществляется системой быстро. В случае если есть поля, которые должны участвовать в индексе (измерения, значения субконто), но не были включены в него по причине ограничения длины, система сможет быстро получить выборку, включающую в себя поля, участвующие в индексе и все сочетания полей в индекс не вошедших.
Полученная выборка будет обрабатываться построчно с целью поиска нужной строки итогов".

Смотрим сведения от Microsoft:

http://technet.microsoft.com/en-us/library/ms143432.aspx
Масимальное число колонок в индексе MS SQL 2005

Columns per index key 16
Columns per foreign key 16
Columns per primary key 16

Пример таблицы с субконто и ее индекса для таблицы итогов регистра бухгалтерии :

№ Поле Комментарий
1 Период
2 Счет Счет плана счетов
3 Организация Измерение 1
4 Валюта Измерение 2
5 Субконто1 Тип Фактический тип значения поля составного типа
6 Субконто1 Таблица Тип ссылки
7 Субконто1 Запись Значение ссылки
8 Субконто2 Тип
9 Субконто2 Таблица
10 Субконто2 Запись

Максимум в индекс попадает 4 субконто.
При 5 субконто SQL начинает делать scan таблицы, так как 5 субконто в индекс не попало и данные ищутся перебором.

Дополнительные ограничения на число полей в индексе может оказать включение в субконто примитивных типов (число, дата, строка, булево).
Для каждого примитивного типа в субконто добавляется отдельное поле, включающееся в индекс.
Субконто ссылочных типов в таблице представляется в виде трех полей:
тип, таблица, запись.

Добавим все четыре примитивных типа в субконто - это приведет к тому, что для каждого субконто будет создаваться 7 полей: тип, таблица, запись и 4 поля примитивных типов.
В этом случае в индекс включаются: период, счет, измерения регистра,
Субконто1 (7 полей).

№ Поле Комментарий
1 Период
2 Счет Счет плана счетов
3 Организация Измерение 1
4 Валюта Измерение 2
5 Субконто1 Тип Фактический тип значения поля составного типа
6 Субконто1 Таблица Тип ссылки
7 Субконто1 Запись Значение ссылки
8 Субконто1 Число
9 Субконто1 Строка
10 Субконто1 Дата
11 Субконто1 Булево

Субконто2 полностью в индекс уже не помещается.

Поэтому 1С настоятельно не рекомендует использовать примитивные типы в качестве значений субконто. Также следует обратить внимание на ограничение числа субконто примерно 4 - это зависит от количества измерений в регистре бухгалтерии и от состава типов субконто.
spaghetti

ADO из 1C

Наконец раскопал...прямой доступ к SQL :)
maxlab@riaok.kuban.ru

Вот собственно код модуля справочника. Для Ваших конкретных условий нужно модифицировать ConnectionString...
Кроме того не мешало бы установить на компе свеженький MDAC_TYP.EXE Ищите на сайте Мелкософт.
Таким способом можно подключаться к DBF таблицам. Для этого надо подставить соответствующий драйвер

Перем РежимЗапуска;
Перем Соединение,НаборЗаписей;

Процедура ПриОткрытии()                                                                  
    
    Если РежимЗапуска="Shared" Тогда    
        
        Соединение=СоздатьОбъект("ADODB.Connection");
        НаборЗаписей=СоздатьОбъект("ADODB.Recordset");
        Соединение.ConnectionString = "driver={SQL Server};server=maxlab;uid=sa;pwd=;database=hg";
        Соединение.ConnectionTimeout = 15;
        Соединение.CursorLocation= 3;
        Соединение.Open();
        НаборЗаписей=Соединение.Execute("Select Id,Descr from sc12 where IsFolder=1 Order by Descr");
        ГрТов.ДобавитьЗначение("По всем группам");
        Пока НаборЗаписей.Eof()=0 Цикл
            ГрТов.ДобавитьЗначение(НаборЗаписей.Fields("Id").Value,НаборЗаписей.Fields("Descr").Value);
            НаборЗаписей.MoveNext();
        КонецЦикла;    
        Форма.ГрТов.Доступность(1);
        Форма.Кн1.Доступность(1);
        Форма.Слово1.Доступность(1);
        Форма.Слово2.Доступность(1);
        
    Иначе
        
        ГрТов.ДобавитьЗначение(0,"Монопольный режим");
        
    КонецЕсли;
    
КонецПроцедуры

Процедура ВыполнитьПоиск()
    
    Перем Результат,ВашВыбор,Сл1,Сл2,Спр,ВыбГруппа,ТекЭлем;
    
    Если (СокрЛП(Слово1)="") ИЛИ (СокрЛП(Слово2)="") Тогда
        Предупреждение("Нет слов :) ...Заполни поисковый образ!");
        Возврат;
    Иначе
        Спр=СоздатьОбъект("Справочник.Классификатор");
        Результат=СоздатьОбъект("СписокЗначений");
        Сл1=("'%"+ВРег(СокрЛП(Слово1))+"%'");
        Сл2=("'%"+ВРег(СокрЛП(Слово2))+"%'");
        ВыбГруппа= "'"+ГрТов.ПолучитьЗначение(ГрТов.ТекущаяСтрока())+"'";
        Если ВыбГруппа="'По всем группам'" Тогда
            СтрокаЗапроса="Select Code,Descr from sc12 WHERE Descr LIKE "+Сл1+" AND Descr LIKE "+Сл2+" Order by Descr";
        Иначе
            СтрокаЗапроса="Select Code,Descr from sc12 where ParentId="+ВыбГруппа+" AND Descr LIKE "+Сл1+" AND Descr LIKE "+Сл2+" Order by Descr";
        КонецЕсли;
        НаборЗаписей=Соединение.Execute(СтрокаЗапроса);
        Пока НаборЗаписей.Eof()=0 Цикл
            Результат.ДобавитьЗначение(НаборЗаписей.Fields("Code").Value,НаборЗаписей.Fields("Descr").Value);
            НаборЗаписей.MoveNext();
        КонецЦикла;    
        Если Результат.РазмерСписка() > 0 Тогда
            Если (Результат.ВыбратьЗначение(ВашВыбор,"Найденные варианты")=1) Тогда
                Спр.НайтиПоКоду(ВашВыбор);
                ТекЭлем=Спр.ТекущийЭлемент();
                АктивизироватьОбъект(ТекЭлем);
            КонецЕсли;
        Иначе     
            Предупреждение("Вхождений не найдено...");
            Возврат;
        КонецЕсли;    
    КонецЕсли;    
КонецПроцедуры

РежимЗапуска=?(МонопольныйРежим()=1,"Exclusive","Shared");
Форма.Кн1.Доступность(0);
Форма.ГрТов.Доступность(0);
Слово1="";
Слово2="";
Форма.Слово1.Доступность(0);
Форма.Слово2.Доступность(0);