бух 2.0 1c 8.2.15 SQL2008 зависает при закрытие месяца на операции( корректировка стоимости номенклатуры ) , приходится выгружать в файловый вариант и закрывать месяц ( еще помогает загрузит свежесделанную дтшку , загрузить в базу "sql" сделать тестирование и исправление , после этого месяц закроет , только 1 раз , когда следующий закрываешь опять висит , надо проделывать все сначала )
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
любопытный камент в алгоритме:
//Заполним новый массив комплектов с проверкой на наличие такой номенклатуры
//в составе обработанных комплектов. Это нужно что бы исключить зацикливание
//в случаях Ном1 -> Компл1 -> Ном1
//Заполним новый массив комплектов с проверкой на наличие такой номенклатуры
//в составе обработанных комплектов. Это нужно что бы исключить зацикливание
//в случаях Ном1 -> Компл1 -> Ном1
в общ.модуле КорректировкаСтоимости в процедуре ОцифроватьСостояния
есть определение массива
Массив = Новый Массив;
Массив.Добавить(Тип("NULL"));
который потом не используется
можно предположить, что игры разрабов с типом НУЛЛ
привели к разнице в поведении между файловой и клиент-серверной базы
есть определение массива
Массив = Новый Массив;
Массив.Добавить(Тип("NULL"));
который потом не используется
можно предположить, что игры разрабов с типом НУЛЛ
привели к разнице в поведении между файловой и клиент-серверной базы
короче, попробуй сделать так:
//Массив = Новый Массив;
//Массив.Добавить(Тип("NULL"));
//ОписаниеТиповС = Новый ОписаниеТипов(Таб.Колонки[2].ТипЗначения.Типы(), , ,);
Массив = Таб.Колонки[2].ТипЗначения.Типы();
Массив.Добавить(Тип("NULL"));
ОписаниеТиповС = Новый ОписаниеТипов(Массив, , ,);
//Массив = Новый Массив;
//Массив.Добавить(Тип("NULL"));
//ОписаниеТиповС = Новый ОписаниеТипов(Таб.Колонки[2].ТипЗначения.Типы(), , ,);
Массив = Таб.Колонки[2].ТипЗначения.Типы();
Массив.Добавить(Тип("NULL"));
ОписаниеТиповС = Новый ОписаниеТипов(Массив, , ,);
все выходные бился , зависание происходит в разных местах на разных запросах , но есть одна закономерность , если пройти отладчиком ( корректировка стоимости номенклатуры ) то операция отрабатывается . Мож с ресурсами чего , освобождать не успевает . На сервере 16 г оперативки , и стоит 1С81 и 1с 82 на разных портах .
Попробую поднять тему, потому что наступили на те же грабли.
Дано: 1с Бухгалтерия КОРП 2.0.43.12 (начало глючить на релизе 2.0.0.32)
Вариант запуска "Клиент-сервер".
1С:Предприятие 8.2 (8.2.17.143)
MS SQL 2005 SP 4 64 bit
Корректировка стоимости зависает. Происходит это всегда при выполнении одного из запросов: либо в процедуре "ПолучитьТаблицуПеремещений" (чаще всего) либо в "ДобавитьНачальныйОстатокИВнешнееПоступление" (гораздо реже).
при пошаговом выполнении в отладчике шансов, что запрос выполнится нормально гораздо больше, чем при нормальном выполнении, потому что не пошагово уже не работает вообще.
В файловом варианте не пробовал, потому что база довольно большая (14 гиг)
Делал тестирование и исправление, включающее реиндексацию, реструктуризацию, пересчет итогов (вообще все флажки взводил) . Все проходит нормально. На SQL сервере тоже выполнял очистки процедурного кэша, перестроение индексов, обновление статистик - все что рекомендуют спецы из 1с.
Пытался даже по SQL лазить профайлером в момент выполнения запроса. Правда пользоваться им особо не умею еще. Запускал со стандартной настройкой сбора
SQL:Batch Starting
SQL:Batch Comleted
RPC:Completed
Возникает такое ощущение, что скуль вообще где-то теряет этот запрос (на котором тормозится), потому что никакой реакции или записи в профайлере не возникает. Только периодически повляются запросики при выполнении регламентных заданий. А 1сина при этом висит.
В момент зависания прекратить отладку невозможно - виснет наглухо конфигуратор. Через управление 1с сервером зависшая сессия убивается нормально как правило (хотя обычно этого не происходит, если завис большой запрос).
В общем подскажите куда еще копать, плиз
Дано: 1с Бухгалтерия КОРП 2.0.43.12 (начало глючить на релизе 2.0.0.32)
Вариант запуска "Клиент-сервер".
1С:Предприятие 8.2 (8.2.17.143)
MS SQL 2005 SP 4 64 bit
Корректировка стоимости зависает. Происходит это всегда при выполнении одного из запросов: либо в процедуре "ПолучитьТаблицуПеремещений" (чаще всего) либо в "ДобавитьНачальныйОстатокИВнешнееПоступление" (гораздо реже).
при пошаговом выполнении в отладчике шансов, что запрос выполнится нормально гораздо больше, чем при нормальном выполнении, потому что не пошагово уже не работает вообще.
В файловом варианте не пробовал, потому что база довольно большая (14 гиг)
Делал тестирование и исправление, включающее реиндексацию, реструктуризацию, пересчет итогов (вообще все флажки взводил) . Все проходит нормально. На SQL сервере тоже выполнял очистки процедурного кэша, перестроение индексов, обновление статистик - все что рекомендуют спецы из 1с.
Пытался даже по SQL лазить профайлером в момент выполнения запроса. Правда пользоваться им особо не умею еще. Запускал со стандартной настройкой сбора
SQL:Batch Starting
SQL:Batch Comleted
RPC:Completed
Возникает такое ощущение, что скуль вообще где-то теряет этот запрос (на котором тормозится), потому что никакой реакции или записи в профайлере не возникает. Только периодически повляются запросики при выполнении регламентных заданий. А 1сина при этом висит.
В момент зависания прекратить отладку невозможно - виснет наглухо конфигуратор. Через управление 1с сервером зависшая сессия убивается нормально как правило (хотя обычно этого не происходит, если завис большой запрос).
В общем подскажите куда еще копать, плиз
Разложил запрос на атомы и вот что получается: вот такой простейший запрос может увести базу в нирвану и бесконечное созерцание себя самой:
Запрос.Текст =
" ВЫБРАТЬ
| ХозрасчетныйОбороты.СчетКт КАК СчетКт,
| ЕСТЬNULL(ХозрасчетныйОбороты.ПодразделениеКт, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)) КАК ПодразделениеКт,
| ВЫБОР КОГДА ХозрасчетныйОбороты.СубконтоКт1 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоКт1 КОГДА ХозрасчетныйОбороты.СубконтоКт2 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоКт2 КОГДА ХозрасчетныйОбороты.СубконтоКт3 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоКт3 ИНАЧЕ Неопределено КОНЕЦ КАК НоменклатураКт,
| ВЫБОР КОГДА ХозрасчетныйОбороты.СубконтоДт1 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоДт1 КОГДА ХозрасчетныйОбороты.СубконтоДт2 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоДт2 КОГДА ХозрасчетныйОбороты.СубконтоДт3 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоДт3 ИНАЧЕ NULL КОНЕЦ КАК НоменклатураДт,
| ХозрасчетныйОбороты.СубконтоКт1,
| ХозрасчетныйОбороты.СубконтоКт2,
| ХозрасчетныйОбороты.СубконтоКт3,
| ХозрасчетныйОбороты.СчетДт КАК СчетДт,
| ЕСТЬNULL(ХозрасчетныйОбороты.ПодразделениеДт, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)) КАК ПодразделениеДт,
| ХозрасчетныйОбороты.СубконтоДт1,
| ХозрасчетныйОбороты.СубконтоДт2,
| ХозрасчетныйОбороты.СубконтоДт3,
| ХозрасчетныйОбороты.СуммаОборот КАК Сумма,
| ХозрасчетныйОбороты.СуммаНУОборотДт КАК СуммаНУ,
| ХозрасчетныйОбороты.СуммаПРОборотДт КАК СуммаПР,
| ХозрасчетныйОбороты.СуммаВРОборотДт КАК СуммаВР,
| ХозрасчетныйОбороты.КоличествоОборотКт КАК Количество
| ПОМЕСТИТЬ Обороты
| ИЗ
| РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&ДатаНач, &ДатаКон, , СчетДт В ИЕРАРХИИ (&СписокСчетов), , СчетКт В ИЕРАРХИИ (&СписокСчетов), , Организация = &Организация) КАК ХозрасчетныйОбороты";
Запрос.Выполнить();
Показать
(31) в теории, именно эта чать запроса не должна приводить к настолько печальным последствиям, с учетом того что ты делаешь реиндексацию и обновление статистик...
но если это так, то рекомендую изменить запрос так:
т.е. избавиться от получения счетов в ИЕРАРХИИ внутри параметров виртуальной таблицы
P.S. ты когда делаешь Временную таблицу, не забывай интексировать те поля, по которым потом будет идти СОЕДИНЕНИЕ. И их порядок в индексе должен быть такой же, в каком они будут потом соединяться
но если это так, то рекомендую изменить запрос так:
"ВЫБРАТЬ
| Хозрасчетный.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ВТ_Счета
|ИЗ
| ПланСчетов.Хозрасчетный КАК Хозрасчетный
|ГДЕ
| Хозрасчетный.Ссылка В ИЕРАРХИИ(&СписокСчетов)
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка;
|//////////////////////////////////////////////////////////// ////////////////////
.....
| ПОМЕСТИТЬ Обороты
| ИЗ
| РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&ДатаНач, &ДатаКон, ,
СчетДт В (ВЫБРАТЬ ВТ_Счета.Ссылка ИЗ ВТ_Счета), , СчетКт В (ВЫБРАТЬ ВТ_Счета.Ссылка ИЗ ВТ_Счета), , ...
Показатьт.е. избавиться от получения счетов в ИЕРАРХИИ внутри параметров виртуальной таблицы
P.S. ты когда делаешь Временную таблицу, не забывай интексировать те поля, по которым потом будет идти СОЕДИНЕНИЕ. И их порядок в индексе должен быть такой же, в каком они будут потом соединяться
(32) не помогает :(
Но что самое интересное, если рядом открыть вторую сессию с те ми же правами (полными между прочим) и запустить эти же запросы в консоли запросов с тем же набором параметров, то все безупречно отрабатывает в разумное время (несколько секунд).
Вот теперь думаю... может в каких блокировках проблема ???
Но что самое интересное, если рядом открыть вторую сессию с те ми же правами (полными между прочим) и запустить эти же запросы в консоли запросов с тем же набором параметров, то все безупречно отрабатывает в разумное время (несколько секунд).
Вот теперь думаю... может в каких блокировках проблема ???
Аналогичная проблема. Зависает закрытии месяца по Корректировке стоимости списанных МПЗ (БП 1.6,Серверный вариант MS SQL Server 2005). Оставляли задание на ночь,но это не помогло. В файловом варианте проходит быстро. В режиме отладки нашел,что зависает запрос "ПолучитьТаблицуОперацийСписания",причем зависает на виде учета "Нал". На виде учета "Бух" проходит быстро. Вот,нашел форуме тему по этой проблеме,но понял,что решение не найдено? Комплектов у нас нет. База достаточно большая (dt весит 700 мб). Поделитесь опытом,нашедшие выход из этой ситуации.
Решение следующее: Общий модуль "КорректировкаСтоимости"
Внести следующие исправления (в процедуре КорректировкаСтоимости):
//ДНС-> Начало изменения 23.07.2013 16:30:24
Сообщить("Получение таблицы операций");
Предупреждение("Получение таблицы состояний", 1);
//ДНС<- Конец изменения
ПолучитьТаблицуОперацийСписания(МассивНоменклатуры, НачДата, КонДата, СтруктураДопПараметров);
//ДНС-> Начало изменения 23.07.2013 16:30:24
Сообщить("Получение таблицы операций закончено");
Предупреждение("Получение таблицы состояний закончено", 1);
Сообщить("Расчет списания по средней");
Предупреждение("Расчет списания по средней", 1);
//ДНС<- Конец изменения
РассчитатьСписаниеПоСредней(МассивНоменклатуры, НачДата, КонДата, СтруктураДопПараметров);
//ДНС-> Начало изменения
Сообщить("Расчет списания по средней завершен");
Предупреждение("Расчет списания по средней завершен", 1);
//ДНС<- Конец изменения
НаборЗаписей = СтруктураДопПараметров.Регистратор.Движения["Хозрасчетный"];
Если НаборЗаписей.Количество() > 0 Тогда
НаборЗаписей.Записать(Ложь);
КонецЕсли;
МассивКомплектов = СтруктураДопПараметров.МассивКомплектов;
МассивРассчитанныхКомплектов = Новый Массив();
Пока МассивКомплектов.Количество() > 0 Цикл
СтруктураДопПараметров.Вставить("ТаблицаТоваров", МассивКомплектов);
//ДНС-> Начало изменения 23.07.2013 16:30:24
Сообщить("Получение таблицы операций комплектов");
Предупреждение("Получение таблицы состояний комплектов", 1);
//ДНС<- Конец изменения
ПолучитьТаблицуОперацийСписания(МассивКомплектов, НачДата, КонДата, СтруктураДопПараметров);
//ДНС-> Начало изменения 23.07.2013 16:30:24
Сообщить("Получение таблицы операций комплектов закончено");
Предупреждение("Получение таблицы состояний комплектов закончено", 1);
Сообщить("Расчет списания комплектов по средней");
Предупреждение("Расчет списания комплектов по средней", 1);
//ДНС<- Конец изменения
РассчитатьСписаниеПоСредней(МассивКомплектов, НачДата, КонДата, СтруктураДопПараметров);
//ДНС-> Начало изменения
Сообщить("Расчет списания комплектов по средней завершен");
Предупреждение("Расчет списания комплектов по средней завершен", 1);
//ДНС<- Конец изменения
НаборЗаписей = СтруктураДопПараметров.Регистратор.Движения["Хозрасчетный"];
Если НаборЗаписей.Количество() > 0 Тогда
НаборЗаписей.Записать(Ложь);
КонецЕсли;
//Запомним обработанную номенклатуру
Внести следующие исправления (в процедуре КорректировкаСтоимости):
//ДНС-> Начало изменения 23.07.2013 16:30:24
Сообщить("Получение таблицы операций");
Предупреждение("Получение таблицы состояний", 1);
//ДНС<- Конец изменения
ПолучитьТаблицуОперацийСписания(МассивНоменклатуры, НачДата, КонДата, СтруктураДопПараметров);
//ДНС-> Начало изменения 23.07.2013 16:30:24
Сообщить("Получение таблицы операций закончено");
Предупреждение("Получение таблицы состояний закончено", 1);
Сообщить("Расчет списания по средней");
Предупреждение("Расчет списания по средней", 1);
//ДНС<- Конец изменения
РассчитатьСписаниеПоСредней(МассивНоменклатуры, НачДата, КонДата, СтруктураДопПараметров);
//ДНС-> Начало изменения
Сообщить("Расчет списания по средней завершен");
Предупреждение("Расчет списания по средней завершен", 1);
//ДНС<- Конец изменения
НаборЗаписей = СтруктураДопПараметров.Регистратор.Движения["Хозрасчетный"];
Если НаборЗаписей.Количество() > 0 Тогда
НаборЗаписей.Записать(Ложь);
КонецЕсли;
МассивКомплектов = СтруктураДопПараметров.МассивКомплектов;
МассивРассчитанныхКомплектов = Новый Массив();
Пока МассивКомплектов.Количество() > 0 Цикл
СтруктураДопПараметров.Вставить("ТаблицаТоваров", МассивКомплектов);
//ДНС-> Начало изменения 23.07.2013 16:30:24
Сообщить("Получение таблицы операций комплектов");
Предупреждение("Получение таблицы состояний комплектов", 1);
//ДНС<- Конец изменения
ПолучитьТаблицуОперацийСписания(МассивКомплектов, НачДата, КонДата, СтруктураДопПараметров);
//ДНС-> Начало изменения 23.07.2013 16:30:24
Сообщить("Получение таблицы операций комплектов закончено");
Предупреждение("Получение таблицы состояний комплектов закончено", 1);
Сообщить("Расчет списания комплектов по средней");
Предупреждение("Расчет списания комплектов по средней", 1);
//ДНС<- Конец изменения
РассчитатьСписаниеПоСредней(МассивКомплектов, НачДата, КонДата, СтруктураДопПараметров);
//ДНС-> Начало изменения
Сообщить("Расчет списания комплектов по средней завершен");
Предупреждение("Расчет списания комплектов по средней завершен", 1);
//ДНС<- Конец изменения
НаборЗаписей = СтруктураДопПараметров.Регистратор.Движения["Хозрасчетный"];
Если НаборЗаписей.Количество() > 0 Тогда
НаборЗаписей.Записать(Ложь);
КонецЕсли;
//Запомним обработанную номенклатуру
А если сервак совсем слабый, то можно увеличить интервал предупреждения с 1 до 5 секунд.
сделать так: Предупреждение("Расчет списания комплектов по средней завершен", 5); - для каждого предупреждения из текста изменения.
сделать так: Предупреждение("Расчет списания комплектов по средней завершен", 5); - для каждого предупреждения из текста изменения.
Иногда прибегаю на СКУЛе к следующим танцам с бубном:
1. Выгружаю базу в dt.
2. Средствами 1С-сервера произвожу зачистку таблиц (ПКМ -очистить).
3. Конфигуратор, Администрирование, Загрузить базу - лечил даже БП3.0 ооочень тяжелую и с большими багами.
1. Выгружаю базу в dt.
2. Средствами 1С-сервера произвожу зачистку таблиц (ПКМ -очистить).
3. Конфигуратор, Администрирование, Загрузить базу - лечил даже БП3.0 ооочень тяжелую и с большими багами.
У меня помогло следующие перед закрытием месяца в Management studio делаем след.
DBCC FREEPROCCACHE
DBCC FREESESSIONCACHE
DBCC FREESYSTEMCACHE ('ALL')
DBCC DROPCLEANBUFFERS
GO
Тогда отрабатывает корректно иначе очень долго считает процедуру ПолучитьТаблицуПеремещений()
DBCC FREEPROCCACHE
DBCC FREESESSIONCACHE
DBCC FREESYSTEMCACHE ('ALL')
DBCC DROPCLEANBUFFERS
GO
Тогда отрабатывает корректно иначе очень долго считает процедуру ПолучитьТаблицуПеремещений()
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот