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

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


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

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

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

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


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

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

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

	КонецЕсли;


Что-то не так именно в самой процедуре ПерезаписатьНоменклатуруЗапретитьВыгрузкуНаWebSite();
Меня смущает запись в цикле
7. glek 112 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 112 12.01.22 21:46 Сейчас в теме
(8) Всё равно дичь. Либо Вы не всё показываете:
1. Если надо перезаписать, то надо установить реквизиты. А в приведенном коде они не выставляются. Поэтому и идет зацикливание.
2. Для того, чтобы реквизиты справочника изменились, надо передать доп. параметры. А здесь я этого не вижу. Вот за счет того, что данные не изменяются и идет зацикливание.
10. user1304317 12.01.22 21:48 Сейчас в теме
(9) о каких реквизитах и доп.параметрах вы имеете ввиду?
Приведите пример, чтобы Я смог Вас понять.
Если нужна доп.инфа, то я выложу.
12. glek 112 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 Сейчас в теме
Так выглядит стек вызовов.
Прикрепленные файлы:
Оставьте свое сообщение
Вопросы с вознаграждением
Вакансии
Аналитик 1С
Санкт-Петербург
зарплата до 150 000 руб.
Полный день

Руководитель отдела разработки
Москва
зарплата от 200 000 руб. до 230 000 руб.
Полный день

Программист 1С
Москва
зарплата от 150 000 руб. до 150 000 руб.
Полный день

Консультант-аналитик 1С
Москва
зарплата от 100 000 руб. до 120 000 руб.
Полный день

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству