Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 11:07

Вывод элементы таблицы

Автор Алексей Майка, 25 июн 2021, 11:09

0 Пользователей и 1 гость просматривают эту тему.

Алексей Майка

Доброго всем времени суток.
Нужна помощь по выводу табличной части отчета на управляемой форме. Из SQL сервера выводятся данные в табличную часть документ с интервалом 10 секунд (табличная часть очищается и делается заново загрузка), но иногда их настолько много, что не вмещаются на экран монитора. Как сделать чтоб прокручивалась табличная часть на определенное количество строк вниз и делала паузу? Пытался выводить поэтапно, но пока не выполнится процедура до конца, она не выводит таблицу.
Я новенький в 1с (стажер). Буду благодарен за помощь

&НаКлиенте
Процедура ВыполнитьЗагрузкуДокументов()
   
   Отчет.ДатаСегодня = Формат(ТекущаяДата());
   СДата=Отчет.ДатаСегодня;
   
   МесяцС=Месяц(СДата);
   
   Если МесяцС<10 Тогда
      МесяцС="0"+МесяцС;
   КонецЕсли;

   ДеньС=День(СДата);
   Если ДеньС<10 Тогда
      ДеньС="0"+ДеньС;
   КонецЕсли;
   
   СтрокДата = ""+Год(СДата)+МесяцС+ДеньС;
   СтрокДата=СтрЗаменить(Строка(СтрокДата),Символы.НПП, "");

   
   БазаДанных = ИнициализироватьСоединения();
   
   
   Если БазаДанных = Неопределено Тогда
      Сообщить("Ошибка соединения");
      Возврат;
   КонецЕсли;


   ТекстSQL  = "
   |SELECT  trade_cnt.dbo._1SJOURN.DOCNO   AS НомерМаршрут ,
   |   SC3246.DESCR as Водитель,
   |   ISNULL(sc9572.descr,'') AS  Марш,
   |   SP18789 as Ворота,
   |   (LTRIM(RTRIM(DH6181.SP9342))) as статус      
   |   FROM
   |   trade_cnt.dbo.DH6181
   |   INNER JOIN trade_cnt.dbo.SC3246
   |   on trade_cnt.dbo.DH6181.SP6421 = trade_cnt.dbo.SC3246.ID
   |   left join trade_cnt.dbo.SC9572
   |   on trade_cnt.dbo.DH6181.SP9580 = trade_cnt.dbo.SC9572.id   
   |   LEFT JOIN trade_cnt.dbo._1SJOURN (NOLOCK) ON trade_cnt.dbo._1SJOURN.IDDOC   = trade_cnt.dbo.DH6181.IDDOC
   |   WHERE
   |   (((LTRIM(RTRIM(trade_cnt.dbo.DH6181.SP9342))) <> 'EOS') and ((LTRIM(RTRIM(trade_cnt.dbo.DH6181.SP9342))) <> 'EOR') and ((LTRIM(RTRIM(trade_cnt.dbo.DH6181.SP9342))) <> 'GR1') and ((LTRIM(RTRIM(trade_cnt.dbo.DH6181.SP9342))) <> '0')) and (SP18789<>0)
   | and
   |   (format(trade_cnt.dbo.DH6181.SP13415, 'yyyyMMdd') = '"+СтрокДата+"')
   |";
         
   НаборЗаписей = Новый COMОбъект("ADODB.RecordSet");
   НаборЗаписей.ActiveConnection = БазаДанных;
   
   НаборЗаписей.Open(ТекстSQL);
   
   
   
   Пока Не НаборЗаписей.EOF() Цикл
         НовСтр = Отчет.ТабличнаяЧасть1.Добавить();
               
         СтрокМарш = СокрЛП(НаборЗаписей.Fields("НомерМаршрут").Value)+" / "+СокрЛП(НаборЗаписей.Fields("Марш").Value);
         НовСтр.НомерМаршрут = СтрокМарш;
         водитель = СокрЛП(НаборЗаписей.Fields("Водитель").Value);
               
         НовСтр.Водитель = водитель;
      
         НовСтр.Ворота = НаборЗаписей.Fields("Ворота").Value;
               

         Статус = СокрЛП(НаборЗаписей.Fields("статус").Value);
         Если СокрЛП(Статус) = "77O" Тогда 
               НовСтр.Статус = "Отгр.";
               иначеЕсли СокрЛП(Статус) = "77M" Тогда 
                  НовСтр.Статус = "Набр.";
               иначеЕсли СокрЛП(Статус) = "GGM" Тогда 
                  НовСтр.Статус = "Нач.погр.";
               иначеЕсли СокрЛП(Статус) = "ETD" Тогда 
                  НовСтр.Статус = "Проверен";
               КонецЕсли;
               
                           
         НаборЗаписей.MoveNext();            
      КонецЦикла;   
   
      
КонецПроцедуры

LexaK

даже не знаю поймете ли идею, но постараюсь
после того как получили данные НаборЗаписей
не выводите их сразу на экран
а запустите обработчик ожидания с интервалом 2-3 сек (сколько надо)

примерный код
//получили НаборЗаписей
//уберите ваш цикл
//Пока Не НаборЗаписей.EOF()
//...
//добавьте эти команды
ВывестиПорциюДанных();
ПодключитьОбработчикОжидания("ВывестиПорциюДанных", 3);
...

и процедура
Процедура ВывестиПорциюДанных()

СчетчикСтрок = 40; //выводим по 40 строк, или укажите свое значение

Пока Не НаборЗаписей.EOF() и СчетчикСтрок  > 0 Цикл
         НовСтр = Отчет.ТабличнаяЧасть1.Добавить();
               
         СтрокМарш = СокрЛП(НаборЗаписей.Fields("НомерМаршрут").Value)+" / "+СокрЛП(НаборЗаписей.Fields("Марш").Value);
         НовСтр.НомерМаршрут = СтрокМарш;
         водитель = СокрЛП(НаборЗаписей.Fields("Водитель").Value);
               
         НовСтр.Водитель = водитель;
     
         НовСтр.Ворота = НаборЗаписей.Fields("Ворота").Value;

         Статус = СокрЛП(НаборЗаписей.Fields("статус").Value);
         Если СокрЛП(Статус) = "77O" Тогда
               НовСтр.Статус = "Отгр.";
               иначеЕсли СокрЛП(Статус) = "77M" Тогда
                  НовСтр.Статус = "Набр.";
               иначеЕсли СокрЛП(Статус) = "GGM" Тогда
                  НовСтр.Статус = "Нач.погр.";
               иначеЕсли СокрЛП(Статус) = "ETD" Тогда
                  НовСтр.Статус = "Проверен";
               КонецЕсли;
               
         СчетчикСтрок = СчетчикСтрок - 1;                 
         НаборЗаписей.MoveNext();           
КонецЦикла;   

Если НаборЗаписей.EOF() Тогда
//все данные вывели, отключаем обработчик ожидания
ОтключитьОбработчикОжидания("ВывестиПорциюДанных");
КонецЕсли;

КонецПроцедуры

попробуйте должно сработать

если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск