Вход | Регистрация


Форумы на Кубань.Ру


1С:Предприятие ::

Метки:

Помогите! Как построить Табл. значений???

Ø
Я
   Архаровец
25.11.04 - 06:47
Есть одна таблица значений. В ней две колонки "ФИО" и "Контрагент"
Из этой ТЗ мне нужно выгрузить в другую ТЗ все уникальные записи колонки "ФИО", а в другую все остальные. Причем при сворачивании "контрагенты" теряются, а в получившихся ТЗ их надо вернуть.
Так это организовать?
 
 
   Guk
1 - 25.11.04 - 06:47
(0) Так...
   Zerg
2 - 25.11.04 - 06:49
(0) Пиши код
   Жюль
3 - 25.11.04 - 06:56
Выгружаешь свою тз в новую тз,добавляешь в ней новую колонку тип - число и сворачиваешь по ФИО, суммируя числовую колонку. Это по первой части. По второй подумаю
   Архаровец
4 - 25.11.04 - 07:06
ТЗ колонки "ФИО", "КОнтрагенты", "Служ". Служ = 1
ТЗ.Выгрузить(ТЗ1);
ТЗ1.Свернуть("ФИО","Служ")//Контрагенты могут быть разные, поэтому их при сворачивании приходиться не учитывать.
ТЗ1.НайтиЗначение(1,Стр,"Служ");
Для а = Стр по ТЗ1.КоличествоСтрок() Цикл
ТЗ1.УдалитьСтроку(а);
КонецЦикла; //так я получаю ТЗ1 не с идентичными записями.
Затем я перебираю ТЗ1 и ищу "фио" из ТЗ1 в "ФИО" тз и ТЗ2.ДобавитьСтроку() найденные записи. А из ТЗ1 удалить. Так я получу в ТЗ2 все не идентичные записи. В итоге я получаю в ТЗ2 все не идентичные, а в ТЗ все идентичные.
Вот так я бы сделал. Можно что-нибудь попроще?
   Guk
5 - 25.11.04 - 07:09
(4) Ё моё!...
   Архаровец
6 - 25.11.04 - 07:10
(1,5)Что это значит?
   Архаровец
7 - 25.11.04 - 07:12
Гук, Вы столь многословны, что я никак не могу уловить ход Ваших мыслей!
   Zerg
8 - 25.11.04 - 07:12
А ТЗ2 хде?
   Guk
9 - 25.11.04 - 07:14
(7) Вы не поверите, но ход Ваших мыслей, я не могу уловить со вчерашнего дня...
   MetaEditor
10 - 25.11.04 - 07:16
ну вопервых ктож так удаляет ...
делай так
ТЗ1.Сортировать("-Служ");
ТЗ1.НайтиЗначение(1,Стр,"Служ");
ТЗ1.КоличествоСтрок(Стр)
получиш ТЗ1 не с идентичными записями
или
КолСтрок=ТЗ1.КоличествоСтрок();
Для Сч=-КолСтрок  По -1 Цикл
ТЗ1.ПолучитьСтрокуПоНомеру(-Сч);
Если ТЗ1.Служ = 1 Тогда
тзСписанияРезерва.УдалитьСтроку();
КонецЕсли;
КонецЦикла;
 
  Рекламное место пустует
   MetaEditor
11 - 25.11.04 - 07:19
(тзСписанияРезерва читать ТЗ1)
   Архаровец
12 - 25.11.04 - 07:21
(9)Уважаемый Гук, если Вы готовы помочь, то спросите, что непонятно. Я постараюсь объяснить что я хочу.
(8)Ну я алгоритм пытаюсь изложить.
Значит так: Есть ТЗ с колонками "фио", "каонтрагент", "Служ"
Я выгружаю в ТЗ1 и сворачиваю, чтобы получить фамилии не идентичные.
Затем я Перебираю ТЗ1 и ищу "фио" из ТЗ1 в ТЗ и при нахождении создаю строку в ТЗ2 (с колонками "ФИО" и "Контрагент"), а в ТЗ удаляю эти строки.
В конце концов у меня получается ТЗ с уникальными записями, а ТЗ2 с неуникальными. Годиться такой алгоритм? Или можно как-то попроще?
   MetaEditor
13 - 25.11.04 - 07:24
первая заповедь программиста: работает - не трогай...
   Архаровец
14 - 25.11.04 - 07:24
(10) Ну ТЗ1 мне нужна как вспомогательная. Поскольку у нее нет "Контрагенты".
   Архаровец
15 - 25.11.04 - 07:27
(13) Чтобы работало, надо написать. Алгоритм в (12) подходи в качестве шаблона для написания или можно как-то лучше?
   Номер 6
16 - 25.11.04 - 07:36
(15)
Другими словами, тебе надо получить записи, которые повторяются в ТЗ.ФИО более одного раза?
   Архаровец
17 - 25.11.04 - 07:41
(16)В одной ТЗ все уникальные записи, а в другой все не уникальные (не свернутые) из общей ТЗ с колонками "ФИО" и "Контрагент".
   Номер 6
18 - 25.11.04 - 07:53
(17)
Значит, если мое предположение верно, можно поступить примерно так:
ТЗ.Выгрузить(тзТмп);
тзТмп.НоваяКолонка("КоличествоВхождений", "число");
заполнить_тзТмп_КоличествоВхождений_единицами();    // думаю понятно ;-)
тзТмп.Свернуть("ФИО", "КоличествоВхождений");
В результате в тзТмп.КоличествоВхождений получишь количество повторений ФИО в ТЗ. Ну, а далее, выбирай записи из ТЗ с нужным количество вхождений.
   Архаровец
19 - 25.11.04 - 08:14
(18)Посмотри, в ТЗ1 при сворачивании мы получим Фамилию сотра, который упоминается несколько раз. И мы (точнее я) делаю перебор ТЗ1, беру первую строку, ищу ВСЕ эти записи в ТЗ. Нахожу, делаю добавить строку в ТЗ2, а из ТЗ удаляю. То есть мне нужно в ТЗ2 получить не "ФИО" и количество вхождений, а столько строк "фио" сколько вхождений.
   Номер 6
20 - 25.11.04 - 08:29
(19)
Во-первых, при сворачивании мы получим Фамилию сотра, который упоминается как минимум один раз. Согласен? Но это не главное.
Во-вторых, тзТмп.КоличествоВхождений покажет нам в какую таблицу (ТЗ1 или ТЗ2) помещать записи с индексом тзТмп.ФИО. Согласен? Тогда:
тзТмп.ВыбратьСтроки();
пока тзТмп.ПолучитьСтроку() = 1 цикл
   если тзТмп.КоличествоВхождений = 1 тогда
      поместитьВсеЗаписиИзТЗ1СТакимФиоВТЗ1();
   иначе
      поместитьВсеЗаписиИзТЗ1СТакимФиоВТЗ2();
   конецЕсли;
конецЦикла;
   Архаровец
21 - 25.11.04 - 08:46
(20)Извини если туплю, но:
ТЗ - Это полная таблица значений с колонками "ФИО", "Контрагент", "Служ".
Я хочу из нее выкинуть все записи, которые не уникальны. Для этого я выгружаю всю ТЗ в ТЗ1 и сворачиваю. Затем сортирую ("-Служ").
Затем устраиваю перебор:
Пока ТЗ1.ПолучитьСтроку() = 1 Цикл
Если ТЗ1.Служ = 1 Тогда
Прервать;
иначе
Стр = 0;
Пока ТЗ.НайтиЗначение(ТЗ1.Фио,Стр,"ФИО") = 1 Цикл
ТЗ.ПолучитьСтрокуПоНомеру(Стр);
ТЗ2.НоваяСтрока();
ТЗ2.Фио = ТЗ.ФИО;
ТЗ2.Контрагент = ТЗ.Контрагент;
ТЗ.УдалитьСтроку();
КонецЦикла;
КонецЦикла;
...
Вот типа так. Как думаете?
   Номер 6
22 - 25.11.04 - 08:50
(21)
Дык я не понял, у тебя (21) работает или нет?
Если работает, в чем впрос?
Если не работает, воспользуйся (18) и (20).
   Архаровец
23 - 25.11.04 - 08:52
(21)Это я щас и написал. Щас копирую в 1С. Буду смотреть. Ну будет работать, куда денется, но с программной стороны достаточно профессионально? Может проще можно?
   Номер 6
24 - 25.11.04 - 09:00
(23) Попробуй, там видно будет. Если заработает, значит профессионально! ;-)
   Архаровец
25 - 25.11.04 - 09:25
В принципе работает. Только после ТЗ.УдалитьСтроку();
Надо было еще "Стр = 0;" поставить.
Чтож, раз критики нет, значит лучшего не придумать.
Всем спасибо за внимание.




Список тем форума

Форум Территория 1С

 
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует