У меня имеется проблема. Может кто сталкивался. Суть проблемы следующая - есть УТ 11 (Платформа 8.3) В базе занесено 1800 единиц номенклатуры и для этой номенклатуры используется 1400 характеристик (цвета, размеры).
При обмене с сайтом (обмен с сайтом модуль отсюда - http://1c.1c-bitrix.ru/ecommerce/) 1C съедает почти 4ГБ оперативки (из 6ГБ установленных) за минуту и вылетает с сообщением "Недостаточно памяти". Проследив и найдя момент, где вылетает - я завис и не знаю как решить проблему...
Итак, 1С вылетает при выполнении следующего запроса (запрос формируется в процедуре ПодготовитьДанныеДляВыгрузки в модуле РИ_ОбменССайтом):
Код
ВЫБРАТЬ
Номенклатура.Ссылка,
ХарактеристикиНоменклатуры.Ссылка,
Номенклатура.ПометкаУдаления,
Номенклатура.Родитель,
Номенклатура.ЭтоГруппа,
Номенклатура.Код,
Номенклатура.Наименование,
Номенклатура.Артикул,
Номенклатура.Производитель,
Номенклатура.Производитель.Наименование,
Номенклатура.ЦеноваяГруппа,
Номенклатура.ВидНоменклатуры,
Номенклатура.ЕдиницаИзмерения,
Номенклатура.НаборУпаковок,
Номенклатура.СтавкаНДС,
Номенклатура.ТипНоменклатуры,
Номенклатура.ФайлКартинки,
ХарактеристикиНоменклатуры.ПометкаУдаления,
ХарактеристикиНоменклатуры.Наименование
ИЗ
Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
ПО (НЕ &ИспользуетсяОтборПоСегментуНоменклатуры)
И (&ИспользоватьХарактеристики)
И (Номенклатура.ВидНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры))
И ХарактеристикиНоменклатуры.Владелец = Номенклатура.Ссылка
Если в отдельном запросе выводить только номенклатуру или только характеристики - выводится без проблем, но при Внутреннем соединении с условием - сразу вылетает.
Вопрос - как быть? наращивать память? поможет ли это? или можно программным методом как то решить вопрос?
Самый лучший вариант - перенести 1с-ку в хороший датацентр. Это удовольствие стоит в среднем 2т.р. в месяц. Либо собрать для нее полноценный сервер, но второй вариант намного дороже (от 250т.р.)
А переписать запрос как вариант - не рассматривается? Это не те объемы из-за которых должна падать 1с. Просто при таком запросе я посмотрел что происходит - к каждой номенклатуре присоединяется характеристика с владельцем по номенклатуре. Получается 1800*1400 строк. В общем, выход программный явно имеется и на это должны обратить внимание разработчики модуля обмена 1с битрикс. Жду ответа.
termos termos пишет: А переписать запрос как вариант - не рассматривается? Это не те объемы из-за которых должна падать 1с. Просто при таком запросе я посмотрел что происходит - к каждой номенклатуре присоединяется характеристика с владельцем по номенклатуре. Получается 1800*1400 строк. В общем, выход программный явно имеется и на это должны обратить внимание разработчики модуля обмена 1с битрикс. Жду ответа.
В новом модуле обмена исправлена эта ошибка. В нем можно указать по сколько товаров выгружать в каждом пакете.
Вы про пакетную выгрузку? Я пробовал дробить на пакеты, даже по 1-2 товара. Вылетает. Сам запрос выполняется до дробления видимо. Но сейчас посмотрю. Вполне возможно внесли изменения в данный запрос. Спасибо за подсказку обновиться, хотя мой модуль относительно недавно был установлен. Где-то месяц-полтора назад.
termos termos пишет: Вы про пакетную выгрузку? Я пробовал дробить на пакеты, даже по 1-2 товара. Вылетает. Сам запрос выполняется до дробления видимо. Но сейчас посмотрю. Вполне возможно внесли изменения в данный запрос. Спасибо за подсказку обновиться, хотя мой модуль относительно недавно был установлен. Где-то месяц-полтора назад.
В новом модуле обмена все реализовано по другому. Если в текущем - сначала получаем все данные из одного запроса, а потом по пакетам, то в новом формируется краткий запрос по данным(только ссылки на товары(не характеристикам), заказы, контрагентов), которые записываются в регистр, разбиваясь на пакеты, а потом для каждого пакета формируется полный запрос по всем данным. Новый модуль вообще кардинально отличается от текущего, из за чего он, пока еще, в альфе версии, но скоро будет в бете..
У меня имеется проблема. Может кто сталкивался. Суть проблемы следующая - есть УТ 11 (Платформа 8.3) В базе занесено 1800 единиц номенклатуры и для этой номенклатуры используется 1400 характеристик (цвета, размеры).
При обмене с сайтом (обмен с сайтом модуль отсюда - http://1c.1c-bitrix.ru/ecommerce/ ) 1C съедает почти 4ГБ оперативки (из 6ГБ установленных) за минуту и вылетает с сообщением "Недостаточно памяти". Проследив и найдя момент, где вылетает - я завис и не знаю как решить проблему...
Сталкивались с данной проблемой. Криво сделан запрос в типовом 1С (связь между таблицами). В итоге запрос съедает память в геометрической прогрессии. Ситуация еще хуже, если используются пустые свойства номенлатуры.
Никакой переход на более мощный сервер не поможет- запрос все равно съест всю память. Поэтому нужно код запроса в 1С нужно переделать. А если есть возможность, прикрутить последний релиз аддона битрикса как пишет Александр Денисюк
Александр Новиков, благодарю за ответ. Сейчас попробую установить последнюю версию аддона битрикса. Надеюсь там исправлена эта ошибка. А сам запрос находится в макете РИ_СхемаВыгрузкиТоваров в схеме компоновки данных в плане обмена ОбменУправлениеТорговлейСайт.
termos termos пишет: Александр Новиков , благодарю за ответ. Сейчас попробую установить последнюю версию аддона битрикса. Надеюсь там исправлена эта ошибка. А сам запрос находится в макете РИ_СхемаВыгрузкиТоваров в схеме компоновки данных в плане обмена ОбменУправлениеТорговлейСайт.
Для того, чтобы исключить влияние хостинга, рекомендую выгружать "в файл". Если это сработает и на память ругаться не будет, уже после этого делайте выгрузку на сайт.
Итак, начал тестить альфу 4.0.0.4 правда на конфигурации УТ 11.1.4.10.
Посыпались ошибки (но не по причине разниц конфигураций). Ошибка вышла следующая:
{ОбщийМодуль.Б_ОбменССайтомСервер.Модуль(5613)}: Ошибка при вызове метода контекста (Выполнить) запрос.Выполнить(); по причине: {(484, 49)}: Поле не найдено "Остатки.ВРезервеОстаток" ТОГДА Остатки.ВНаличииОстаток - Остатки.<<?>>ВРезервеОстаток
При изучении понял, что проблема происходит при выполнении строки в процедуре ВыгрузитьИнформациюОТоварах в модуле Б_ОбменССайтомСервер:
Индекс Значение элемента Тип элемента Объект Пакет ТипОбъекта ПользовательскийСправочник Статус 0 СтрокаТаблицыЗначений СтрокаТаблицыЗначений Скидка на легкие куртки 0 "Соглашение" "" 0 1 СтрокаТаблицыЗначений СтрокаТаблицыЗначений Типовые правила продаж 0 "Соглашение" "" 0 2 СтрокаТаблицыЗначений СтрокаТаблицыЗначений шт 0 "ЕдиницаИзмерения" "" 0 3 СтрокаТаблицыЗначений СтрокаТаблицыЗначений Основной 0 "Склад" "" 0 4 СтрокаТаблицыЗначений СтрокаТаблицыЗначений Колготки детские 1 "Номенклатура" "" 0 5 СтрокаТаблицыЗначений СтрокаТаблицыЗначений Платье с кармашками Колибри 1 "Номенклатура" "" 0 6 СтрокаТаблицыЗначений СтрокаТаблицыЗначений Платье праздничное для девочек 1 "Номенклатура" "" 0
Это лишь первые несколько строк, но суть понятна. При выполнении строки на которой происходит ошибка не передается СписокТоваров - он пустой, т.к. ни одной номенклатуры не попадает в Пакет 0, соответственно при выполнении запроса в процедуре СформироватьВременныеТаблицыПоИнформацииОТоварахПакета просиходит ошибка.
termos termos пишет: Посыпались ошибки (но не по причине разниц конфигураций). Ошибка вышла следующая:
{ОбщийМодуль.Б_ОбменССайтомСервер.Модуль(5613)}: Ошибка при вызове метода контекста (Выполнить) запрос.Выполнить(); по причине: {(484, 49)}: Поле не найдено "Остатки.ВРезервеОстаток" ТОГДА Остатки.ВНаличииОстаток - Остатки.<<?>>ВРезервеОстаток
Эта ошибка как раз по причине разниц конфигураций. Ут 11.1.2 и 11.1.4
Поменяйте в запросе ТОГДА Остатки.ВНаличииОстаток - Остатки.<<?>>ВРезервеОстаток на ТОГДА Остатки.ВНаличииОстаток - Остатки.ВРезервеСоСкладаОстаток - Остатки.ВРезервеПодЗаказОстаток