Имя: Пароль:
1C
1С v8
Каждый цикл удалять строку ТЧ, которая не участвовала в проведении.
0 Guerro
 
07.06.19
09:03
Задача в том, что выгружается весь список данных по определенным условиям(так нужно для инфографики). Но при проведении нужно удалять те, которые не подошли под условия.

<code>
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    
    ПовторныйШК="";
    
    Для каждого СтрТЧ из ТабличнаяЧасть1 Цикл
        
        РезультатЗапроса=РегистрыНакопления.Потолки.Остатки(,Новый Структура("Код",СтрТЧ.Код));
        Движения.Потолки.Записывать=Истина;
        
        Если РезультатЗапроса.Количество()=2 Тогда
            
            Если ПовторныйШК<>СтрТЧ.Код тогда
                Для каждого РЗ Из РезультатЗапроса Цикл
                    Если РЗ.ЦенаИзделия<0 Тогда
                        Движение=Движения.Потолки.ДобавитьПриход();
                        ...
                    Иначе
                        Движение=Движения.Потолки.ДобавитьРасход();
                        ...
                    КонецЕсли;
                КонецЦикла;
                ПовторныйШК=СтрТЧ.Код;
            КонецЕсли;
            
        ИначеЕсли РезультатЗапроса.Количество()=1 тогда
            РЗ=РезультатЗапроса[0];
            РезультатЗапросаСостоянияПотолков=РегистрыНакопления.СостояниеПотолков.Остатки(,Новый Структура("Код",СтрТЧ.Код));
            
            Если РезультатЗапросаСостоянияПотолков.Количество()=0 тогда
                Если РЗ.ЦенаИзделия<0 Тогда
                    Движение=Движения.Потолки.ДобавитьПриход();
                    ...
                Иначе
                    Движение=Движения.Потолки.ДобавитьРасход();
                    ...
                КонецЕсли;
            КонецЕсли;
            
        ИначеЕсли РезультатЗапроса.Количество()>0 тогда
            
            Для Каждого РЗ из РезультатЗапроса цикл
                Если РЗ.ЦенаИзделия<0 Тогда
                    Движение=Движения.Потолки.ДобавитьПриход();
                    ...
                Иначе
                    Движение=Движения.Потолки.ДобавитьРасход();
                    ...
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
        
    КонецЦикла;
КонецПроцедуры
</code>
1 Guerro
 
07.06.19
09:04
Подскажите, как код адекватно вставлять?
2 mistеr
 
07.06.19
09:08
(0) Откуда удалять? Где список? Ничего не понятно.
3 Фрэнки
 
07.06.19
09:10
Только удалять строки из ТЧ надо не в Обработке проведения, а в ПередЗаписью
- ловить в ПередЗаписью режим записи, какой нужен, чтоб отличать простую запись документа от записи с проведением и чистить ТЧ от лишних строк.

Тогда строки в ТЧ будут соответствовать строкам в движениях. А сейчас соответствия нет.

Ну и если все-таки формируются движения с пропусками ли добавлениями лишних записей (лишних относительно состава строк в ТЧ), то обычно формируют ТаблицуДвижений, которую затем загружают в движения.
4 vicof
 
07.06.19
09:11
(0) Запросы в цикле это плохо.
Для каждого из регистров сделай по запросу. И их результаты перебирай и записывай в регистры.
5 vicof
 
07.06.19
09:12
Плюс непонятно при чем тут инфографика. В тексте ни одного упоминания про нее.
6 Guerro
 
07.06.19
09:12
7 Guerro
 
07.06.19
09:14
(4) Согласен, просто сделан "на коленке"
8 vicof
 
07.06.19
09:14
Удалять при проведении ничего не нужно, нужно формировать выборку данных таким образом, чтобы не пришлось ничего удалять, а только перебрать полученные данные построчно.
9 Фрэнки
 
07.06.19
09:15
(4) да у него хоть и указан цикл, но количество строк явно равно 2 :-)
Только когда количество строк в запросе 1 - только тогда обращается с другим запросом.
10 ДенисЧ
 
07.06.19
09:17
11 vicof
 
07.06.19
09:17
(7) Не "на коленке", а "через жопу".
(9) Ну это ж тоже гкод, я пытаюсь направить светлый разум на понимание того, что он пишет.
12 mistеr
 
07.06.19
09:18
(3) Удалять строки в ПередЗаписью  тоже плохо. Все изменения данных в доке должны быть явными. По кнопке, например.
13 Guerro
 
07.06.19
09:20
В итоге пришли к тому, что стоит выгружать уже отбором. Чтобы не было надобности чистить перед записью. и к тому, что (11) дохера возомнил о своем опыте и все остальные должны писать как он, даже с меньшим опытом
14 vicof
 
07.06.19
09:23
(13) Да, служи мне, подлый студентишка!!!
Чо за наезды? Хрен я теперь тебя буду направлять на понимание того, что ты пишешь.
15 Smile 8D
 
07.06.19
09:36
(13) Да, все должны стремиться к тому, чтобы писать корректный и оптимальный код. Малый опыт должен являться не оправданием писать "криво", а стимулом стремиться к лучшему, прислушиваться к более опытным коллегам и переписывать "кривой" код.
Т.е. правильная позиция - прислушиваться и задавать уточняющие вопросы (если уж кто-то решил потратить свое время и поделиться с вами опытом бесплатно), а не вставать в позу и хамить от того что вам не понравилась форма подачи информации.
16 Guerro
 
07.06.19
10:58
(15) (14) Я готов прислушаться к советам а читать в свой адрес "через жопу", не собираюсь. за советы спасибо.
17 catena
 
07.06.19
11:10
(16)Это интернет, детка, тут могут и послать.
Выражение относилось не в ваш адрес, а в адрес кода. Пожалуйста, относитесь вежливо к людям, которые абсолютно бесплатно и очень оперативно дают вам советы.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан