Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
13 Дек 2017, 16:15
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: обработка  (Прочитано 3296 раз)

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

Оффлайн PukewhileRunningAMile

  • *
  • Сообщений: 17
  • РЕПУТАЦИЯ: 1
  • КПД: 6%
  • Регистрация: 2011-05-23
  • Сайт: 
  • Профессия: Программист 1С
добрый вечере, Уважаемые старожилы, столкнулся я с такой проблемой:
занимаюсь переходом с ББУ7.7. на ббу 8.2 поправляю аналитику по счету 205.03.00 добавил в 8.2 еще одно субконто по этому счету,из 7.7 выгрузил необходимые данные из соответствующих документов в текстовый файл, соответственно теперь надо это поле в проводках заполнить (документ Операция ) написал обработочку, протестил ее на заполнении документа операция с малым количеством проводок - все работает замечательно выгруженные данные из текстового файла встают в нужное поле... начинаю запускать обработку для больших документов ОПЕРАЦИЯ (число строк в таблице боле 5000)  не получаю никаких результатов - в статусе просто ОБРАБОТКа ВЫПОЛняется... беда... вот код, подскажите пожалуйста
 
Процедура КнопкаВыполнитьНажатие(Кнопка)
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(ИмяФайла);


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

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

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

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

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




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

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

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

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


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

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


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

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

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

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

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

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




Оффлайн PukewhileRunningAMile

  • *
  • Сообщений: 17
  • РЕПУТАЦИЯ: 1
  • КПД: 6%
  • Регистрация: 2011-05-23
  • Сайт: 
  • Профессия: Программист 1С
Re: обработка
« Ответ #1: 27 Май 2011, 19:17 »
Процедура КнопкаВыполнитьНажатие(Кнопка)
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(ИмяФайла);


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

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

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

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

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




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

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

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

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


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

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


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

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

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

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

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

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


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

Оффлайн PukewhileRunningAMile

  • *
  • Сообщений: 17
  • РЕПУТАЦИЯ: 1
  • КПД: 6%
  • Регистрация: 2011-05-23
  • Сайт: 
  • Профессия: Программист 1С
Re: обработка
« Ответ #2: 27 Май 2011, 19:24 »
Процедура КнопкаВыполнитьНажатие(Кнопка)
   Текст = Новый ТекстовыйДокумент;
   Текст.Прочитать(ИмяФайла);
   
   
   й=1;
             Если БухОперация.Пустая() Тогда
         ПРЕДУПРЕЖДЕНИЕ ("ОПЕРАЦИЮ ВЫБЕРИ, ДА, СЛЫШИШЬ?!")     ;
         Возврат;
   КонецЕсли;
   
   МаксЧислоСубконто    = Метаданные.ПланыСчетов["ЕПСБУ"].МаксКоличествоСубконто;
   
   НачатьТранзакцию();
   БухОбъект = БухОперация.ПолучитьОбъект();
   
   ТекПроводки = БухОбъект.Движения.ЕПСБУ;
   
   ТекПроводки.Прочитать();

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

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

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

Оффлайн PukewhileRunningAMile

  • *
  • Сообщений: 17
  • РЕПУТАЦИЯ: 1
  • КПД: 6%
  • Регистрация: 2011-05-23
  • Сайт: 
  • Профессия: Программист 1С
Re: обработка
« Ответ #3: 27 Май 2011, 19:26 »
ну вот вроде бы получилось код выложить нормально... простите за кучу сообщений

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

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

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

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


Оффлайн PukewhileRunningAMile

  • *
  • Сообщений: 17
  • РЕПУТАЦИЯ: 1
  • КПД: 6%
  • Регистрация: 2011-05-23
  • Сайт: 
  • Профессия: Программист 1С
Re: обработка
« Ответ #4: 27 Май 2011, 19:27 »
Цитировать

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

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

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

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



Оффлайн PukewhileRunningAMile

  • *
  • Сообщений: 17
  • РЕПУТАЦИЯ: 1
  • КПД: 6%
  • Регистрация: 2011-05-23
  • Сайт: 
  • Профессия: Программист 1С
Re: обработка
« Ответ #5: 27 Май 2011, 22:19 »
еще раз простите за МультиПОстинг....
в общем залез в отладчик. запустил обработку.. заметил что на строке

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

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

Оффлайн PukewhileRunningAMile

  • *
  • Сообщений: 17
  • РЕПУТАЦИЯ: 1
  • КПД: 6%
  • Регистрация: 2011-05-23
  • Сайт: 
  • Профессия: Программист 1С
Re: обработка
« Ответ #6: 28 Май 2011, 00:47 »
ТЕМУ МОЖНО ЗАКРЫВАТЬ,,,

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


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
172 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
51 Сообщений
alex0402
49 Сообщений
andron81_81
39 Сообщений
AIFrame
37 Сообщений
MuI_I_Ika MuI_I_Ika
34 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 784
  • Точка Скрытых: 0
  • Точка Пользователей: 12
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal