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

Автор Тема: Загрузка текстового файла с количеством позиций более 300 000 наименований,как настроить загрузку порциями?  (Прочитано 216 раз)

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

Оффлайн ZSS

  • *
  • Сообщений: 3
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2016-09-29
  • Сайт: 
Для Сч = 1 по Строк Цикл     
      
      Состояние("Обрабатывается строка " + Сч + " из " + Строк);
                             
      ТекСтрокаНач   = Текст.ПолучитьСтроку(Сч); 
      ТекСтрока      = СтрЗаменить(ТекСтрокаНач,";",Символы.ПС);
      
      Если СтрЧислоСтрок(ТекСтрока) < 9 Тогда
         Сообщить("Пропустили строку: " + ТекСтрокаНач);
         Продолжить;
      КонецЕсли;     
      
      Реферанс   = СтрЗаменить(СтрПолучитьСтроку(ТекСтрока,1),"""","");
      Реферанс   = СокрЛП(Реферанс);       
      
      Цена      = Число(СтрПолучитьСтроку(ТекСтрока,8));
      Цена      = Окр(Цена * 1.18,0,1);
      
      Попытка
         Семья      = Число(СтрЗаменить(СтрПолучитьСтроку(ТекСтрока,3),"""",""));
      Исключение   
         Семья      =0;
      КонецПопытки;
         
      Сегмент      = СокрЛП(СтрЗаменить(СтрПолучитьСтроку(ТекСтрока,4),"""",""));
      
      П   = Найти(Реферанс,"`");
      Если П > 0 Тогда
         Реферанс   = Сред(Реферанс,П + 1);
      КонецЕсли;
                                                   
      Если ПустаяСтрока(Реферанс) Тогда
         Сообщить("Пропустили строку: " + ТекСтрокаНач + ". Пустой реферанс");
         Продолжить;
      КонецЕсли;
      
      Сообщить("Обрабатываем реферанс: " + Реферанс);
                     
      ПропуститьЗагрузкуЦены   = 0;
      
      Если Цена > 0 Тогда
      Иначе
         Сообщить("Пропустили. Нет цены.");
         ПропуститьЗагрузкуЦены   = 1;
      КонецЕсли;     
      
      НашлиНом = спрНоменклатура.НайтиПоРеквизиту("Артикул",Реферанс);
      Если  НашлиНом = спрНоменклатура.ПустаяСсылка() Тогда
         //Сообщить("Пропустили. Не найден реферанс: " + Реферанс,"!");
         Продолжить;
      КонецЕсли;     
      
      Если НашлиНом.ЭтоГруппа Тогда
         Продолжить;
      КонецЕсли;   
      
      ЦенаПродажа = обПолучитьЦену(ВыбТипЦен,НашлиНом.Ссылка,,,,, , , );
      
      //сохраняем номенклатуру
      //СохранятьНоменклатуру   = 0;
      //Если НашлиНом.Семья <> Семья Тогда
      //   НашлиНом.Семья   = Семья;
      //   СохранятьНоменклатуру   = 1;
      //КонецЕсли;
      //
      //Если СокрЛП(НашлиНом.Сегмент) <> Сегмент Тогда
      //   НашлиНом.Сегмент   = Сегмент;
      //   СохранятьНоменклатуру   = 1;
      //КонецЕсли;                       
      //
      //Если СохранятьНоменклатуру = 1 Тогда
      //   НашлиНом.Записать();
      //КонецЕсли;
      //сохраняем номенклатуру             
      
      Если ПропуститьЗагрузкуЦены   = 0 Тогда
      Иначе
         Продолжить;
      КонецЕсли;      
      
      Если ФлагФиксЦеныПропустить = 1 Тогда
         Сообщить("Пропустили. Цена зафиксирована.");
         Продолжить;
      КонецЕсли;        
      
      ВалютаТипаЦены = обВалютаТипаЦены(, ВыбТипЦен);
      Если Рубли<>ВалютаТипаЦены Тогда
         Цена=обПересчет(Цена,ВалютаТипаЦены,КонецДня(ТекущаяДата()),Рубли,КонецДня(ТекущаяДата()));
      КонецЕсли;
      
      Если Цена<>ЦенаПродажа Тогда
         новстр = ДоОб.Товары.Добавить();
         новстр.БазоваяЕдиницаИзмерения = НашлиНом.ОсновнаяЕдиницаИзмерения;
         новстр.ЕдиницаИзмерения = НашлиНом.ОсновнаяЕдиницаИзмерения;
         новстр.Коэффициент = 1;
         новстр.Номенклатура = НашлиНом;
         //новстр.ПроцентНаценки = Запрос.Процент;
         новстр.Цена = Цена;
         
         Сообщить("Установлена цена: " + СокрЛП(Цена));
         ОбновленоЦен   = ОбновленоЦен   + 1;
         
         Если ДоОб.Товары.Количество()>2000 Тогда
            ДоОб.Записать(РежимЗаписиДокумента.Проведение);
            ДоОб.УстановитьНовыйНомер();
            
            ДоОб = ДокЦены.СоздатьДокумент();
            ДоОб.Дата = ТекущаяДата();
            ДоОб.ДатаНачалаДействия = ТекущаяДата();
            ДоОб.ДатаОперации = ТекущаяДата();
            ДоОб.ДатаСоздания = ТекущаяДата();
            ДоОб.ТипЦен = ВыбТипЦен;
            ДоОб.ВалютаДокумента = Рубли;
         КонецЕсли;
      КонецЕсли;
   КонецЦикла;


Оффлайн ZSS

  • *
  • Сообщений: 3
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2016-09-29
  • Сайт: 
Полный код обработки

//*******************************************
Процедура Обработать()
   Если НЕ ЗначениеЗаполнено(ВыбТипЦен) Тогда
      Предупреждение("Тип цен не выбран");
      Возврат;
   КонецЕсли; 
   
   Если ФлагФиксЦеныПропустить = 1 Тогда
   ИначеЕсли Вопрос("Обработать зафиксированные цены ?",РежимДиалогаВопрос.ДаНет) <>  КодВозвратаДиалога.Да Тогда
      Возврат;
   КонецЕсли;             
   
   Файл =  Новый Файл(ВыбФайл);
   Если НЕ Файл.Существует() Тогда
      сообщить("Файл не найден или не доступен.");
      Возврат;
   КонецЕсли;
   
   спрНоменклатура   = Справочники.Номенклатура;
   ДокЦены         = Документы.ИзменениеЦен; 
                          
   Текст = Новый ТекстовыйДокумент;
   Текст.Прочитать(ВыбФайл);
   
   Строк   = Текст.КоличествоСтрок();   
   
   ОбновленоЦен   = 0;
   
   Рубли = Константы.ВалютаРегламентированногоУчетаОрганизаций.Получить();
   
   ДоОб = ДокЦены.СоздатьДокумент();
   ДоОб.Дата = ТекущаяДата();
   ДоОб.ДатаНачалаДействия = ТекущаяДата();
   ДоОб.ДатаОперации = ТекущаяДата();
   ДоОб.ДатаСоздания = ТекущаяДата();
   ДоОб.ТипЦен = ВыбТипЦен;
   ДоОб.ВалютаДокумента = Рубли;
   
   Для Сч = 1 по Строк Цикл     
      
      Состояние("Обрабатывается строка " + Сч + " из " + Строк);
                             
      ТекСтрокаНач   = Текст.ПолучитьСтроку(Сч); 
      ТекСтрока      = СтрЗаменить(ТекСтрокаНач,";",Символы.ПС);
      
      Если СтрЧислоСтрок(ТекСтрока) < 9 Тогда
         Сообщить("Пропустили строку: " + ТекСтрокаНач);
         Продолжить;
      КонецЕсли;     
      
      Реферанс   = СтрЗаменить(СтрПолучитьСтроку(ТекСтрока,1),"""","");
      Реферанс   = СокрЛП(Реферанс);       
      
      Цена      = Число(СтрПолучитьСтроку(ТекСтрока,8));
      Цена      = Окр(Цена * 1.18,0,1);
      
      Попытка
         Семья      = Число(СтрЗаменить(СтрПолучитьСтроку(ТекСтрока,3),"""",""));
      Исключение   
         Семья      =0;
      КонецПопытки;
         
      Сегмент      = СокрЛП(СтрЗаменить(СтрПолучитьСтроку(ТекСтрока,4),"""",""));
      
      П   = Найти(Реферанс,"`");
      Если П > 0 Тогда
         Реферанс   = Сред(Реферанс,П + 1);
      КонецЕсли;
                                                   
      Если ПустаяСтрока(Реферанс) Тогда
         Сообщить("Пропустили строку: " + ТекСтрокаНач + ". Пустой реферанс");
         Продолжить;
      КонецЕсли;
      
      Сообщить("Обрабатываем реферанс: " + Реферанс);
                     
      ПропуститьЗагрузкуЦены   = 0;
      
      Если Цена > 0 Тогда
      Иначе
         Сообщить("Пропустили. Нет цены.");
         ПропуститьЗагрузкуЦены   = 1;
      КонецЕсли;     
      
      НашлиНом = спрНоменклатура.НайтиПоРеквизиту("Артикул",Реферанс);
      Если  НашлиНом = спрНоменклатура.ПустаяСсылка() Тогда
         //Сообщить("Пропустили. Не найден реферанс: " + Реферанс,"!");
         Продолжить;
      КонецЕсли;     
      
      Если НашлиНом.ЭтоГруппа Тогда
         Продолжить;
      КонецЕсли;   
      
      ЦенаПродажа = обПолучитьЦену(ВыбТипЦен,НашлиНом.Ссылка,,,,, , , );
      
      //сохраняем номенклатуру
      //СохранятьНоменклатуру   = 0;
      //Если НашлиНом.Семья <> Семья Тогда
      //   НашлиНом.Семья   = Семья;
      //   СохранятьНоменклатуру   = 1;
      //КонецЕсли;
      //
      //Если СокрЛП(НашлиНом.Сегмент) <> Сегмент Тогда
      //   НашлиНом.Сегмент   = Сегмент;
      //   СохранятьНоменклатуру   = 1;
      //КонецЕсли;                       
      //
      //Если СохранятьНоменклатуру = 1 Тогда
      //   НашлиНом.Записать();
      //КонецЕсли;
      //сохраняем номенклатуру             
      
      Если ПропуститьЗагрузкуЦены   = 0 Тогда
      Иначе
         Продолжить;
      КонецЕсли;      
      
      Если ФлагФиксЦеныПропустить = 1 Тогда
         Сообщить("Пропустили. Цена зафиксирована.");
         Продолжить;
      КонецЕсли;        
      
      ВалютаТипаЦены = обВалютаТипаЦены(, ВыбТипЦен);
      Если Рубли<>ВалютаТипаЦены Тогда
         Цена=обПересчет(Цена,ВалютаТипаЦены,КонецДня(ТекущаяДата()),Рубли,КонецДня(ТекущаяДата()));
      КонецЕсли;
      
      Если Цена<>ЦенаПродажа Тогда
         новстр = ДоОб.Товары.Добавить();
         новстр.БазоваяЕдиницаИзмерения = НашлиНом.ОсновнаяЕдиницаИзмерения;
         новстр.ЕдиницаИзмерения = НашлиНом.ОсновнаяЕдиницаИзмерения;
         новстр.Коэффициент = 1;
         новстр.Номенклатура = НашлиНом;
         //новстр.ПроцентНаценки = Запрос.Процент;
         новстр.Цена = Цена;
         
         Сообщить("Установлена цена: " + СокрЛП(Цена));
         ОбновленоЦен   = ОбновленоЦен   + 1;
         
         Если ДоОб.Товары.Количество()>2000 Тогда
            ДоОб.Записать(РежимЗаписиДокумента.Проведение);
            ДоОб.УстановитьНовыйНомер();
            
            ДоОб = ДокЦены.СоздатьДокумент();
            ДоОб.Дата = ТекущаяДата();
            ДоОб.ДатаНачалаДействия = ТекущаяДата();
            ДоОб.ДатаОперации = ТекущаяДата();
            ДоОб.ДатаСоздания = ТекущаяДата();
            ДоОб.ТипЦен = ВыбТипЦен;
            ДоОб.ВалютаДокумента = Рубли;
         КонецЕсли;
      КонецЕсли;
   КонецЦикла;
   
   Если ДоОб.Товары.Количество()>0 Тогда
      ДоОб.Записать(РежимЗаписиДокумента.Проведение);
      ДоОб.УстановитьНовыйНомер();
   КонецЕсли;
   
   Предупреждение("Обновлено цен: " + ОбновленоЦен);
КонецПроцедуры                         

Процедура ПриОткрытии()
   ФлагФиксЦеныПропустить   = Истина;
КонецПроцедуры 

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


Оффлайн Afinogen

  • *
  • Сообщений: 15
  • РЕПУТАЦИЯ: 1
  • КПД: 7%
  • Регистрация: 2016-08-24
  • Сайт: 
  • Профессия: Программист 1С
Синтаксис:

СтрЧислоСтрок(<Строка>)
Параметры:

<Строка> (обязательный)

Тип: Строка.
Исходная строка.
Возвращаемое значение:

Тип: Число.
Число строк.
Описание:

Позволяет посчитать число строк в многострочной строке. Строки в многострочной строке разделены символами перевода строк (Символы.ПС).

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Пример:

Для Х = 1 по СтрЧислоСтрок(ИсходныйТекст) Цикл
    ...
КонецЦикла;
 
т.е. определите общее количество строк
а затем ПолучитьСтроку()


Теги:
 

Ошибка при загрузке данных через (Обработка "Выгрузка и загрузка данных XML")

Автор Сергей_87Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 6804
Последний ответ 26 Апр 2012, 23:08
от Dethmontt
загрузка из "клиента банка"

Автор miximlРаздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 2127
Последний ответ 19 Июн 2012, 09:49
от miximl
Загрузка в 1С Управление Торговлей 11.1.5.16 электронных выписок из клиент банка "Альфа-Банк"

Автор regnusРаздел Пользователям "1С - Предприятие 8"

Ответов: 0
Просмотров: 8677
Последний ответ 11 Июл 2014, 17:22
от regnus
Проблема с внешней обработкой "Загрузка банк-клиент.erp"

Автор razielРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 6
Просмотров: 984
Последний ответ 24 Сен 2015, 20:13
от Kironten
Загрузка из "нестандартного" табличного документа (exel) в справочник

Автор uchenichokРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 408
Последний ответ 03 Июн 2016, 07:15
от cska-fanat-kz

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

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

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


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

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

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

* Реклама

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

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

MuI_I_Ika MuI_I_Ika
72 Сообщений
alex0402
57 Сообщений
cska-fanat-kz cska-fanat-kz
50 Сообщений
Kironten
49 Сообщений
LexaK
32 Сообщений
alexandr_ll
30 Сообщений
sertak sertak
26 Сообщений
djkeysi
24 Сообщений
BuhRust
23 Сообщений
Андрей1966
21 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 

Dellos Catering - выездной ресторан кейтеринг по всему Миру
SimplePortal 2.3.5 © 2008-2012, SimplePortal