При создании новой карточки номенклатуры возникает "переполнение стека встроенного языка на сервере"

1. user1304317 12.01.22 20:20 Сейчас в теме
Добрый вечер, всем!
Ругается на эти процедуры.
Ошибка появилась только сегодня. Вчера ошибок не было.
17 раз вызывается запись, хотя в запросе результат ТЗ всего 7 позиций.
Что не так, подскажите мудрым советом.
Спасибо!
Функция НоменклатураГНК(СТ_ЗапретитьВыгрузкуНаWebSite_ru = Ложь, ВидНоменклатуры = Неопределено)
	
	Запрос = Новый Запрос;
	
	Запрос.УстановитьПараметр("БИТ_СТ_ГруппаНомеклатурыВКаталоге", Ссылка);
	Запрос.УстановитьПараметр("СТ_ЗапретитьВыгрузкуНаWebSite_ru", СТ_ЗапретитьВыгрузкуНаWebSite_ru);
	Запрос.УстановитьПараметр("ВидНоменклатуры", ВидНоменклатуры);
		
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	СпрНоменклатура.Ссылка КАК Номенклатура
	|ИЗ
	|	Справочник.Номенклатура КАК СпрНоменклатура
	|ГДЕ
	|	СпрНоменклатура.БИТ_СТ_ГруппаНомеклатурыВКаталоге = &БИТ_СТ_ГруппаНомеклатурыВКаталоге
	|	И НЕ СпрНоменклатура.ЭтоГруппа
	|	И СпрНоменклатура.СТ_ЗапретитьВыгрузкуНаWebSite_ru = &СТ_ЗапретитьВыгрузкуНаWebSite_ru
	|	И СпрНоменклатура.ВидНоменклатуры В(&ВидНоменклатуры)
	|	И СпрНоменклатура.ПометкаУдаления = ЛОЖЬ";
	
	Таблица = Запрос.Выполнить().Выгрузить();
	Массив = Таблица.ВыгрузитьКолонку("Номенклатура");
	
	Возврат Массив;
	
КонецФункции
Показать


Процедура ПерезаписатьНоменклатуруЗапретитьВыгрузкуНаWebSite();
	
	ВидыНК = Новый Массив;
	ВидыНК.Добавить(Справочники.ВидыНоменклатуры.Продукция);
	ВидыНК.Добавить(Справочники.ВидыНоменклатуры.Товар);
	
	МассивНК_ = НоменклатураГНК(Истина, ВидыНК);
	
	Для Каждого ЭлементНК ИЗ МассивНК_ Цикл
		Попытка
			
			ТекущийОбъект = ЭлементНК.ПолучитьОбъект();
			ТекущийОбъект.Записать();
			
		Исключение
			
			ОбщегоНазначения.СообщитьОбОшибке("Не удалось перезаписать номенклатуру: " + ТекущийОбъект.Наименование + Символы.ПС + ОписаниеОшибки());

		КонецПопытки;
	КонецЦикла;
	
КонецПроцедуры
Показать
Найденные решения
12. glek 119 12.01.22 21:53 Сейчас в теме
(10)
Смотрите. У нас есть 2 справочника, у которых некоторые реквизиты не равны. Например ВыгружатьСайт_ru <> БИТ_СТ_ГруппаНомеклатурыВКаталоге.БИТ_СТ_ДляВыгрузкиНаWebSite_ru
Если мы хотим привести их в соответствие, то надо либо перед записью справочника номенклатуры без условий привести в равенство, либо в код
ТекущийОбъект = ЭлементНК.ПолучитьОбъект()

Добавить
ТекущийОбъект.ДополнительныеСвойства.Вставить("ОбновитьЧегототам", ИСТИНА)

и тогда в модуле номенклатуры перед записью дописать
Если ДополнительыеСвойства.Свойство("ОбновитьЧеготота") ТОгда 
БИТ_СТ_ВыгрузитьНаWebSite_ru  = БИТ_СТ_ГруппаНомеклатурыВКаталоге.БИТ_СТ_ДляВыгрузкиНаWebSite_ru
БИТ_СТ_ДляВыгрузкиНаWebSite_ru = БИТ_СТ_ГруппаНомеклатурыВКаталоге.БИТ_СТ_ДляВыгрузкиНаWebSite_ru
КонецЕсли


При этом у нас установятся указанные реквизиты справочника номенклатуры в соответствие с реквизитами БИТ-СТ и цикл разорвется.
user1304317; +1 Ответить
Остальные ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. glek 119 12.01.22 21:33 Сейчас в теме
(1) А откуда это счастье вызывается?
4. user1304317 12.01.22 21:34 Сейчас в теме
(3) из МО Справочника "БИТ_СТ_ГруппыНоменклатурыВКаталоге.
5. glek 119 12.01.22 21:34 Сейчас в теме
(4) Судя по стеку, при записи номенклатуры идет запись справочника БИТ_СТ....
6. user1304317 12.01.22 21:37 Сейчас в теме
(5) все верно из "БИТ_СТ_ГруппыНоменклатурыВКаталоге".

Если Не ДополнительныеСвойства.Свойство("СТ_НеОбновлятьСтатус") Тогда
		
		МассивНоменклатуры = НоменклатураГНК();
		Справочники.СТ_СтатусыНоменклатуры.ОбновитьСтатусыНоменклатуры(МассивНоменклатуры);

		ПерезаписатьНоменклатуруЗапретитьВыгрузкуНаWebSite(); 

	КонецЕсли;


