Формирую отчет. Он формируется примерно 5 минут.
Смотрю по утилите "Администрирование серверов", он забирает 6 ГБ оперативной памяти.
До 9-00 утра, пока других пользователей не было, отчет формировался нормально. После стали заходить другие пользователи.
Отчет доходит до 4 ГБ оперативной памяти и выходит ошибка "Недостаточно памяти для получения результата запроса к базе данных".
Это потому-что теперь общую память занимают другие пользователи?
Смотрю по утилите "Администрирование серверов", он забирает 6 ГБ оперативной памяти.
До 9-00 утра, пока других пользователей не было, отчет формировался нормально. После стали заходить другие пользователи.
Отчет доходит до 4 ГБ оперативной памяти и выходит ошибка "Недостаточно памяти для получения результата запроса к базе данных".
Это потому-что теперь общую память занимают другие пользователи?
По теме из базы знаний
- Как правильно настроить MS SQL сервер для работы с 1С
- Тестирование скорости перепроведения документов 1С 8.2 на разных связках windows и SQL серверов 1С УПП 1.3
- Как можно "положить" SQL сервер с помощью обычной консоли запросов 1С
- Настройка регламентных работ на SQL сервере + (сбор данных по работе SQL и т.д)
- Почему PostgreSQL не лучше MS SQL
Найденные решения
(6)Единственный ответ по теме. Я хотел убедиться, что другие пользователи тоже занимают память. А то, что его надо оптимизировать, так я этим и занимаюсь, возможно бы потом сделал отдельную ветку по оптимизации. Да как раз и хочу сделать порциями, просто он СКДшный, тут надо будет подумать, как это вывести, чтобы все настройки СКД оставались
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) вероятно пользователь не ставит отборы и в результате выбирается объем данных больше чем может переварить сервер
коллеги вам правильно пишут что самый не гемморойный вариант - добавить оперативки для x86-64 разрядного сервера 1С
самый правильный - выяснить у пользователя какой отчет он строит, может там слишком большой период, и наверняка по количеству строк которые глазами сразу прочитать нельзя, он это или выгружает потом, или по выведенному дополнительный поиск делает или т.п.
заголовок вопроса не корректный - речь про сервер 1С, для скуля в тексте мелькало бы "MS SQL Server"
коллеги вам правильно пишут что самый не гемморойный вариант - добавить оперативки для x86-64 разрядного сервера 1С
самый правильный - выяснить у пользователя какой отчет он строит, может там слишком большой период, и наверняка по количеству строк которые глазами сразу прочитать нельзя, он это или выгружает потом, или по выведенному дополнительный поиск делает или т.п.
заголовок вопроса не корректный - речь про сервер 1С, для скуля в тексте мелькало бы "MS SQL Server"
(5)Отчет не за период, а на дату. Некоторые отборы есть, но данных все равно много. 20 000 номенклатур перемножаем на 80 видов цен (плюс минус, не по каждой номенклатуре все 80 видо цен), получаем 1 600 000 детальных записей. но так как отчет сгруппирован по номенклатуре, а виды цен идут по колонкам, то визуально 20 000 строк (детальные записи не выводятся). Отчет стоит на рассылке, нужны все данные. Там проблема на самом деле в другом. Если в отчет добавить 10 дочерних реквизитов номенклатуры (некоторые из них доп. реквизиты) не в коде, а в пользовательском режиме (например, Номенклатура.Артикул), тогда отчет отъедал 30 гб, щас чуть меньше (я поправил запрос). А без этих полей укладывается в 3 ГБ.
(9)
Не так уж это и много. Покажите сам запрос. Вангую, что оптимизатор там просто с ума сходит.
Если отключить автозаполнение и такой запрос подсунуть
Как отработает?
получаем 1 600 000 детальных записей.
Не так уж это и много. Покажите сам запрос. Вангую, что оптимизатор там просто с ума сходит.
Если отключить автозаполнение и такой запрос подсунуть
ВЫБРАТЬ
Номенклатура.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВТ_Номенклатура
ИЗ
Справочник.Номенклатура КАК Номенклатура
{ГДЕ
Номенклатура.Ссылка.* КАК Номенклатура}
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
ЦеныНоменклатурыСрезПоследних.Валюта КАК Валюта
{ВЫБРАТЬ
Номенклатура.*,
ВидЦены.*,
Цена,
Валюта}
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
&Период,
Номенклатура В
(ВЫБРАТЬ
ВТ_Номенклатура.Ссылка
ИЗ
ВТ_Номенклатура КАК ВТ_Номенклатура)) КАК ЦеныНоменклатурыСрезПоследних
ПоказатьКак отработает?
(13) Вот запрос. Комментариями //++++ я пометил свои изменения
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
Сегменты.Номенклатура КАК Номенклатура,
Сегменты.Характеристика КАК Характеристика,
ИСТИНА КАК ИспользуетсяОтборПоСегментуНоменклатуры
ПОМЕСТИТЬ ОтборПоСегментуНоменклатуры
ИЗ
РегистрСведений.НоменклатураСегмента КАК Сегменты
{ГДЕ
Сегменты.Сегмент.* КАК СегментНоменклатуры,
Сегменты.Номенклатура.* КАК Номенклатура,
Сегменты.Характеристика.* КАК Характеристика}
ИНДЕКСИРОВАТЬ ПО
Номенклатура,
Характеристика,
ИспользуетсяОтборПоСегментуНоменклатуры
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
Ассортимент.Номенклатура КАК Номенклатура,
Ассортимент.ОбъектПланирования КАК ОбъектПланирования,
ИСТИНА КАК ИспользуетсяОтборПоАссортименту
ПОМЕСТИТЬ ОтборПоАссортименту
ИЗ
РегистрСведений.Ассортимент.СрезПоследних(&Период) КАК Ассортимент
{ГДЕ
Ассортимент.Номенклатура.* КАК Номенклатура,
Ассортимент.ОбъектПланирования.* КАК ОбъектПланирования,
Ассортимент.КоллекцияНоменклатуры.* КАК КоллекцияНоменклатуры,
Ассортимент.РазрешеныПродажи КАК РазрешеныПродажи}
ИНДЕКСИРОВАТЬ ПО
Номенклатура,
ОбъектПланирования,
ИспользуетсяОтборПоАссортименту
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
СвободныеОстаткиОстатки.Номенклатура,
СвободныеОстаткиОстатки.Характеристика,
СвободныеОстаткиОстатки.Склад,
СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличииОстаток,
СвободныеОстаткиОстатки.ВРезервеСоСкладаОстаток КАК ВРезервеОстаток,
ЕСТЬNULL(СвободныеОстаткиОстатки.ВНаличииОстаток, 0) - ЕСТЬNULL(СвободныеОстаткиОстатки.ВРезервеСоСкладаОстаток, 0) - ЕСТЬNULL(СвободныеОстаткиОстатки.ВРезервеПодЗаказОстаток, 0) КАК Остаток,
ТоварныеОграничения.СтраховоеКоличествоЗапаса КАК СтраховоеКоличествоЗапаса,
ТоварныеОграничения.МинимальноеКоличествоЗапаса КАК МинимальноеКоличествоЗапаса,
ТоварныеОграничения.МаксимальноеКоличествоЗапаса КАК МаксимальноеКоличествоЗапаса,
ТоварныеОграничения.МетодОбеспеченияПотребностей КАК МетодОбеспеченияПотребностей
ПОМЕСТИТЬ СвободныеОстатки
ИЗ
РегистрНакопления.СвободныеОстатки.Остатки(&Период,
) КАК СвободныеОстаткиОстатки
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТоварныеОграничения КАК ТоварныеОграничения
ПО &ПодстановкаТоварногоОграничения
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
ВЫБОР
КОГДА ЦеныНоменклатурыСрезПоследних.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
ТОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.ЕдиницаИзмерения
ИНАЧЕ ЦеныНоменклатурыСрезПоследних.Упаковка
КОНЕЦ КАК Упаковка,
ЦеныНоменклатурыСрезПоследних.Валюта КАК Валюта,
ЦеныНоменклатурыСрезПоследних.Номенклатура.ЦеноваяГруппа КАК ЦеноваяГруппа,
ВЫБОР
КОГДА ЦеныНоменклатурыСрезПоследних.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
ТОГДА СвободныеОстатки.Остаток
ИНАЧЕ СвободныеОстатки.Остаток / &ТекстЗапросаКоэффициентУпаковки
КОНЕЦ КАК Остаток,
ВЫБОР
КОГДА СвободныеОстатки.Остаток <= 0 ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.НетВНаличии) ИНАЧЕ
ВЫБОР КОГДА СвободныеОстатки.Остаток <= (СвободныеОстатки.МинимальноеКоличествоЗапаса) ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.УточняйтеНаличие) ИНАЧЕ
ВЫБОР
КОГДА СвободныеОстатки.Остаток < (СвободныеОстатки.СтраховоеКоличествоЗапаса + СвободныеОстатки.МинимальноеКоличествоЗапаса) ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.Мало) ИНАЧЕ
ВЫБОР
КОГДА СвободныеОстатки.Остаток < СвободныеОстатки.МаксимальноеКоличествоЗапаса ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.Достаточно) ИНАЧЕ
ВЫБОР КОГДА СвободныеОстатки.Остаток >= СвободныеОстатки.МаксимальноеКоличествоЗапаса
ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.Много) ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.Неизвестно)
КОНЕЦ
КОНЕЦ
КОНЕЦ
КОНЕЦ
КОНЕЦ КАК ОстатокТекстом,
СвободныеОстатки.Склад КАК Склад,
СвободныеОстатки.МетодОбеспеченияПотребностей КАК МетодОбеспеченияПотребностей
ПОМЕСТИТЬ Цены
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ВидЦены В (&ВидыЦен)
{((Номенклатура, Характеристика) В
(ВЫБРАТЬ
ОтборПоСегментуНоменклатуры.Номенклатура,
ОтборПоСегментуНоменклатуры.Характеристика
ИЗ
ОтборПоСегментуНоменклатуры
ГДЕ
ОтборПоСегментуНоменклатуры.ИспользуетсяОтборПоСегментуНоменклатуры = &ИспользуетсяОтборПоСегментуНоменклатуры)),
((Номенклатура) В
(ВЫБРАТЬ
ОтборПоАссортименту.Номенклатура
ИЗ
ОтборПоАссортименту
ГДЕ
ОтборПоАссортименту.ИспользуетсяОтборПоАссортименту = &ИспользуетсяОтборПоАссортименту))
}) КАК ЦеныНоменклатурыСрезПоследних
//++++
//ЛЕВОЕ СОЕДИНЕНИЕ СвободныеОстатки КАК СвободныеОстатки
//ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = СвободныеОстатки.Номенклатура
// И ЦеныНоменклатурыСрезПоследних.Характеристика = СвободныеОстатки.Характеристика
{ЛЕВОЕ СОЕДИНЕНИЕ СвободныеОстатки КАК СвободныеОстатки
ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = СвободныеОстатки.Номенклатура
И ЦеныНоменклатурыСрезПоследних.Характеристика = СвободныеОстатки.Характеристика}
//----
{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период,
{ВидЦены КАК ВидЦеныДиапазон((Номенклатура, Характеристика) В
(ВЫБРАТЬ
ОтборПоСегментуНоменклатуры.Номенклатура,
ОтборПоСегментуНоменклатуры.Характеристика
ИЗ
ОтборПоСегментуНоменклатуры
ГДЕ
ОтборПоСегментуНоменклатуры.ИспользуетсяОтборПоСегментуНоменклатуры = &ИспользуетсяОтборПоСегментуНоменклатуры)),
((Номенклатура) В
(ВЫБРАТЬ
ОтборПоАссортименту.Номенклатура
ИЗ
ОтборПоАссортименту
ГДЕ
ОтборПоАссортименту.ИспользуетсяОтборПоАссортименту = &ИспользуетсяОтборПоАссортименту))
}) КАК ЦеныНоменклатурыОтбор
ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = ЦеныНоменклатурыОтбор.Номенклатура
И ЦеныНоменклатурыСрезПоследних.Характеристика = ЦеныНоменклатурыОтбор.Характеристика
//++++
И ЦеныНоменклатурыСрезПоследних.ВидЦены = ЦеныНоменклатурыОтбор.ВидЦены
//----
}
ГДЕ
ЦеныНоменклатурыСрезПоследних.Цена > 0
{ГДЕ
ЦеныНоменклатурыОтбор.Цена КАК ЦенаОт,
ЦеныНоменклатурыОтбор.Цена КАК ЦенаДо
}
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Цены.Номенклатура,
Цены.Характеристика,
Цены.ВидЦены,
Цены.Цена,
Цены.Упаковка,
Цены.Валюта,
Цены.ЦеноваяГруппа,
Цены.Склад,
ВЫБОР КОГДА Цены.Остаток <0
ТОГДА 0
ИНАЧЕ Цены.Остаток
КОНЕЦ КАК Остаток,
ВЫБОР КОГДА (Цены.МетодОбеспеченияПотребностей = ЗНАЧЕНИЕ (Перечисление.МетодыОбеспеченияПотребностей.ЗаказПодЗаказ))
ИЛИ (Цены.МетодОбеспеченияПотребностей ЕСТЬ NULL И Цены.Остаток > 0)
ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.ПодЗаказ)
ИНАЧЕ Цены.ОстатокТекстом
КОНЕЦ КАК ОстатокТекстом
{ВЫБРАТЬ
Номенклатура.*,
Характеристика.*,
ВидЦены.*,
Цена,
Упаковка.*,
Валюта.*,
ЦеноваяГруппа.*,
Склад.*}
ИЗ
Цены КАК Цены
{ГДЕ
Цены.Номенклатура.*,
Цены.Характеристика.*,
Цены.ВидЦены.*,
Цены.Цена,
Цены.Упаковка.*,
Цены.Валюта.*,
Цены.Склад.*}
}
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
Сегменты.Номенклатура КАК Номенклатура,
Сегменты.Характеристика КАК Характеристика,
ИСТИНА КАК ИспользуетсяОтборПоСегментуНоменклатуры
ПОМЕСТИТЬ ОтборПоСегментуНоменклатуры
ИЗ
РегистрСведений.НоменклатураСегмента КАК Сегменты
{ГДЕ
Сегменты.Сегмент.* КАК СегментНоменклатуры,
Сегменты.Номенклатура.* КАК Номенклатура,
Сегменты.Характеристика.* КАК Характеристика}
ИНДЕКСИРОВАТЬ ПО
Номенклатура,
Характеристика,
ИспользуетсяОтборПоСегментуНоменклатуры
;
////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
Ассортимент.Номенклатура КАК Номенклатура,
Ассортимент.ОбъектПланирования КАК ОбъектПланирования,
ИСТИНА КАК ИспользуетсяОтборПоАссортименту
ПОМЕСТИТЬ ОтборПоАссортименту
ИЗ
РегистрСведений.Ассортимент.СрезПоследних(&Период) КАК Ассортимент
{ГДЕ
Ассортимент.Номенклатура.* КАК Номенклатура,
Ассортимент.ОбъектПланирования.* КАК ОбъектПланирования,
Ассортимент.КоллекцияНоменклатуры.* КАК КоллекцияНоменклатуры,
Ассортимент.РазрешеныПродажи КАК РазрешеныПродажи}
ИНДЕКСИРОВАТЬ ПО
Номенклатура,
ОбъектПланирования,
ИспользуетсяОтборПоАссортименту
;
////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
СвободныеОстаткиОстатки.Номенклатура,
СвободныеОстаткиОстатки.Характеристика,
СвободныеОстаткиОстатки.Склад,
СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличииОстаток,
СвободныеОстаткиОстатки.ВРезервеСоСкладаОстаток КАК ВРезервеОстаток,
ЕСТЬNULL(СвободныеОстаткиОстатки.ВНаличииОстаток, 0) - ЕСТЬNULL(СвободныеОстаткиОстатки.ВРезервеСоСкладаОстаток, 0) - ЕСТЬNULL(СвободныеОстаткиОстатки.ВРезервеПодЗаказОстаток, 0) КАК Остаток,
ТоварныеОграничения.СтраховоеКоличествоЗапаса КАК СтраховоеКоличествоЗапаса,
ТоварныеОграничения.МинимальноеКоличествоЗапаса КАК МинимальноеКоличествоЗапаса,
ТоварныеОграничения.МаксимальноеКоличествоЗапаса КАК МаксимальноеКоличествоЗапаса,
ТоварныеОграничения.МетодОбеспеченияПотребностей КАК МетодОбеспеченияПотребностей
ПОМЕСТИТЬ СвободныеОстатки
ИЗ
РегистрНакопления.СвободныеОстатки.Остатки(&Период,
) КАК СвободныеОстаткиОстатки
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТоварныеОграничения КАК ТоварныеОграничения
ПО &ПодстановкаТоварногоОграничения
;
////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
ВЫБОР
КОГДА ЦеныНоменклатурыСрезПоследних.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
ТОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.ЕдиницаИзмерения
ИНАЧЕ ЦеныНоменклатурыСрезПоследних.Упаковка
КОНЕЦ КАК Упаковка,
ЦеныНоменклатурыСрезПоследних.Валюта КАК Валюта,
ЦеныНоменклатурыСрезПоследних.Номенклатура.ЦеноваяГруппа КАК ЦеноваяГруппа,
ВЫБОР
КОГДА ЦеныНоменклатурыСрезПоследних.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
ТОГДА СвободныеОстатки.Остаток
ИНАЧЕ СвободныеОстатки.Остаток / &ТекстЗапросаКоэффициентУпаковки
КОНЕЦ КАК Остаток,
ВЫБОР
КОГДА СвободныеОстатки.Остаток <= 0 ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.НетВНаличии) ИНАЧЕ
ВЫБОР КОГДА СвободныеОстатки.Остаток <= (СвободныеОстатки.МинимальноеКоличествоЗапаса) ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.УточняйтеНаличие) ИНАЧЕ
ВЫБОР
КОГДА СвободныеОстатки.Остаток < (СвободныеОстатки.СтраховоеКоличествоЗапаса + СвободныеОстатки.МинимальноеКоличествоЗапаса) ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.Мало) ИНАЧЕ
ВЫБОР
КОГДА СвободныеОстатки.Остаток < СвободныеОстатки.МаксимальноеКоличествоЗапаса ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.Достаточно) ИНАЧЕ
ВЫБОР КОГДА СвободныеОстатки.Остаток >= СвободныеОстатки.МаксимальноеКоличествоЗапаса
ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.Много) ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.Неизвестно)
КОНЕЦ
КОНЕЦ
КОНЕЦ
КОНЕЦ
КОНЕЦ КАК ОстатокТекстом,
СвободныеОстатки.Склад КАК Склад,
СвободныеОстатки.МетодОбеспеченияПотребностей КАК МетодОбеспеченияПотребностей
ПОМЕСТИТЬ Цены
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ВидЦены В (&ВидыЦен)
{((Номенклатура, Характеристика) В
(ВЫБРАТЬ
ОтборПоСегментуНоменклатуры.Номенклатура,
ОтборПоСегментуНоменклатуры.Характеристика
ИЗ
ОтборПоСегментуНоменклатуры
ГДЕ
ОтборПоСегментуНоменклатуры.ИспользуетсяОтборПоСегментуНоменклатуры = &ИспользуетсяОтборПоСегментуНоменклатуры)),
((Номенклатура) В
(ВЫБРАТЬ
ОтборПоАссортименту.Номенклатура
ИЗ
ОтборПоАссортименту
ГДЕ
ОтборПоАссортименту.ИспользуетсяОтборПоАссортименту = &ИспользуетсяОтборПоАссортименту))
}) КАК ЦеныНоменклатурыСрезПоследних
//++++
//ЛЕВОЕ СОЕДИНЕНИЕ СвободныеОстатки КАК СвободныеОстатки
//ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = СвободныеОстатки.Номенклатура
// И ЦеныНоменклатурыСрезПоследних.Характеристика = СвободныеОстатки.Характеристика
{ЛЕВОЕ СОЕДИНЕНИЕ СвободныеОстатки КАК СвободныеОстатки
ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = СвободныеОстатки.Номенклатура
И ЦеныНоменклатурыСрезПоследних.Характеристика = СвободныеОстатки.Характеристика}
//----
{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период,
{ВидЦены КАК ВидЦеныДиапазон((Номенклатура, Характеристика) В
(ВЫБРАТЬ
ОтборПоСегментуНоменклатуры.Номенклатура,
ОтборПоСегментуНоменклатуры.Характеристика
ИЗ
ОтборПоСегментуНоменклатуры
ГДЕ
ОтборПоСегментуНоменклатуры.ИспользуетсяОтборПоСегментуНоменклатуры = &ИспользуетсяОтборПоСегментуНоменклатуры)),
((Номенклатура) В
(ВЫБРАТЬ
ОтборПоАссортименту.Номенклатура
ИЗ
ОтборПоАссортименту
ГДЕ
ОтборПоАссортименту.ИспользуетсяОтборПоАссортименту = &ИспользуетсяОтборПоАссортименту))
}) КАК ЦеныНоменклатурыОтбор
ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = ЦеныНоменклатурыОтбор.Номенклатура
И ЦеныНоменклатурыСрезПоследних.Характеристика = ЦеныНоменклатурыОтбор.Характеристика
//++++
И ЦеныНоменклатурыСрезПоследних.ВидЦены = ЦеныНоменклатурыОтбор.ВидЦены
//----
}
ГДЕ
ЦеныНоменклатурыСрезПоследних.Цена > 0
{ГДЕ
ЦеныНоменклатурыОтбор.Цена КАК ЦенаОт,
ЦеныНоменклатурыОтбор.Цена КАК ЦенаДо
}
;
////////////////////////////////////////////////////////////
ВЫБРАТЬ
Цены.Номенклатура,
Цены.Характеристика,
Цены.ВидЦены,
Цены.Цена,
Цены.Упаковка,
Цены.Валюта,
Цены.ЦеноваяГруппа,
Цены.Склад,
ВЫБОР КОГДА Цены.Остаток <0
ТОГДА 0
ИНАЧЕ Цены.Остаток
КОНЕЦ КАК Остаток,
ВЫБОР КОГДА (Цены.МетодОбеспеченияПотребностей = ЗНАЧЕНИЕ (Перечисление.МетодыОбеспеченияПотребностей.ЗаказПодЗаказ))
ИЛИ (Цены.МетодОбеспеченияПотребностей ЕСТЬ NULL И Цены.Остаток > 0)
ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.ПодЗаказ)
ИНАЧЕ Цены.ОстатокТекстом
КОНЕЦ КАК ОстатокТекстом
{ВЫБРАТЬ
Номенклатура.*,
Характеристика.*,
ВидЦены.*,
Цена,
Упаковка.*,
Валюта.*,
ЦеноваяГруппа.*,
Склад.*}
ИЗ
Цены КАК Цены
{ГДЕ
Цены.Номенклатура.*,
Цены.Характеристика.*,
Цены.ВидЦены.*,
Цены.Цена,
Цены.Упаковка.*,
Цены.Валюта.*,
Цены.Склад.*}
}
>Это потому-что теперь общую память занимают другие пользователи?
Да, возможная причина. Активные пользователи приводят к увеличению потребляемой СУБД памяти (особенно Постгрес чувствителен к количеству коннектов). В итоге процессам 1С доступно меньше. Далее сервер 1С смотрит, сколько памяти ей доступно и начинает давать отлуп всем пользователям, пытающимся выйти за 95% максимального потребления процессами rphost, чтобы не потратить память в 0 и не обрушить систему.
Оптимизируйте запросы так, чтобы данные выбирались порционно, через Выбрать(). Тогда не потребуется столько памяти, даже если объем данных будет большой.
Да, возможная причина. Активные пользователи приводят к увеличению потребляемой СУБД памяти (особенно Постгрес чувствителен к количеству коннектов). В итоге процессам 1С доступно меньше. Далее сервер 1С смотрит, сколько памяти ей доступно и начинает давать отлуп всем пользователям, пытающимся выйти за 95% максимального потребления процессами rphost, чтобы не потратить память в 0 и не обрушить систему.
Оптимизируйте запросы так, чтобы данные выбирались порционно, через Выбрать(). Тогда не потребуется столько памяти, даже если объем данных будет большой.
(6)Единственный ответ по теме. Я хотел убедиться, что другие пользователи тоже занимают память. А то, что его надо оптимизировать, так я этим и занимаюсь, возможно бы потом сделал отдельную ветку по оптимизации. Да как раз и хочу сделать порциями, просто он СКДшный, тут надо будет подумать, как это вывести, чтобы все настройки СКД оставались
Всем спасибо
Если кому-то интересно, я сделал СтнадарнтаяОбработка = Ложь, и формирую отчет пакетно, передаю по 5000 номенклатур. Из-за того что отчет СКДшный, много всяких разных проблем. По сути я формирую несколько ТабДоков и все их присоединяю, выводя шапку только 1 раз. Также в каждом разном отчете могут быть разные виды цен, поэтому колонки с видами цен идут в разном порядке. Поэтому я насильно в каждый отчет добавил запись с пустой номенклатурой по каждому виду цены. А при выводе эти пустые записи удаляю.
Отчет формируется дольше, но зато не занимает много памяти. Для 5000 номенклатур максимальная память 2.3 ГБ. Если сделать пакеты еше меньше, соответственно памяти тоже меньше будет занимать
Если кому-то интересно, я сделал СтнадарнтаяОбработка = Ложь, и формирую отчет пакетно, передаю по 5000 номенклатур. Из-за того что отчет СКДшный, много всяких разных проблем. По сути я формирую несколько ТабДоков и все их присоединяю, выводя шапку только 1 раз. Также в каждом разном отчете могут быть разные виды цен, поэтому колонки с видами цен идут в разном порядке. Поэтому я насильно в каждый отчет добавил запись с пустой номенклатурой по каждому виду цены. А при выводе эти пустые записи удаляю.
Отчет формируется дольше, но зато не занимает много памяти. Для 5000 номенклатур максимальная память 2.3 ГБ. Если сделать пакеты еше меньше, соответственно памяти тоже меньше будет занимать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот