Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как разбить Таблицу значений на несколько частей?

Как разбить Таблицу значений на несколько частей?
Я
   mila1231
 
26.03.19 - 07:54
Есть обычное приложение, дальше в функции запрос, результат записываю в таблицу значений и её же возвращаю. А дальше её нужно разбить на несколько.Как это можно сделать? Как я понимаю, через цикл, но я же не знаю конечное число ТаблицЗначений.
Вообще задача состоит в том, чтоб брать данные из запроса, а дальше записывать в файл, при этом файл не должен содержать более 100 строк. Возможно какое-то другое решение должно быть. Заранее спасибо за подсказки.
 
 
   ДенисЧ
 
1 - 26.03.19 - 07:56
а в чём проблема?
Цикл, проверка на количество строк прочитанных, запись файла, открытие нового...
И не забыть после цикла закрыть...
   mila1231
 
2 - 26.03.19 - 08:05
Я не могу сообразить, как цикл сделать Вот функция записи
       кодировка = КодировкаТекста.ANSI;
    ТекстовыйФайлЗапись = Новый ТекстовыйДокумент;
    
        Для  НачальныйИндекс По КонечныйИндекс Цикл
             ТекстовыйФайлЗапись.ДобавитьСтроку(текст);
        КонецЦикла;
     //ТекстовыйФайлЗапись.ДобавитьСтроку(текст);

    ТекстовыйФайлЗапись.Записать(имяфайла, Кодировка);
    ТекстовыйФайлЗапись.закрыть();
    Возврат 0;
я не могу сообразить, какой должен быть начальный и конечный индексы..то ли я такая то ли день такой....
   Aleksey
 
3 - 26.03.19 - 08:17
(2) И что этот код рабочий? Я имею ввиду цикл.
   SleepyHead
 
4 - 26.03.19 - 08:19
(0) Не надо таблицы значений разбивать вообще. В цикле сделай счетчик и как только он перевалит за 100, закрывай текущий файл и открывай новый, а счетчик сбрасывай в ноль.
   Aleksey
 
5 - 26.03.19 - 08:30
Для  й=НачальныйИндекс По КонечныйИндекс Цикл
   Если й % 100 = 0 тогда
      //новый док

       Если ТекстовыйДокумент.КоличествоСтрок() > 0 тогда
          ТекстовыйФайлЗапись.Записать(имяфайла, Кодировка);
       КонецЕсли;
       ТекстовыйФайлЗапись = Новый ТекстовыйДокумент;
   КонецЕсли;
   ТекстовыйФайлЗапись.ДобавитьСтроку(текст);
КонецЦикла;
Если ТекстовыйДокумент.КоличествоСтрок() > 0 тогда
   ТекстовыйФайлЗапись.Записать(имяфайла, Кодировка);
КонецЕсли;
   mila1231
 
6 - 26.03.19 - 11:19
Если кто разъжует, я рада буду, потому ка как поняла я и гугл ничего мне подходящего не выдаёт . Вот та самая функция, которая ничего не делит и она работает.Сюда передаётся, Та самая таблицазначений = текст и имя файла, оно уже по команде формируется.
/////////

Функция ЗаписатьCSV(текст,имяФайла)              
    кодировка = КодировкаТекста.ANSI;
    ТекстовыйФайлЗапись = Новый ТекстовыйДокумент;
    ТекстовыйФайлЗапись.ДобавитьСтроку(текст);
    ТекстовыйФайлЗапись.Записать(имяфайла, Кодировка);
    ТекстовыйФайлЗапись.закрыть();
    Возврат 0;
конецФункции
//////////

Теперь по циклу. Как я понимаю, я должна поставить цикл, который считает строки моего Текстового документа. Т.е внешний вид что-то типа такого?
Для Индекс = 1 по ТекстовыйФалкЗапись.КоличествоСтрок() Цикл
     Если ТекстовыйФалкЗапись.КоличествоСтрок() = 100 тогда
          ТекстовыйФайлЗапись.ДобавитьСтроку(текст);
          ТекстовыйФайлЗапись.Записать(имяфайла, Кодировка);
     конецЕсли;  
     ТекстовыйФайлЗапись.закрыть();
конецЦикла
   sqr4
 
7 - 26.03.19 - 11:24
Фото!
   mila1231
 
8 - 26.03.19 - 11:33
да я себя уже сама по интеллекту на год чувствую.
   sqr4
 
9 - 26.03.19 - 12:02
Лан, начни с постановки, что конкретно нужно сделать.
   1Сергей
 
10 - 26.03.19 - 12:05
разбей код на блоки:

1. Запрос
2. Создание файла
3. обход запроса,  заполнение файла
4. Запись файла

И дальше думай, что должно выполняться в каком порядке. Что до обхода, что внутри, что после. При каких условиях что должно происходить
 
 Рекламное место пустует
   mila1231
 
11 - 26.03.19 - 12:56
Из всего, что получилось-это 1. создать функцию с запросом, результат записать в таблицуЗначений и соответственно эту таблицу значений вернуть.
2. Сохранение ТаблицыЗначений в файл.csv. с разбивокй по 100 строк
И тут не поехало.
   ДенисЧ
 
12 - 26.03.19 - 12:58
Что именно не поехало? Вроде всё уже написали...
   1Сергей
 
13 - 26.03.19 - 14:03
(11) для годовасика неплохо уже :)
   mila1231
 
14 - 27.03.19 - 08:06
Я понимаю, что всё вроде и элементарно, но правда... не стала далеко ходить решила записать просто 100 строк. Возможно, я что-то не так делаю, покажите, если не трудно...
разделитель = ";";
    ТаблицаЗначений =  ПолучитьТабЗнач();  //из запроса

    текст =  СоздатьДанныеCSV(ТаблицаЗначений,разделитель);
    кодировка = КодировкаТекста.ANSI;
    НачальныйИндекс= 1;
    КонечныйИндекс = ТаблицаЗначений.Количество();
    
Для й=НачальныйИндекс по КонечныйИндекс цикл
    й=й+1;    
    ТекстовыйФайлЗапись = Новый ТекстовыйДокумент;    
Если й < 100  тогда    
     ТекстовыйФайлЗапись.ДобавитьСтроку(текст); 
     ТекстовыйФайлЗапись.Записать(имяфайла, Кодировка);
конецЕсли;
    
    
КонецЦикла;

у меня в файле всё равно весь объем...
   SleepyHead
 
15 - 27.03.19 - 08:12
(14) Ну так у вас такой код, который пишет весь объем файла каждый раз в каждый новый файл. Бегло просмотрел код, насчитал три логические ошибки, которые к этому приводят.
   Йохохо
 
16 - 27.03.19 - 08:16
(14) тебе надо %
Арифметические операции

В языке  определены следующие виды арифметических операций:
сложение
 (Оп1 + Оп2) 
вычитание 
 (Оп1 - Оп2)
умножение 
 (Оп1 * Оп2)
деление 
 (Оп1 / Оп2)
остаток от деления
 (Оп1 % Оп2) 
унарный минус
 (-Оп1)
   Мыш
 
17 - 27.03.19 - 08:31
разделитель = ";";
ДолжноБытьСтрокВФайле = 100;
ТаблицаЗначений =  ПолучитьТабЗнач();  //из запроса

текст =  СоздатьДанныеCSV(ТаблицаЗначений,разделитель);
ВсегоСтрокТекста = СтрЧислоСтрок(текст);
кодировка = КодировкаТекста.ANSI;
НомерФайла = 0;

Для НомерСтроки=1 По ВсегоСтрокТекста Цикл
   Если НомерСтроки%ДолжноБытьСтрокВФайле=1 Тогда
      ТекстовыйФайлЗапись=Новый ТекстовыйДокумент;
   КонецЕсли;
   СтрокаТекста = СтрПолучитьСтроку(текст, НомерСтроки);
   ТекстовыйФайлЗапись.ДобавитьСтроку(СтрокаТекста);
   Если НомерСтроки%ДолжноБытьСтрокВФайле=0 Тогда
      НомерФайла = НомерФайла + 1;
      имяфайла = "КакоетоИмя"+Формат(НомерФайла, "ЧГ=")+".csv";
      ТекстовыйФайлЗапись.Записать(имяфайла, Кодировка);
   КонецЕсли;
КонецЦикла;
Если Не НомерСтроки%ДолжноБытьСтрокВФайле=0 Тогда
   НомерФайла = НомерФайла + 1;
   имяфайла = "КакоетоИмя"+Формат(НомерФайла, "ЧГ=")+".csv";
   ТекстовыйФайлЗапись.Записать(имяфайла, Кодировка);
КонецЕсли;
   mila1231
 
18 - 28.03.19 - 04:26
О, спасибо, я немного по другому сделала, но ваш вариант короче)))

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует