Всем привет.
Имеется код
Циклом прохожу по каждой строке в табличной части и внутри этого цикла циклично изменяю показатель (Вес) и просчитываю результат процедурой РасчитатьНаСервере, в ней при правильном подсчете устанавливается в поле Рецепт единичка, далее если в поле Рецепт 1, то цикл должен остановится, а он не останавливается.
Такое ощущение, что из цикла невиден Объект.Рецепт.
Как мне останавливать цикл по такому условию?
Имеется код
&НаСервере
Процедура ПодборРецептаНаСервере()
Для каждого СтрокаДокумента из Объект.Материалы Цикл
СтрокаДокумента.Вес = 1;
КонецЦикла;
//Объект.Рецепт = 0;
Для каждого СтрокаДокумента из Объект.Материалы Цикл
Пока СтрокаДокумента.Вес < 100 Цикл
СтрокаДокумента.Вес = СтрокаДокумента.Вес + 1;
РасчитатьНаСервере();
Если Объект.Рецепт = 1 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если Объект.Рецепт = 1 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ПоказатьЦиклом прохожу по каждой строке в табличной части и внутри этого цикла циклично изменяю показатель (Вес) и просчитываю результат процедурой РасчитатьНаСервере, в ней при правильном подсчете устанавливается в поле Рецепт единичка, далее если в поле Рецепт 1, то цикл должен остановится, а он не останавливается.
Такое ощущение, что из цикла невиден Объект.Рецепт.
Как мне останавливать цикл по такому условию?
По теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
а что за реквизит Объект.Рецепт? Его Тип?
а почему нельзя не подбирать вес каждой строки "+1" а сразу задать нужный (по Рецепту?)
сначала Вес = 1, а затем до Вес = 100 в каждой строчке делаете, а разные веса в материалах ни как не должны учитываться?
как-то смысл этого действия ускользает!
а почему нельзя не подбирать вес каждой строки "+1" а сразу задать нужный (по Рецепту?)
сначала Вес = 1, а затем до Вес = 100 в каждой строчке делаете, а разные веса в материалах ни как не должны учитываться?
как-то смысл этого действия ускользает!
(2)Объект.Рецепт - число (на форме - надпись), просто задана как переменная.
Смысл в том, что бы найти нужный рецепт.
У нас есть то, что должно получиться (номенклатура с 20 характеристиками) и есть номенклатуры, которые при "смешивании" приближаются к искомым характеристикам (у них так же по 20 характеристик).
Аналитику попадания в нужную номенклатуру я сделал (еще в exel).
Рецепта как такового нет, его и нужно найти путем перебора пропорций (пропорции кратно 1% пока что достаточно).
Над методикой перебора сейчас работаю, это не конечный код. На данном этапе запнулся именно об остановку цикла (точнее об несрабатывании)
Смысл в том, что бы найти нужный рецепт.
У нас есть то, что должно получиться (номенклатура с 20 характеристиками) и есть номенклатуры, которые при "смешивании" приближаются к искомым характеристикам (у них так же по 20 характеристик).
Аналитику попадания в нужную номенклатуру я сделал (еще в exel).
Рецепта как такового нет, его и нужно найти путем перебора пропорций (пропорции кратно 1% пока что достаточно).
Над методикой перебора сейчас работаю, это не конечный код. На данном этапе запнулся именно об остановку цикла (точнее об несрабатывании)
(10)
Или в том, что не допускает существования табличной части "Материалы"?
я даже представить боюсь, что за говнокод там
А вы не пытайтесь представить, лучше попытайтесь прочитать (1), код - там.
потому что Stref75 прав
В чем именно он прав? В том, что требует от меня объяснить чужой "говнокод"?
Или в том, что не допускает существования табличной части "Материалы"?
(11) Если Объект это основной реквизит формы, допустим, документ, то Объект.Рецепт - это обращение к реквизиту документа.
Не важно где идет обращение к реквизиту документа - на клиенте или на сервере, если это контекстный вызов, реквизит документа будет виден.
Поэтому вы посоветовали какой-то бред, будем честными.
И если этот бред помог ТС, то либо ТС что-то еще исправил, либо у ТС какой-то говнокод.
Если вы там видите весь код, ну рад за вас.
Я вижу только 1 процедуру.
Не важно где идет обращение к реквизиту документа - на клиенте или на сервере, если это контекстный вызов, реквизит документа будет виден.
Поэтому вы посоветовали какой-то бред, будем честными.
И если этот бред помог ТС, то либо ТС что-то еще исправил, либо у ТС какой-то говнокод.
А вы не пытайтесь представить, лучше попытайтесь прочитать (1), код - там.
Если вы там видите весь код, ну рад за вас.
Я вижу только 1 процедуру.
а что вот в этой процедуре?
вы ни когда не получите рецепт!
так как рецепт скорее всего состоит из Материалов таких/разных процентов: 20,70,15 (это пример)
а у вас только такие комбинации будут
100(1до100,1,1
100,100(1до100,1
100, 100,100
РасчитатьНаСервере();
вы ни когда не получите рецепт!
так как рецепт скорее всего состоит из Материалов таких/разных процентов: 20,70,15 (это пример)
а у вас только такие комбинации будут
100(1до100,1,1
100,100(1до100,1
100, 100,100
(13)На данный момент комбинации прорабатываю и это не конечный код
А в процедуре аналитика, которая просчитывает, что получается при указаном весе материалов и если удача, то в Объект.Рецепт записывается единица. При каждом проходе цикла пересчитывается аналитика и в случае удачи там же процедурой устанавливается единица, которую из серверной процедуры, во время выполнения кода, не видно!
А в процедуре аналитика, которая просчитывает, что получается при указаном весе материалов и если удача, то в Объект.Рецепт записывается единица. При каждом проходе цикла пересчитывается аналитика и в случае удачи там же процедурой устанавливается единица, которую из серверной процедуры, во время выполнения кода, не видно!
(17)
да почему ж вы ее "переменной" то называете? Насколько я понимаю это у вас реквизит объекта. Показывайте уже код с изменениями.
доля здравого смысла в постах user856012 была - если вы оперируете данными, которые есть на клиенте, нет надобности лезть на сервер и там что-то считать в контексте формы. Достаточно было оставить серверную процедуру РассчитатьНаСервере(). Но я бы её сделал функцией без контекста, передал бы необходимые параметры для расчета; напряг сервер, рассчитал и вернул обратно какие-то данные и далее с ними на клиенте работал. Хотя, могут быть исключения о которых кроме ТС мы не знаем и собственно из-за которых и начали тут копья ломать...
Вопрос мой решился добавлением расчета переменной Объект.Рецепт
да почему ж вы ее "переменной" то называете? Насколько я понимаю это у вас реквизит объекта. Показывайте уже код с изменениями.
доля здравого смысла в постах user856012 была - если вы оперируете данными, которые есть на клиенте, нет надобности лезть на сервер и там что-то считать в контексте формы. Достаточно было оставить серверную процедуру РассчитатьНаСервере(). Но я бы её сделал функцией без контекста, передал бы необходимые параметры для расчета; напряг сервер, рассчитал и вернул обратно какие-то данные и далее с ними на клиенте работал. Хотя, могут быть исключения о которых кроме ТС мы не знаем и собственно из-за которых и начали тут копья ломать...
(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;
КонецЕсли;
КонецПроцедуры
ПоказатьС точки зрения кода Объект.Рецепт это переменная и так же является реквизитом документа
(22) А что автоматизируете-то, алхимическую лабораторию? :-)
P.S. Шучу, по коду можно догадаться - контора по приему лома редкоземельных металлов.
Интересно, в каком диапазоне находится реквизит Лом.Цена? А то у меня с очень давних времен где-то валяется по кусочку чистых кадмия и галлия. Есть еще индий... но вас, судя по коду, он не интересует? ;-)
P.S. Шучу, по коду можно догадаться - контора по приему лома редкоземельных металлов.
Интересно, в каком диапазоне находится реквизит Лом.Цена? А то у меня с очень давних времен где-то валяется по кусочку чистых кадмия и галлия. Есть еще индий... но вас, судя по коду, он не интересует? ;-)
(22)
то что вы "насилуете" реквизиты объекта как переменные, не делает последние переменными.
если необходимость в этих реквизитах исключительно для вашего расчета (а мне кажется, что они созданы именно для этого, поскольку при каждом новом вызове процедуры вы их обнуляете) и они далее нигде не используются, например, для отчетов или при проведении документа - какой тогда смысл хранить это все в базе в виде реквизитов?
с какой целью процедура РассчитатьНаСервере() выполняется на сервере? для чего там сервер нужен? Из соображений, что на сервере обычно железо пошустрее, памяти побольше, процессоров побольше - так быстрее посчитается? Ну так это только так сработает когда вы один в тестовой базе будете работать, а когда у вас +100500 пользователей одновременно начнут сервер нагибать этой и прочими процедурами, а главбухша еще процедуру закрытия месяца запустит? Будет гарантия что все так же шустро отработает?
логику раскраски элементов формы ну нет смысла обрабатывать на сервере от слова "совсем". отрабатывайте это на клиенте. вот серверу реально похрен, как там у юзверя форма покрашена. и прочим клиентским сеансам тоже похрен - т.к. это сеанс конкретного пользователя и только он видит свои формы и покраски.
PS не критики ради, но для помощи все это пишу
С точки зрения кода Объект.Рецепт это переменная и так же является реквизитом документа
то что вы "насилуете" реквизиты объекта как переменные, не делает последние переменными.
если необходимость в этих реквизитах исключительно для вашего расчета (а мне кажется, что они созданы именно для этого, поскольку при каждом новом вызове процедуры вы их обнуляете) и они далее нигде не используются, например, для отчетов или при проведении документа - какой тогда смысл хранить это все в базе в виде реквизитов?
с какой целью процедура РассчитатьНаСервере() выполняется на сервере? для чего там сервер нужен? Из соображений, что на сервере обычно железо пошустрее, памяти побольше, процессоров побольше - так быстрее посчитается? Ну так это только так сработает когда вы один в тестовой базе будете работать, а когда у вас +100500 пользователей одновременно начнут сервер нагибать этой и прочими процедурами, а главбухша еще процедуру закрытия месяца запустит? Будет гарантия что все так же шустро отработает?
логику раскраски элементов формы ну нет смысла обрабатывать на сервере от слова "совсем". отрабатывайте это на клиенте. вот серверу реально похрен, как там у юзверя форма покрашена. и прочим клиентским сеансам тоже похрен - т.к. это сеанс конкретного пользователя и только он видит свои формы и покраски.
PS не критики ради, но для помощи все это пишу
(28) На сервере потому что для расчета используются характеристики (реквизиты) справочника номенклатур. Да и на сервере реально быстрее работает (проверял). Данным расчетом будут пользоваться пару человек, никаких бухов, только производство.
Реквизит "Рецепт" в целом предназначен для вывода информации для дубовых работников, которые будут пользоваться и там предполагалось выводить текст с сообщениями, которые я верну обратно.
А вот по поводу раскраски приму к сведению.
Реквизит "Рецепт" в целом предназначен для вывода информации для дубовых работников, которые будут пользоваться и там предполагалось выводить текст с сообщениями, которые я верну обратно.
А вот по поводу раскраски приму к сведению.
(33)
Все вполне решается на клиенте с вызовом сервера.
Предполагаю, что в вашем коде - это элемент справочника Номенклатура и когда вы пишете в коде , то происходите обращение к реквизиту справочника номенклатуры, которого на клиенте в данный момент нет. Система когда видит подобное организует запрос. Естественно что на клиенте никакой запрос мы выполнить не можем. Нужен сервер.
Что вы и делаете. Но далее у вас идет запрос в цикле. Вы перебираете строки ТЧ и потом перебираете реквизиты лома. НО! Система каждый раз когда вы пишите Лом.Fe, Лом.Si и т.п. строит новый запрос и как вы понимаете - это не "бесплатно".
Да истандарты 1С не рекомендуют нам так делать.
Теперь предположим, что пользователь ввел 10 строк в ТЧ, причем в качестве лома указал одну и ту же номенклатуру. Имеет ли смысл каждый раз обрабатывая строку, считывать снова реквизиты лома?
Решить можно следующим образом. Выполняя расчет на клиенте вы предварительно обращаетесь к серверу и запрашиваете у него всю необходимую для расчета информацию 1 раз. Т.е. на клиенте перед выполнением расчета выгружаете все значения ЛОМ из строк ТЧ например в массив. Чистите его от дублей и передаете полученный массив в серверную функцию, которая выполняется без контекста формы. Контекст формы тут не нужен, т.к. вы подготовили свой массив.
Далее в серверной функции реализуете запрос, который по указанным в массиве номенклатурам вернет вам например массив структур, а структуры будут содержать необходимые реквизиты номенклатуры. И крутите-вертите полученный массив на клиенте как хотите, как говорится в хвост и в гриву.
По поводу раскраски формы - посмотрите в сторону условного форматирования - на УФ можно красить как угодно и что угодно.
Все вполне решается на клиенте с вызовом сервера.
Предполагаю, что в вашем коде
СтрокаДокумента.Лом
СтрокаДокумента.Лом.Fe
Что вы и делаете. Но далее у вас идет запрос в цикле. Вы перебираете строки ТЧ и потом перебираете реквизиты лома. НО! Система каждый раз когда вы пишите Лом.Fe, Лом.Si и т.п. строит новый запрос и как вы понимаете - это не "бесплатно".
Да и
Теперь предположим, что пользователь ввел 10 строк в ТЧ, причем в качестве лома указал одну и ту же номенклатуру. Имеет ли смысл каждый раз обрабатывая строку, считывать снова реквизиты лома?
Решить можно следующим образом. Выполняя расчет на клиенте вы предварительно обращаетесь к серверу и запрашиваете у него всю необходимую для расчета информацию 1 раз. Т.е. на клиенте перед выполнением расчета выгружаете все значения ЛОМ из строк ТЧ например в массив. Чистите его от дублей и передаете полученный массив в серверную функцию, которая выполняется без контекста формы. Контекст формы тут не нужен, т.к. вы подготовили свой массив.
Далее в серверной функции реализуете запрос, который по указанным в массиве номенклатурам вернет вам например массив структур, а структуры будут содержать необходимые реквизиты номенклатуры. И крутите-вертите полученный массив на клиенте как хотите, как говорится в хвост и в гриву.
По поводу раскраски формы - посмотрите в сторону условного форматирования - на УФ можно красить как угодно и что угодно.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот