Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

поделитесь - как грамотно обрабатывать колонки ТЧ!

поделитесь - как грамотно обрабатывать колонки ТЧ!
Я
   ASimonova
 
24.10.16 - 13:46
1С:Предприятие 8.3 (8.3.8.1964)
Часто нужно обработать одну-две колонки ТЧ. Я всегда сувала их в запрос и в запросе обрабатывала и загружала обратно в ТЧ. А если у меня 50 полей, зачем я их буду туда-сюда гонять, может, можно как-нибудь попроще?
Если засунуть одну колонку в запрос, обработать и загрузить обратно, тогда велика вероятность потери соответствия между строками, и я так никогда не рисковала.
Обрабатывать построчно в цикле - слишком долго для больших ТЧ.

Поделитесь - как вы делаете? Как это будет максимально грамотно?
 
 
   Жан Пердежон
 
1 - 24.10.16 - 13:51
в чем обработка заключается?
если данные тянуть из базы - запросом;
чтобы порядок сохранился - добавляешь порядковый номер и сортируешь по нему;
какие ещё риски на ровном месте?
   DrShad
 
2 - 24.10.16 - 13:52
(0) обычно делаем один раз - заполняем и больше не трогаем
   ASimonova
 
3 - 24.10.16 - 14:00
(1) то есть просто сортирую по НомерСтроки, который есть в любой ТЧ и вставляю нужные мне колонки и все, верно? все равно как-то непрозрачно получается. вдруг у нас случайно лишние строки появятся в запросе, а контроля нет.
(2) не поняла, что значит делаем один раз?
   Мойдодыр
 
4 - 24.10.16 - 14:08
Выбираешь запросом номера строк и обрабатываешь
   Мойдодыр
 
5 - 24.10.16 - 14:11
Дерево  = мРезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
Колво   = Дерево.Строки.Количество();
Счетчик = 0;
Для каждого Строка1 Из Дерево.Строки Цикл
    
    Счетчик = Счетчик + 1;
    ОбработкаПрерыванияПользователя();
    Состояние(Строка(Счетчик) + " из " + Строка(Колво) + " " + Строка(Строка1.Ссылка));
    
    ДокументОбъект = Строка1.Ссылка.ПолучитьОбъект();
    
    Для каждого Строка2 Из Строка1.Строки Цикл
        
        СтрокаТЧ = ДокументОбъект.Товары[Строка2.НомерСтроки - 1];
        
        
    КонецЦикла;    
    
    ДокументОбъект.ОбменДанными.Загрузка = Истина;
    ДокументОбъект.Записать();
    
    Если ДокументОбъект.Проведен Тогда
    
        ДокументОбъект.ОбменДанными.Загрузка = Ложь;
        ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);

    КонецЕсли;
    
КонецЦикла;

   Жан Пердежон
 
6 - 24.10.16 - 14:12
(3) пиши запрос так, чтобы он не выдавал лишние строки;
   ptiz
 
7 - 24.10.16 - 14:14
(3) Зачем сортировать? Добавляй в запрос и нужные поля, и номер строки документа. При обходе результата запроса пихай всё в нужную строку обратно по номеру.
   Жан Пердежон
 
8 - 24.10.16 - 14:33
(7) сортировать есть смысл, если обрабатывается таблица на форме, не привязанная к ТЧ, или чтобы использовать ЗагрузитьКолонку();
   ASimonova
 
9 - 24.10.16 - 14:39
(5) (7) ну и получится та же обработка ТЧ построчно, которая ну никак, я в (0) писала. это очень долго. засовывание ВСЕХ данных в запрос и загрузка Объект.Товары.Загрузить() проходит на порядки быстрее.
   ASimonova
 
10 - 24.10.16 - 14:39
(6) ну если лучше нет варианта, то ок, спасибо
 
 Рекламное место пустует
   Жан Пердежон
 
11 - 24.10.16 - 14:49
(10) делюсь запросом, лишних строк не будет 100%:

ВЫБРАТЬ Максимум(Поле1), Максимум(Поле2),...
ИЗ втПочтиГотово 
СГРУППИРОВАТЬ ПО НомерСтроки
УПОРЯДОЧИТЬ ПО НомерСтроки
   ptiz
 
12 - 24.10.16 - 15:49
(9) Секунда на 10000 строк - это долго?
   Dotoshin
 
13 - 24.10.16 - 16:24
(0) А можно пример обработки ТЧ, которую вы делаете через запрос?
   ASimonova
 
14 - 24.10.16 - 22:48
(11) это понятно, но тогда лишние строки могут пропасть и не дать о себе знать... ну в общем я поняла, что надо просто дополнительно прописывать контроль
(12) честно, не замеряла, по ощущениям
(13)  ну например Для Каждого СтрокаТовары Цикл СтрокаТовары.Номенклатура = Справочники.Номенклатура.НайтиПоКоду(СтрокаТовары.НоменклатураКодСтрока); КонецЦикла. Ну это так, что первое в голову пришло
   Йохохо
 
15 - 24.10.16 - 22:59
(14) то о чем и писали, ВТ (номерстроки, НоменклатураКодСтрока) одно соединение и потом по индексу строки

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует