Условие если внутри цикла

1. usershmuser 06.07.23 16:30 Сейчас в теме
Всем привет.
Имеется код
&НаСервере
Процедура ПодборРецептаНаСервере()
	
	Для каждого СтрокаДокумента из Объект.Материалы Цикл
		СтрокаДокумента.Вес = 1;
	КонецЦикла;        
	
	//Объект.Рецепт = 0;
	
	Для каждого СтрокаДокумента из Объект.Материалы Цикл
		Пока СтрокаДокумента.Вес < 100 Цикл
			СтрокаДокумента.Вес = СтрокаДокумента.Вес + 1;
			РасчитатьНаСервере();
			Если Объект.Рецепт = 1 Тогда
				Прервать;
			КонецЕсли;
		КонецЦикла; 
		Если Объект.Рецепт = 1 Тогда
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	
КонецПроцедуры
Показать


Циклом прохожу по каждой строке в табличной части и внутри этого цикла циклично изменяю показатель (Вес) и просчитываю результат процедурой РасчитатьНаСервере, в ней при правильном подсчете устанавливается в поле Рецепт единичка, далее если в поле Рецепт 1, то цикл должен остановится, а он не останавливается.
Такое ощущение, что из цикла невиден Объект.Рецепт.
Как мне останавливать цикл по такому условию?
По теме из базы знаний
Найденные решения
17. usershmuser 07.07.23 13:36 Сейчас в теме
Вопрос мой решился добавлением расчета переменной Объект.Рецепт в цикл (тот, что на сервере), отрабатывает гораздо быстрее, чем на клиенте.
Мой "ГовноКод" работает!
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. soft_wind 06.07.23 16:58 Сейчас в теме
а что за реквизит Объект.Рецепт? Его Тип?

а почему нельзя не подбирать вес каждой строки "+1" а сразу задать нужный (по Рецепту?)
сначала Вес = 1, а затем до Вес = 100 в каждой строчке делаете, а разные веса в материалах ни как не должны учитываться?

как-то смысл этого действия ускользает!
3. usershmuser 06.07.23 17:16 Сейчас в теме
(2)Объект.Рецепт - число (на форме - надпись), просто задана как переменная.
Смысл в том, что бы найти нужный рецепт.
У нас есть то, что должно получиться (номенклатура с 20 характеристиками) и есть номенклатуры, которые при "смешивании" приближаются к искомым характеристикам (у них так же по 20 характеристик).
Аналитику попадания в нужную номенклатуру я сделал (еще в exel).
Рецепта как такового нет, его и нужно найти путем перебора пропорций (пропорции кратно 1% пока что достаточно).
Над методикой перебора сейчас работаю, это не конечный код. На данном этапе запнулся именно об остановку цикла (точнее об несрабатывании)
4. user856012 13 06.07.23 17:56 Сейчас в теме
(3)
Объект.Рецепт - число (на форме - надпись), просто задана как переменная.
Ну, и с какого перепугу элемент формы должен быть виден на сервере?
5. usershmuser 07.07.23 08:31 Сейчас в теме
(4)Спасибо за наводку, перекинул процедуру на клиента, начало выполняться, но теперь происходит раз в 20 медленнее...
7. user856012 13 07.07.23 10:21 Сейчас в теме
(6) Потрудитесь прочитать всё сообщение, включая цитату автора.

А потом - его следующее сообщение:
начало выполняться

Может быть, он путано объяснил суть проблемы, но мой "перепуг" ему помог, а ваш - только газифицировал лужу форум. :-P
8. Stref75 07.07.23 10:37 Сейчас в теме
ну тогда потрудитесь объяснить, почему Объект.Материалы виден на сервере - ведь цикл то работает, а Объект.Рецепт вдруг не виден на сервере? Ведь по логике мы обращаемся к элементу формы Материалы.
9. user856012 13 07.07.23 10:55 Сейчас в теме
(8)
ну тогда потрудитесь объяснить
А я должен это делать? Если нет - пункт назначения вы знаете, счастливого пути! :-P
10. Sashares 35 07.07.23 11:10 Сейчас в теме
(7)Если ТС помог ваш совет, я даже представить боюсь, что за говнокод там, потому что Stref75 прав.
Исправление контекста никак не должно повлиять на это.
11. user856012 13 07.07.23 11:17 Сейчас в теме
(10)
я даже представить боюсь, что за говнокод там
А вы не пытайтесь представить, лучше попытайтесь прочитать (1), код - там.
потому что Stref75 прав
В чем именно он прав? В том, что требует от меня объяснить чужой "говнокод"?

Или в том, что не допускает существования табличной части "Материалы"?
12. Sashares 35 07.07.23 11:27 Сейчас в теме
(11) Если Объект это основной реквизит формы, допустим, документ, то Объект.Рецепт - это обращение к реквизиту документа.
Не важно где идет обращение к реквизиту документа - на клиенте или на сервере, если это контекстный вызов, реквизит документа будет виден.
Поэтому вы посоветовали какой-то бред, будем честными.
И если этот бред помог ТС, то либо ТС что-то еще исправил, либо у ТС какой-то говнокод.

А вы не пытайтесь представить, лучше попытайтесь прочитать (1), код - там.

Если вы там видите весь код, ну рад за вас.
Я вижу только 1 процедуру.
14. user856012 13 07.07.23 12:05 Сейчас в теме
(12)
вы посоветовали какой-то бред
ОК, согласен на такой вариант... тем более, в пятницу. ;-)
16. usershmuser 07.07.23 13:00 Сейчас в теме
(12) обращаясь с клиента, в момент работы кода (цикла), Объект.Рецепт виден, остановка срабатывает, с сервера не срабатывает
18. Sashares 35 07.07.23 14:03 Сейчас в теме
(16)Если у вас не срабатывает точка останова на сервере, возможно на сервере не подключена отладка.
19. usershmuser 07.07.23 14:11 Сейчас в теме
(18) Не точка останова, а "Прервать", остановка цикла.
6. Stref75 07.07.23 10:14 Сейчас в теме
(4) Ну, и с какого перепугу обращение Объект.Рецепт расценивается как обращение к элементу формы?
13. soft_wind 07.07.23 11:28 Сейчас в теме
а что вот в этой процедуре?
РасчитатьНаСервере();


вы ни когда не получите рецепт!

так как рецепт скорее всего состоит из Материалов таких/разных процентов: 20,70,15 (это пример)
а у вас только такие комбинации будут
100(1до100,1,1
100,100(1до100,1
100, 100,100
15. usershmuser 07.07.23 12:50 Сейчас в теме
(13)На данный момент комбинации прорабатываю и это не конечный код
А в процедуре аналитика, которая просчитывает, что получается при указаном весе материалов и если удача, то в Объект.Рецепт записывается единица. При каждом проходе цикла пересчитывается аналитика и в случае удачи там же процедурой устанавливается единица, которую из серверной процедуры, во время выполнения кода, не видно!
17. usershmuser 07.07.23 13:36 Сейчас в теме
Вопрос мой решился добавлением расчета переменной Объект.Рецепт в цикл (тот, что на сервере), отрабатывает гораздо быстрее, чем на клиенте.
Мой "ГовноКод" работает!
20. Stref75 07.07.23 14:17 Сейчас в теме
(17)
Вопрос мой решился добавлением расчета переменной Объект.Рецепт

да почему ж вы ее "переменной" то называете? Насколько я понимаю это у вас реквизит объекта. Показывайте уже код с изменениями.

доля здравого смысла в постах user856012 была - если вы оперируете данными, которые есть на клиенте, нет надобности лезть на сервер и там что-то считать в контексте формы. Достаточно было оставить серверную процедуру РассчитатьНаСервере(). Но я бы её сделал функцией без контекста, передал бы необходимые параметры для расчета; напряг сервер, рассчитал и вернул обратно какие-то данные и далее с ними на клиенте работал. Хотя, могут быть исключения о которых кроме ТС мы не знаем и собственно из-за которых и начали тут копья ломать...
22. usershmuser 07.07.23 15:27 Сейчас в теме
(20)
&НаСервере
Процедура РасчитатьНаСервере ()
	
	Объект.ИтоговыйВес = 0;
	ОбщаяСебестоимость = 0;
	Объект.ВесЛома = 0;
	
	Объект.FeFin = 0;
	Объект.SiFin = 0;
	Объект.MnFin = 0;
	Объект.MgFin = 0;
	Объект.CrFin = 0;
	Объект.NiFin = 0;
	Объект.CuFin = 0;
	Объект.GaFin = 0;
	Объект.PbFin = 0;
	Объект.BeFin = 0;
	Объект.CaFin = 0;
	Объект.CdFin = 0;
	Объект.SbFin = 0;
	Объект.SnFin = 0;
	Объект.SrFin = 0;
	Объект.TiFin = 0;
	Объект.VFin  = 0;
	Объект.ZnFin = 0;
	Объект.ZrFin = 0;
	Объект.AlFin = 0;
	
	//Вычисляем вес жидкости с учетом мет.выхода и себестоимость
	Для каждого СтрокаДокумента из Объект.Материалы Цикл
		Объект.ИтоговыйВес = Объект.ИтоговыйВес + (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход / 100));
		Объект.ВесЛома = Объект.ВесЛома + СтрокаДокумента.Вес;
		ОбщаяСебестоимость = ОбщаяСебестоимость + (СтрокаДокумента.Вес * СтрокаДокумента.Лом.Цена);
	КонецЦикла;  
	
	Объект.Себестоимость = ОбщаяСебестоимость / Объект.ИтоговыйВес;
	
	Для каждого СтрокаДокумента из Объект.Материалы Цикл
		СтрокаДокумента.Доля = (СтрокаДокумента.Вес / Объект.ВесЛома) * 100;
	КонецЦикла;
	
	//Вычисляем хим.состав
	Для каждого СтрокаДокумента из Объект.Материалы Цикл   
		
		Объект.FeFin = Объект.FeFin + (((СтрокаДокумента.Лом.Fe / 100) * (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход))) / Объект.ИтоговыйВес);
		Объект.SiFin = Объект.SiFin + (((СтрокаДокумента.Лом.Si / 100) * (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход))) / Объект.ИтоговыйВес);
		Объект.MnFin = Объект.MnFin + (((СтрокаДокумента.Лом.Mn / 100) * (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход))) / Объект.ИтоговыйВес);
		Объект.MgFin = Объект.MgFin + (((СтрокаДокумента.Лом.Mg / 100) * (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход))) / Объект.ИтоговыйВес);
		Объект.CrFin = Объект.CrFin + (((СтрокаДокумента.Лом.Cr / 100) * (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход))) / Объект.ИтоговыйВес);
		Объект.NiFin = Объект.NiFin + (((СтрокаДокумента.Лом.Ni / 100) * (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход))) / Объект.ИтоговыйВес);
		Объект.CuFin = Объект.CuFin + (((СтрокаДокумента.Лом.Cu / 100) * (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход))) / Объект.ИтоговыйВес);
		Объект.GaFin = Объект.GaFin + (((СтрокаДокумента.Лом.Ga / 100) * (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход))) / Объект.ИтоговыйВес);
		Объект.PbFin = Объект.PbFin + (((СтрокаДокумента.Лом.Pb / 100) * (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход))) / Объект.ИтоговыйВес);
		Объект.BeFin = Объект.BeFin + (((СтрокаДокумента.Лом.Be / 100) * (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход))) / Объект.ИтоговыйВес);
		Объект.CaFin = Объект.CaFin + (((СтрокаДокумента.Лом.Ca / 100) * (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход))) / Объект.ИтоговыйВес);
		Объект.CdFin = Объект.CdFin + (((СтрокаДокумента.Лом.Cd / 100) * (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход))) / Объект.ИтоговыйВес);
		Объект.SbFin = Объект.SbFin + (((СтрокаДокумента.Лом.Sb / 100) * (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход))) / Объект.ИтоговыйВес);
		Объект.SnFin = Объект.SnFin + (((СтрокаДокумента.Лом.Sn / 100) * (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход))) / Объект.ИтоговыйВес);
		Объект.SrFin = Объект.SrFin + (((СтрокаДокумента.Лом.Sr / 100) * (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход))) / Объект.ИтоговыйВес);
		Объект.TiFin = Объект.TiFin + (((СтрокаДокумента.Лом.Ti / 100) * (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход))) / Объект.ИтоговыйВес);
		Объект.VFin  = Объект.VFin  + (((СтрокаДокумента.Лом.V  / 100) * (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход))) / Объект.ИтоговыйВес);
		Объект.ZnFin = Объект.ZnFin + (((СтрокаДокумента.Лом.Zn / 100) * (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход))) / Объект.ИтоговыйВес);
		Объект.ZrFin = Объект.ZrFin + (((СтрокаДокумента.Лом.Zr / 100) * (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход))) / Объект.ИтоговыйВес);
		Объект.AlFin = Объект.AlFin + (((СтрокаДокумента.Лом.Al / 100) * (СтрокаДокумента.Вес * (СтрокаДокумента.Лом.МетВыход))) / Объект.ИтоговыйВес);
		
	КонецЦикла;
	
	Красный = Новый Цвет (255,0,0);
	Зеленый = Новый Цвет (0,255,0);
	Никакой = Новый Цвет ();
	
	//Fe
	Если Объект.Сплав.FeMax >= Объект.FeFin и Объект.Сплав.FeMin <= Объект.FeFin ИЛИ Объект.Сплав.FeMax = 0 тогда
		Элементы.FeFin.ЦветФона = Зеленый;
		Элементы.СплавFeMax.ЦветФона = Зеленый;
		Элементы.СплавFeMin.ЦветФона = Зеленый;
	Иначе
		Элементы.FeFin.ЦветФона = Красный;
		Элементы.СплавFeMax.ЦветФона = Красный;
		Элементы.СплавFeMin.ЦветФона = Красный;
	КонецЕсли;       
	//Si
	Если Объект.Сплав.SiMax >= Объект.SiFin и Объект.Сплав.SiMin <= Объект.SiFin ИЛИ Объект.Сплав.SiMax = 0 тогда
		Элементы.SiFin.ЦветФона = Зеленый;
		Элементы.СплавSiMax.ЦветФона = Зеленый;
		Элементы.СплавSiMin.ЦветФона = Зеленый;
	Иначе
		Элементы.SiFin.ЦветФона = Красный; 
		Элементы.СплавSiMax.ЦветФона = Красный;
		Элементы.СплавSiMin.ЦветФона = Красный;
	КонецЕсли; 
    //Mn
	Если Объект.Сплав.MnMax >= Объект.MnFin и Объект.Сплав.MnMin <= Объект.MnFin ИЛИ Объект.Сплав.MnMax = 0 тогда
		Элементы.MnFin.ЦветФона = Зеленый;
		Элементы.СплавMnMax.ЦветФона = Зеленый;
		Элементы.СплавMnMin.ЦветФона = Зеленый;
	Иначе
		Элементы.MnFin.ЦветФона = Красный;
		Элементы.СплавMnMax.ЦветФона = Красный;
		Элементы.СплавMnMin.ЦветФона = Красный;
	КонецЕсли; 
    //Mg
	Если Объект.Сплав.MgMax >= Объект.MgFin и Объект.Сплав.MgMin <= Объект.MgFin ИЛИ Объект.Сплав.MgMax = 0 тогда
		Элементы.MgFin.ЦветФона = Зеленый;
		Элементы.СплавMgMax.ЦветФона = Зеленый;
		Элементы.СплавMgMin.ЦветФона = Зеленый;
	Иначе
		Элементы.MgFin.ЦветФона = Красный;
		Элементы.СплавMgMax.ЦветФона = Красный;
		Элементы.СплавMgMin.ЦветФона = Красный;
	КонецЕсли; 
    //Cr
	Если Объект.Сплав.CrMax >= Объект.CrFin и Объект.Сплав.CrMin <= Объект.CrFin ИЛИ Объект.Сплав.CrMax = 0 тогда
		Элементы.CrFin.ЦветФона = Зеленый;
		Элементы.СплавCrMax.ЦветФона = Зеленый;
		Элементы.СплавCrMin.ЦветФона = Зеленый;
	Иначе
		Элементы.CrFin.ЦветФона = Красный;
		Элементы.СплавCrMax.ЦветФона = Красный;
		Элементы.СплавCrMin.ЦветФона = Красный;
	КонецЕсли; 
    //Ni
	Если Объект.Сплав.NiMax >= Объект.NiFin и Объект.Сплав.NiMin <= Объект.NiFin ИЛИ Объект.Сплав.NiMax = 0 тогда
		Элементы.NiFin.ЦветФона = Зеленый;
		Элементы.СплавNiMax.ЦветФона = Зеленый;
		Элементы.СплавNiMin.ЦветФона = Зеленый;
	Иначе
		Элементы.NiFin.ЦветФона = Красный;
		Элементы.СплавNiMax.ЦветФона = Красный;
		Элементы.СплавNiMin.ЦветФона = Красный;
	КонецЕсли; 
    //Cu
	Если Объект.Сплав.CuMax >= Объект.CuFin и Объект.Сплав.CuMin <= Объект.CuFin ИЛИ Объект.Сплав.CuMax = 0 тогда
		Элементы.CuFin.ЦветФона = Зеленый;
		Элементы.СплавCuMax.ЦветФона = Зеленый;
		Элементы.СплавCuMin.ЦветФона = Зеленый;
	Иначе
		Элементы.CuFin.ЦветФона = Красный;
		Элементы.СплавCuMax.ЦветФона = Красный;
		Элементы.СплавCuMin.ЦветФона = Красный;

	КонецЕсли; 
    //Ga
	Если Объект.Сплав.GaMax >= Объект.GaFin и Объект.Сплав.GaMin <= Объект.GaFin ИЛИ Объект.Сплав.GaMax = 0 тогда
		Элементы.GaFin.ЦветФона = Зеленый;
		Элементы.СплавGaMax.ЦветФона = Зеленый;
		Элементы.СплавGaMin.ЦветФона = Зеленый;
	Иначе
		Элементы.GaFin.ЦветФона = Красный;  
		Элементы.СплавGaMax.ЦветФона = Красный;
		Элементы.СплавGaMin.ЦветФона = Красный;
	КонецЕсли; 
    //Pb
	Если Объект.Сплав.PbMax >= Объект.PbFin и Объект.Сплав.PbMin <= Объект.PbFin ИЛИ Объект.Сплав.PbMax = 0 тогда
		Элементы.PbFin.ЦветФона = Зеленый;
		Элементы.СплавPbMax.ЦветФона = Зеленый;
		Элементы.СплавPbMin.ЦветФона = Зеленый;
	Иначе
		Элементы.PbFin.ЦветФона = Красный;
		Элементы.СплавPbMax.ЦветФона = Красный;
		Элементы.СплавPbMin.ЦветФона = Красный;
	КонецЕсли; 
    //Be
	Если Объект.Сплав.BeMax >= Объект.BeFin и Объект.Сплав.BeMin <= Объект.BeFin ИЛИ Объект.Сплав.BeMax = 0 тогда
		Элементы.BeFin.ЦветФона = Зеленый;
		Элементы.СплавBeMax.ЦветФона = Зеленый;
		Элементы.СплавBeMin.ЦветФона = Зеленый;
	Иначе
		Элементы.BeFin.ЦветФона = Красный; 
		Элементы.СплавBeMax.ЦветФона = Красный;
		Элементы.СплавBeMin.ЦветФона = Красный;
	КонецЕсли; 
    //Ca
	Если Объект.Сплав.CaMax >= Объект.CaFin и Объект.Сплав.CaMin <= Объект.CaFin ИЛИ Объект.Сплав.CaMax = 0 тогда
		Элементы.CaFin.ЦветФона = Зеленый;
		Элементы.СплавCaMax.ЦветФона = Зеленый;
		Элементы.СплавCaMin.ЦветФона = Зеленый;
	Иначе
		Элементы.CaFin.ЦветФона = Красный; 
		Элементы.СплавCaMax.ЦветФона = Красный;
		Элементы.СплавCaMin.ЦветФона = Красный;

	КонецЕсли; 
    //Cd
	Если Объект.Сплав.CdMax >= Объект.CdFin и Объект.Сплав.CdMin <= Объект.CdFin ИЛИ Объект.Сплав.CdMax = 0 тогда
		Элементы.CdFin.ЦветФона = Зеленый;
		Элементы.СплавCdMax.ЦветФона = Зеленый;
		Элементы.СплавCdMin.ЦветФона = Зеленый;
	Иначе
		Элементы.CdFin.ЦветФона = Красный;
		Элементы.СплавCdMax.ЦветФона = Красный;
		Элементы.СплавCdMin.ЦветФона = Красный;
	КонецЕсли; 
    //Sb
	Если Объект.Сплав.SbMax >= Объект.SbFin и Объект.Сплав.SbMin <= Объект.SbFin ИЛИ Объект.Сплав.SbMax = 0 тогда
		Элементы.SbFin.ЦветФона = Зеленый;
		Элементы.СплавSbMax.ЦветФона = Зеленый;
		Элементы.СплавSbMin.ЦветФона = Зеленый;
	Иначе
		Элементы.SbFin.ЦветФона = Красный;
		Элементы.СплавSbMax.ЦветФона = Красный;
		Элементы.СплавSbMin.ЦветФона = Красный;
	КонецЕсли; 
    //Sn
	Если Объект.Сплав.SnMax >= Объект.SnFin и Объект.Сплав.SnMin <= Объект.SnFin ИЛИ Объект.Сплав.SnMax = 0 тогда
		Элементы.SnFin.ЦветФона = Зеленый;
		Элементы.СплавSnMax.ЦветФона = Зеленый;
		Элементы.СплавSnMin.ЦветФона = Зеленый;
	Иначе
		Элементы.SnFin.ЦветФона = Красный; 
		Элементы.СплавSnMax.ЦветФона = Красный;
		Элементы.СплавSnMin.ЦветФона = Красный;
	КонецЕсли; 
    //Sr
	Если Объект.Сплав.SrMax >= Объект.SrFin и Объект.Сплав.SrMin <= Объект.SrFin ИЛИ Объект.Сплав.SrMax = 0 тогда
		Элементы.SrFin.ЦветФона = Зеленый;
		Элементы.СплавSrMax.ЦветФона = Зеленый;
		Элементы.СплавSrMin.ЦветФона = Зеленый;
	Иначе
		Элементы.SrFin.ЦветФона = Красный;
		Элементы.СплавSrMax.ЦветФона = Красный;
		Элементы.СплавSrMin.ЦветФона = Красный;
	КонецЕсли; 
    //Ti
	Если Объект.Сплав.TiMax >= Объект.TiFin и Объект.Сплав.TiMin <= Объект.TiFin ИЛИ Объект.Сплав.TiMax = 0 тогда
		Элементы.TiFin.ЦветФона = Зеленый;
		Элементы.СплавTiMax.ЦветФона = Зеленый;
		Элементы.СплавTiMin.ЦветФона = Зеленый;
	Иначе
		Элементы.TiFin.ЦветФона = Красный; 
		Элементы.СплавTiMax.ЦветФона = Красный;
		Элементы.СплавTiMin.ЦветФона = Красный;
	КонецЕсли; 
    //V
	Если Объект.Сплав.VMax >= Объект.VFin и Объект.Сплав.VMin <= Объект.VFin ИЛИ Объект.Сплав.VMax = 0 тогда
		Элементы.VFin.ЦветФона = Зеленый;
		Элементы.СплавVMax.ЦветФона = Зеленый;
		Элементы.СплавVMin.ЦветФона = Зеленый;
	Иначе
		Элементы.VFin.ЦветФона = Красный; 
		Элементы.СплавVMax.ЦветФона = Красный;
		Элементы.СплавVMin.ЦветФона = Красный;
	КонецЕсли; 
    //Zn
	Если Объект.Сплав.ZnMax >= Объект.ZnFin и Объект.Сплав.ZnMin <= Объект.ZnFin ИЛИ Объект.Сплав.ZnMax = 0 тогда
		Элементы.ZnFin.ЦветФона = Зеленый;
		Элементы.СплавZnMax.ЦветФона = Зеленый;
		Элементы.СплавZnMin.ЦветФона = Зеленый;
	Иначе
		Элементы.ZnFin.ЦветФона = Красный; 
		Элементы.СплавZnMax.ЦветФона = Красный;
		Элементы.СплавZnMin.ЦветФона = Красный;
	КонецЕсли; 
    //Zr
	Если Объект.Сплав.ZrMax >= Объект.ZrFin и Объект.Сплав.ZrMin <= Объект.ZrFin ИЛИ Объект.Сплав.ZrMax = 0 тогда
		Элементы.ZrFin.ЦветФона = Зеленый;
		Элементы.СплавZrMax.ЦветФона = Зеленый;
		Элементы.СплавZrMin.ЦветФона = Зеленый;
	Иначе
		Элементы.ZrFin.ЦветФона = Красный; 
		Элементы.СплавZrMax.ЦветФона = Красный;
		Элементы.СплавZrMin.ЦветФона = Красный;
	КонецЕсли; 
    //Al
	Если Объект.Сплав.AlMax >= Объект.AlFin и Объект.Сплав.AlMin <= Объект.AlFin ИЛИ Объект.Сплав.AlMax = 0 тогда
		Элементы.AlFin.ЦветФона = Зеленый;
		Элементы.СплавAlMax.ЦветФона = Зеленый;
		Элементы.СплавAlMin.ЦветФона = Зеленый;
	Иначе
		Элементы.AlFin.ЦветФона = Красный;  
		Элементы.СплавAlMax.ЦветФона = Красный;
		Элементы.СплавAlMin.ЦветФона = Красный;
	КонецЕсли; 

	
	Если Элементы.FeFin.ЦветФона = Зеленый И
		Элементы.SiFin.ЦветФона = Зеленый И
		Элементы.MnFin.ЦветФона = Зеленый И
		Элементы.MgFin.ЦветФона = Зеленый И
		Элементы.CrFin.ЦветФона = Зеленый И
		Элементы.NiFin.ЦветФона = Зеленый И
		Элементы.CuFin.ЦветФона = Зеленый И
		Элементы.GaFin.ЦветФона = Зеленый И
		Элементы.PbFin.ЦветФона = Зеленый И
		Элементы.BeFin.ЦветФона = Зеленый И
		Элементы.CaFin.ЦветФона = Зеленый И
		Элементы.CdFin.ЦветФона = Зеленый И
		Элементы.SbFin.ЦветФона = Зеленый И
		Элементы.SnFin.ЦветФона = Зеленый И
		Элементы.SrFin.ЦветФона = Зеленый И
		Элементы.TiFin.ЦветФона = Зеленый И
		Элементы.VFin.ЦветФона = Зеленый И
		Элементы.ZnFin.ЦветФона = Зеленый И
		Элементы.ZrFin.ЦветФона = Зеленый И
		Элементы.AlFin.ЦветФона = Зеленый Тогда
		Объект.Рецепт = 1;
	Иначе Объект.Рецепт = 0;
		КонецЕсли;
	
	
КонецПроцедуры
Показать


С точки зрения кода Объект.Рецепт это переменная и так же является реквизитом документа
23. spacecraft 07.07.23 16:26 Сейчас в теме
(22) спасибо за код, поржал.
24. Kilka_v_Kepke 07.07.23 16:39 Сейчас в теме
(23)веселее будет искать ошибки и дорабатывать
36. usershmuser 10.07.23 11:53 Сейчас в теме
(23) Если нет конструктивной критики, то проходим мимо. Да, я начинающий, но мой код работает.
27. user856012 13 07.07.23 19:07 Сейчас в теме
(22) А что автоматизируете-то, алхимическую лабораторию? :-)

P.S. Шучу, по коду можно догадаться - контора по приему лома редкоземельных металлов.

Интересно, в каком диапазоне находится реквизит Лом.Цена? А то у меня с очень давних времен где-то валяется по кусочку чистых кадмия и галлия. Есть еще индий... но вас, судя по коду, он не интересует? ;-)
28. Stref75 07.07.23 19:33 Сейчас в теме
(22)
С точки зрения кода Объект.Рецепт это переменная и так же является реквизитом документа

то что вы "насилуете" реквизиты объекта как переменные, не делает последние переменными.
если необходимость в этих реквизитах исключительно для вашего расчета (а мне кажется, что они созданы именно для этого, поскольку при каждом новом вызове процедуры вы их обнуляете) и они далее нигде не используются, например, для отчетов или при проведении документа - какой тогда смысл хранить это все в базе в виде реквизитов?

с какой целью процедура РассчитатьНаСервере() выполняется на сервере? для чего там сервер нужен? Из соображений, что на сервере обычно железо пошустрее, памяти побольше, процессоров побольше - так быстрее посчитается? Ну так это только так сработает когда вы один в тестовой базе будете работать, а когда у вас +100500 пользователей одновременно начнут сервер нагибать этой и прочими процедурами, а главбухша еще процедуру закрытия месяца запустит? Будет гарантия что все так же шустро отработает?

логику раскраски элементов формы ну нет смысла обрабатывать на сервере от слова "совсем". отрабатывайте это на клиенте. вот серверу реально похрен, как там у юзверя форма покрашена. и прочим клиентским сеансам тоже похрен - т.к. это сеанс конкретного пользователя и только он видит свои формы и покраски.

PS не критики ради, но для помощи все это пишу
33. usershmuser 10.07.23 11:37 Сейчас в теме
(28) На сервере потому что для расчета используются характеристики (реквизиты) справочника номенклатур. Да и на сервере реально быстрее работает (проверял). Данным расчетом будут пользоваться пару человек, никаких бухов, только производство.
Реквизит "Рецепт" в целом предназначен для вывода информации для дубовых работников, которые будут пользоваться и там предполагалось выводить текст с сообщениями, которые я верну обратно.
А вот по поводу раскраски приму к сведению.
38. Stref75 10.07.23 12:23 Сейчас в теме
(33)
Все вполне решается на клиенте с вызовом сервера.
Предполагаю, что в вашем коде
СтрокаДокумента.Лом
- это элемент справочника Номенклатура и когда вы пишете в коде
СтрокаДокумента.Лом.Fe
, то происходите обращение к реквизиту справочника номенклатуры, которого на клиенте в данный момент нет. Система когда видит подобное организует запрос. Естественно что на клиенте никакой запрос мы выполнить не можем. Нужен сервер.
Что вы и делаете. Но далее у вас идет запрос в цикле. Вы перебираете строки ТЧ и потом перебираете реквизиты лома. НО! Система каждый раз когда вы пишите Лом.Fe, Лом.Si и т.п. строит новый запрос и как вы понимаете - это не "бесплатно".
Да и стандарты 1С не рекомендуют нам так делать.
Теперь предположим, что пользователь ввел 10 строк в ТЧ, причем в качестве лома указал одну и ту же номенклатуру. Имеет ли смысл каждый раз обрабатывая строку, считывать снова реквизиты лома?

Решить можно следующим образом. Выполняя расчет на клиенте вы предварительно обращаетесь к серверу и запрашиваете у него всю необходимую для расчета информацию 1 раз. Т.е. на клиенте перед выполнением расчета выгружаете все значения ЛОМ из строк ТЧ например в массив. Чистите его от дублей и передаете полученный массив в серверную функцию, которая выполняется без контекста формы. Контекст формы тут не нужен, т.к. вы подготовили свой массив.
Далее в серверной функции реализуете запрос, который по указанным в массиве номенклатурам вернет вам например массив структур, а структуры будут содержать необходимые реквизиты номенклатуры. И крутите-вертите полученный массив на клиенте как хотите, как говорится в хвост и в гриву.

По поводу раскраски формы - посмотрите в сторону условного форматирования - на УФ можно красить как угодно и что угодно.
39. usershmuser 10.07.23 12:30 Сейчас в теме
(38) Спасибо. С массивами еще не разбирался, но направление понял, буду двигаться в эту сторону.
21. soft_wind 07.07.23 14:24 Сейчас в теме
(20) Вот такие разработчики пошли!
им все равно что Переменная что Реквизит
что Наименование что Ссылка
разницы нет ни какой!
25. karamazoff 100 07.07.23 17:00 Сейчас в теме
(21)капец! откуда их столько вылезло? был же нормальный форум, даже иногда можно было полезную инфу черпать, а тут народ про программирование вообще не в курсе. От избытка чувств
26. Stref75 07.07.23 18:50 Сейчас в теме
(25) ну как откуда?! Родина сказала: "нужны программеры!", комсомол мОлодежь ответил: "Есть!" и все дружно пошли спасать российскую IT-сферу
karamazoff; +1 Ответить
30. user1931597 07.07.23 21:35 Сейчас в теме
(26)
все дружно пошли спасать российскую IT-сферу
Прикрепленные файлы:
29. user1880116 07.07.23 21:30 Сейчас в теме
(25)
откуда их столько вылезло?
Неправильная постановка вопроса. Правильная - почему ушли все вменяемые.
31. karamazoff 100 08.07.23 05:45 Сейчас в теме
(29)Правильно - это КУДА ушли, знал бы, может тоже ушел, но пока тут
32. usershmuser 10.07.23 11:28 Сейчас в теме
(25) Что бы стать нормальным программистом - нужно начать. Или нормальные сразу с нуля становятся?
34. karamazoff 100 10.07.23 11:39 Сейчас в теме
(32)Нет, не с нуля, не плохо бы иметь профильное образование, или упорство и усидчивость, здесь подскажут куда плыть, и я, с удовольствием, но готовое решение Вы должны сделать сами
35. usershmuser 10.07.23 11:50 Сейчас в теме
(34) Хочу заметить, что готового решения я не просил, был конкретно вопрос про видимость реквизита формы!
37. karamazoff 100 10.07.23 11:55 Сейчас в теме
(35)Я пошел мимо, все что можно по вопросу здесь уже написали
Оставьте свое сообщение

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