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

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

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

Оффлайн ZSS

  • *
  • Регистрация: 2016-09-29
  • Сообщений: 26
  • РЕПУТАЦИЯ: 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 Тогда
            ДоОб.Записать(РежимЗаписиДокумента.Проведение);
            ДоОб.УстановитьНовыйНомер();
            
            ДоОб = ДокЦены.СоздатьДокумент();
            ДоОб.Дата = ТекущаяДата();
            ДоОб.ДатаНачалаДействия = ТекущаяДата();
            ДоОб.ДатаОперации = ТекущаяДата();
            ДоОб.ДатаСоздания = ТекущаяДата();
            ДоОб.ТипЦен = ВыбТипЦен;
            ДоОб.ВалютаДокумента = Рубли;
         КонецЕсли;
      КонецЕсли;
   КонецЦикла;


Оффлайн ZSS

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

//*******************************************
Процедура Обработать()
   Если НЕ ЗначениеЗаполнено(ВыбТипЦен) Тогда
      Предупреждение("Тип цен не выбран");
      Возврат;
   КонецЕсли; 
   
   Если ФлагФиксЦеныПропустить = 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

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

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

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

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

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

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

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

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

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


Теги:
 

Как вывести ноли в значении реквизита таблицы "Число"

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

Ответов: 0
Просмотров: 1205
Последний ответ 01 Фев 2017, 15:01
от Andrepan
Как организовать запрос 8.2 ?

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

Ответов: 2
Просмотров: 777
Последний ответ 26 Окт 2016, 12:58
от Fedor_Safonchik
Как создать с/ф на аванс при оплате УСЛУГ пластиковыми картами

Автор ЧебурёжикРаздел Пользователям "1С - Предприятие 8"

Ответов: 6
Просмотров: 6640
Последний ответ 01 Апр 2014, 05:23
от Чебурёжик
Как получить поле из табличной части с условием и без

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

Ответов: 2
Просмотров: 2389
Последний ответ 19 Дек 2013, 21:08
от natalia44
как в ОСВ ПО СЧЕТУ 10 СДЕЛАТЬ ЧТОБ ВЫХОДИЛА ДОК ПОСТУПЛЕНИЯ ПАРТИИ

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

Ответов: 1
Просмотров: 1292
Последний ответ 14 Ноя 2016, 13:32
от Летящий в даль

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

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

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


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

* Реклама

* Поиск

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

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

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

Геннадий ОбьГЭС Геннадий ОбьГЭС
69 Сообщений
LexaK
67 Сообщений
antoneus antoneus
32 Сообщений
Ивашка
27 Сообщений
neek666
25 Сообщений
KATERINA 861
19 Сообщений
SSC
15 Сообщений
alexandr_ll
13 Сообщений
Алексей_1985_06
12 Сообщений
pouyo
8 Сообщений

* Кто онлайн

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

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

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

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

Поиск