Здравствуйте, многоуважаемые All!
1С 7.70.027 + SQL Server 2005
Конфигурация не типовая, писалась под нас.
Столкнулся с непонятной для меня проблемой. Есть у меня один довольно "тяжелый" регистр ПартииТоваров, по которому делается очень много движений. Период сохранения итогов - месяц. Т.е., если я правильно все понимаю, на 1-е число каждого месяца у меня есть итоги по регистру и все последующие итоговые значения вычисляются уже отталкиваясь от этой точки. Но при формировании отчета по этому регистру происходят странные вещи. Если ТА указывает на начало периода, то отчеты формируются практически мгновенно, за несколько секунд. Но стоит переместить ТА хотя бы на следующий день (провести документ 2-м числом, например), то отчеты по этому регистру начинают формироваться 40-50 минут , при этом, судя по тому как активно 1С начинает "кушать" оперативку (около 300Мб), складывается впечатление, что она считает итоги не с 1-го числа, а от Рождества Христова.
Никто не сталкивался с таким поведением? Как-то лечится? Весь моск себе уже высушил, перегуглил и выгуглил пол интернета - никакой толковой инфы не нашел, кроме того, что 1С работает с SQL сервером "топорно".
Please help! Я в тупике
Если не затруднит, ткните меня в хороший RTFM, как грамотно делать прямые запросы, с примерами.
Большое спасибо. Пошел штудировать
Приветствую!
Не тестировал, но вроде бы что-то похоже ...
для SQL 2000 можно использовать такую схему, используюя 1с++:
допустим, есть регистр "ОстаткиТМЦ" в резрезе ТМЦ, Партия, Кво, См
в глобальнике :
Перем РСОстатка Экспорт
Процедура ПриНачалеРаботыСистемы()
// 1С++ пошла...
Попытка
ЗагрузитьВнешнююКомпоненту("1cpp.dll");
Database=СоздатьОбъект("ODBCDatabase");
Исключение
Предупреждение("На удалось загрузить компоненту 1cpp.dll.
|Дальнейшая работа невозможна.");
СтатусВозврата(0);
КонецПопытки;
РСОстатка = СоздатьОбъект("ODBCRecordSet");
РСОстатка.УстБД1С(); // для старых версий 1с++
ТекстЗапроса = "SELECT
|QW.Партия [Партия $Справочник.Партии],
|Sum(QW.См) См,
|Sum(QW.Шт) Шт
|FROM
|(SELECT
| Рег.Партия Партия,
| Рег.СмОстаток См,
| Рег.КвоОстаток См
|FROM
| $РегистрОстатки.ОстаткиТМЦ(,, (ТМЦ = ?) AND (Партия <> $ПустойИД),(ТМЦ,Партия),(Кво,См)) Рег
|WHERE
|( Рег.СмОстаток <> 0) AND (Рег.КвоОстаток <> 0)
|) QW
|GROUP BY
|QW.Партия
|ORDER BY
|QW.Партия
|";
Попытка
РС.ДобПараметр(1,14, 9 ,0);
РС.Подготовить(ТекстЗапроса);
Исключение
Сообщить(РС.ПолучитьОписаниеОшибки());
КонецПопытки;
..........
КонецПроцедуры
ТЗ = СоздатьОбъект("ТаблицаЗначений");
РСОстатка.УстПараметр(1,ВыбТМЦ);
попытка
ТЗ = РСОстатка.ВыполнитьИнструкцию();
Исключение
Сообщить(РСОстатка.ПолучитьОписаниеОшибки());
Возврат;
КонецПопытки;
! | http://pro1c.org.ua/index.php?act=announce&id=2: 6 |
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua