Имя: Пароль:
1C
1С v8
Самый оптимальный способ сформировать из ТЗ другие ТЗ по контрольному столбцу
, ,
0 bas28000
 
01.08.13
10:53
Есть ТЗ, в ней есть некий столбец, в котором некий код. Нужно разбить всю ТЗ на несколько других ТЗ, которые будут содержать строки только с одним и тем же неким кодом. Код произвольный, то есть это не перечисление неких символов и/или цифр/чисел, это просто практически случайное число, но по основной ТЗ оно постоянно будет повторяться для каких-либо строк.

Как наиболее оптимально получить множество ТЗ с одинаковыми контрольными кодами?
1 Ёпрст
 
01.08.13
10:53
запросом
2 Maxus43
 
01.08.13
10:55
+ пакетным запросом.
в каждом пакете отбор из основной по опред условию,
ВыполнитьПакет().Выгрузить()
3 Defender aka LINN
 
01.08.13
10:56
(1) Запросом "множество ТЗ" ты не получишь, один хрен обходить надо будет.
(0) Вы знаете, иногда таки приходится программировать...
4 Ёпрст
 
01.08.13
10:58
(3) почему ? пакетный..
5 Ёпрст
 
01.08.13
10:59
вполне подоёдет
6 Maxus43
 
01.08.13
10:59
(4) ну пакеты обходить надо всё равно. но там 3 строки кода с коментариями
7 Defender aka LINN
 
01.08.13
11:00
(4) Один фиг
8 salvator
 
01.08.13
11:02
(0)
Получаешь список уникальных кодов. Для каждого из них создаешь копию основной таблицы и удаляешь из нее строки, где код не равен этому уникальному коду.
9 МихаилМ
 
01.08.13
11:08
сверните тз в дз
10 Полотенчик
 
01.08.13
11:08
(8) +1. Только при копировании сразу указывай отбор по коду и не надо будет удалять лишние
11 bas28000
 
01.08.13
11:44
(9) В смысле?
(8) Вот да, как его получить оптимальным образом?
12 Полотенчик
 
01.08.13
11:45
(11) скопируй в новую таблицу значений только столбец с кодом и сверни таблицу по этому столбцу
13 salvator
 
01.08.13
11:47
(10) +100 забыл совсем про этот вариант
14 1Сергей
 
01.08.13
11:49
дурацкая задача. Какой прок от неопределенного множества таблиц значений? Думаю, задачу можно решить другими способами
15 Euguln
 
01.08.13
11:52
(2) +1
16 bas28000
 
01.08.13
11:56
(14) Тут дело в том, что задача действительно дурацкая. Стоит она потому, что есть некие файлы обмена, которые либо в csv, либо в dbf, и вот бывает, что эти файлы содержат в одной таблице несколько документов сразу. Рассортировать эти документы можно только по номеру документа, который указывается в одном столбце, то есть в один файл просто фигачатся все нужные документы.

Идиоту, который это придумал, я бы давно в голову гвоздь забил, но он далеко. Приходится вот разбирать эти файлы как-то иначе.

Может быть подскажете другой вариант?
17 Лефмихалыч
 
модератор
01.08.13
11:59

МВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхтаблиц = МВТ;
Запрос.Текст = "ВЫЮРАТЬ ВТ.ТаСамаяКолонка, ВТ.Колонка1, ВТ.Колонка2 ПОМЕСТИТЬ ВТ ИЗ &ВТ КАК ВТ"
Запрос.УстановитьПараметр("ВТ", ТвояОднаТабюлицаЗначений);
Запрос.Выполнить();

Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ ТаСамаяКолонка из ВТ";
Выборка = Запрос.Выполнить().Выбрать();

Запрос.Текст = "ВЫБРАТЬ * ИЗ ВТ ГДЕ ТаСамаяКолонка = &Значение";
Пока Выборка.Следующий() Цикл
   Запрос.УстановитьПараметр("Значение", Выборка.ТаСамаяКолонка);
   ВотТвояТЗ = Запрос.Выполнить().Выгрузить();
КонецПока;

Запрос.Текст = "УНИЧТОЖИТЬ ВТ";
Запрос.Выполнить();
Запрос.МенеджерВременныхтаблиц.Закрыть();


только это запрос в цикле и лучше так не делать
18 Лефмихалыч
 
модератор
01.08.13
12:01
(16) тогда проще принять, как данность, что в каждом файле большеодного документа, и при помощи итогов по номеру выгрузить в дерево, а дверево уже обходить с вложенной выборкой. Запросов в цикле не будет
19 bas28000
 
01.08.13
12:02
(18) Как данность это уже и принято, да. А вот что ты после написал, я не понял :)
20 Euguln
 
01.08.13
12:02
(17) А в чем проблема в цикле устанавливать один и тот же текст запроса и менять параметр Запрос.УстановитьПараметр("Значение" + Сч, Выборка.ТаСамаяКолонка);
и выполнить пакетом.
21 bas28000
 
01.08.13
12:21
(20) довольно криво, нет?
22 Лефмихалыч
 
модератор
01.08.13
12:24
(19) смотри


Запрос.Текст = "ВЫБРАТЬ ВТ.ТаСамаяКолонка, ВТ.Колонка1
|ИЗ ВТ
|ИТОГИ ПО ТаСамаяКолонка";
ВыборкаДокументы = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаДокументы.Следующий() Цикл
   // создать документ с номером ВыборкаДокумент.ТаСамаяКолонка
   ВыборкаСтроки = ВыборкаДокументы.Выбрать();
   Пока ВыборкаСтроки.Следующий() Цикл
      //заполнить ранее созданный документ
   КонецЦикла;
   //записать заполненный документ
КонецЦкила


(20) да ни в чем в общем-то, просто запрос может получится непредсказуемо огромный. Это риск.
23 bas28000
 
01.08.13
12:27
(22) Ага, понятно. Спасибо!
24 1Сергей
 
01.08.13
12:29
(16) по прежнему не вижу необходимости разбивать ТЗ на несколько
25 Лефмихалыч
 
модератор
01.08.13
12:36
(24) ее и не было, автор просто цель со средствами перепутал
26 bas28000
 
01.08.13
12:46
(24) А, Сергей, если дело в этом, то верно, можно и иначе эти данные хранить и обрабатывать, по факту нужен все равно какой-то алгоритм, позволяющий получать эти данные порциями, которые будут замешаны на контрольном коде. У вас есть предложение именно по этой части алгоритма? :)
27 Полотенчик
 
01.08.13
12:55
(17) фу, ужас какой. зачем таблицу перегонять в БД, записывать на хард временные таблицы ради банального перебора?
28 sunson
 
01.08.13
12:59
//Копируем найденные файлы в указанную папку
    СписокКаталогов = ТЗ.Скопировать();
    СписокКаталогов.Свернуть("Каталог");
    Для каждого КаталогФайла Из СписокКаталогов Цикл
        ОтборКаталога = Новый Структура("Каталог", КаталогФайла.Каталог);
        ФайлыКаталога = ТЗ.НайтиСтроки(ОтборКаталога);
        Если ФайлыКаталога.Количество() > 0 Тогда
            Путь = ПутьСохранения + "\"  + КаталогФайла.Каталог;
            Файл = Новый Файл(Путь);
            Если Не Файл.Существует() Тогда
                СоздатьКаталог(Путь);
            КонецЕсли;
            Для каждого ФайлЧертежа Из ФайлыКаталога Цикл
                КопироватьФайл(ФайлЧертежа.ИмяФайлаИсточника, ФайлЧертежа.ИмяФайлаПриемника);                
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
29 sunson
 
01.08.13
13:01
(26) еще можно делать НоваяТЗ = СтараяТЗ.Скопировать(Отбор)
AdBlock убивает бесплатный контент. 1Сергей