Добрый день! Есть РС, подченен регистратору, периодичность - секунда.
Есть документ, который делает двиежние по этому РС, а именно записывает хим состав из табличной части документа.
Возможна ситуация, когда в ТЧ документа есть строки с одинаковыми значениями по измерениям РС. Тогда нужно на момент проведения документа получать хим состав столько раз сколько строк в ТЧ документа. Значит при проведении нужно проверить есть ли там запись, если есть то сделать нужные вычисления и записать. Использую такой код:
Записываю такую таблицу с формы:
ХимСостав = Новый ТаблицаЗначений;
ХимСостав.Колонки.Добавить("НеттоОстаток",,"Нетто остаток",);
ХимСостав.Колонки.Добавить("НомерЗакрома",,"Номер закрома",);
ХимСостав.Колонки.Добавить("Si",,"Si",);
ХимСостав.Колонки.Добавить("Mn",,"Mn",);
ХимСостав.Колонки.Добавить("C",,"C",);
ХимСостав.Колонки.Добавить("P",,"P",);
Для Каждого Строка Из ТЧБигБегов Цикл
//Получим хим состав который есть на текущую дату документа в закроме
ДанныеХимСостав = ПолучитьХимСостовФеромарганца(Строка.НомерЗакрома);
Если ДанныеХимСостав <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(ХимСостав.Добавить(),ДанныеХимСостав[0]);
//Расчет хим состава который образуется когда в закром добавляют какое то количество феромарганца,
//если закром пустой тогда хим состав записывается с документа
Для Каждого Строка Из ХимСостав Цикл
Если Строка.НеттоОстаток < 0 Тогда
Предупреждение("В закроме нет остатка, хим состав будет записан с формы документа.");
Для Каждого СтрокаТЧ Из ТЧБигБегов Цикл
//Запишем хим состав в РС "ХимсоставВЗакромах" который образуется в закроме
Движения.ХимсоставВЗакромах.Записывать = Истина;
ДвижениеХимСостав = Движения.ХимсоставВЗакромах.Добавить();
ДвижениеХимСостав.Период = Дата;
ДвижениеХимСостав.НомерЗакрома = СтрокаТЧ.НомерЗакрома;
ДвижениеХимСостав.Si = СтрокаТЧ.Si;
ДвижениеХимСостав.Mn = СтрокаТЧ.Mn;
ДвижениеХимСостав.C = СтрокаТЧ.C;
ДвижениеХимСостав.P = СтрокаТЧ.P;
КонецЦикла;
Движения.КФЗХимсоставВЗакромах.Записать();
Движения.КФЗХимсоставВЗакромах.Очистить();
Иначе
Для Каждого СтрокаТЧ Из ТЧБигБегов Цикл
//Расчет полученного хим состава в закроме
Движения.ХимсоставВЗакромах.Записывать = Истина;
ДвижениеХимСостав = Движения.ХимсоставВЗакромах.Добавить();
ДвижениеХимСостав.Период = Дата;
ДвижениеХимСостав.НомерЗакрома = СтрокаТЧ.НомерЗакрома;
//ДвижениеХимСостав.Si = (ХимСостав[0].НеттоОстаток * ХимСостав[0].Si + ВсегоНетто * Строка.Si) / ХимСостав[0].НеттоОстаток + ВсегоНетто;
ДвижениеХимСостав.Si = (Строка.НеттоОстаток * Строка.Si + ВсегоНетто * Строка.Si) / Строка.НеттоОстаток + ВсегоНетто;
ДвижениеХимСостав.Mn = (Строка.НеттоОстаток * Строка.Mn + ВсегоНетто * Строка.Mn) / Строка.НеттоОстаток + ВсегоНетто;
ДвижениеХимСостав.C = (Строка.НеттоОстаток * Строка.C + ВсегоНетто * Строка.C) / Строка.НеттоОстаток + ВсегоНетто;
ДвижениеХимСостав.P = (Строка.НеттоОстаток * Строка.P + ВсегоНетто * Строка.P) / Строка.НеттоОстаток + ВсегоНетто;
КонецЦикла;
Движения.ХимсоставВЗакромах.Записать();
Движения.ХимсоставВЗакромах.Очистить();
КонецЕсли;
КонецЦикла;
Иначе
Предупреждение("В закроме нет хим состова, хим состав будет записан с формы документа.");
//Запишем хим состав в РС "КФЗХимсоставВЗакромах" который образуется в закроме
Движения.КФЗХимсоставВЗакромах.Записывать = Истина;
ДвижениеХимСостав = Движения.КФЗХимсоставВЗакромах.Добавить();
ДвижениеХимСостав.НомерЗакрома = Строка.НомерЗакрома;
ДвижениеХимСостав.Период = Дата;
ДвижениеХимСостав.Si = Строка.Si;
ДвижениеХимСостав.Mn = Строка.Mn;
ДвижениеХимСостав.C = Строка.C;
ДвижениеХимСостав.P = Строка.P;
Движения.КФЗХимсоставВЗакромах.Записать();
Движения.КФЗХимсоставВЗакромах.Очистить();
КонецЕсли;
КонецЦикла
Ошибка при проведении что запись с такими значениюми существует. По идеи нужно записать одну строку, потом проверить если по моим критериям строка в РС, если есть, то взять с нее нужные данные и провести вычисления, если нету дальше записывать в РС