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

обработка

Автор PukewhileRunningAMile, 27 мая 2011, 19:13

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

PukewhileRunningAMile

добрый вечере, Уважаемые старожилы, столкнулся я с такой проблемой:
занимаюсь переходом с ББУ7.7. на ббу 8.2 поправляю аналитику по счету 205.03.00 добавил в 8.2 еще одно субконто по этому счету,из 7.7 выгрузил необходимые данные из соответствующих документов в текстовый файл, соответственно теперь надо это поле в проводках заполнить (документ Операция ) написал обработочку, протестил ее на заполнении документа операция с малым количеством проводок - все работает замечательно выгруженные данные из текстового файла встают в нужное поле... начинаю запускать обработку для больших документов ОПЕРАЦИЯ (число строк в таблице боле 5000)  не получаю никаких результатов - в статусе просто ОБРАБОТКа ВЫПОЛняется... беда... вот код, подскажите пожалуйста


Процедура КнопкаВыполнитьНажатие(Кнопка)
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(ИмяФайла);


й=1;
          Если БухОперация.Пустая() Тогда
ПРЕДУПРЕЖДЕНИЕ ("ОПЕРАЦИЮ ВЫБЕРИ, ДА, СЛЫШИШЬ?!")     ;
Возврат;
КонецЕсли;

МаксЧислоСубконто = Метаданные.ПланыСчетов["ЕПСБУ"].МаксКоличествоСубконто;

НачатьТранзакцию();
БухОбъект = БухОперация.ПолучитьОбъект();

ТекПроводки = БухОбъект.Движения.ЕПСБУ;

ТекПроводки.Прочитать();




//*******************************************
   
Для каждого Проводка из ТекПроводки Цикл
ТекСчет = Проводка.СчетДт;
ЧислоСубконто  = ТекСчет.ВидыСубконто.Количество();
текСумма=проводка.сумма;
ТекКонтрагент = Справочники.Контрагенты.ПустаяСсылка();
Для суб = 2 по МаксЧислоСубконто Цикл
ТекНомерСубконто = суб - 1;
Если суб > ЧислоСубконто Тогда
Прервать;
КонецЕсли;
    ТекВидСубконто = ТекСчет.ВидыСубконто[ТекНомерСубконто].ВидСубконто;
    Если ТекВидСубконто=ПланыВидовХарактеристик.ВидыСубконтоБюджет.Контрагенты Тогда
ТекКонтрагент = сокрЛП(Проводка["СубконтоДт"][ТекВидСубконто]);
Продолжить;
КонецЕсли;
Если ТекВидСубконто<>ПланыВидовХарактеристик.ВидыСубконтоБюджет.НаправленияДеятельности Тогда
Продолжить;
КонецЕсли;

    Для к = й по Текст.КоличествоСтрок() Цикл
         Стр = Текст.ПолучитьСтроку(к);
         МассивЭлементов = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр);
                      а=сокрлп(массивэлементов[0]);
  б=ЧИСЛО(массивэлементов[2]);

             если (текконтрагент=а) и (тексумма=б) тогда

      Текнаправление = Справочники.Направлениядеятельности.НайтиПоНаименованию(МассивЭлементов[1]);
    проводка["СубконтоДт"][ТекВидСубконто] = ТекНаправление;
й=к;
прервать;


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

БухОбъект.Записать();
КонецЦикла;


ЗафиксироватьТранзакцию();

предупреждение ("ВСЕ ППЦ Я ПЕРЕГРеЛСЯ. ГОТОВ!  "+ текущаядата());
КонецПроцедуры

Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл с данными";
Диалог.ПолноеИмяФайла = ИмяФайла;

Диалог.Фильтр = "Текстовые файлы (*.txt)|*.txt";

Если Диалог.Выбрать() Тогда
ИмяФайла = Диалог.ПолноеИмяФайла;
КонецЕсли;

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



PukewhileRunningAMile


Процедура КнопкаВыполнитьНажатие(Кнопка)
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(ИмяФайла);


й=1;
          Если БухОперация.Пустая() Тогда
ПРЕДУПРЕЖДЕНИЕ ("ОПЕРАЦИЮ ВЫБЕРИ, ДА, СЛЫШИШЬ?!")     ;
Возврат;
КонецЕсли;

МаксЧислоСубконто = Метаданные.ПланыСчетов["ЕПСБУ"].МаксКоличествоСубконто;

НачатьТранзакцию();
БухОбъект = БухОперация.ПолучитьОбъект();

ТекПроводки = БухОбъект.Движения.ЕПСБУ;

ТекПроводки.Прочитать();




//*******************************************
   
Для каждого Проводка из ТекПроводки Цикл
ТекСчет = Проводка.СчетДт;
ЧислоСубконто  = ТекСчет.ВидыСубконто.Количество();
текСумма=проводка.сумма;
ТекКонтрагент = Справочники.Контрагенты.ПустаяСсылка();
Для суб = 2 по МаксЧислоСубконто Цикл
ТекНомерСубконто = суб - 1;
Если суб > ЧислоСубконто Тогда
Прервать;
КонецЕсли;
    ТекВидСубконто = ТекСчет.ВидыСубконто[ТекНомерСубконто].ВидСубконто;
    Если ТекВидСубконто=ПланыВидовХарактеристик.ВидыСубконтоБюджет.Контрагенты Тогда
ТекКонтрагент = сокрЛП(Проводка["СубконтоДт"][ТекВидСубконто]);
Продолжить;
КонецЕсли;
Если ТекВидСубконто<>ПланыВидовХарактеристик.ВидыСубконтоБюджет.НаправленияДеятельности Тогда
Продолжить;
КонецЕсли;

    Для к = й по Текст.КоличествоСтрок() Цикл
         Стр = Текст.ПолучитьСтроку(к);
         МассивЭлементов = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр);
                      а=сокрлп(массивэлементов[0]);
  б=ЧИСЛО(массивэлементов[2]);

             если (текконтрагент=а) и (тексумма=б) тогда

      Текнаправление = Справочники.Направлениядеятельности.НайтиПоНаименованию(МассивЭлементов[1]);
    проводка["СубконтоДт"][ТекВидСубконто] = ТекНаправление;
й=к;
прервать;


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

БухОбъект.Записать();
КонецЦикла;


ЗафиксироватьТранзакцию();

предупреждение ("ВСЕ ППЦ Я ПЕРЕГРеЛСЯ. ГОТОВ!  "+ текущаядата());
КонецПроцедуры

Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл с данными";
Диалог.ПолноеИмяФайла = ИмяФайла;

Диалог.Фильтр = "Текстовые файлы (*.txt)|*.txt";

Если Диалог.Выбрать() Тогда
ИмяФайла = Диалог.ПолноеИмяФайла;
КонецЕсли;

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


для наглядности выложил код без
что-то неочень читабельно

PukewhileRunningAMile

Процедура КнопкаВыполнитьНажатие(Кнопка)
   Текст = Новый ТекстовыйДокумент;
   Текст.Прочитать(ИмяФайла);
   
   
   й=1;
             Если БухОперация.Пустая() Тогда
         ПРЕДУПРЕЖДЕНИЕ ("ОПЕРАЦИЮ ВЫБЕРИ, ДА, СЛЫШИШЬ?!")     ;
         Возврат;
   КонецЕсли;
   
   МаксЧислоСубконто    = Метаданные.ПланыСчетов["ЕПСБУ"].МаксКоличествоСубконто;
   
   НачатьТранзакцию();
   БухОбъект = БухОперация.ПолучитьОбъект();
   
   ТекПроводки = БухОбъект.Движения.ЕПСБУ;
   
   ТекПроводки.Прочитать();

   
   
         
//*******************************************      
         
   Для каждого Проводка из ТекПроводки Цикл
         ТекСчет = Проводка.СчетДт;
         ЧислоСубконто  = ТекСчет.ВидыСубконто.Количество();
         текСумма=проводка.сумма;
         ТекКонтрагент = Справочники.Контрагенты.ПустаяСсылка();
      Для суб = 2 по МаксЧислоСубконто Цикл
         ТекНомерСубконто = суб - 1;
         Если суб > ЧислоСубконто Тогда
            Прервать;
         КонецЕсли;   
          ТекВидСубконто = ТекСчет.ВидыСубконто[ТекНомерСубконто].ВидСубконто;      
          Если ТекВидСубконто=ПланыВидовХарактеристик.ВидыСубконтоБюджет.Контрагенты Тогда          
            ТекКонтрагент = сокрЛП(Проводка["СубконтоДт"][ТекВидСубконто]);
            Продолжить;
         КонецЕсли;
         Если ТекВидСубконто<>ПланыВидовХарактеристик.ВидыСубконтоБюджет.НаправленияДеятельности Тогда
            Продолжить;
         КонецЕсли;
         
          Для к = й по Текст.КоличествоСтрок() Цикл
               Стр = Текст.ПолучитьСтроку(к);
               МассивЭлементов = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр);
                      а=сокрлп(массивэлементов[0]);
                 б=ЧИСЛО(массивэлементов[2]);
         
                если (текконтрагент=а) и (тексумма=б) тогда
            
         
                    Текнаправление = Справочники.Направлениядеятельности.НайтиПоНаименованию(МассивЭлементов[1]);
                   проводка["СубконтоДт"][ТекВидСубконто] = ТекНаправление;
                  й=к;
                  прервать;
            ;            
            
              конецесли;   
           КонецЦикла;                 
       КонецЦикла;
       //*************************
      
    БухОбъект.Записать();   
   КонецЦикла;
   
   
   ЗафиксироватьТранзакцию();

предупреждение ("ВСЕ ППЦ Я ПЕРЕГРеЛСЯ. ГОТОВ!  "+ текущаядата());
КонецПроцедуры

Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)
   Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
   Диалог.Заголовок = "Выберите файл с данными";
   Диалог.ПолноеИмяФайла = ИмяФайла;
   //Диалог.ПредварительныйПросмотр = Истина;
   Диалог.Фильтр = "Текстовые файлы (*.txt)|*.txt";
      
   Если Диалог.Выбрать() Тогда
      ИмяФайла = Диалог.ПолноеИмяФайла;
   КонецЕсли;
   
КонецПроцедуры

PukewhileRunningAMile

ну вот вроде бы получилось код выложить нормально... простите за кучу сообщений

Процедура КнопкаВыполнитьНажатие(Кнопка)
   Текст = Новый ТекстовыйДокумент;
   Текст.Прочитать(ИмяФайла);
   //ф=текущаядата();
   
   й=1;
             Если БухОперация.Пустая() Тогда
         ПРЕДУПРЕЖДЕНИЕ ("ОПЕРАЦИЮ ВЫБЕРИ, ДА, СЛЫШИШЬ?!")     ;
         Возврат;
   КонецЕсли;
   
   МаксЧислоСубконто    = Метаданные.ПланыСчетов["ЕПСБУ"].МаксКоличествоСубконто;
   
   НачатьТранзакцию();
   БухОбъект = БухОперация.ПолучитьОбъект();
   
   ТекПроводки = БухОбъект.Движения.ЕПСБУ;
   
   ТекПроводки.Прочитать();

   
   
         
//*******************************************      
         
   Для каждого Проводка из ТекПроводки Цикл
         ТекСчет = Проводка.СчетДт;
         ЧислоСубконто  = ТекСчет.ВидыСубконто.Количество();
         текСумма=проводка.сумма;
         ТекКонтрагент = Справочники.Контрагенты.ПустаяСсылка();
      Для суб = 2 по МаксЧислоСубконто Цикл
         ТекНомерСубконто = суб - 1;
         Если суб > ЧислоСубконто Тогда
            Прервать;
         КонецЕсли;   
          ТекВидСубконто = ТекСчет.ВидыСубконто[ТекНомерСубконто].ВидСубконто;      
          Если ТекВидСубконто=ПланыВидовХарактеристик.ВидыСубконтоБюджет.Контрагенты Тогда          
            ТекКонтрагент = сокрЛП(Проводка["СубконтоДт"][ТекВидСубконто]);
            Продолжить;
         КонецЕсли;
         Если ТекВидСубконто<>ПланыВидовХарактеристик.ВидыСубконтоБюджет.НаправленияДеятельности Тогда
            Продолжить;
         КонецЕсли;
         
          Для к = й по Текст.КоличествоСтрок() Цикл
               Стр = Текст.ПолучитьСтроку(к);
               МассивЭлементов = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр);
                      а=сокрлп(массивэлементов[0]);
                 б=ЧИСЛО(массивэлементов[2]);
         //текнаправление=проводка["субконтодт"][теквидсубконто];
                если (текконтрагент=а) и (тексумма=б) тогда
              //Если НЕ ЗначениеЗаполнено(Проводка["СубконтоДт"][ТекВидСубконто]) Тогда
            //Если Не ТекКонтрагент.Пустая() Тогда
         
                    Текнаправление = Справочники.Направлениядеятельности.НайтиПоНаименованию(МассивЭлементов[1]);
                   проводка["СубконтоДт"][ТекВидСубконто] = ТекНаправление;
                  й=к;
                  прервать;
             //   КонецЕсли;//КонецЕсли;            
            
              конецесли;   
           КонецЦикла;                 
       КонецЦикла;
       //*************************
       //текпроводка.записать();
    БухОбъект.Записать();   
   КонецЦикла;
   
   
   ЗафиксироватьТранзакцию();

предупреждение ("ВСЕ ППЦ Я ПЕРЕГРеЛСЯ. ГОТОВ!  "+ текущаядата());
КонецПроцедуры

Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)
   Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
   Диалог.Заголовок = "Выберите файл с данными";
   Диалог.ПолноеИмяФайла = ИмяФайла;
   //Диалог.ПредварительныйПросмотр = Истина;
   Диалог.Фильтр = "Текстовые файлы (*.txt)|*.txt";
      
   Если Диалог.Выбрать() Тогда
      ИмяФайла = Диалог.ПолноеИмяФайла;
   КонецЕсли;
   
КонецПроцедуры


PukewhileRunningAMile

Цитировать

Процедура КнопкаВыполнитьНажатие(Кнопка)
   Текст = Новый ТекстовыйДокумент;
   Текст.Прочитать(ИмяФайла);
   //ф=текущаядата();
   
   й=1;
             Если БухОперация.Пустая() Тогда
         ПРЕДУПРЕЖДЕНИЕ ("ОПЕРАЦИЮ ВЫБЕРИ, ДА, СЛЫШИШЬ?!")     ;
         Возврат;
   КонецЕсли;
   
   МаксЧислоСубконто    = Метаданные.ПланыСчетов["ЕПСБУ"].МаксКоличествоСубконто;
   
   НачатьТранзакцию();
   БухОбъект = БухОперация.ПолучитьОбъект();
   
   ТекПроводки = БухОбъект.Движения.ЕПСБУ;
   
   ТекПроводки.Прочитать();

   
   
         
//*******************************************      
         
   Для каждого Проводка из ТекПроводки Цикл
         ТекСчет = Проводка.СчетДт;
         ЧислоСубконто  = ТекСчет.ВидыСубконто.Количество();
         текСумма=проводка.сумма;
         ТекКонтрагент = Справочники.Контрагенты.ПустаяСсылка();
      Для суб = 2 по МаксЧислоСубконто Цикл
         ТекНомерСубконто = суб - 1;
         Если суб > ЧислоСубконто Тогда
            Прервать;
         КонецЕсли;   
          ТекВидСубконто = ТекСчет.ВидыСубконто[ТекНомерСубконто].ВидСубконто;      
          Если ТекВидСубконто=ПланыВидовХарактеристик.ВидыСубконтоБюджет.Контрагенты Тогда          
            ТекКонтрагент = сокрЛП(Проводка["СубконтоДт"][ТекВидСубконто]);
            Продолжить;
         КонецЕсли;
         Если ТекВидСубконто<>ПланыВидовХарактеристик.ВидыСубконтоБюджет.НаправленияДеятельности Тогда
            Продолжить;
         КонецЕсли;
         
          Для к = й по Текст.КоличествоСтрок() Цикл
               Стр = Текст.ПолучитьСтроку(к);
               МассивЭлементов = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр);
                      а=сокрлп(массивэлементов[0]);
                 б=ЧИСЛО(массивэлементов[2]);
         //текнаправление=проводка["субконтодт"][теквидсубконто];
                если (текконтрагент=а) и (тексумма=б) тогда
              //Если НЕ ЗначениеЗаполнено(Проводка["СубконтоДт"][ТекВидСубконто]) Тогда
            //Если Не ТекКонтрагент.Пустая() Тогда
         
                    Текнаправление = Справочники.Направлениядеятельности.НайтиПоНаименованию(МассивЭлементов[1]);
                   проводка["СубконтоДт"][ТекВидСубконто] = ТекНаправление;
                  й=к;
                  прервать;
             //   КонецЕсли;//КонецЕсли;            
            
              конецесли;   
           КонецЦикла;                 
       КонецЦикла;
       //*************************
       //текпроводка.записать();
    БухОбъект.Записать();   
   КонецЦикла;
   
   
   ЗафиксироватьТранзакцию();

предупреждение ("ВСЕ ППЦ Я ПЕРЕГРеЛСЯ. ГОТОВ!  "+ текущаядата());
КонецПроцедуры

Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)
   Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
   Диалог.Заголовок = "Выберите файл с данными";
   Диалог.ПолноеИмяФайла = ИмяФайла;
   //Диалог.ПредварительныйПросмотр = Истина;
   Диалог.Фильтр = "Текстовые файлы (*.txt)|*.txt";
      
   Если Диалог.Выбрать() Тогда
      ИмяФайла = Диалог.ПолноеИмяФайла;
   КонецЕсли;
   
КонецПроцедуры



PukewhileRunningAMile

еще раз простите за МультиПОстинг....
в общем залез в отладчик. запустил обработку.. заметил что на строке

БухОбъект.Записать();

происходит длительная задержка в секунд 10.. видимо это и есть причина долгого выполнение обработки
подскажите, есть ли другой способ записывать программно проводки.. :? 
или может быть этот способ нормальный просто чего то не хватает:? ну каких либо дополнительных ссылок платформе.. по типо Тыкнуть ей пальцем что конкретно сохранять из этих циклов..

PukewhileRunningAMile

ТЕМУ МОЖНО ЗАКРЫВАТЬ,,,

НАШЕЛ РЕШЕНИЕ ПРОБЛЕМЫ

Теги:

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

Рейтинг@Mail.ru

Поиск