Имя: Пароль:
1C
1C 7.7
v7: Нужен совет по связке 7.7 + mssql 2005
0 akovpashko
 
12.06.13
11:48
Понимаю, что тема изъезжена, но после дня перелопачивания информации остались вопросы.
Сервер: 2x Xeon E5335 2GHz, 8GB DDR2 (4+4), 4x SAS 10k RAID10. ОС Windows Server 2003 SP2 x86. MSSQL 2005 SP4 x86 (включен AWE, priority boost), серверу отдано 3ГБ ОЗУ, которые он успешно забирает. Платформа 7.70.027 + самописная конфигурация - в основном оперативный учет, база 15ГБ, около 20-30 одновременных пользователей. Все пользователи сидят на терминальных сессиях на этом же сервере.
На MSSQL 2005 перешли несколько дней тому, поскольку перевожу бух базы 8.2 на SQL + планируем перейти на УТ11 SQL.
Пошли жалобы на несистематические тормоза интерфейса (открыть док из журнала, из отчета, поклацать меню), при котором зависает только окошко 1С.
Сам смог словить тормоза только пару раз при открытии журнала подчиненных документов. При этом 1С крепко повисает на пару минут и явно подтормаживает пока не закрыть журнал.
Проблему с выбором подчиненных документов на sql 2005 изучил, но мучает вопрос: почему открытие журнала подчиненных вешает 1С только в редких случаях? Можно ли это победить малой кровью?
Находил инфу, что 7.7 может работать на именованом инстансе, что планирую сделать, если не разберусь, поскольку от 7.7 планирую отказываться.
1 leshikkam
 
12.06.13
11:50
Победить можно, секретным релизом.
2 akovpashko
 
12.06.13
12:22
(1) это сейчас была шутка?
Я понял в чем проблема с подчиненными, что можно перехватывать и модифицировать запрос или патчить bkend.dll в куче мест. Переписывать все вхождения ВыдбартьПодчиненныеДокументы() на использование с указанным периодом или на прямые запросы.
Не понял почему сейчас все утро подчиненные открываются нормально, а ближе ко второй половины дня у части юзеров начинаются проблемы.
3 Mikeware
 
12.06.13
12:24
4 akovpashko
 
12.06.13
12:35
(3) спасибо, что ткнули носом! Странно, что за полтора дня изучения проблемы не наткнулся на это решение...
(1) прошу прощения. По незнанию подумал, что подшучиваете надо мной.
5 Mikeware
 
12.06.13
12:40
(3) хы! полтора дня - не срок... :-)))
зы. приходил лет несколько назад кадр на собеседование...
Достижения:
- пользователи жаловались на медленную работу сиквельной базы.
-- как решили?
- установил 2005 и перевел базу на него.
-- проблем не возникло?
- возникли!
-- с чем?
- зависание журнала подчиненных.
- решили?
-- решил!
- как?
-- перевел на 2000-й...
©
йа плякалЪ...
""
6 akovpashko
 
12.06.13
14:08
(5) согласен, но два дня жалоб от пользователей и руководства стимулируют найти решение побыстрее.
Я тоже задумался вернуть 2000-й в виде именованого инстанса чисто для 7.7. Правда во-первых не считаю это решением проблемы, во-вторых у меня философия не "как-нибудь решать проблемы", а "решать проблемы оптимально".
Долго спорили с начальством, когда только пришел сюда работать, что я часто лезу переписывать то, что не просят. Закончилось, когда показал конкретные косяки предыдущей айти команды и на что они повлияли.
7 1Сергей
 
12.06.13
15:40
(6) стукач :)
8 МихаилМ
 
12.06.13
16:41
(6)
тогда откажитесь от PK на rowid


если удалите его, то с помощью
+ vk_hook подмените запросы.
9 Ковычки
 
12.06.13
16:43
сделай реальный журнал подчиненных + в конструкции выбратьподчиненные задавай всегда дату, не оставляй пустой
10 akovpashko
 
12.06.13
16:50
(7) ну как бы когда спрашивают с какого чуда менеджер имеет доступ как у руководителя продаж, отчет формируется 40 минут, и часто тырят забронированный товар с чужого склада при том, что постановкой занималось само руководство, остается только показать код и расказать правду, чтобы самому не получить по шапке.
(8) (9) спасибо, пока попробую вечером затестить секретный релиз, а там будет видно.
11 МихаилМ
 
12.06.13
16:50
+(8)
для ms sql2005 мне ,как полумера, помог отказ от  авто обновления статистики с заменой на ежечасный job.

количество каллизий уменьшилось с 5 раз в день до 2 в неделю.
12 akovpashko
 
12.06.13
17:00
(11) спасибо, буду иметь в виду.
Вчера ночью добрался до вопроса обновления статистики, но еще не изучил.
13 ЧеловекДуши
 
12.06.13
17:22
(0) Спроси завтра, скину код, как получить подчиненные документы. И как подменять нужные запросы в общем журнале :)

Но можешь не терять времени и поискать самому, гугл это знает :)
14 ЧеловекДуши
 
12.06.13
17:23
(12) На мисте уже терли сей вопрос, попробуй поискать
15 ЧеловекДуши
 
12.06.13
17:27
+ (0)Вот тут нужный тебе код.

SQL 2005 и ВыбратьПодчиненныеДокументы()
16 akovpashko
 
12.06.13
19:21
(15) Спасибо. Выше посоветовали секретный релиз. Там же вроде как поправлена проблема с журналом подчиненных.
17 МихаилМ
 
12.06.13
19:21
возможно проблему чтения решит покрывающий индекс вместо удаления индекса по rowid.
естественно записть замедрится.
18 ЧеловекДуши
 
12.06.13
19:47
(16) Да, патчить тоже придется :)
19 КонецЦикла
 
12.06.13
20:10
20 КонецЦикла
 
12.06.13
20:11
Не замечал каких-то тормозов если были нормальные запросы
Было около 100 юзверей на 2005 SQL и база побольше
21 Dolly_EV
 
13.06.13
07:13
На х.. вообще пользовать журнал подчиненных документов?
22 ЧеловекДуши
 
13.06.13
07:15
(21) Ээээ Зачем вообще заниматься программированием? :)
23 ЧеловекДуши
 
13.06.13
07:16
(0)Держи мою поделку, доработку... выбора подчиненных документов.

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Проведен: 1 - отберать по проведенным,
//            0 - не учитывать (если ""БезУдаленых = 0"", то отбераются все документы)
//БезУдаленых:  1 - отбераются не помеченные на удаления,
//                2 - отбираются только помеченные на удаления, 0 - не учитывать
//Параметры "Проведен" и "БезУдаленых", при не нулевом значении, отрабатывают совместно по принципу "ИЛИ".
//
//Порядок: 0 - Сортровать по возрастанию, 1 - Сортировать по Убыванию.
//
//ВремяДатаТайм: 0 - Отбирать документ, как Дату и время (ИД документа не учитывается)... 1 - Учитывается еще и ИД документа
Функция глВыбратьПодчиненныеДокументы(ДатаНач,ДатаКон,Док,ТипДок="",Проведен=0,БезУдаленых=0,Порядок=0,ВремяДатаТайм=1) Экспорт
   Перем Рез;
   Перем ТЗЗапрос, СкульЗапрос;
   Перем СтрокаДляЗапроса, НомСимв, КолСимв, СтрокПоиск,СтрокПолуч;
   Перем МетаНомер, ЧтоЭто;
   
   //Для локального применения
   //глRecord1С = СоздатьОбъект("ODBCRecordSet");
   //глMeta1С = СоздатьОбъект("MetaDataWork");
   
   Если ТипЗначенияСтр(глRecord1С) <> "ODBCRecordSet" Тогда
       глRecord1С = 0;
       глRecord1С = СоздатьОбъект("ODBCRecordSet");
   КонецЕсли;
   
   Если ТипЗначенияСтр(глMeta1С) <> "MetaDataWork" Тогда
       глMeta1С = 0;
       глMeta1С = СоздатьОбъект("MetaDataWork");
   КонецЕсли;
   
   Рез = 0; //Ошибка в запросе!
   Если ТипЗначения(Док) <> 12 Тогда //12 - агрегатный тип данных 'Документ';
       Возврат Рез;
   ИначеЕсли ПустоеЗначение(Док) = 1 Тогда
       Рез = СоздатьОбъект("ТаблицаЗначений");
       Рез.НоваяКолонка("Док","Документ");
       Возврат Рез;
   КонецЕсли;
   
   Если глОтладкаSQL = 1 Тогда
       глRecord1С.Отладка(1);
   КонецЕсли;
   
   СкульЗапрос="
   |SELECT
   | dbo.sp_tohex(TabJ.IDDOCDEF,4)+TabJ.IDDOC [Док $Документ]
   |FROM
   | _1SCRDOC As TabRod(NOLOCK)
   |INNER JOIN
   | _1SJOURN As TabJ(NOLOCK) ON (TabRod.CHILDID = TabJ.IDDOC)
   |WHERE
   | TabRod.MDID = 0 -- только документы, без граф отбора
   | AND TabRod.PARENTVAL = '"+глMeta1С.ЗначениеВСамуюДлиннуюСтрокуБД(Док.ТекущийДокумент())+"'
   |";
   Если ПустоеЗначение(ДатаНач)=0 Тогда
       МетаНомер = "";
       Если ТипЗначения(ДатаНач) = 12 Тогда //Документ
           Если ВремяДатаТайм = 0 Тогда
               МетаНомер = ""+глMeta1С.ПолучитьДатуВремяИдДок(ДатаНач.ПолучитьПозицию());
           Иначе
               МетаНомер = ""+глMeta1С.ПолучитьДатуВремяИдДок(ДатаНач.ПолучитьПозицию())+глMeta1С.ЗначениеВСтрокуБД(ДатаНач.ТекущийДокумент());
           КонецЕсли;
       ИначеЕсли ТипЗначения(ДатаНач) = 3 Тогда //3 - тип данных Дата;
           МетаНомер = ""+глMeta1С.ПолучитьСтрИзДаты(ДатаНач);
       ИначеЕсли ПустоеЗначение(Дата(ДатаНач)) = 0 Тогда
           МетаНомер = ""+глMeta1С.ПолучитьСтрИзДаты(Дата(ДатаНач));
       КонецЕсли;
       Если ПустоеЗначение(МетаНомер) = 0 Тогда
             СкульЗапрос=СкульЗапрос+"
             |and TabJ.DATE_TIME_IDDOC>='"+МетаНомер+"'
           |";
       КонецЕсли;
   КонецЕсли;
   Если ПустоеЗначение(ДатаКон)=0 Тогда
       МетаНомер = "";
       Если ТипЗначения(ДатаКон) = 12 Тогда //Документ
           Если ВремяДатаТайм = 0 Тогда
               МетаНомер = ""+глMeta1С.ПолучитьДатуВремяИдДок(ДатаКон.ПолучитьПозицию())+"Z";
           Иначе
               МетаНомер = ""+глMeta1С.ПолучитьДатуВремяИдДок(ДатаКон.ПолучитьПозицию())+глMeta1С.ЗначениеВСтрокуБД(ДатаКон.ТекущийДокумент());
           КонецЕсли;
       ИначеЕсли ТипЗначения(ДатаНач) = 3 Тогда //3 - тип данных Дата;
           МетаНомер = ""+глMeta1С.ПолучитьСтрИзДаты(ДатаКон)+"Z";
       ИначеЕсли ПустоеЗначение(Дата(ДатаНач)) = 0 Тогда
           МетаНомер = ""+глMeta1С.ПолучитьСтрИзДаты(Дата(ДатаНач))+"Z";
       КонецЕсли;
       Если ПустоеЗначение(МетаНомер) = 0 Тогда
             СкульЗапрос=СкульЗапрос+"
             |and TabJ.DATE_TIME_IDDOC<='"+МетаНомер+"'
           |";
       КонецЕсли;
   КонецЕсли;
   Если ПустоеЗначение(СокрЛП(ТипДок)) = 0 Тогда
       СтрокПоиск = СокрЛП(ТипДок);
       КолСимв       = СтрЧислоВхождений(СтрокПоиск,",");
       Если КолСимв <> 0 Тогда
           КолСимв = КолСимв + 1;
           СтрокаДляЗапроса = "";
           Пока КолСимв <> 0 Цикл
               
               Если КолСимв = 1 Тогда //Он один
                   СтрокПолуч = СокрЛП(СтрокПоиск);
               Иначе
                   НомСимв       = Найти(СтрокПоиск,",");
                   Если НомСимв = 0 Тогда
                       Сообщить("Ошибка в разборе команды: "+ТипДок);
                   КонецЕсли;
                   СтрокПолуч = СокрЛП(Сред(СтрокПоиск,1,НомСимв-1));
                   СтрокПоиск = СокрЛП(Сред(СтрокПоиск,НомСимв+1));
               КонецЕсли;
               
               Если ПустоеЗначение(СтрокПолуч) = 0 Тогда
                   ЧтоЭто = ЭтоЧисло(СтрокПолуч);
                   Если СуществуетТакойВидДок(ЧтоЭто) = 1 Тогда
                       МетаНомер = глMeta1С.ИДДокумента(ЧтоЭто);
                       СтрокаДляЗапроса = СтрокаДляЗапроса + ?(ПустоеЗначение(СтрокаДляЗапроса)=1,"",",") + "'"+МетаНомер+"'";
                   КонецЕсли;
               КонецЕсли;
               
               КолСимв = КолСимв - 1;
           КонецЦикла;
           Если ПустоеЗначение(СтрокаДляЗапроса) = 0 Тогда
               СкульЗапрос=СкульЗапрос+"
               |and TabJ.IDDOCDEF in ("+СтрокаДляЗапроса+")
               |";  // '"+глMeta1С.ИДДокумента(ТипДок)+"'
           КонецЕсли;
       Иначе
           МетаНомер  = "";
           СтрокПолуч = СокрЛП(ТипДок);
           
           Если ПустоеЗначение(СтрокПолуч) = 0 Тогда
               ЧтоЭто = ЭтоЧисло(СтрокПолуч);
               Если СуществуетТакойВидДок(ЧтоЭто) = 1 Тогда
                   МетаНомер = глMeta1С.ИДДокумента(ЧтоЭто);
                   СтрокаДляЗапроса = СтрокаДляЗапроса + ?(ПустоеЗначение(СтрокаДляЗапроса)=1,"",",") + "'"+МетаНомер+"'";
               КонецЕсли;
           КонецЕсли;
           
           Если ПустоеЗначение(МетаНомер) = 0 Тогда
               СкульЗапрос=СкульЗапрос+"
               |and TabJ.IDDOCDEF='"+МетаНомер+"'
               |";
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
   Если Проведен = 1 Тогда
       Если БезУдаленых = 1 Тогда
           СкульЗапрос=СкульЗапрос+"
           |and (((TabJ.CLOSED & 1) = 1) or (TabJ.IsMark = 0))
           |";
       ИначеЕсли БезУдаленых = 2 Тогда
           СкульЗапрос=СкульЗапрос+"
           |and (((TabJ.CLOSED & 1) = 1) or (TabJ.IsMark <> 0))
           |";
       Иначе
           СкульЗапрос=СкульЗапрос+"
           |and ((TabJ.CLOSED & 1) = 1)
           |";
       КонецЕсли;
   Иначе
       Если БезУдаленых = 1 Тогда
           СкульЗапрос=СкульЗапрос+"
           |and (TabJ.IsMark = 0)
           |";
       ИначеЕсли БезУдаленых = 2 Тогда
           СкульЗапрос=СкульЗапрос+"
           |and (TabJ.IsMark <> 0)
           |";
       КонецЕсли;
   КонецЕсли;
   СкульЗапрос=СкульЗапрос+"
   |ORDER BY
   |TabRod.CHILD_DATE_TIME_IDDOC "+?(Порядок=0,"ASC","DESC")+"
   |";
   
   Если глRecord1С.Подготовить(СкульЗапрос)=0 Тогда
       Сообщить("Запрос не прошел "+глRecord1С.ПолучитьОписаниеОшибки()+"
       |"+СкульЗапрос,"!");
       Возврат Рез;
   КонецЕсли;
   
   ТЗЗапрос = 0;
   ТЗЗапрос = СоздатьОбъект("ТаблицаЗначений");
   Попытка
       ЗначСпс = глRecord1С.ВыполнитьИнструкцию(,ТЗЗапрос,1);
   Исключение
       Сообщить("ВыполнитьИнструкцию: "+ОписаниеОшибки());
   КонецПопытки;
   
   Попытка
       глRecord1С.Закрыть();
   Исключение
       Сообщить("Закрыть SQL запрос: "+ОписаниеОшибки());
   КонецПопытки;
   
   Если ТипЗначенияСтр(ТЗЗапрос) <> "ТаблицаЗначений" Тогда
       Сообщить("Нет нужного параметра!","!");
   ИначеЕсли ТЗЗапрос.КоличествоКолонок() = 0 Тогда
       ТЗЗапрос.НоваяКолонка("Док","Документ");
       Сообщить("Запрос не выполнен:
       |"+СкульЗапрос,"!");
   Иначе
       Рез = ТЗЗапрос;
   КонецЕсли;
   
   Возврат Рез;
КонецФункции
24 Dolly_EV
 
13.06.13
07:18
(23) вот и я о том же... только у мну еще вариант с Классом "ПрямойЗапрос" прикручен
25 ЧеловекДуши
 
13.06.13
07:19
+(0)А вот так я заменяю запросы...

//******************************************************************************
// ПриОткрытииИЛИПереоткрытииЖурнала(Режим)
//
// Параметры:
//  Режим - Строка режима открытия ("Открытие" или "Переоткрытие") формы журнала
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  Выполняет необходимые действия при открытии журнала
//
Процедура ПриОткрытииИЛИПереоткрытииЖурнала(Режим)
   
//еще какой то код В общем Журнале, он же журнал для Подчиненных документов

   Если ТипЗначенияСтр(ДокументОснованиеЖурнала) = "Документ" Тогда // форма журнала подчиненных документов
       глVk_hook.ТекстSQL="Select JOURN.* from _1SJOURN JOURN(NOLOCK INDEX=ACDATETIME), _1SCRDOC CRDOC(NOLOCK INDEX=PARENT) where JOURN.DATE_TIME_IDDOC=CRDOC.CHILD_DATE_TIME_IDDOC and CRDOC.MDID=? and CRDOC.PARENTVAL=? and CRDOC.CHILD_DATE_TIME_IDDOC>=? and CRDOC.CHILD_DATE_TIME_IDDOC<=? order by CRDOC.MDID, CRDOC.PARENTVAL, CRDOC.CHILD_DATE_TIME_IDDOC";
       глVk_hook.НовыйSQL="Select JOURN.* from _1SJOURN JOURN(NOLOCK), _1SCRDOC CRDOC(NOLOCK) where JOURN.DATE_TIME_IDDOC=CRDOC.CHILD_DATE_TIME_IDDOC and CRDOC.MDID=? and CRDOC.PARENTVAL=? order by CRDOC.MDID, CRDOC.PARENTVAL, CRDOC.CHILD_DATE_TIME_IDDOC";
       глVk_hook.УстановитьЗаменуSQL();
   КонецЕсли;
   
   Попытка
       АктивизироватьОбъект(ТекДок);
   Исключение    
       Сообщить(ОписаниеОшибки(),"!");
   КонецПопытки;    
       
КонецПроцедуры // ПриОткрытииИЛИПереоткрытииЖурнала()
26 ЧеловекДуши
 
13.06.13
07:20
(24) А мне класс не нравится :)
Люблю сам писать :)
27 ЧеловекДуши
 
13.06.13
07:21
+(0) А вот как делаю инициализацию перехвата, один раз при старте 1С


Процедура ИнициализацияПерехватчикаЗапросовSQL()
   
   Попытка
       Если ТипЗначенияСтр(глRecord1С) <> "ODBCRecordSet" Тогда
           глRecord1С = 0;
           глRecord1С = СоздатьОбъект("ODBCRecordSet");
       КонецЕсли;
       
       Если ТипЗначенияСтр(глMeta1С) <> "MetaDataWork" Тогда
           глMeta1С = 0;
           глMeta1С = СоздатьОбъект("MetaDataWork");
       КонецЕсли;
       
       Если ТипЗначенияСтр(глVk_hook) <> "Addin.vk_Hook1C" Тогда
           глVk_hook=0;
           глVk_hook=СоздатьОбъект("Addin.vk_Hook1C"); //Addin.vk_Hook1C
           глVk_hook.ПерехватSQLPrepare();
       КонецЕсли;
       
       глVk_hook.ПерехватSQLExecDirect();
       глVk_hook.МаксимальныйSleep=1024;
       глVk_hook.СигнальныйФайл=КаталогИБ()+"romix.sig";
       
       //глVk_hook.ТекстSQL="Select JOURN.* from _1SJOURN JOURN(NOLOCK INDEX=ACDATETIME), _1SCRDOC CRDOC(NOLOCK INDEX=PARENT) where JOURN.DATE_TIME_IDDOC=CRDOC.CHILD_DATE_TIME_IDDOC and CRDOC.MDID=? and CRDOC.PARENTVAL=? and CRDOC.CHILD_DATE_TIME_IDDOC>=? and CRDOC.CHILD_DATE_TIME_IDDOC<=? order by CRDOC.MDID, CRDOC.PARENTVAL, CRDOC.CHILD_DATE_TIME_IDDOC";
       //
       //глVk_hook.НовыйSQL="Select JOURN.* from _1SJOURN JOURN(NOLOCK), _1SCRDOC CRDOC(NOLOCK) where JOURN.DATE_TIME_IDDOC=CRDOC.CHILD_DATE_TIME_IDDOC and CRDOC.MDID=? and CRDOC.PARENTVAL=? order by CRDOC.MDID, CRDOC.PARENTVAL, CRDOC.CHILD_DATE_TIME_IDDOC";
       //
       //глVk_hook.УстановитьЗаменуSQL();
   Исключение
       Сообщить("Ошибка инициализации ""vk_Hook1C"": Перехватывает SQL-запросы 1С:Предприятие, и позволяет их изменять на лету.
       |Опис: "+ОписаниеОшибки(),"!");
       Возврат;
   КонецПопытки;
   
КонецПроцедуры    // ИнициализацияПерехватчикаЗапросовSQL()
28 ЧеловекДуши
 
13.06.13
07:24
+(0) И понадобится для этого безобразия, ВК "vk_Hook1C.dll", от Ромикса

Она требует Админские права при первом запуске или её надо регать, через RegSvr32.exe

Addin.vk_Hook1C=0a729a72-531f-4a96-a3ec-b3fabdbfaec8


Качать её тут http://x-romix.narod.ru/
...Спасибо ромиксу...
29 Dolly_EV
 
13.06.13
07:25
(28) Всё, страницу в закладки))
30 Mikeware
 
13.06.13
07:39
(23)Это чо за чрезжопица?
31 Mikeware
 
13.06.13
07:45
(28) попробуй метод РегистрироватьКомпонентыВ_HKCU / RegisterAddinsInHKCU встроенного класса Система
32 ЧеловекДуши
 
13.06.13
07:49
(31) У меня так и сделано, просто автору нестал расписывать сей код :)
33 Mikeware
 
13.06.13
07:50
(32) а зачем расписывать? достаточно упомиянуть. умному достаточно, дураку не поможет что-нибудь сломать...
34 ЧеловекДуши
 
13.06.13
07:50
(30) Мне нравится, доработка примерно сего чуда в SQL 2005 и ВыбратьПодчиненныеДокументы()
35 Mikeware
 
13.06.13
07:54
(34) там очень много не по делу... Я б еще понял, если бы ты строил параметрический запрос...
//==============================
// Возвращает ТЗ подчиненных документов
Функция  глВыбратьПодчиненные(ДокОснование,ВидПодчДокумента="", НачДата="",КонДата="", флПроведенные="") Экспорт
   рс=СоздатьОбъект("ODBCRecordset");
       ТекстЗапроса="
   |SELECT
   |    distinct
   |    Жур.IDDoc [Док $Документ],
   |    Жур.IDDocDef Док_вид
   |FROM
   |    _1SJourn Жур (nolock)
   |INNER JOIN
   |    _1SCRDOC Отбор ON Отбор.ChildID = Жур.IDDoc AND
   |                      Отбор. MDID = 0 AND
   |                    Отбор.ParentVal = :ВыбОснование* ";
   Если ПустоеЗначение(НачДата)=0 Тогда
       ТекстЗапроса=ТекстЗапроса+"
   |                    AND  Отбор.Child_Date_Time_IDDoc >:НачДата ";
   КонецЕсли;
   Если ПустоеЗначение(КонДата)=0 Тогда
       ТекстЗапроса=ТекстЗапроса+"
   |                    AND  Отбор.Child_Date_Time_IDDoc < :КонДата~";
   КонецЕсли;
ТекстЗапроса=ТекстЗапроса+"
   |where  Жур.ismark=0";
   Если ПустоеЗначение(флПроведенные)=0 Тогда
       ТекстЗапроса=ТекстЗапроса+"
       |    and Жур.closed&1=:Проведенные";
   КонецЕсли;
   Если ПустоеЗначение(ВидПодчДокумента)=0 Тогда
   ТекстЗапроса=ТекстЗапроса+"
   |    and Жур.IDDocDef=$ВидДокумента."+ВидПодчДокумента;
   КонецЕсли;
   ТекстЗапроса=ТекстЗапроса+"    
   |order by Жур.iddoc
   |";
   Если ПустоеЗначение(НачДата)=0 Тогда
       рс.УстановитьТекстовыйПараметр("НачДата", НачДата);
   КонецЕсли;
   Если ПустоеЗначение(КонДата)=0 Тогда
       рс.УстановитьТекстовыйПараметр("КонДата",КонДата);
   КонецЕсли;
   рс.УстановитьТекстовыйПараметр("ВыбОснование",ДокОснование);
   Если ПустоеЗначение(флПроведенные)=0 Тогда
       рс.УстановитьТекстовыйПараметр("Проведенные",флПроведенные);
   КонецЕсли;
   результат=рс.ВыполнитьИнструкцию(текстЗапроса);
   Возврат результат;
КонецФункции // глВыбратьПодчиненные
36 ЧеловекДуши
 
13.06.13
07:56
(33) Проще сделать так....

+(0)Держи обработку по регистрации ВК, там и сами ВК...
http://yadi.sk/d/fP2FXWGj5lD6H

Но с ней придется разобраться самому :)
37 ЧеловекДуши
 
13.06.13
07:58
(35) Ну мне было важно:
- отобрать не только проведенные документы (не проведенные я дописал, мало ли)
- Отобрать только какой-то определенный вид документов, или парочку видов.

Все остальное задел на будущее, мало ли :)
38 Mikeware
 
13.06.13
08:03
(37) Ну если только "парочку видов" - и то множественный выбор вчетверо короче и в десять раз понятнее можно написать...
39 ЧеловекДуши
 
13.06.13
08:04
(38) Может быть, но уж как написал :)
40 akovpashko
 
13.06.13
13:26
(21) по поводу журнала подчиненных: у нас тут вообще не дружат с журналом регистрации. Все разборки кто чего натворил руководство разбирает подчиненными документами - уж очень много доков между собой связаны подчинением. Узнать распроводился ли документ умеют только через подчиненные - там сторно светится.
(23) я еще не "дорос" до использования 1С++. Прекрасно понимаю, что прямые запросы - это круто и быстро. С языком SQL более-менее знаком, но с особенностями T-SQL и структурой хранения данных 1С в базе не особо.
Это все чертовски интересно, когда есть время этим заниматься. Но реалии таковы, что нужно сначала навести порядок как в конфигурациях, так и в остальной инфрастуктуре (отвечаю за все ИТ, в подчинении два оболтуса: админ и вебпрог, денег на ИТ, как всегда не особо), а потом уже можно изощряться с оптимизацией.
41 ЧеловекДуши
 
13.06.13
13:28
(40) >>> я еще не "дорос" до использования 1С++

Придется расти, коль вы решили сесть на SQL 2005 :)
Без этого никак...
42 Mikeware
 
13.06.13
13:28
(40) главное, не что "круто", а что "быстро".
ну и когда понимаешь структуру хранения данных - эффективнее с ними работаешь.
43 ЧеловекДуши
 
13.06.13
13:28
+(40) Нет времени и желания, тогда вам лучше вернуться на SQL 2000
44 ЧеловекДуши
 
13.06.13
13:36
+(0)>>> MSSQL 2005 SP4 x86

Лучше всего х64, а то на х32 только зря время терять :)
45 akovpashko
 
13.06.13
13:39
(33) хорошо сказано, возьму на вооружение!
(41) когда упрутся в несносные тормоза - поставят приоритетную задачу, а сейчас, как бы это не звучало, есть задачи поважнее.
(42) в очередной раз согласен с Вами.
(43) нет только времени. Поэтому и "еще не дорос", а не "не использую и не буду".
(44) я понимаю это, но полный реинстал сервера сейчас очень проблематичен. В планах есть, возможно даже, если заведется, на Win2008R2 + SQL 2008R2. Свободными вечерами поднимаю платформу для тестирования.
46 ЧеловекДуши
 
13.06.13
13:46
(45) А на SQL 2008, думаешь будет лучше :DDDD
47 pvase
 
13.06.13
13:55
(46) Если на сервере больше 4 гиг ОЗУ тогда лучше X64 Windows и SQL.
48 akovpashko
 
13.06.13
14:08
(46) нет, не думаю. Но если уже работают одинаково, то я за SQL посвежее. В прекрасном будущем мечтаю убрать семерку с организации вообще и первые шаги к этому уже сделаны.
(47) В моем случае стоит x86 ибо оперативки сначала было 4ГБ, а еще 4 добавили недавно.
49 ЧеловекДуши
 
13.06.13
14:12
(48) Чем лучше 32-ух, если там 8Гб?
Все ровно Скуль не увидит больше 4-рех, если железо не поддерживает расширение памяти :)
50 ЧеловекДуши
 
13.06.13
14:13
(48) Просветись, неведующий.

http://www.1c.ru/news/info.jsp?id=12695
51 ЧеловекДуши
 
13.06.13
14:14
+ Все что выше SQL 2000 и младше XP SP3 считается шаманством и колдовством. И по определению самой 1С работать не должно с 1С 7.7 :)
52 akovpashko
 
13.06.13
14:36
(49) Я не говорил, что лучше. Имелось в виду, что х86 уже давно стоял на 4ГБ. Недавно добавили еще 4 и пока переустановить сервер задача не первой важности, особенно с учетом того, что память полностью утилизируем.
(50) Что ж Вы так, сразу "неведующий"? Я знал на что иду. Если  SQL 2005 и 2008 шаманство и количество плясок с бубном для обоих одинаков, то почему бы не использовать более свежий продукт?
53 akovpashko
 
13.06.13
14:42
(50) не люблю обращаться на форумы за помощью. Как правило если не удается разобраться самому, то решение не лежит на поверхности. На форумах же сначала нужно усердно всем доказывать, что ты не верблюд, чтобы добиться реальных советов. Миста пока приятное исключение, а Вы хотите его испортить :)
54 Mikeware
 
13.06.13
14:43
(51) ну, если вспоминать "православные определения"...
55 Mikeware
 
13.06.13
14:45
(53) мизда - никкое не исключение.
просто если ты _пытался_ что-то  сделать сам, то тут с бОльшей вероятностью помогут...
а если вопрос интересный - помогут обязательно.
помогать с вопросами, на которые есть ответы в СП и ЖКК - остомиздело..
56 akovpashko
 
13.06.13
15:18
(55) это и есть исключение. Как минимум для меня, за что спасибо!
По теме: вчера поставил секретный релиз, сегодня пока вроде полет нормальный.
Всем, кто отозвался спасибо. Узнал много полезного.
Ошибка? Это не ошибка, это системная функция.