Что-то не так именно в самой процедуре ПерезаписатьНоменклатуруЗапретитьВыгрузкуНаWebSite();
Меня смущает запись в цикле
7. glek 119 12.01.22 21:38 Сейчас в теме
(6) А что в модуле номенклатуры, откуда идет вызов записи БИ_СТ? Тут идет зацикливание, надо понять почему. Зачем вызывается простая запись справочника Номенклатуры?
8. user1304317 12.01.22 21:42 Сейчас в теме
(7)
ИЗ МО справ-ка Номенклатуры идет вызов
		Если ЗначениеЗаполнено(БИТ_СТ_ГруппаНомеклатурыВКаталоге) Тогда 
			
			ВыгружатьСайт_ru = БИТ_СТ_ВыгрузитьНаWebSite_ru и БИТ_СТ_ДляВыгрузкиНаWebSite_ru;
			ВыгружатьСайт_en = БИТ_СТ_ВыгрузитьНаWebSite_en и БИТ_СТ_ДляВыгрузкиНаWebSite_en;
		
			ВыгружатьСайт_de = БИТ_СТ_ВыгрузитьНаWebSite_de и БИТ_СТ_ДляВыгрузкиНаWebSite_de;
			ВыгружатьСайт_ua = БИТ_СТ_ВыгрузитьНаWebSite_ua и БИТ_СТ_ДляВыгрузкиНаWebSite_ua;
		
			
			Если (ВыгружатьСайт_en <> БИТ_СТ_ГруппаНомеклатурыВКаталоге.БИТ_СТ_ДляВыгрузкиНаWebSite_en)
			 или (ВыгружатьСайт_ru <> БИТ_СТ_ГруппаНомеклатурыВКаталоге.БИТ_СТ_ДляВыгрузкиНаWebSite_ru)
		
			 или (ВыгружатьСайт_de <> БИТ_СТ_ГруппаНомеклатурыВКаталоге.БИТ_СТ_ДляВыгрузкиНаWebSite_de)
			 или (ВыгружатьСайт_ua <> БИТ_СТ_ГруппаНомеклатурыВКаталоге.БИТ_СТ_ДляВыгрузкиНаWebSite_ua)
			
			 Тогда 
			 	БИТ_СТ_ГруппаНомеклатурыВКаталогеОбъект = БИТ_СТ_ГруппаНомеклатурыВКаталоге.ПолучитьОбъект();
				БИТ_СТ_ГруппаНомеклатурыВКаталогеОбъект.Записать();
			КонецЕсли;	
			
		КонецЕсли;	
Показать


Простая запись делается, чтобы обновить реквизиты формы справ-ка НК.
Изменения данных подвязано с регистром сведений "Статусы НК" и спра-ком "Статусы номенклатуры".
9. glek 119 12.01.22 21:46 Сейчас в теме
(8) Всё равно дичь. Либо Вы не всё показываете:
1. Если надо перезаписать, то надо установить реквизиты. А в приведенном коде они не выставляются. Поэтому и идет зацикливание.
2. Для того, чтобы реквизиты справочника изменились, надо передать доп. параметры. А здесь я этого не вижу. Вот за счет того, что данные не изменяются и идет зацикливание.
10. user1304317 12.01.22 21:48 Сейчас в теме
(9) о каких реквизитах и доп.параметрах вы имеете ввиду?
Приведите пример, чтобы Я смог Вас понять.
Если нужна доп.инфа, то я выложу.
12. glek 119 12.01.22 21:53 Сейчас в теме
(10)
Смотрите. У нас есть 2 справочника, у которых некоторые реквизиты не равны. Например ВыгружатьСайт_ru <> БИТ_СТ_ГруппаНомеклатурыВКаталоге.БИТ_СТ_ДляВыгрузкиНаWebSite_ru
Если мы хотим привести их в соответствие, то надо либо перед записью справочника номенклатуры без условий привести в равенство, либо в код
ТекущийОбъект = ЭлементНК.ПолучитьОбъект()

Добавить
ТекущийОбъект.ДополнительныеСвойства.Вставить("ОбновитьЧегототам", ИСТИНА)

и тогда в модуле номенклатуры перед записью дописать
Если ДополнительыеСвойства.Свойство("ОбновитьЧеготота") ТОгда 
БИТ_СТ_ВыгрузитьНаWebSite_ru  = БИТ_СТ_ГруппаНомеклатурыВКаталоге.БИТ_СТ_ДляВыгрузкиНаWebSite_ru
БИТ_СТ_ДляВыгрузкиНаWebSite_ru = БИТ_СТ_ГруппаНомеклатурыВКаталоге.БИТ_СТ_ДляВыгрузкиНаWebSite_ru
КонецЕсли


При этом у нас установятся указанные реквизиты справочника номенклатуры в соответствие с реквизитами БИТ-СТ и цикл разорвется.
user1304317; +1 Ответить
13. user1304317 12.01.22 21:57 Сейчас в теме
(12) оооо, спасибо. Теперь немного стал догонять)) А ведь можно добавить проверку на доп.свойства.Количество <> 0?
Еще раз спасибо, что Вам не лень было все это расписывать)
11. user1304317 12.01.22 21:53 Сейчас в теме
2. user1304317 12.01.22 20:25 Сейчас в теме
Так выглядит стек вызовов.
Прикрепленные файлы:
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот