Вход | Регистрация
 
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 или кнопку "Обновить" в браузере.