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


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


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С

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