Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Движение документа по РС
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
kosalex
Добрый день! Есть РС, подченен регистратору, периодичность - секунда.

Есть документ, который делает двиежние по этому РС, а именно записывает хим состав из табличной части документа.

Возможна ситуация, когда в ТЧ документа есть строки с одинаковыми значениями по измерениям РС. Тогда нужно на момент проведения документа получать хим состав столько раз сколько строк в ТЧ документа. Значит при проведении нужно проверить есть ли там запись, если есть то сделать нужные вычисления и записать. Использую такой код:




Записываю такую таблицу с формы:



ХимСостав = Новый ТаблицаЗначений;
    ХимСостав.Колонки.Добавить("НеттоОстаток",,"Нетто остаток",);
    ХимСостав.Колонки.Добавить("НомерЗакрома",,"Номер закрома",);
    ХимСостав.Колонки.Добавить("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;
            
            Движения.КФЗХимсоставВЗакромах.Записать();
            Движения.КФЗХимсоставВЗакромах.Очистить();
        КонецЕсли;
    КонецЦикла




Ошибка при проведении что запись с такими значениюми существует. По идеи нужно записать одну строку, потом проверить если по моим критериям строка в РС, если есть, то взять с нее нужные данные и провести вычисления, если нету дальше записывать в РС
sanechichek
Может не совсем правильно Вас понял, но что если перед тем как делать движения по РС хим состав, выгрузить данные ТЧ таблицы в таблицу значений, свернуть по колонкам и уже для записи данных в РС работать со свернутой табл. значений.
kosalex
Цитата(sanechichek @ 25.11.14, 12:46) необходимо зарегистрироваться для просмотра ссылки
Может не совсем правильно Вас понял, но что если перед тем как делать движения по РС хим состав, выгрузить данные ТЧ таблицы в таблицу значений, свернуть по колонкам и уже для записи данных в РС работать со свернутой табл. значений.



Да =) Хороший вариант, делаю так smile.gif Посмотрим что получится))
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.