Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Войти | Зарегистрироваться )



История благодарностей участнику Vofka ::: Спасибо сказали: 4519 раз
Дата поста: В теме: За сообщение: Спасибо сказали:
05.11.10, 8:03 Неправильные числа
Цитата
Добрый вечер конфа ТиС отчет продажи.

Это приветствие отчету? laugh.gif

Разверните по 1 позиции (где считаете, что показывает неправильно) все документы (поступления, продажи) и смотрите где начинает вылазить дробная часть.
Flexy,
02.11.10, 15:31 Работа с ADO в среде 1С
Что такое ADO и с чем его едят уже достаточно подробно описано. Я хочу привести примеры доступа к SQL-таблицам базы данных 1С-Предприятие с помощью методов ADO


Методы ADO и SQL-DMO позволяют выполнять команды доступа и модификации данных с помощью языка Т-SQL. И в том, и в другом случае работа состоит из следующих этапов:
1. Соединение с базой данных.
2. Отправка серверу команды.
3. Получение и обработка результатов выполнения команды.

Как это сделать (ADO)


1. Создать объект ADODB.Connection

Соединение = СоздатьОбъект("ADODB.Connection");
ConnectionString = "driver={SQL Server}; server=myserver; uid=mylogin;
pwd= myPasword; Database = myDatabase”;
Соединение.ConnectionTimeOut =600;
Соединение.CursorLocation = 3;
try
    Соединение.Open(ConnectionString);  
except
    Предупреждение("Невозможно установить соединение”);
endtry;


У меня это реализовано в глобальном модуле (при начале работы системы автоматически устанавливается соединение и существует, пока открыт сеанс 1С). Уничтожение объекта после окончания работы не требуется.

2. Формирование и отправка команды дла SQL-сервера.

Для формирования и отправки команды серверу необходимо создать объект ADODB.Command и связать его с текущим соединением.
Cmd = СоздатьОбъект("ADODB.Command");
Cmd.ActiveConnection = Соединеиие;

Для задания команды используется свойство CommandText:
Cmd.CommandText = текст_команды;


Текстом команды может быть оператор Т-SQL (SELECT, INSERT, UPDATE, DELETE и т.д), или имя хранимой процедуры из той базы данных, с которой установлено соединение.

Пример:
Cmd.CommandText = ”SELECT * FROM _1SACCS”; //Оператор Т-SQL
Cmd.CommandText = ”my_stored_proc”; //Хранимая процедура

Для ускорения работы можно указать экземпляру объекта ADODB.Command тип команды, которая будет выполняться. Для этого я использую функцию ТипКомандыАдо():

Функция ТипКомандыАДО( АдоКонст ) Экспорт
   АдоКонст = Нрег(АдоКонст);
   Если АдоКонст = «adcmdtext» тогда возврат 1; //для оператора T-SQL
   ИначеЕсли АдоКонст = «adcmdtable» тогда возврат 2;
   ИначеЕсли АдоКонст = «adcmdstoredproc» тогда возврат 4; //для хранимой процедуры
   Иначе Возврат 8; //adcmdunknown
КонецФункции


По умолчанию при создании экземпляра AdoDB.Command устанавливается тип adCmdUnknown (8)

Пример:
cmd.CommandType = ТипКомандыАДО("adCmdStoredProc");


Существенного ускорения работы при указании типа команды я не заметил, но всегда указываю его, считая это правилом хорошего тона.

Если используется хранимая процедура с параметрами, тогда необходимо добавить их в коллекцию Parameters объекта ADODB.Command:

Параметры создаются с помощью функции CreateParameter объекта ADODB.Command

CreateParameter (Name, Value_Type, Param_type, Param_Value)
Где Name – имя параметра. Как оно указано в хранимой процедуре
Value_Type – тип значения параметра
Param_Type – тип параметра (Input или Output)
Param_Value – собственно значение


Для определения типа значения параметра и типа параметра я использую функции КонстантаАДО() и ТипПараметраАДО() соответственно, прописанные в глобальный модуль:

Функция КонстантаАДО( Конст )  Экспорт
  АдоКонст = НРег(Конст);
  Если АдоКонст = "adEmpty" тогда Возврат 0;
  иначеесли АдоКонст = "adtinyint" тогда Возврат 16;
  иначеесли АдоКонст = "adsmallint" тогда Возврат 2;
  иначеесли АдоКонст = "adinteger" тогда Возврат 3;
  иначеесли АдоКонст = "adbigint" тогда Возврат 20;
  иначеесли АдоКонст = "adunsignedtinyint" тогда Возврат   17;
  иначеесли АдоКонст = "adunsignedsmallint" тогда Возврат  18;
  иначеесли АдоКонст = "adunsignedint" тогда Возврат 19;
  иначеесли АдоКонст = "adunsignedbigint" тогда Возврат   21;
  иначеесли АдоКонст = "adsingle" тогда Возврат 4;
  иначеесли АдоКонст = "addouble" тогда Возврат 5;
  иначеесли АдоКонст = "adcurrency" тогда Возврат 6;
  иначеесли АдоКонст = "addecimal" тогда Возврат 14;
  иначеесли АдоКонст = "adnumeric" тогда Возврат 131;
  иначеесли АдоКонст = "adboolean" тогда Возврат 11;
  иначеесли АдоКонст = "aderror" тогда Возврат 10;
  иначеесли АдоКонст = "aduserdefined" тогда Возврат 132;
  иначеесли АдоКонст = "advariant" тогда Возврат 12;
  иначеесли АдоКонст = "adidispatch" тогда Возврат 9;
  иначеесли АдоКонст = "adiunknown" тогда Возврат 13;
  иначеесли АдоКонст = "adguid" тогда Возврат 72;
  иначеесли АдоКонст = "addate" тогда Возврат 7;
  иначеесли АдоКонст = "addbdate" тогда Возврат 133;
  иначеесли АдоКонст = "addbtime" тогда Возврат 134;
  иначеесли АдоКонст = "addbtimestamp" тогда Возврат 135;
  иначеесли АдоКонст = "adbstr" тогда Возврат 8;
  иначеесли АдоКонст = "adchar" тогда Возврат 129;
  иначеесли АдоКонст = "advarchar" тогда Возврат 200;
  иначеесли АдоКонст = "adlongvarchar" тогда Возврат 201;
  иначеесли АдоКонст = "adwchar" тогда Возврат 130;
  иначеесли АдоКонст = "advarwchar" тогда Возврат 202;
  иначеесли АдоКонст = "adlongvarwchar" тогда Возврат 203;
  иначеесли АдоКонст = "adbinary" тогда Возврат 128;
  иначеесли АдоКонст = "advarbinary" тогда Возврат 204;
  иначеесли АдоКонст = "adlongvarbinary" тогда Возврат   205;
  иначе возврат 0;
  конецесли;
КонецФункции


Функция ТипПараметраАДО( Конст ) Экспорт  
   АдоКонст = НРег(Конст);  
   Если АдоКонст = "adparamunknown" тогда Возврат 0;    
   иначеесли АдоКонст = "adparaminput"тогда Возврат 1;  
   иначеесли АдоКонст = "adparamoutput"тогда Возврат 2;  
   иначеесли АдоКонст = "adparaminputoutput"тогда Возврат  3;  
   иначеесли АдоКонст = "adparamreturnvalue"тогда Возврат  4;  
   КонецЕсли;                                            
КонецФункции


Пример:
prm1 = Cmd.CreateParameter("ID", КонстантаАДО("adWChar"), 
ТипПараметраАДО("adParamInput"), 9, Код);  
Cmd.Parameters.Append( prm1 );  
Prm2 = Cmd.CreateParameter("OUTID", КонстантаАДО("adWChar"),
ТипПараметраАДО("adParamOutpt"), 9, Код);  
Cmd.Parameters.Append( prm2 );


Для передачи параметров в хранимую процедуру необходимо описать все параметры в том порядке и с теми типами, как они описаны в хранимой процедуре.

Реально я использовал передачу и возврат параметров типа AdChar, AdWChar (строковые), AdDate (дата), AdInteger, AdTinyInt ( целочисленные). Параметры типа Numeric приходилось передавать, конвертируя их в строки.

3. Получение и обработка результатов

Результаты можно получать следующими путями:
— набор данных возвращается функцией Execute объекта ADODB.Command
— отдельные значения можно передавать из хранимой процедуры через параметры типа OUTPUT.

Пример:

Rs = CreateObject(”ADODB.RecordSet”); 
Rs = Cmd.Execute; //Выполнение и получение набора данных
ВыхПарам = Cmd.Parameters(1).Value; //чтение параметра типа OUTPUT после выполнения.


— Нумерация параметров внутри коллекции Parameters начинается с 0 !!!
— Подготовленные 1 раз параметры можно использовать повторно, присваивая им значение через свойство Value.

Результирующий набор записей может обрабатываться в цикле с начала до конца, обращаясь к полям по их именам. В наборе записей не должны присутствовать поля типа Numeric — их необходимо преобразовывать в строковые непосредственно внутри SELECT или хранимой процедуры.

Пример:

Rs.MoveFirst();                 
Пока Rs.EOF() = 0 do  
  Value1 = Rs.Fields("FieldName1”).Value;  
  Value2 = Rs.Fields("FieldName2”).Value;  
  Rs.MoveNext();  
КонецЦикла;


После того, как набор записей уже не нужен, его нужно закрыть:
Rs.Close();


Когда я использую методы ADO для получения набора записей , в один из выходных параметров процедуры я помещаю результат работы функции @@ROWCOUNT. Так я контролирую, возвращен пустой набор записей, или нет.

ЗЫ. это часть статьи, которую я для себя взял. Полная статья находится тут.
TipsyKID,
02.11.10, 10:14 Расход с розничного склада
В конфигураторе щелкните правой кнопкой по нужному документу/редактировать форму. Там будет вкладка (вкладки) с макетом. Только советую тренироваться на копии!
oxygene,
29.10.10, 9:00 Счет МЦ
gryphus, теги [code][/code]
gryphus,
28.10.10, 12:55 Диаграмма ганта
Vol_M, вот выложил
Vol_M,
20.10.10, 18:44 Поле Цена с НДС в счете
Как и обещал, держите
tradeboss,
20.10.10, 9:37 FAQ по администрированию 1С и MS SQL Server
1. Что такое SQL Server Enterorise Manager?

Это приложение с графическим интерфейсом для администрирования и настройки MS SQL Server 2000, а также управления серверами и базами данных MS SQL. Запускается или через меню Пуск:: Программы - Microsoft SQL Server - Enterprise Manager (в случае стандартной установки группы прогамм MS SQL Server 2000). Или же через стандартную консоль Управление компьютером (Computer Management).

2. Что такое QA?

QA - Query Analyzer - приложения для работы с базами данных SQL на языке Transact SQL. Запускается или с пункта меню "Программы - Microsoft SQL Server - Query Analyzer" (в случае стандартной установки группы прогамм MS SQL Server 2000). Другим способом является запуск из SQL Server Enterorise Manager через меню Tools. Также можно запустить через командную строку, выполнив "Пуск - Выполнить - isqlw.exe".

3. Что такое BOL?

BOL - SQL Server Books Online - Справочное руководство по языку Transact-SQL (и не только). Вызвать можно или с Query Analyzer нажав Shift+F1 (или через меню Help - Transact-SQL Help). Или же через меню Пуск: Программы - Microsoft SQL Server - Books Online (в случае стандартной установки группы прогамм MS SQL Server 2000).

4. Какие особенности 1С при доступе к MS SQL Server 2000?

В случае работы 1С с форматом базы MS SQL все данные можно условно разделить на 2 логичные части: 1 - хранящиеся в базе данных MS SQL Server; 2 - хранящиеся в виде файлов, необходимых для работы конфигурации 1С.
С первым типом файлов 1С работает c MS SQL Server посредством ODBC, большая часть запросов, посылаемых 1С к серверу храниться в файле BkEnd.dll. Некоторые хранимые процедуры для работы с таблицами базы данных хранятся в файле 1Cv7.DDS (в каталоге программы).
Со вторым типом данных 1С работает непосредственно как с файлами. Эти файлы, хранятся в каталоге базы данных. Основные с них это: 1Cv7.MD - файл с метаданными, в нем храниться все то что можно посмотреть в Конфигураторе, 1Cv7.DDS - файл описание метаданных, в этом файле хранится описание таблиц базы данных MS SQL Server, а также хранимые процедуры, 1Cv7.DBA - файл с описанием настроек доступа к MS SQL Server-у, имя сервера, логин и пароль, usrdef\users.usr - файл описания пользователей 1С.
Как видно, даже при работе с базой в формате MS SQL Server, для работы с базой данных надо указывать и каталог базы данных как в случае и с dbf-форматом базы данных для хранения файлов, в которых описана конфигурация и в которых храниться описание данных и доступа к базе. Это с одной стороны заводит в заблуждение, что для работы с форматом MS SQL Server вся база храниться на сервере, на самом деле на сервере хранятся только данные, а метаданные хранятся в виде файла, отдельно. Это оплошность 1С исправила в версии 8.0, но в 7.7 приходиться работать с тем что есть.

5. Как установить или конвертировать конфигурацию с dbf версии в SQL версию базы данных?

1. Надо иметь приложение 1С, поддерживающую работу с SQL Server. Рекомендуется использовать релизы 15 или 25 (15 более медленный, и не поддерживает конвертацию данных в 1С 8.0). Основные отлияия SQL версии приложения 1С, это название запускаемого файла 1cv7s.exe и характерное окно выбора формата хранения данных, где можно выбрать форматы: Файлы *.DBF;*CDX или MS SQL Server.
2. Еслу уже имеется база (с какими то заполненными данными), то предварительно надо выгрузить эти данные. Это делается из меню Конфигуратора: Администрирование - Выгрузить данные.
3. Создать базу в SQL Server Enterorise Manager. Закрыть SQL Server Enterorise Manager.
4. Создать базу в 1С в режиме Конфигуратора, выбрать тип хранения данных - MS SQL Server.
5. Создать в Конфигураторе пользователя.
6. Определить параметры доступа к MS SQL Server с Конфигуратора: Меню - Администрирование - Параметры базы данных SQL... .
7. Выполнить загрузку данных, елси есть выгрузка: Меню - Администрирование - Загрузить данные.
8. Если данных нет - создать метаданные конфигурации или загрузить измененую конфигурацию.
Необходимо учитывать, что при стечении некоторых обстоятельств, данные могут не загружаться в MS SQL Sever (например длинные строки в отборах или дубли данных в индексных полях), для таких случаев описание будет отдельное, или же можно поискать в интернете описание подобных ошибок.

6. Как изменить тип авторизации доступа к SQL Server?

Вся проблема в том, что 1С подключается к MS SQL Server только под логином SQL и авторизацией MS SQL Server а Windows. Если при установке был выбран режим авторизации только Windows (Windows only) - то подключиться 1С к базе в таком случае не сможет. Для того чтобы изменить тип авторизации надо открыть SQL Server Enterorise Manager, развернуть в левом углу группу "Concole Root - Microsoft SQL Servers", развернуть SQL Server Group, выбрать необходимый сервер (соответствует или имени компьютера или (local) - для локального сервера). Если серверов нет - надо зарегистрировать новый сервер, выбрав из меню Action - New SQL Server Registration... . После выбора сервера надо через меню Action выбрать пункт меню Properties (или через контекстное меню). В появишемся окне "SQL Server Properties (Configure)" надо перейти на закладку Security, в группе Security изменить Authentication на SQL Server and Windows. Перезапустить сервис (Управление комьютером - сервисы и приложения - сервисы - MSSQLSERVER - перезапустить), или перегрузить компьютер с установленным MS SQL Server.

7. Как создать базу для 1С на SQL Server

Есть как минимум 2 способа создания базы. 1 - посредством графического интерфейса SQL Server Enterorise Manager. Для создания базы, необходимо выбрать сервер, на котором будет создана база. Установить курсор на Databases, выбрать через контекстное меню или через меню Action пункт "New database...". На закладке General ввести имя базы (например base_1c), на закладке Data Files скорректировать путь на файл данных (поле location), точно также на закладке Transaction Log можно скорректировать путь для файла транзакций. Опыт показывает, что если эти 2 файла (данных и транзакций) хранятся на разных физических дисках - то скрость системы повышается (при условии что скорость дисков также сопоставима).
Второй метод - выполнив инструкцию на языке Transact-SQL (например с QA)

Код:
CREATE DATABASE [base_1c] ON (NAME = N'base_1c_Data',
FILENAME = N'D:\SQLDATA\base_1c_Data.MDF' , SIZE = 10, FILEGROWTH = 10%)
LOG ON (NAME = N'base_1c_Log', FILENAME = N'D:\SQLDATA\base_1c_Log.LDF' ,
SIZE = 2, FILEGROWTH = 10%)
COLLATE Cyrillic_General_CI_AS

где base_1c - имя базы данных, D:\SQLDATA\ - путь к каталогу файлов базы данных и файла тразакций.


8. Как поменять владельца базы SQL

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

Код:
use base_1c
EXEC sp_changedbowner 'user1c'


где base_1c - имя базы данных, user1c - имя пользователя, котороый должен стать владельцем базы.

9. Как переиндексировать базу на MS SQL Server

Данная информация находилась по адресу: http://www.perlscript.ru , сейчас находится по адресу: http://www.softpoint.ru
Чтобы произвести переиндексацию необходимо выполнить такой запрос (например в QA):

Код:
USE base_1c
EXEC _1sp_DBReindex

где base_1c - имя базы данных.

Если хранимой процедуры _1sp_DBReindex нет в базе данных (база не 1С), то можно выполнить такой код (это и есть код хранимой процедуры _1sp_DBReindex):

Код:
USE base_1c
DECLARE @TableName char(32)
DECLARE SysCur CURSOR FOR SELECT name FROM sysobjects WHERE type='U'
OPEN SysCur
FETCH NEXT FROM SysCur INTO @TableName
WHILE @@FETCH_STATUS=0 BEGIN
DBCC DBREINDEX(@TableName)
FETCH NEXT FROM SysCur INTO @TableName
END
CLOSE SysCur
DEALLOCATE SysCur


где base_1c - имя базы данных.

Соответсвенно код для создания хранимой процедуры:

Код:
if exists (select * from sysobjects where id = object_id('dbo._1sp_DBReindex') and sysstat & 0xf = 4)
drop procedure dbo._1sp_DBReindex
CREATE PROCEDURE _1sp_DBReindex AS
SET NOCOUNT ON
DECLARE @TableName char(32)
DECLARE SysCur CURSOR FOR SELECT name FROM sysobjects WHERE type='U'
OPEN SysCur
FETCH NEXT FROM SysCur INTO @TableName
WHILE @@FETCH_STATUS=0 BEGIN
DBCC DBREINDEX(@TableName)
FETCH NEXT FROM SysCur INTO @TableName
END
CLOSE SysCur
DEALLOCATE SysCur

10. Как проверить (восстановить) базу на MS SQL Server средствами сервера

Инофрмация находится по адресу: http://www.1csql.ru/materials/faq/admin.html

Проверку логической целостности нужно выполнять штатными средствами 1С:Предприятия (Тестирование и исправление ИБ). В случае, если такую проверку не удается выполнить, следует проверить физическую целостность БД средствами MS SQL. Для проверки целостности средствами MS SQL нужно выполнить следующую команду:
Код:
DBCC CHECKDB ('<имя базы>',REPAIR_REBUILD)

Перед выполнением этой команды нужно базу данных перевести в режим "single user":
Код:
sp_dboption '<имя базы>','single user',true

В процессе работы DBCC CHECKDB могут быть обнаружены ошибки и часть может быть сразу же исправлена. Если ошибки остались, то по всей видимости их нельзя восстановить без потери некоторых данных. В этом случае нужно запустить DBCC CHECKDB с параметром REPAIR_ALLOW_DATA_LOSS (перед запуском желательно сделать копию файлов базы данных).
Код:
DBCC CHECKDB ('<имя базы>',REPAIR_ALLOW_DATA_LOSS)

После выполнения DBCC CHECKDB нужно не забыть вернуться в нормальный режим (выйти из режима "single user"):
Код:
sp_dboption '<имя базы>','single user',false

Переиндексацию базы данных на MS SQL не нужно делать так часто, как в случае с DBF-версией 1С:Предприятия (например, при аварийном завершении работы пользователя). MS SQL автоматически поддерживает индексы в актуальном состоянии. Пересоздавать индексы имеет смысл в одном из следующих случаев:
1) Индекс физически поврежден. Это случается довольно редко и для восстановления нужно использовать вышеупомянутый DBCC CHECKDB.
2) Страницы индекса сильно фрагментированы и требуется их упорядочить.
3) Нужно изменить степень заполнения индексных страниц (fill factor).
4) Требуется изменить тип индекса (кластерный/некластерный). При использовании 1С это обычно неактуально.

Переиндексация была рассмотрена в 9 пункте.

11. Как упаковать (зашринковать) базу на MS SQL Server

Упаковать базу данных можно или с помощью графического интерфейса приложения SQL Server Enterorise Manager, или с помощью выполнения кода (например с QA).
Первый случай выполняется посредством вызова контекстного меню на необходимой базе и выбора All Tasks - Shrink Database... .
Второй случай опишем несколько подробнее. В приведенном коде выполняется 4 строки кода. 1 строка - усечение всей базы. 2 строка - усечение только DATA файла до размера 101 мб. 3 строка - усечение только файла транзакций до размера 0 мб (несколько килобайт). 4 - строка - очистка журнала транзакций (иногда файл транзакций усечь невозможно, по причине заисших открітіх транзакций, выполнение этой команды должно привести до полной очистки журнала транзакций).

Код:
DBCC shrinkdatabase(N'base_1c', TRUNCATEONLY )
use [base_1c] DBCC SHRINKFILE (N'base_1c_Data', 101)
use [base_1c] DBCC SHRINKFILE (N'base_1c_Log', 0)
DUMP TRANSACTION base_1c WITH TRUNCATE_ONLY

где base_1c - имя базы данных.

Если приведенный више код не привел к требуемым результатам, можно попробовать выполнить следующий код:

Код:
use [base_1c]
BACKUP LOG base_1c WITH TRUNCATE_ONLY
GO
DUMP TRANSACTION base_1c WITH no_log
GO
CHECKPOINT
GO
DBCC SHRINKFILE(base_1c_log,2)
GO
DBCC SQLPERF (logspace)


где base_1c - имя базы данных. Последняя строка - получение таблицы с информацией о занимаемом месте и свободном метсе в файле транзакций.

12. Как упаковать (дефрагментировать) индексы базы на MS SQL Server

Данная информация находилась по адресу: http://www.perlscript.ru , сейчас находится по адресу: http://www.softpoint.ru
Хотя SQL Server и следит за скоростью работы индексов, но все же есть часть работы, которую придеться делать вручную для повышения производительности доступа к данным. К этим работам относится и упаковка индексов внутри базы SQL Server. Для выполнения упаковки предусметрена команда DBCC INDEXDEFRAG. Эта команда позволяет дефрагментировать каждый индекс, причем не блокируя данные, что позволяет делать это почти прозрачно для пользователей (почти, так как системные ресурсы для этой операции все равно требуются и возможно, что работа пользователей может значительно замедлиться). Также дефрагментация индексов может привести к уменьшению занимаемого места таким индексом (это будет временным уменьшением, так как при дальнейшей работе SQL Server все равно увеличит место занимаемое индексами).
Чтобы произвести переиндексацию необходимо выполнить такой запрос (например в QA):

Код:
USE base_1c
DECLARE @MyTable varchar(32)
DECLARE @MyIndex varchar(32)
DECLARE MyCursor CURSOR FOR
SELECT o.name, i.name
FROM sysobjects o INNER JOIN sysindexes i ON o.id = i.id
WHERE (o.xtype = 'U') AND (INDEXPROPERTY(i.id, i.name, 'isStatistics') = 0) AND (i.dpages > 0)
ORDER BY o.name, i.indid
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @MyTable, @MyIndex
WHILE @@FETCH_STATUS=0
BEGIN
PRINT 'Дефрагментация индекса '+@MyIndex+' из таблицы '+@MyTable
DBCC INDEXDEFRAG (0,@MyTable,@MyIndex)
FETCH NEXT FROM MyCursor INTO @MyTable, @MyIndex
END
CLOSE MyCursor
DEALLOCATE MyCursor

где base_1c - имя базы данных. Результатом выполнения будут таблицы для каждого индекса с ифномарцией о количестве просканированных страниц, количестве перемещенных страниц и удаленных страниц.

13. Как уменьшить рост журнала транзакций базы на MS SQL Server

Данная информация находилась по адресу: http://www.perlscript.ru , сейчас находится по адресу: http://www.softpoint.ru .
Для того чтобы файл транзакций не рос очень стремительно, надо в свойствах базы данных установить режим "Simple" поля Recovery закладки Options окна свойств базы данных.

14. Как скопировать базу 1С, работающую с базой БД в формате MS SQL Server?

Есть как минимум 3 способа это сделать.
Сделать выгрузку/загрузку в режиме Конфигуратора. Этот способ наиболее длительный, и в тоже время делать эту процедуру можно делать лишь тогда, когда другие пользователи не работают в 1С с требуемой базой. Методика того как это делается подробно описана в литературе, поставляемой с коробоынми вариантами 1С. Отмечу лишь что технология загрузки почти ничем не отличается от описанной в пункте 5 "Как установить или конвертировать конфигурацию с dbf версии в SQL версию базы данных" методики.
Скопировать каталог базы данных 1С и скопировать файлы базы данных SQL. Этот способ является наименее временизатратным (тратится время только на дисковые операции копирования). Но выполнять его также можно лишь тогда, когда с базой 1С никто не работает. Описание процесса:
скопировать каталог базы данных 1С;
сделать Detach Database. Заходим в Enterprise Manager, выбираем необходимый сервер и базу данных. Вызываем контекстное меню (или меню Action главного меню) - Tools - All Tasks - Detach Database ...:

В появившемя окне:

1 - Connections using this database: показывает сколько сейчас подключено пользователей к базе SQL. Если значение 0 - никто не подкючен и можно спокойно отключить базу. Если же подключения есть - то перед тем как нажать кнопку OK, надо будет очистить подключения (отключить пользователей, в 1С в таких случаях 1С закрывается с сообщением о невосстановимой ошибке базы данных). Отключение пользователей производится нажатием на кнопку Clear (этот процес может длиться несколько минут).
скопировать файлы базы SQL (mdf, ldf).
сделать Atach Database для отключенной базы ранее. Заходим в Enterprise Manager, выбираем необходимый сервер и становимся на ветку дерева Databases. Вызываем контекстное меню (или меню Action главного меню) - Tools - All Tasks - Atach Database ...:

в появившемся окне в поле "MDF file of database to atach:" надо внести полный путь к файлу MDF базы данных (или выбрать этот файл нажав на кнопку выбора файла слева от этого поля).
сделать Atach Database для новой базы. Заходим в Enterprise Manager, выбираем необходимый сервер и становимся на ветку дерева Databases. Вызываем контекстное меню (или меню Action главного меню) - Tools - All Tasks - Atach Database ...:
в появившемся окне:

1 - выбераем место положения скопированного файла MDF; 2 - задаем новое имя для базы данных (обязательно); 3 - при желании указываем кто будет владельцем (db_owner) базы данных (под каким логином будет 1С соединятся с базой данных SQL)
в режиме Конфигуратора подключаемся к скопрированному каталогу БД. Входим в меню Администрирование - Парамтеры базы данных SQL и в появившемся окне в поле "База данных" необходимо внести новое имя базы данных, а при условии изменения владельца базы данных указать и имя нового владельца в поле "Пользователь".
Сделать Backup/Restore Database... средствами SQL. Этот процесс длительне чем второй, но бвстрее чем первый. К тому же делать процедуру Backup можно и тогда, когда с базой работают пользователи. Процедура Backup-а несложная, поэтому информация предствалена вкратце. Заходим в Enterprise Manager, выбираем необходимый сервер и базу данных. Вызываем контекстное меню (или меню Action главного меню) - Tools - All Tasks - Backup Database. В появившемся окне SQL server Backup на вкладке General в группе Destination надо выбрать путь, куда будет сохранена база данных. Если в списке Backup To нет ни одной записи - надо добавить ее с помощmю кнопки Add вызвать окно "Select Backup Destination" и в нем указать файл, куда необходимо сохранить базу. Необходимо учесть, что путь является полным и должен включать и имя файла. После заполнения необходимых полей жмем кнопку OK в окне "SQL Server Backup - ...". А вот процедура восстановления требует более детального рассмотрения. На первой закладке выбераем "From Device", а также в поле "Devices" выбираем файл, с которого надо восстановить данные:

На второй закладке "Options" необходимо выбрать "Force restore over existing database" (1). Также необходимо изменить полный путь к фацлу данных (mdf) и к файлу транзакций (ldf), на пути к базе в которую происходит восстановление:

15. Как изменить место размещения файлов базы tempdb MS SQL Server

Данная информация находилась по адресу: http://www.perlscript.ru , сейчас находится по адресу: http://www.softpoint.ru .
Очень часто SQL Server устанавливается по умолчанию и все системные базы (в том числе и база временных таблиц) размещается на системном диске. После установки изменить расположение файлов базы tempdb с помощью графического интерфейса SQL Server Enterorise Manager - не предоставляется возможным, но это можно реализовать с помощью выполнения SQL кода с того же QA.
Код:
USE master
GO
ALTER DATABASE TEMPDB
MODIFY FILE (NAME='tempdev', FILENAME='D:\SQLDATA\tempdb.mdf')
GO
ALTER DATABASE TEMPDB
MODIFY FILE (NAME='templog', FILENAME='D:\SQLDATA\templog.ldf')
GO

где D:\SQLDATA\- каталог в котором будут размещаться файлы базы tempdb. После выполнения приведенного выше кода, надо перезапустить SQL Server (процедура описана в пункте 6), или же остановить SQL Server и запустить его заново (что по сути равносильно).

16. Как узнать логин и пароль подключения 1С к MS SQL Server

К сожалению автор этой идеи неизвестен.
Эти данные храняться в файле 1Cv7.DBA. Этот файл привязан к файлу usrdef\users.usr (вот поэтому и надо создать хотя бы одного пользователя в конфигураторе), и если вдруг надо будет изменить этот файл (ну например кто то забыл пароль администратора) и это сделать в другой базе, то привязка потеряется, и информацию о параметрах подключения 1С к SQL Server прочесть уже не удастся. Решение этой проблемы как всегда простое - все данные по доступу к SQL Server хранятся в файле 1Cv7.DBA. Они там не в октрытом виде, но и не зашифрованы 128 битным ключом по методу md5. Вся защита основана на простеньком XOR. Если у кого есть желание, можете сами написать метод шифрования, только вот зачем, если есть уже говотовые решения.
Код:
Function XOR(Val ParA, Val ParB)
Res = 0;
Koef = 1;
For BitNumber = 1 To 8 Do
BitA = ParA % 2;
BitB = ParB % 2;
ParA = Int(ParA / 2);
ParB = Int(ParB / 2);
BitC = (BitA + BitB) % 2;
Res = Res + BitC * Koef;
Koef = Koef * 2;
EndDo;
Return Res;
EndFunction

// индексы значений с списке
// server = 2, db = 4, uid = 6, pwd = 8, checksum = 10
Function ConnectionString() export
Var SQLKeyCode[36], ConnectCode[200];
ConnectFile = IBDir() + "1Cv7.DBA";
If FS.ExistFile(ConnectFile) = 0 Then
Message("Это не SQL - база!", "!");
Return (0);
EndIF;
FSO = CreateObject("Scripting.FileSystemObject");
F = FSO.OpenTextFile(ConnectFile, 1);
ConnectLen = 0;
While F.AtEndOfStream = 0 Do
ConnectLen = ConnectLen + 1;
ConnectCode[ConnectLen] = Asc(F.Read(1));
EndDo;
F.Close();
FSO = 0;
SQLKey = "19465912879oiuxc ensdfaiuo3i73798kjl";
For i = 1 To 36 Do
SQLKeyCode[i] = Asc(Сред(SQLKey, i, 1));
EndDo;
Connect = "";
For i = 1 To ConnectLen Do
Connect = Connect + Chr(XOR(ConnectCode[i], SQLKeyCode[(i - 1) % 36 + 1]));
EndDo;
vl=createobject("ValueList");
Connect=StrReplace(Connect,"{","");
Connect=StrReplace(Connect,"}","");
vl.fromSeparatedString(Connect);
return (vl);
EndFunction

if ExclusiveMode()=0 then
if FS.ExistFile(IbDir()+"1cv7.dds")=1 then
constr=ConnectionString();
if ConStr<>0 then
server=constr.getValue(2);database=constr.getValue(4);uid=constr.getValue(6); pwd=constr.getValue(8);


Можно воспользоваться и готовой обработкой.

17. При старте 1С, или при попытке открытия конфигурации выдается сообщение "SQL State: 24000 Native: 0 Message: [Microsoft] [ODBC SQL Server Driver] Invalid cursor state"

Такое сообщение в моей практике встречалось при попытке подключиться к базе SQL под логином, отличным от владельца (DB OWNER). Надо или поменять имя пользователя в настройках Параметры базы данных SQL, или поменять владельца базы (8 пункт на этой страничке). Также такое ссобщение может появлятся при некорректном завршении предыдущего монопольного подключения (например в момент реструктуризации базы), в таком случае обычно помогает restart SQL сервера.

18. Резервная копия базы SQL и MD-файла

Для выполнения резервного копирования базы SQL и сохранением файла конфигурации (1Cv7.md) можно создать задание (job) на SQL сервере с примерно такой инструкцией на языке Transact - SQL:

DECLARE @path VARCHAR(1000) -- путь бекапа SQL
DECLARE @path2 VARCHAR(1000) -- путь архива rar
DECLARE @CMDStr VARCHAR(1000) -- строка команды для архивирования

SET @path = 'E:\SQL_DB\backup\buh_cb_' + CONVERT(VARCHAR(8),Getdate(),112) + '_' + REPLACE(CONVERT(CHAR(19),Getdate(),108),':','_')
SET @path2 = @path + '.rar'
SELECT @path = @path + '.bak'

BACKUP database [buh_cb] TO disk = @path

SET @CMDStr = 'rar a -y -dh -ep -rr[5] ' + @path2 + ' ' + @path + ' E:\1CV77\URBD\CB\1Cv7.MD'
EXEC xp_cmdshell
@CMDStr
-- удалим SQL бекап, оставим только rar.
SET @CMDStr = 'del ' + @path
EXEC xp_cmdshell
@CMDStr
GO

19. При попытке монопольно войти в 1С или при записи конфигурации выдается сообщние "База данных не может быть открыта в однопользовательском режиме"

Причиной такого поведения 1С есть невозможность захватить базу данных в монопольном режиме (так называемый режим Single User). Это может произойти по нескольким причинам. 1 - есть другое приложение, которое в данный момент подключено к базе, которая является базой SQL для 1С. в таком случае это приложение надо или закрыть или же открыть в нем другую базу (например в Query Analiser-е использовать команду USE Master). Если таким приложений нет (которые явно могли присоединиться к базе), можно попробовать остановить и снова запустить SQL Server (или перегрузить сервер, на котором находиться SQL база и SQL сервер). 2 - произошел сбой во время работы с базой данных в монопольном редиме с аварийным отключением соединения. При таком стечении обстоятельств, перезапуск SQL сервера не поможет. Необходимо удалять ссылки на зависшые процессы. Чтобы этого не делать, можно отключить базу (сделать Detach) и обратно подключить под другим именем (поле Attach as), после чего надо изменить настройки подключения и в Конфигураторе для текущей базы 1С (в качестве базы SQL указать базу с новым именем).

20. Как создать дополнительные индексы для таблиц

В 1С есть механизм управления индексами - это установка флажка "Сортировка" в свойствах реквизита. Но при этом индекс всегда создается как составной (напрмиер для справочников для каждого реквизита создается индекс с ROW_ID, с регистрами и того хуже, там один составной индекс по всем измерениям). Такие индексы полезны лишь тогда, когда все поля, что входят в индекс задействованы в запросе (напрмиерв условиях или в сортировках). Если же не все поля задействоаваны, тогда индекс не эфективен. Иногда помогает добавление своих индексов, скажем только по одному полю. Но если добавить индекс вручную, то 1С при следующей первой загрузке сделает верификацию и выдаст сообщение о нарушении структуры индексов и предложит запустить программу в монопльном режиме для восстановления. Решить проблему верификации можно несколькими способами, подаправить вручную харнимую процедуру, которую вызывает 1С (это системаня хранимая процедура sys.sp_statistics), но сделать такое изменение в SQL2005 будет не совсем просто. Второе решение - подправить файл, по кторому 1С проводит верификацию, а это файл 1Cv7.dds (1Cv7.dd для dbf версии). Но 1С этот файл каждый раз пересоздает при реструктуризации, и поэтому придется каждый раз вносить такие изменения после руструктуризации. Чтобы не делать такие изменения каждый раз вручную, есть компонента, которая использует OpenConf "Проект OpenConf (Открытый Конфигуратор)" Вот ссылка на первоисточник: Дополнительные индексы на таблицы БД SQL. Скачать файл можо вот по этой сслыке: ddx.zip

21. Как решить проблемы с памьятью. 1 - Windows Server не видит больше 4 GB ОЗУ, 2 SQL Server не может использовать больше 2 GB.

Проблемы с 32 разрядными Windows Server и поддержкой больше 4 GB ОЗУ рассмотрена в этой статье http://support.microsoft.com/?id=283037. Описание технологии: http://www.microsoft.com/technet/prodtechn...3.mspx?mfr=true
С этой проблемой сталкиваются те, у которых на сервере более 4 GB ОЗУ.
Вкратце, для работы с памьятью более 4 GB понадобятся такие операционные сситемы:
Microsoft Windows 2000 Advanced Server,
Microsoft Windows 2000 Datacenter Server,
Microsoft Windows Server 2003 Enterprise Edition,
Microsoft Windows Server 2003 Datacenter Edition.
Для работы с памятью более 4 GB в файле c:\boot.ini надо в строке где есть параметр /fastdetect добавить параметр /PAE
Для возможности использования одним процессом более 2 GB в файле c:\boot.ini надо в строке где есть параметр /fastdetect добавить параметр /3GB.
Вот например как может выглядеть отредактированная строка в boot.ini:
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Enterprise" /PAE /3GB /fastdetect
Необходимо отметить что для того чтобы SQL сервер использовал больше 2 GB ОЗУ указывать ключ /3GB указывать необязательно. Почему, рассмотрено чуть ниже.
Проблема с SQL Server (2000, 7.0) и сипользованием болше 2 GB ОЗУ. В самом SQL Server есть возможность использование расширенной памяти больше 2 GB. Следует отметить что для использования SQL сервером больше 2 GB памяти необходимо использовать или Enterprise Edition или Developer Edition SQL Server. Для поддержки SQL Server памяти свыше 2 GB, он использует технологию Address Windowing Extensions (AWE). Подробное описание находиться в этой статье : http://www.support.microsoft.com/?id=274750 . А в от в этом топика форума SQL.RU находиться обсуждение целесообразности использования этого параметра:: http://www.sql.ru/forum/actualthread.aspx?...137853&pg=1 . Отмечу лишь то, что замедления работы системы и SQL сервера я не заметил, включив этот режим. Также надо отметить что для повышения производительности следует отклжючить файл подкачки для Windows. Это приведет к тому, что неисопльзуемая память не будет высвобождаться на диск, а в случае запроса к высвобожденным ресусрам не будут производиться опреации чтени с диска. Но для такой операции необходимо достаточное количество оператвиной памяти на сервере. На вопрос сколько надо пямяти для SQL сервера нет точного ответа, есть лишь рекомендации. Так например, елси работа ведеться только с одной базой, то надо выделить под SQL сервер приблизительно сколько памяти, сколько занимают файли базы данных на диске (но желательно процентов на 10-15%). Также надо отметить что при использовании AWE для SQL сервера сам рпоцесс sqlserver.exe не занимает больше места в памяти, память отводиться под кеш SQL сервера, т.е. фактически под данные базы данных.
Вот пример скрипта на языке Transact-SQL для включения режима AWE:
Код:
sp_configure 'show advanced options', 1
RECONFIGURE
GO
sp_configure 'awe enabled', 1
RECONFIGURE
GO
sp_configure 'max server memory', 6144
RECONFIGURE
GO

где: 6144 - размер памяти в мегабайтах, выделяемых SQL-серверу. Желательно это значение не устанавливать больше чем размер физической памяти, в противном случае при физическом резервированиия памяти под SQL SQL сервер не сможет стартовать.

22. Медленно работает 1С по сети с базой на SQL Server.

Одно из решений - правильно настроить сетевые протоколы для взаимодействия с SQL Server.
http://www.1csql.ru/materials/faq/admin.html

Для такой настройки ODBC должен быть версии не ниже 3.5
С помощью утилиты Client Network Utility (CLICONFG.EXE) (Program - Microsoft SQL Server - Client Network Utility) необходимо настроить протокол общения с SQL сервером. По умолчанию "Default network library" установлен в "Named Pipes", надо установить в "TCP/IP" и добавить строку в Server alias configuration. Где, соответственно, указать псевдоним, имя сервера, протокол TCP/IP, порт (можно оставить без изменений, если на сервере порт не был изменен). Вот пример настройки:

1 - пример настройки протоколов, 2 - ставить необходимо когда клиент и SQL Server находятся физически на одном компьютере, в єтом случае обмен идет не по сетвевым ресурсам, а через память.

23. После установки на SQL Server 2000 Service Pack 4 SQL стал медленне работать и меньше загружать память.

По заявлениям фирмы Microsoft есть такая проблема для 32-битной версии SQL Server 2000 SP4, для устранения этой проблемы надо скачать HotFix вот по этой ссылке:
http://support.microsoft.com/default.aspx?kbid=899761

24. После установки на SQL Server 2000 проведение документов замедлилось

Эта проблема описана в этой статье:
http://support.microsoft.com/?scid=kb;en-u...3&spid=2852
Есть комерческое решение этой проблемы: http://www.softpoint.ru/article_id11.htm
Есть решение и с помощью 1С++ (метод ReconnectNative() класса ODBCRecordSet) но надо быть осторожным и закрывать все открытие окна объектов, а также обнулять глобальные переменные, в которых храняться ссылки на объекты (Справочники, документы, регистры, операции).
Также эта проблема уже решена в SQL Server 2005, но пока официальной поддержки 1С V77 SQL Server 2005 нет (1С не может правильно определить версию драйвера, но эта проблема решается патчингом BkEnd.dll, как это сделать будет рассмотрено в другой статье).

25. Не могу подключиться к SQL серверу

Проблема очень обширная, подробноее ее решение рассмотрено вот в этой статье:
http://www.sql.ru/articles/mssql/2005/0130...erver2000.shtml

26. По каким то причина SQL Server очень медленно работает

Решение этой проблемы может быть как совсем простое, так и очень сложное и требующее значительных затрат (как по времени, так и по другим ресурсам). Вот статья, рассказывающая как можно протетсировать компоненты сервера на скорость, а также методы устранения узких мест: http://www.sql.ru/articles/mssql/03121001PERF_COUNTERs.shtml
Со своего опыта добавлю, что для ускорения работы SQL Server необходимо отключить файл подкачки на том компьютере где он работает (но при этом надо минимум 2.5 GB ОЗУ). А при использовании технологии AWE - желательный объем ОЗУ - размер базы, с которой наиболее активно работают. Также, необходимо учесть, что при активной работе пользователей (например ввод за 12 часов от 2000 документов, или от 10000 транзакций (включая количество движений, т.е. записей в таблицы)), желательно чтобы SQL Server работал только с одной пользовательской базой. Также желательным будет использование RAID масивов (5 или 10 уровень) и хорошие RAID контроллеры (от 1000 у.е.). Также надо заметить, что иногда может быть полезным разделить систему и SQL базу на разные физические диски, а также разделение файла данных (mdf) и файла транзакций (ldf) на разные диски (что может быть очень проблематичным при условии использования RAID-10).

27. При попытке подключения к SQL2005 выдается сообщение "Требуется ms sql server версии 6.5 + service pack 5a или более старшая версия"

Проблема существует в версии 7.7 вплоть до 25 релиза включительно. Проблема кроется в способе определения версии MS SQL Server. При попытке подклбчения к SQL 1С проверяет версию SQL Server, причем проверяет по содержимому системной таблици. Подробно описано как вот в этом топике: http://www.forum.mista.ru/topic.php?id=133392. Приведу текст запроса, по которому 1С определяет версию
Код:
select 504,c.name,c.description,c.definition from master.dbo.syscharsets c
where c.id = convert(tinyint,databasepropertyex ( db_name() ,
'sqlcharset'))

Вся проблема в том, что master.dbo.syscharsets в SQL2005 это уже не таблица, а View, и изменить его - не такая уж простая задача (у меня так и не получилось, и наверное это правильно, так как изменение системных таблиц может привести к неработоспособности всего SQL Server).
Но решение есть. Дело в том, что почти все запосы, которыми 1С обращается по ODBC к SQL Server хранятся в одной DLL, а именно в BkEnd.dll. При желании, можно изменить эту DLL и дать возможность 1С работать с SQL Server 2005.
Вкратце что надо сделать:
(пример приведен для 25-го релиза 1С V7.7)
патчим bkend.dll
000D9C4A: 83 EB
000D9C4B: E8 15
000DB0B0: 83 EB
000DB0B1: E8 10

(для 26-го и 27-го релизов 1С V7.7)
000D9CCA: 83 EB
000D9CCB: E8 15
000DB130: 83 EB
000DB131: E8 10

в свойствах базы данных на SQL Server ставим Compatibility Level SQL Server 2000(80)

Если кто хочет восспользоваться готовой пропатченной BkEnd.dll - может восспользоваться этой ссылкой: BkEnd.zip

28. Как подключиться к SQL2005 по IP адресу а не по имени сервера

Проблема в том, что при установке по умалочанию во всех редакциях кроме Enterprise Edition включается только протокол SharedMemory, необходимо включить еще и TCP/IP для доступа к серверу по сети. Для этого необходимо запустить приложение Programm - Microsoft SQL Server 2005 - Configuration Tools - SQL Server Configuration Manager и включить протококол TCP/IP:

29. Как получить имя пользователя, который занимает много процессорного времени SQL-Server.

Очень часто приходиться сталкиваться с такой ситуацией, когда SQL-Server полностью или почти полностью занимает (загружает) процессор или дисковую подсистему во время работы. Для того чтобы выяснить кто из пользователей "загрузил" SQL-Server надо войти в SQL-Profiller и посмотреть какой из запросов (после его віполнения, т.е. в момент когда идет выполнение запроса, запрос в Profiler не попадает, а это знгачит что Profiler надо запустить до момента возникновения ситуации, которую надо отследить). Когда будет выявлен запрос, который занимет много процессорного времени (по колонке CPU, а также время его віполнения в милисекундах - колонка Duration), можно узнать его SPID в колонке SPID того же Profiler-а:

В этом окне видно, что выделенный запрос (который нас интересует) выполнен под SPID = 76. Теперь необходимо выполнить запрос для того чтобы получить имя пользователя и имя компьютера, с которого работает пользователь:
Код:
SELECT spid,program_name, hostprocess,hostname, loginame
FROM sysprocesses
WHERE SPID = 76

Казалось бы все просто, смотрим значенеи поля loginame и видим пользователя. Но не все так просто, дело в том, что 1С работае с SQL-Server по SQL-Server аутентификации, а єто значит, что все пользователи 1С работают под одним логином SQL (обычно это sa). Поэтому решение надо искать в результатах других столбцов выборки.
Вот к примеру один из результатов запроса:

Реузльтат этого запроса может дать нам овтет в первом из двух случаев. Есть 2 варианта работы 1С версии 7.7 с SQL-сервером (точнее штатный вариант один, разница лишь в том, где вполняется приложение 1С): 1 - работа в локальной сети, пользователи работают с приложением 1С на своих локальных компьютерах; 2 - работа на терминальном сервере, когда пользователи для работы с приложением 1С сначал подключаются к серверу терминалов, а уже с него работают с 1С.
Так если пользователь с указанным SPID работает по сети (не посредством терминального сервера), то в поле hostname - можно увидеть с какого компьютера был послан запрос, ну и зная компьютер можно легко узнать а кто же там работал в требуемое время.
Если же пользователи работают с терминального сервера - ситуация усложняется, так как в поле hostname - будет имя сервера терминадов. В этом случае может помочь значение поля hostprocess. Именно под этим номером на клиентском компьютере (сервере терминалов) стартовал процесс 1cv7s.exe, и посмотрев в Task Manager-е список процессов на термианльном сервере можно найти от имени какого пользователя стартовал процесс и таким образом выясгить имя пользователя:

30. Как сделать чтобы 1С подключался к SQL не под одним логином (SQL аутентификация), а под логинами Windows (Windows аутотентификация).

Зачем это надо? В предыдущем пунтке этого FAQ-а (как получить имя пользователя, который занимает много проуессорного времени SQL-Server) было описан механизм получения имени пользователя по его SPID, эта довольно тривиальная задача на самом деле не совсем простая, и решить ее средствами самого SQL-Server не так просто. Ситуация меняется когда все пользователи будут подключаться к SQL серверу не по одному логину, а под своими Windows-логинами. Тогда сразу видно кто выполняет интересующий запрос.
Реализовать подобное можно лишь изменив строку подключения 1С к SQL. Строка подключения 1С находится в файле BkEnd.dll. Для изменение строки подключения надо найти строку "SERVER=%s;UID=%s;PWD=%s;" и заменить на строку "SERVER=%s;UID=;PWD=; ". После чего все подключения 1С будет выполнять не под логином и паролем прописанным в полях окна "Параметры базы данных SQL", а под именем и правами Winndows. Эту процедуру следует делать с особой осторожностью, и после исправления BkEnd.dll надо обязательно внести список логинов Windows в в список логинов SQL-Server. Также необхомо пользователям дать права на базы 1С (а возможно и другие, если используются какие то дополнительные базы и обращение к им ведеться по OLE DB или ODBC) (за исключением случая пользователи принадлежат группе даминистраторов на сервере, где находится SQL-Server). Назначитт права можно віполнив ниже указанній скрипт для каждого пользователя и каждой базы:
Код:
use [master]
exec sp_grantlogin N'Domain\User1'
use [master]
exec sp_defaultdb N'Domain\User1', N'base1'
use [master]
exec sp_addsrvrolemember N'Domain\User1', sysadmin
use [base1]
exec sp_dbcmptlevel N'base1'
use [base1]
exec sp_grantdbaccess N'Domain\User1', N'User1'
use [base1]
exec sp_addrolemember N'db_owner', N'User1'

Где: 'Domain'-имя домена;
'User1'- имя пользователя;
'base1'-имя базы на SQL сервере.
Зачем давать права пользователям System Administrator строкой: exec sp_addsrvrolemember N'Domain\User1', sysadmin? Без этих прав пользователи также смогут работать с 1С, но вся проблема в том, как 1С работает с таблицей "_1SCONNECT". Так при первой загрузке 1С пытается выбрать строки с таблицы с блокировкой TABLOCKX HOLDLOCK, если блокировки нет - тогда 1С понимает что это первое подключение и удалчет все записи с таблицы, а также и саму таблицу, а потом снова создает. Но поскольку теперь работа ведется не под логином SA, то таблица создается не под dbo, а под именем логина. Для того чтобы устранить эту ошибку надо чтобы таблица создавалась под владельцем dbo, а для этого надо пользователям дать права sysadmin. К тому же если пользователь все таки вошел с отсутствием прав sysadmin, а потом пытается войти пользователь с правами sysadmin - то 1С понимает что это другое подключение и выводит сообщение о том что доступ к базе возможен только из одного каталога. Для решения такой проблемы - надо удалить таблицу "_1SCONNECT" у которой владелей не dbo, а пользователю дать права sysadmin.
Эту проблему можно обойти не давая всем пользователям права sysadmin, а достаточно лишь кому то одному, но главное условие, чтобы этот пользователь подключался к 1С первым (под ним проходила верификация).
Тепрь для просмотра кто сейчас работает с базой можно восспользоваться хранимой процедурой sp_who, но эта процедура не дает возможности отбирать подключения по имени базы и имени приложения, а также нет возможности видеть некоторые поля с информацией, скажем о загрузке процеесора или о количестве операций чтения/записи. Для получения требуемой инмормации можно сделать запрос к таблице sysprocesses, но для того чтобы не писать громоздкие запросы, можно восспользоваться хранимой процедурой, текст которой приведен ниже:
Код:
use master
create procedure sp_who_1c --- аналогия sp_who, но с некоторыми рассширенніми возможностями
@dbname varchar(100) = NULL -- Имя базы NULL - все базы
,@progname varchar(100) = NULL -- имя программы NULL - все программы
,@orderBy varchar(100) = 'loginame' -- столбцы сортировки

as

declare @textZP VarChar(1000)

select @textZP = 'select spid,
ecid,
status=rtrim(status),
loginame=rtrim(loginame),
hostname=rtrim(hostname),
program_name=rtrim(program_name),
blk=convert(char(5),blocked),
dbname = case
when dbid = 0 then null
when dbid <> 0 then db_name(dbid)
end
,cmd
,cpu
,physical_io
,memusage
,login_time
from master.dbo.sysprocesses
where (spid >= 0 and spid <= 32767)'


if (@dbname is NOT NULL)
if (@progname is NOT NULL)
select @textZP = @textZP + '
and ((db_name(dbid) = '''+isnull(@dbname,'')+''') and (dbid <> 0))
and upper(rtrim(program_name)) ='''+ upper(@progname)+''''
else
select @textZP = @textZP + '
and ((db_name(dbid) = '''+isnull(@dbname,'')+''') and (dbid <> 0))'
else
if (@progname is NOT NULL)
select @textZP = @textZP + '
and upper(rtrim(program_name)) ='''+ upper(@progname)+''''

select @textZP = @textZP + '
order by '+@orderBy

--print @textZP
EXEC (@textZP)
return (0)


Вызов этой процедуры:
Код:
exec sp_who_1c 'ruukki','1cv77','cpu desc'

31. Работа 1С v77 под Vista и MS SQL 2005

Проблемы работы 1С под MS Vista можно разделить на 2 категории:
1 - Работа в файловом варианте базы.
2 - Работа с базой в формате MS SQL.

1. Для решения проблемы работы в файловом варианте необходимо использовать 1С релиза 26 или 27 (но лучше 27). Фирма 1С реализовала механизм отключения проверки кодовой странции с помощью проверки на существование файла OrdNoChk.prm. Соответственно, этот файл должен быть или в каталоге базы данных или же в каталоге программных файлов 1С (BIN). Файл OrdNoChk.prm в каталоге BIN будет действовать на все базы, с которыми работает программа 1С запущенная с этого каталога. Следовательно, для отключения проверки кодировки для всех баз - разместите файл в каталоге BIN программных файлов, а для отключения проверки кодировки выборочно для базы (баз) создайте файл OrdNoChk.prm в каталоге базы.
В некторый случаях, дополнительно надо еще установить кодовую страницу для базы на "+Текущая системная установка". Это делается в режиме Конфигуратора:
"Меню - Администрирование - Кодовая страница таблиц ИБ... - "+Текущая системная установка"".
Надо быть осторожным при изменении кодовой страницы, если с базой работают по сети и у клиентов установлены разные версии ОС.

2. Для работы 1С с базами в формате MS SQL под MS Vista можно использовать как MS SQL 2000 так и MS SQL 2005. Хотя при установке SQL 2000 и выдается сообщение о необходимости установки более новой версии SQL Server, но установка и дальнейшая работа MS SQL Server 2000 проходит без особых проблем (пока не удалось заметить каких либо глюков). Надо только обратить внимание, что при установке SQL Server кодировка на уровне сервера может быть установлена отличная от Cyrillic_General_CI_AS, поэтому, желательно самому вручную поставить необходимую установку Collation в Cyrillic_General_CI_AS (кириллица регистронезависимая по возрастанию).
После установки надо поменять некоторые измененные системные файлы, иначе вы рискуете увидеть приблизительно такое сообщение "Для доступа к базе данных требуется ODBC-драйвер для MS SQL Server версии 3.50.0303 или старше".
Но если вы установили вашу ОС и не делали с ней никаких изменений в плане настройки безопасности, то даже работая под правами администратора или под логином администратора - вам не так просто будет скопировать файлы в папку System32. Итак, для начала надо с предыдущих версий ОС (например Windows XP или MS Server 2003) переписать вот эти 3 файла:
sqlsrv32.dll
sqlsrv32.rll
odbcbcp.dll

После чего надо эти файлы записать в папку "System32" (обычно это C:\Windows\System32\). Для этого надо сделать себя владельцем этих файлов (или папки, или всего диска):

После чего назначаете себе полный доступ на каталог (если такого доступа нет):

Теперь можно смело скопировать 3 ранее подготовленных файла и перезагрузить систему.
Но это еще не все, теперь Вам надо сделать то же самое что вы проделывали с файлом OrdNoChk.prm с 1 пункта, чтобы отключить проверку сортировки в режиме 1С:Предприятие. Выполнив такие изменения можно смело работать с 1С.
Но для режима 1С:Конфигуратор файла OrdNoChk.prm недостаточно, Все дело в том, что в режиме конфигуратора почему то 1С не обращает внимание на наличие этого файла (логично предположить), для того, чтобы вопрос о сортировке не возникал при изменении структуры базы в режиме Конфигуратора надо подправить файл BkEnd.dll (подсмотрено как это делает USP для более ранних релизов):
(для 26-го и 27-го релизов 1С V7.7)
по смещению 0018A6DD поменять значение с 75h на EBh (117 на 235)

И еще одно маленькое замечание по работе с MS Windows Vista, чтобы каждый раз не отвечать на вопросы при установке каких то программ или регистрации DLL-ок лучше сразу отключить контроль учетных записей в панели управления:

32. При подключении 1С возникате ошибка "SQL State 42000. Native 7202. ... SQL Server Could not find serve 'ServerName' ..."

Эта ошибка возникла при переименовании имени компьютера после установки экземпляра SQL Server, и происходит несоответсвии имени SQL сервера и прописанного экземпляра имени сервера в свойствах базы данных.
Вот пример как исправить эту ситуацию для сервера SQL 2005 (хотя в 2000 также эта команда должна работать):sp_dropserver UA00560PCV
GO
sp_addserver dtuaiev0028, local
GO

где:
UA00560PCV - старое имя компьютера,
dtuaiev0028 - новое имя компьютера.
Selin, SpecAgent,
20.10.10, 9:13 Поле Цена с НДС в счете
А кто, интересно, научил вас так обновлять?

Заходим в конфигуратор Конфигурация/Сравнение и объединение. Не знаю, что оно там найдет, но вам надо оставить отметку только на документе счет-фактура!
tradeboss,
19.10.10, 13:59 Пособие на погребение
predator, жмите кнопку +спс
predator,
18.10.10, 16:53 Подключаемые базы
Ну судя по коду выше, здесь не происходит "выбор". Здесь только проверяется отмечены ли базы. Посмотрите процедуру глобального модуля ПриНачалеРаботыСистемы()
Flexy,
18.10.10, 13:30 Розничная цена в грн, а нужна в евро. Что делать?
Вспомнил анекдот:
Идет презентация нового какого-то оборудования. Докладчик говорит: "Сейчас вы видите новое устройство, которое распознает голос и выполняет комманды". Голос из зала "Формат Цэ, энтэр энтэр" smile.gif
Ardi, awp,
18.10.10, 12:31 Добавление кнопки в документ
Цитата
Переход к документу значит ввод нового документа "Оказание Услуг". Как это сделать?

Ну делается это наверное как-то типа:
Док = СоздатьОбъект("Документ.ОказаниеУслуг");
Док.Новый();
Док.ОткрытьФорму();


Цитата
И как сделать так, чтобы кнопка ставала активной только тогда, когда выбраный товар в справочнике номенклатура, был услугой?

При выборе строчки проверяйте, если Ваша номенклатура - это услуга, тогда
Форма.Кнопка.Доступность(1)
Иначе
Форма.Кнопка.Доступность(0)
wenom,
18.10.10, 11:25 Добавление кнопки в документ
Всё это можно сделать.

Цитата
Функция кнопки - переход к документу Оказание Услуг.

Что значит "переход к документу"? Это ввод нового, переход к существующему, переход к введённому на основании/являющимся основанием для данной РН.

Цитата
Можно ли сделать так, чтобы кнопка ставала активной только тогда, когда выбраный товар в справочнике номенклатура, был услугой?

Можно
wenom,
18.10.10, 9:20 Обращение к элементам диалога в цикле
Наверное как-то так (не проверял):

Рекв = "Контрагенты";
РеквКонтрагенты = Форма.ПолучитьАтрибут(Рекв);
РеквКонтрагент.Видимость(0);
olgapyat, Игорь К,
18.10.10, 7:25 Обращение к элементам диалога в цикле
ПолучитьАтрибут(<?>);

Синтаксис:
Форма.ПолучитьАтрибут(ИмяРеквизита)
Назначение:
Возвращает ссылку на элемент формы.
Параметры:
ИмяРеквизита - строковое выражение, содержащее идентифика-тор элемента формы, как он задан в Конфигураторе.
Замечание:
Доступ к методу возможен только в контексте Модуля формы через атрибут Форма.
Игорь К,
11.10.10, 8:59 1С: Предприятие 8.2 видеоуроки (2010)



Год выпуска: 2010
Название: 1С:Предприятие 8.2 видеоуроки
Автор (режиссер): Насипов Фарит, Евгений Гилев

Это первый бонус к тренинговому пакету "Профессиональное программирование в 1С:Предприятии 8.х".

Эту оболочку лучше запускать в Microsoft Internet Explorer. Видеоуроки запакованы в exe-файлы, включающие в себя видеоплеер, поэтому они будут работать при любых (не)установленных кодеках. Высота роликов - более 600 пискелей, поэтому на нетбуках их смотреть не рекомендуется, используйте компьютер с разрешением от 768 точек по вертикали.

Использование:

Вы можете использовать эти материалы любым образом при сохранении данных об авторстве и неизменности содержания.

То есть - можно делиться, использовать в обучении, тиражировать
- но не нельзя изменять видеоуроки или присваивать авторство

Качество видео: PCRec
Продолжительность: 03:00:00

Видеокодек: DivX
Битрейт видео: ~1000 kb/s
Размер кадра: 970x682
Аудиокодек: MP3
Битрейт аудио: 128 kb/s

Дополнительная информация:
Об авторах:

Евгений Гилев
Консультант по внедрению систем автоматизации бизнеса на платформе «1С:Предприятие 8»

Руководитель учебного центра
Преподаватель Центра сертифицированного обучения
Участие в проектах по внедрению УПП в пищевой отрасли, торговле и приборостроении
Разработчик сертифицированного в 1С курса «Основы грамотной работы в 1С:Предприятии 8».
8 сертификатов 1С:Специалист по платформе и решениям на «восьмерке»
12 сертификатов преподавателя 1С

Специализация:
Разработка на платформе v8
Прикладные решения
Подготовка к сертификации

Насипов Фарит
Консультант по производственному учету и прикладным инструментам управления

Опыт работы с продуктами 1С более 10 лет
Участие в более чем 20 проектах (помимо тренингов и разработки)
Участие в разработке ИТРП:Проф и 1С:УПП
Разработка и проведение учебных курсов для УЦ 1 фирмы 1С
Разработка элементов 1С:ПрофКейс
Разработка и проведение корпоративных тренингов по продуктам и технологиям

Специализация:
Производственный учет
CRM
Информационный маркетинг
Product Launch







Размер: 317 Мб

[по требованию правообладателя ссылки удалены]

*Вот случайно наткнулся, сам ещё не качал, не смотрел
Batchir, dobraleks, igor_sherbakov, Safo, upiter, ZAHAR117,
08.10.10, 10:47 Проводки документа "Начисление ЗП"
Айрин, нажмите пользователю кнопку "+СПС", ему будет приятней!
Айрин,
06.10.10, 12:07 1C 7.7 Проведение документов завтрашним числом
Попробуйте провести документ послезавтра, потом создайте новый и посмотрите что в нем покажут остатки
Flexy,
06.10.10, 8:36 Закрытие месяца
Polzavatel,
28.09.10, 11:31 1С 7.7 ТИС + SQL Server 2000
Цитата
выбивало ошибку драйвера SQL сервера

Первое, что приходит в голову: переустановить сей драйвер.
Второе: в конфигураторе "Администрирование/Тестирование и исправление". Предварительно сделать бэкап.
Третье: попробовать выгрузить и загрузить базу обратно.
Flexy,
27.09.10, 13:41 Что делаю не так?
Выведите и вы так же. Выведет хоть агентов?
Flexy,
27.09.10, 12:41 Что делаю не так?
А что находится в секции "строка"?

Цитата
Склоняюсь к тому что не правильно составил запрос к Торговому Агенту.Вот в этой строке
|Менеджер=Документ.РасходнаяНакладная.Контрагент.ТорговыйАгент,Документ.При
ходнаяНакладная.Контрагент.ТорговыйАгент;

Только как правильно должно быть допереть не могу.


Попробуйте в обоих запросах клиента задать так:
|Клиент =Документ.РасходнаяНакладная.Контрагент


а менеджера так:
|Менеджер=Документ.РасходнаяНакладная.Контрагент.ТорговыйАгент


т.к. лично мне непонятно, почему отчет о продажах берётся из (включая) приходных накладных

А вообще, шо за конфа?
Flexy,
27.09.10, 10:33 Печать двух актов на одном А4
Цитата
Остался один вопрос, как уменьшить шрифт в самом акте?

В самой таблице уменьшайте
grechina,
23.09.10, 7:50 Порядок обновления
Если типовая (как узнать? нужно сравнить с типовым 266 релизом), то берете последний релиз, устанавливаете. Далее Конфигурация/Сравнение и объединение и выбираете МД файл из последнего релиза. 1С-ка подумает, после чего выдаст список изменений. Жмете окей и т.п.
awp,
22.09.10, 14:25 Помогите с отчетом ТИС
Попробуйте запрос так переделать:

...
ТекстЗапроса = "";
    ТекстЗапроса = ТекстЗапроса +
        "//{{ЗАПРОС(ТоварыЗаПериоды)        
        |ПЕРИОД С Дата1 По Дата2;
        |Фирма=Регистр.ОстаткиТоваров.Фирма;
        |Склад=Регистр.ОстаткиТоваров.Склад;
        |ФлагУчета=Регистр.ОстаткиТоваров.ФлагУчета;        
        |Товар=Регистр.ОстаткиТоваров.Товар;
        |Док=Регистр.ОстаткиТоваров.ТекущийДокумент;
        |Кол=Регистр.ОстаткиТоваров.ОстатокТовара;
        |Функция НачКол  = НачОст(Кол);
        |Функция КонКол  = КонОст(Кол);
        |Функция ПрихКол = Приход(Кол);
        |Функция РасхКол = Расход(Кол);
        |Условие (Фирма=ВыбФирма);  
        |Группировка Товар  Упорядочить По Товар.Наименование;

        |"//}}ЗАПРОС
   ;
...
Flexy,

80 страниц V  « < 72 73 74 75 76 > » 
RSS Текстовая версия Сейчас: 19.04.24, 15:16
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!