Имя: Пароль:
1C
1С v8
БП 3.0 ошибка при закрытии месяца - Превышен максимальный расход памяти
0 Kleo
 
05.02.16
11:34
Вопрос по базе БП 3.0, клиент-серверный вариант работы.
Релиз платформы 8.3.6.2421, релиз конфигурации 3.0.42.46.
На сервере 1С установлена операционная система Win8 процессор Core i7, 16Гигабайт оперативной памяти, MS SQL Server 2014.

При выполнении операции закрытия месяца при закрытии 20-х счетов выходит ошибка при выполнении:
"Превышен максимальный расход памяти за один вызов сервера".
Если делать копию базы в файловом варианте, то выходит другая ошибка: "RunTime Error" от MicrosoftVisual C++.

Для клиент-серверного варианта пробовали в параметрах рабочего сервера менять Безопасный расход памяти за один вызов на -1. но это не помогло. Пробовали  9 223 372 036 854 775 807 - тоже не помогло.

Подскажите, пожалуйста, в чем может быть ошибка?
1 piter3
 
05.02.16
11:36
64 ставьте
2 Kleo
 
05.02.16
11:38
Долго-долго висело закрытие 20-х счетов. И вышла другая ошибка: Индекс находится за границами массива
3 Kleo
 
05.02.16
11:39
(1) где 64 ставить?
4 piter3
 
05.02.16
11:40
(3) сервер 1с.
5 piter3
 
05.02.16
11:40
(2) для проформы тии сделать
6 Cyberhawk
 
05.02.16
11:42
Попробуй "Максимальный объем памяти рабочих процессов" поставить в "-1" (лимит увеличится на величину, составляющую до 20% от установленной оперативной памяти на хостовой ОС)
7 Kleo
 
05.02.16
11:42
(4) 64-й стоит
(5) Тестирование делала полное, и в файловой копии тоже тестирование делала. все норм
8 Kleo
 
05.02.16
11:43
(6) пробовали - не помогает
9 Cyberhawk
 
05.02.16
11:44
Посмотри, сколько гигабайт (в пике) процессы rphost.exe занимают в оперативной памяти в момент перед вылетом
10 piter3
 
05.02.16
11:44
конфа где-то октябрьская,не смущает?
11 Kleo
 
05.02.16
11:52
(9) 2 гига остается еще
12 Cyberhawk
 
05.02.16
11:54
(11) Ответ неясен
13 Карупян
 
05.02.16
11:57
Какие параметры по памяти еще стоят у кластера/рабочего сервера?
14 Kleo
 
05.02.16
12:02
(13) все остальные параметры типовые
15 Kleo
 
05.02.16
12:03
сейчас ошибка "ИНДЕКС НАХОДИТСЯ ЗА ГРАНИЦАМИ МАССИВА"

что-то видимо в данных какой-то косяк...
16 Kleo
 
05.02.16
12:03
как найти этот самый массив, в котором ошибка?
17 Kleo
 
05.02.16
12:05
еще такой момент - выполнение всех регламентных и фоновых заданий в консоле сервера 1с отключила
18 Cyberhawk
 
05.02.16
12:06
Запускай проведение в отладке + галку остановки по ошибке
19 Карупян
 
05.02.16
12:06
в жр обычно подробно ошибки фиксируются
20 Kleo
 
05.02.16
12:35
Вышла вот такая ошибка:

{ОбщийМодуль.ДлительныеОперации.Модуль(118)}: Индекс находится за границами массива
        ВызватьИсключение(ТекстОшибки);


Появилась кроме кнопки ОК, еще кнопка Подробнее и там текст ошибки:
"{ОбщийМодуль.ДлительныеОперации.Модуль(118)}: Индекс находится за границами массива
        ВызватьИсключение(ТекстОшибки);
"

При расчете себестоимости...
21 Kleo
 
05.02.16
12:44
Ошибка:
{ОбщийМодуль.РасчетСебестоимости.Модуль(5130)}: Индекс находится за границами массива

т.е. это Функция НайтиВстречныйВыпускБезНастройки(Знач Контур, Затраты)

строка, на которой выходит ошибка:

Возврат РанжированныеПоВесу[0];

и что? как найти ошибку в данных?
22 Cyberhawk
 
05.02.16
12:50
Посмотри, какие виды результата ожидает получить потребитель этой функции
23 Cyberhawk
 
05.02.16
12:51
Если там допустимо, что будет пусто, то анализируй случай пустой коллекции и возвращай то, что подойдет для потребителя (неопределено или еще что-нибудь)
24 Kleo
 
05.02.16
12:54
(22) и (23) как-то путанно написано и непонятно. модуль РасчетСеьестоимости выполняется на сервере. отладчиком туда не зайти... да и что я там увижу.


что можно увидеть в тексте этой функции отлажчиком:

Функция НайтиВстречныйВыпускБезНастройки(Знач Контур, Затраты)
    
    // Важно, чтобы ребро не было единственным "сливом" из вершины,
    // иначе в этой вершине зависнет сумма
    // (а из данных первичных документов не следует, что должна зависнуть сумма)
    ПерваяОчередь = Новый Массив;
    Для Каждого Ребро Из Контур Цикл
        
        Если МожноЗафиксироватьРебро(Затраты, Ребро) Тогда
            ПерваяОчередь.Добавить(Ребро);
        КонецЕсли;
        
    КонецЦикла;
    
    Если ПерваяОчередь.Количество() > 0 Тогда
        Контур = ПерваяОчередь;
    КонецЕсли;
    
    // Стараемся выбрать то ребро, которое соответствует выпуску продукции/услуг либо отражает списание материалов в производство.
    // Это сделает результат понятнее и не нарушит пропорции распределения, которые отражаются в справках-расчетах.
    ПерваяОчередь = Новый Массив;
    Для Каждого Ребро Из Контур Цикл
        Если Ребро.Выпуск Или Ребро.ВидДвижения = Перечисления.ВидыДвиженийРасчетСебестоимости.Другое Тогда
            ПерваяОчередь.Добавить(Ребро);
        КонецЕсли;
    КонецЦикла;
    
    Если ПерваяОчередь.Количество() > 0 Тогда
        Контур = ПерваяОчередь;
    КонецЕсли;
    
    // Стараемся выбрать то ребро, у которого наименьший удельный вес.
    // Можно надеяться, что это какое-то незначительное ребро, которым можно пренебречь.
    Если Контур.Количество() = 1 Тогда
        Возврат Контур[0];
    КонецЕсли;
    
    РанжированныеПоВесу = Новый Массив;
    МинимальныйУдельныйВес = 1;
    Для Каждого Ребро Из Контур Цикл
        ОписаниеИсточника = ОписаниеВершины(Затраты, Ребро.Источник);
        Если ОписаниеИсточника.Вес = 0 Тогда
            РанжированныеПоВесу.Вставить(0, Ребро);
        Иначе
            УдельныйВес = Ребро.Вес / ОписаниеИсточника.Вес;
            Если УдельныйВес = МинимальныйУдельныйВес Тогда
                // Раз нет никаких методических предпочтений, то прибегнем к техническому, которое позволит сократить время выполнения:
                // выберем такое ребро, которое в наименьшей степени изменит граф.
                // Скорее всего, таким ребром будет то, что стоит ближе к концу контура (то есть текущее лучше, чем предыдущее с таким же весом).
                РанжированныеПоВесу.Вставить(0, Ребро);
            ИначеЕсли УдельныйВес < МинимальныйУдельныйВес Тогда
                МинимальныйУдельныйВес = Мин(МинимальныйУдельныйВес, Ребро.Вес / ОписаниеИсточника.Вес);
                РанжированныеПоВесу.Вставить(0, Ребро);
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
    Возврат РанжированныеПоВесу[0];
    
КонецФункции
25 Ma3eIIa
 
05.02.16
12:55
(24) что бы попасть на сервер. сервер должен иметь статус отладки.
26 Ma3eIIa
 
05.02.16
12:59
(25) А вообще кривые данные. добавь заглушку. возвращай 0.
как тебе советовали в (23)
27 Cyberhawk
 
05.02.16
13:00
(24) И вновь (12)
28 Kleo
 
05.02.16
13:02
(26) переведите, пожалуйста, что значит "добавь загрушку"? т.е. в этой функции написать Возврат 0; так?

(25) как это настроить? в консоле сервера 1С?
29 Kleo
 
05.02.16
13:03
(26) я понимаю, что ошибка где-то в данных. это 100%. как найти вот в чем вопрос...
30 Ma3eIIa
 
05.02.16
13:04
(28) ужас. синяя полоска.


Попытка к = РанжированныеПоВесу[0];
Исключение к = 0;
КонецПопытки
Возврат к

v8: Запуск сервера в режиме отладки

http://1c.korusconsulting.ru/articles/close-balances/warning-close/
31 Ma3eIIa
 
05.02.16
13:05
(29) у тебя параметр затраты. вот смотри на каких выдает ошибка. и уже дальше смотри контр где он заполняется и почему и т.д.
32 Kleo
 
05.02.16
13:17
(31) спасибо за помощь. буду дальше смотреть
33 los_hooliganos
 
05.02.16
13:20
(32) Реиндексация и обновление статистики не помогало?
34 los_hooliganos
 
05.02.16
13:21
Обычно заглючивает при подгонке косвенных расходов итерациями. Поставь ограничение - максимум 6 итераций.
35 Kleo
 
05.02.16
13:24
(33) нет