Как найти максимальное значение в таблице значений

Содержание:

1.     Решение задачи нахождения максимального значения в 1С

         Исходными условиями является то, что в платформе системе 1С есть некоторая таблица, из столбца которой нужно найти наибольшее значение и вывести его.     

         Это означает, что программно необходимо «обойти» все строки заданного столбца таблицы документа, после чего, сделать выборку и вывести наибольшее число (или тип значения), этот реквизит должен быть выведен в форму.

         При помощи синтаксис-помощника 1С можно сгенерировать такой код программы 1С для этих целей (пример основан на сортировке по цене):

         Внутри задачи данное программное решение будет выглядеть так – выполнение цикла с заполнением таблицы, проведение сортировки нужного столбца по убыванию и вывод индекса столбца с максимальным значением 1С:  

2.     Программное решение 1С, распознающее и выводящее наибольшее и наименьшее значение из таблицы

         Рассмотрим схожее программное решение 1С, которое будет распознавать и выводить и наибольшее, и наименьшее значение из таблицы, возвращаться будет структура с наименьшим и наибольшим значениями из заданной таблицы.

         Отличие этого способа от предыдущих в том, что он основывается на запросах и находит также минимум, что является более универсальным способом.

         Рассмотрим также ситуацию, когда задана таблица значений (количество столбцов и строк в ней задаёт юзер 1С) и нужно получить наибольшие значения для каждого столбца, в этом случае будет работать следующий программный код 1С:

Специалист компании “Кодерлайн”

Айдар Фархутдинов

 0 

   

Распечатать

1С 8.x : Поиск максимума и минимума в таблице значений

Код 1C v 8.х

 // Возвращает структуру с минимальное и максимальное значение в таблице значений
// Структура содержит поля Макс,Мин
// тзДанные - таблица значений
// ПолеМакс, ПолеМин - строка с именем максимального и минимального поля
// Если поле ПолеМакс неуказанно то минимум ищеться по ПолеМин
Функция МаксМинВТаблицеЗначений(тзДанные, ПолеМин, ПолеМакс = Неопределено)
Результат = Новый Структура("Макс,Мин");

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

ЗапросМакМин.Текст = СтрЗаменить(ЗапросМакМин.Текст, "_ПолеМакс" , ПолеМакс);
ЗапросМакМин.Текст = СтрЗаменить(ЗапросМакМин.Текст, "_ПолеМин" , ПолеМин);
ЗапросМакМин.УстановитьПараметр("РабТаблица", тзДанные);
РезМаксМин = ЗапросМакМин.Выполнить().Выгрузить();

Результат["Макс"]= РезМаксМин[0].Макс;
Результат["Мин"] = РезМаксМин[0].Мин;

Возврат Результат;
КонецФункции

Как вы получите максимальное значение в таблице в данном случае?

Я
   MatrosoV AleXXXand_R

27.05.11 – 13:43

1. Пакетным запросом 0% (0)
2. Упордочить и взять значение из первой строки 0% (0)
3. Перебор в цикле 0% (0)
4. Другое 0% (0)

Всего мнений: 0

Вопрос такой – представим себе – используется клиент-серверная база 1С,есть таблица значений – к примеру, в ней 30 колонок и 100 000 строк

Нужно взять максимальное значений из определенной колонки, вам нужно сделать наиболее оптимально.

Чем вы воспользуетесь?

   ДенисЧ

1 – 27.05.11 – 13:43

Получу при формировании таблицы

   MatrosoV AleXXXand_R

2 – 27.05.11 – 13:44

   MatrosoV AleXXXand_R

3 – 27.05.11 – 13:44

(1) Условие – получить можно только после формирования

   MatrosoV AleXXXand_R

4 – 27.05.11 – 13:44

Голосую

   Mitriy

5 – 27.05.11 – 13:45

либо запрос, либо перебор… по обстоятельствам…

   MatrosoV AleXXXand_R

6 – 27.05.11 – 13:46

(5) смотри “в ней 30 колонок и 100 000 строк”

   H A D G E H O G s

7 – 27.05.11 – 13:49

Уточню, что ищщетца. Если максимум ссылочного типа – сначало уточню, как он ищется (по UID, по Представлению).

Если по UID – перебор, если представление – Пакет.

Если примитивный тип – перебор.

   Lys

8 – 27.05.11 – 13:49

Произведу замер производительности и выберу оптимальный вариант.

   MatrosoV AleXXXand_R

9 – 27.05.11 – 13:51

(7) Максимальное числовое значение

   MatrosoV AleXXXand_R

10 – 27.05.11 – 13:52

“”в ней 30 колонок и 100 000 строк””

Что-то подсказывает мне, что перебор здесь сработает как минимум раз в 100 медленнее, чем через пакетный запрос

   Reset

11 – 27.05.11 – 13:54

Получу при формировании таблицы. Если же навяжут условие из (3) – тогда постараюсь провести серию замеров всеми способами.

   МихаилМ

12 – 27.05.11 – 14:03

за запросы надо кастрировать.это не симптом. это диагноз программиста-халтурщика.

упорядочить – халтура.

упорядочить не получится тк 30 колонок

(я понял искать нужно по всем колонам)

проверю до первого удовлетворительного с учетом прогноза

возможного роста инфо потока.

переберу

выгружу в одномерный массив переберу.

если на сервере выгружу в массивЫ переберу в N фоновых заданий  , где N число доступных ядер.

попробую использовать скд, как быстрый итератор .

либо выгружу в safe array и обработаю в оле объекте (если виндоус ). подойдет мс скрипт контрол.

напишу ВК.

   73

13 – 27.05.11 – 14:06

(0)

Построителем запроса с источником данных

   Mitriy

14 – 27.05.11 – 14:06

(12) ахренеть… особенно N фоновых заданий, оле и ВК…

   Megas

15 – 27.05.11 – 14:11

(12) “за запросы надо кастрировать.это не симптом. это диагноз программиста-халтурщика.”  – За такие слова надо предавать анафеме от БГ прямо по центральному каналу !!! Чтоб вообще никто не подпускал к конфигуратору

   Megas

16 – 27.05.11 – 14:12

Как левая пятка подскажет =)

   vmv

17 – 27.05.11 – 14:13

я бы кастрировал за вк

   Stepa86

18 – 27.05.11 – 14:16

Замер рулит, чо… не удивлюсь, если сортировка отработает быстрее перебора

   AaNnDdRrEeYy

19 – 27.05.11 – 14:18

(12) супер мастер г0внокода…

   Дикообразко

20 – 27.05.11 – 14:19

Получу при формировании таблицы.

за условие (3) плюну в рожу, тому кто его поставил..ибо он не компетентен

   Stepa86

21 – 27.05.11 – 14:21

(20) как вариант – таблица приходит из закрытого модуля (инкапсуляция реализации типа) или модифицировать код формирования таблицы дольше/сложнее…

   MatrosoV AleXXXand_R

22 – 27.05.11 – 14:21

(20) вот .. плевать не надо только 🙂

А то далеко, не попадешь 🙂

   MatrosoV AleXXXand_R

23 – 27.05.11 – 14:22

Условие – есть исходная таблица, нужно получить из нее максимальные значения, а как она сформирована, не интересует 🙂 Нужно взять из формированной таблицы

   Ахиллес

24 – 27.05.11 – 14:23

(12) Много букав и все не по делу. Научись читать сначала, пейсатель буквами.

>Нужно взять максимальное значений из ОПРЕДЕЛЁННОЙ колонки.

Стотыщь это не цифра для скуля, что бы я такой фигнёй себе голову забивал.

   MatrosoV AleXXXand_R

25 – 27.05.11 – 14:23

(23) вернее – максимальное значение из 1 колонки

   Дикообразко

26 – 27.05.11 – 14:24

(21) извраты по необходимости не обсуждает

если нельзя, но сильно надо, то можно (цы)

   MatrosoV AleXXXand_R

27 – 27.05.11 – 14:24

(12) смотри (0)

   Дикообразко

28 – 27.05.11 – 14:24

*обсуждаем

   Stepa86

29 – 27.05.11 – 14:24

(25) на остальные колонки положить?

   MatrosoV AleXXXand_R

30 – 27.05.11 – 14:24

   MatrosoV AleXXXand_R

31 – 27.05.11 – 14:25

вообще может так лучше –

ТЗ1 = ТЗ.Скопировать(,”НужнаяКолонка”)

и запрос уже к ТЗ1

   Mitriy

32 – 27.05.11 – 14:27

(31) окстись…

   Stepa86

33 – 27.05.11 – 14:27

тогда в замер еще б включил ВыгрузитьКолонку( с последующим перебором массива и Скопировать()->Свернуть()… но все это только в том случае, если это реально узкое место, иначе сделал бы как понятнее

   Ахиллес

34 – 27.05.11 – 14:28

(31) Смотря, что в результате получить надо, мож там строку целиком вернуть надо, а не только одно значение.

   vmv

35 – 27.05.11 – 14:28

(31) ТЗ.Сортировать(“НужнаяКолонка”) тогда уж и запрос не нужен что сортировка, что копирование одинаково долгоиграющие

   Stepa86

36 – 27.05.11 – 14:28

(34) судя по условию нужно значение получить тока

   MatrosoV AleXXXand_R

37 – 27.05.11 – 14:30

А воспримет ли система такой запрос и будет ли такое оптимальным?

ВЫБРАТЬ

  МАКСИМУМ(ЕСТЬNULL(ТЗ.НужнаяКолонка,0)) КАК МаксЗначение

ПОМЕСТИТЬ МаксимальноеЗначение

ИЗ &ТЗ КАК ТЗ;

ВЫБРАТЬ

 МаксимальноеЗначение.МаксЗначение

ИЗ МаксимальноеЗначение КАК МаксимальноеЗначение

   AaNnDdRrEeYy

38 – 27.05.11 – 14:32

(35) тз оперативку жрет, присем такая тз много сожрет

   Попытка1С

39 – 27.05.11 – 14:35

Все больше склоняюсь к мнение что в общем случае перебор, с учетом задачи.

   Ахиллес

40 – 27.05.11 – 14:36

А нафига сортировать то? Сортировка быстрее перебора сработает? Сильно сомневаюсь чего то.

   Lama12

41 – 27.05.11 – 14:40

Сверну таблицу только по этому столбцу (без суммирования).

После отсортирую то что получится и выберу первое значение.

И набор данных уменьшится, и читабельность кода повысится.

На скорость плевать.

Главное читабельность кода и возможность его поддержки.

   Megas

42 – 27.05.11 – 14:41

(26) Это мега тч документа… его создали юзеры вручную и поняли что хотят получить максимальное значение.

   Megas

43 – 27.05.11 – 14:42

(0)

Нужно так:

МаксЧисло = 42;

Сообщить(МаксЧисло)

   AaNnDdRrEeYy

44 – 27.05.11 – 14:42

(42) а вот почему 100 000 строк. в тч документа больше быть не может. понятно.

   Lama12

45 – 27.05.11 – 14:42

(41)Мы не на заре эпохи ЭВМ.

На производительность смотрю только в крайних случаях (проведение документов), и портить читабельность кода за скорость… “нафиг” “нафиг”…

   Lys

46 – 27.05.11 – 14:42

А как вы поступите при такой вот задаче?

Дано: модуль проведения “тяжелого” документа, необходимо найти максимальное значение в большой ТЗ. Замеры показывают:

– поиск перебором занимает 0,07 сек;

– поиск построителем занимает 0,11 сек;

– поиск сортировкой занимает 0,14 сек;

– поиск запросом к ТЗ занимает 0,15 сек;

– запись движений в регистры занимает 50 сек.

Варианты решения:

а) сделаю оптимально, по замеру;

б) сделаю как удобнее мне, быстрее и читабельнее;

в) перестану страдать херней, сделаю как придется и займусь оптимизацией записи движений в регистры.

   Stepa86

47 – 27.05.11 – 14:43

(43) с получением случайного значения не путаешь?

   Дикообразко

48 – 27.05.11 – 14:45

(46) взял и весь кайф обломал 🙁

нафига?

   Lys

49 – 27.05.11 – 14:46

(48) Надоели=)

   AaNnDdRrEeYy

50 – 27.05.11 – 14:47

сделаю оптимально, по замеру;

сделаю как удобнее мне, быстрее и читабельнее;

т.е запросом к тз.

вот так правдоподобней выглядит

– поиск перебором занимает 0,15  сек;

– поиск запросом к ТЗ занимает 0,07 сек;

   Megas

51 – 27.05.11 – 14:47

(47) Нет конечно!!!

wiki:Ответ_на_главный_вопрос_жизни,_вселенной_и_всего_такого

42 – отвечает на главный вопрос!

(46) Буду сидеть с умным лицом и  делать вид что работаю =)

   Stepa86

52 – 27.05.11 – 14:48

(46) а где вариант “сделаю оптимально как мне кажется правильным (без замера)” ?

и да, “Premature optimization is the root of all evil” (с) Кнут вроде б

   Ахиллес

53 – 27.05.11 – 14:53

(50) Проверь. Помещение в запрос будет самым медленным, перебор самым быстрым.

   73

54 – 27.05.11 – 14:55

(46) Реально мерял?

   КонецЦикла

55 – 27.05.11 – 14:59

Получать такую большую таблицу для такого тупого использования? Перебор… ВК…

Про индексы кто-нить слышол?

   MatrosoV AleXXXand_R

56 – 27.05.11 – 15:01

(55) ты про это?

ИндексыКоллекции.Добавить (CollectionIndexes.Add)

ИндексыКоллекции (CollectionIndexes)

Добавить (Add)

Синтаксис:

Добавить(<Колонки>)

Параметры:

<Колонки> (обязательный)

Тип: Строка. Строковое описание колонок индекса в виде: “Колонка1, Колонка2…”.

Возвращаемое значение:

Тип: ИндексКоллекции.

Описание:

Добавляет индекс в список индексов коллекции.

   MatrosoV AleXXXand_R

57 – 27.05.11 – 15:02

(55) а как в данном случае можно использовать индекс?

   AaNnDdRrEeYy

58 – 27.05.11 – 15:03

никак они нужны для поиска по тз

   КонецЦикла

59 – 27.05.11 – 15:04

(56) Я в принципе про индексы, не в ТЗ так во временной или невременной таблице… вообще странно что такая большая таблица получается “в просто ТЗ”

(46) Значение поиска всегда было в 3-ей строке ТЗ из 100000? 🙂

Тогда перебор рулит конечно

   H A D G E H O G s

60 – 27.05.11 – 15:08

(59) Не ПОИСК, а МАКСИМУМ.

   Oleg_Nik

61 – 27.05.11 – 15:09

Поскольку индексов нет, перебор будет в любом случае.

Поэтому – (46) выглядит вполне логично.

   Lys

62 – 27.05.11 – 15:10

(54) Нет, наобум цифры взял.

Делать мне нечего – специально мерить, своей работы хватает.

   kiruha

63 – 27.05.11 – 15:14

(0)

Ваш вопрос показывает, что Вы весьма туго понимаете

как происходит выполнение запроса или реализация алгоритма.

В поставленной Вами задаче – SQL будет искать тем же перебором

Так же непонятен смысл формирования ТЗ из 100 000, да еще без индексов

Советую изучать матчасть, а не плодить глупые опросы

   Lys

64 – 27.05.11 – 15:16

(59) Тут немного не поняли мою мысль.

Во-первых, все зависит от конкретной задачи.

Во-вторых, оптимизацией подобного рода имеет смысл заниматься, если выигрыш по времени сопоставим по порядку с временем работы ВСЕЙ процедуры (задачи, транзакции, etc).

В третьих, устраивать религиозные споры из таких вещей – глупо, избыточный перфекционизм до добра не доводит. Чреват как минимум срывом сроков по основной задаче, которую выполняешь.

Все ИМХО.

   MatrosoV AleXXXand_R

65 – 27.05.11 – 15:17

(63) я не писал, что без индексов

Просто перебор – выполняется на клиенте, запрос – на сервер (клиент-серверная база)

Смысл – понять, что будет работать быстрее по времени

   MatrosoV AleXXXand_R

66 – 27.05.11 – 15:19

(63) + если бы был глупый вопрос, я бы давным давно получил на него ответ 🙂

   AaNnDdRrEeYy

67 – 27.05.11 – 15:53

(66) вот ответ, попробуй прогони пустой цикл 100 000 раз

для а =1 по 100 000 цикл

конеццикла

и посмотри сколько он у тебя работать будет.

   MatrosoV AleXXXand_R

68 – 27.05.11 – 15:55

А что … Сейчас попробую прогнать вот такой кусок ради интереса

Сообщить(ТекущаяДата());

для а =1 по 100000 цикл

   Состояние(а);

конеццикла;

Сообщить(ТекущаяДата());

   MatrosoV AleXXXand_R

69 – 27.05.11 – 15:56

вернее даже так …

Сообщить(ТекущаяДата());

для а =1 по 100000 цикл

   Состояние(а);

   ОбработкаПрерыванияПользователя();

конеццикла;

Сообщить(ТекущаяДата());

Для подстраховки …

   H A D G E H O G s

70 – 27.05.11 – 15:56

Убери вот это: Состояние(а);

Вон из профессии!

   MatrosoV AleXXXand_R

71 – 27.05.11 – 15:57

да пошутил я … Строка(а) конечно же

   H A D G E H O G s

72 – 27.05.11 – 15:57

На Состояние у тебя уйдет 95% времени выполнения.

Бить табуреткой по пальцам таких замерщиков.

   MatrosoV AleXXXand_R

73 – 27.05.11 – 15:58

пошла

   H A D G E H O G s

74 – 27.05.11 – 15:58

(71) *facepalm

   MatrosoV AleXXXand_R

75 – 27.05.11 – 15:58

(72) на сравнение – не меньше

   H A D G E H O G s

76 – 27.05.11 – 15:58

И этот человек поднимает такие темы? Мва-ха-ха

   AaNnDdRrEeYy

77 – 27.05.11 – 15:59

после того как прогонишь попробуй поместить тз со 100 000 строк можно даже с одной колонкой в запрос и тоже замерь.

   H A D G E H O G s

78 – 27.05.11 – 15:59

(75) Открой для себя “Замер производительности”.

А лучше закрой конфигуратор, напиши по собственному и иди в менеджеры.

   MatrosoV AleXXXand_R

79 – 27.05.11 – 15:59

1 мин. 25 сек – прогон цикла

   AaNnDdRrEeYy

80 – 27.05.11 – 16:00

а помешение в запрос?

   MatrosoV AleXXXand_R

81 – 27.05.11 – 16:00

(78) Я это уже лет как 8 знаю – “Замер производительности”, я еще 7.5 видел, а ты говоришь 🙂

   AaNnDdRrEeYy

82 – 27.05.11 – 16:01

(81) не отвлекайся замеряй

   MatrosoV AleXXXand_R

83 – 27.05.11 – 16:01

(80) Сейчас что-нибудь придумаю ради эксперемента 🙂

   H A D G E H O G s

84 – 27.05.11 – 16:01

(81) И меряешь таймером с квантом в секунду?

   H A D G E H O G s

85 – 27.05.11 – 16:13

(81) Ааа, семерочник? (** сплевывая цигарку). Ручки свои к нежной восьмерке тянешь? НукаИдикаСюдаНа :-).

   AaNnDdRrEeYy

86 – 27.05.11 – 16:15

(80) код написать?

   MatrosoV AleXXXand_R

87 – 27.05.11 – 16:17

(85) 8.1 занимаюсь уже почти 3 года, 8.2 – полгода

   MatrosoV AleXXXand_R

88 – 27.05.11 – 16:17

Так что я универсал 🙂

   AaNnDdRrEeYy

89 – 27.05.11 – 16:17

(80) сейчас новая ветка появится

“Как поместить Тз в запрос?”

   H A D G E H O G s

90 – 27.05.11 – 16:18

(88) ВАЗ 2104?

   MatrosoV AleXXXand_R

91 – 27.05.11 – 16:18

Вот набацал небольшой код в УАТе

Процедура КнопкаВыполнитьНажатие(Кнопка)

   ЗапросЗ = Новый Запрос;

   ЗапросЗ.Текст =

   “ВЫБРАТЬ

   |    уатЗаправкаГСМЗаправки.Ссылка,

   |    уатЗаправкаГСМЗаправки.НомерСтроки,

   |    уатЗаправкаГСМЗаправки.Дата,

   |    уатЗаправкаГСМЗаправки.ТС,

   |    уатЗаправкаГСМЗаправки.ГСМ,

   |    уатЗаправкаГСМЗаправки.Водитель,

   |    уатЗаправкаГСМЗаправки.ПластиковаяКарта,

   |    ЕСТЬNULL(уатЗаправкаГСМЗаправки.Количество, 0) КАК Количество,

   |    уатЗаправкаГСМЗаправки.Сумма,

   |    уатЗаправкаГСМЗаправки.Валюта,

   |    уатЗаправкаГСМЗаправки.СтавкаНДС,

   |    уатЗаправкаГСМЗаправки.СуммаНДС,

   |    уатЗаправкаГСМЗаправки.ПутевойЛист,

   |    уатЗаправкаГСМЗаправки.Плотность,

   |    уатЗаправкаГСМЗаправки.НомераТалонов

   |ИЗ

   |    Документ.уатЗаправкаГСМ.Заправки КАК уатЗаправкаГСМЗаправки”;

   РезЗ = ЗапросЗ.Выполнить().Выгрузить();

   
   Сообщить(“Записей – “+Строка(РезЗ.Количество()));

   
   Сообщить(“Через запрос начало – “+ТекущаяДата());    

   ЗапросЗ1 = Новый Запрос;

   ЗапросЗ1.Текст =

   “ВЫБРАТЬ

   |    ЕСТЬNULL(ТЗ.Количество, 0) КАК Количество

   |ПОМЕСТИТЬ МаксимальноеЗначение

   |ИЗ

   |    &ТЗ КАК ТЗ

   |;

   |

   |////////////////////////////////////////////////////////////////////////////////

   |ВЫБРАТЬ

   |    МАКСИМУМ(МаксимальноеЗначение.Количество) КАК МаксЗначение

   |ИЗ

   |    МаксимальноеЗначение КАК МаксимальноеЗначение”;

   ЗапросЗ1.УстановитьПараметр(“ТЗ”,РезЗ);

   РезЗ1 = ЗапросЗ1.Выполнить().Выбрать();

   
   Сообщить(“Через запрос окончание – “+ТекущаяДата());

   
   Если РезЗ1.Следующий() Тогда

       Сообщить(РезЗ1.МаксЗначение);

   КонецЕсли;

   
   Сообщить(“Через перебор начало – “+ТекущаяДата());    

   МаксЗначение = РезЗ[0].Количество;

   
   Для Каждого СТР_З ИЗ РезЗ Цикл

       МаксЗначение = ?(СТР_З.Количество>МаксЗначение,СТР_З.Количество,МаксЗначение);

   КонецЦикла;

   
   Сообщить(“Через перебор окончание – “+ТекущаяДата());    

   
   Сообщить(МаксЗначение);

КонецПроцедуры

   MatrosoV AleXXXand_R

92 – 27.05.11 – 16:19

Вот результат

Записей – 45 742

Через запрос начало – 27.05.2011 16:14:46

Через запрос окончание – 27.05.2011 16:14:50

300

Через перебор начало – 27.05.2011 16:14:50

Через перебор окончание – 27.05.2011 16:14:51

300

   Ёпрст

93 – 27.05.11 – 16:19

(69) теперь замерь вот так и удивись:

Сообщить(ТекущаяДата());для а =1 по 100000 цикл Состояние(а); ОбработкаПрерыванияПользователя(); конеццикла; Сообщить(ТекущаяДата());

   MatrosoV AleXXXand_R

94 – 27.05.11 – 16:20

   MatrosoV AleXXXand_R

95 – 27.05.11 – 16:21

По моему примеру, те, кто сказал, что перебор будет быстрее – правы. Признаю свою ошибку 🙂

   Ёпрст

96 – 27.05.11 – 16:21

(94) ты не тупи, напиши (93) как есть – в одну строку и замерь.

   MatrosoV AleXXXand_R

97 – 27.05.11 – 16:22

(96) 2 сек

   73

98 – 27.05.11 – 16:23

(95) Попробуй Построителем.

   AaNnDdRrEeYy

99 – 27.05.11 – 16:25

как так пустой цикл минуту бежал а с условием

Через перебор начало – 27.05.2011 16:14:50

Через перебор оконч  – 27.05.2011 16:14:51

секунду чета ты неправильно мерииш.

   MatrosoV AleXXXand_R

100 – 27.05.11 – 16:27

(96) время увеличилось

27.05.2011 16:20:48

27.05.2011 16:22:35

Было 1 мин. 25 сек, стало 1 мин. 47 сек

Вывод максимума из столбца таблицы

Автор b1ackjke, 03 дек 2012, 15:12

0 Пользователей и 1 гость просматривают эту тему.

есть таблица в которой есть значения состоящая из столбцов M1,M2,M3,M4 и J. Столбец J – это сумма элементов M1-m4*1/4. Вопрос в том как вывести максимальный элемент из столбца J в поле “ответ”?  В 1С написании модулей практически ничего не понимаю, помогите пожалуйста  :( Хотя бы общие наводки, как это сделать…


Можно отсортировать таблицу по этой колонке по убыванию. Первая строка – будет ответ.
Можно перебором строк со сравнением значений функцией МАКС()
Можно сделать запрос и в нем вычислить максимальное значение.


Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!



Процедура Поиск_Максимального_Значение_В_Колонках_Заполняемая_ТаблицаНажатие(Элемент)
    Для Колоноки=0 По Заполняемая_Таблица.Колонки.Количество()-1 Цикл
        Сообщить("В колонке "+Заполняемая_Таблица.Колонки[Колоноки].Заголовок+" максимальное значение = "+Максимольное_Значение_Колонки_Вернуть(Колоноки,Заполняемая_Таблица));
    КонецЦикла;

        КонецПроцедуры

расскажите пожалуйста немного про синтаксис? В данном случае название процедуры может быть любым? И откуда берется значение “Заполняемая_Таблица”? Это название Табличной части?

Добавлено: 03 дек 2012, 21:17



Функция ВернутьМаксимольноеЗначениеКолонки(Знач ИмяКолонки="",таблица)

    Если ПустаяСтрока(ИмяКолонки) Тогда
        Возврат 0;
    КонецЕсли;

        Список = Новый СписокЗначений;

        Список.ЗагрузитьЗначения(таблица.ВыгрузитьКолонку(ИмяКолонки));

        Если Список.Количество() = 0 Тогда
        Возврат 0;
    КонецЕсли;

        Список.СортироватьПоЗначению(НаправлениеСортировки.Убыв);

        Возврат Список[0].Значение;

КонецФункции // ВернутьМаксимольноеЗначениеКолонки()


Нашел функцию нахождения максимума (она описана выше). Что передавать в качестве параметров(В качестве ИмяКолонки видимо “J”)?  и как передать параметр таблица, из формы документа.


Процедура КнопкаВыполнитьНажатие(Кнопка)

        //Переменная ТП - реквизит формы с типом Табличное поле (таблица значений)
    //Пример1
    Для Сч=0 ПО ТП.Колонки.Количество()-1 Цикл
        Сообщить("В колонке <"+ТП.Колонки[Сч].Заголовок+"> максимальное значение = "+ВернутьМаксимольноеЗначениеКолонки(Сч,ТП));
    КонецЦикла;
    //Пример2
    Сообщить("В колонке <МояКолонка> максимальное значение = "+ВернутьМаксимольноеЗначениеКолонки("МояКолонка",ТП));
    //Пример3
    Сообщить("В первой колонке максимальное значение = "+ВернутьМаксимольноеЗначениеКолонки(0,ТП));

        КонецПроцедуры

//Описание
//Применимо только для числовых значений
//------------------------------
//Параметры
//Индекс - тип:Число,строка - Индекс колонки, Имя колонки
//таблица - тип: ТаблицаЗначений - Таблица значений или табличное поле с типом таблица значений
Функция ВернутьМаксимольноеЗначениеКолонки(Знач Индекс="",таблица)

    Если ПустаяСтрока(Индекс) Тогда
        Возврат "Не задан индекс";
    КонецЕсли;

        Список = Новый СписокЗначений;

        Список.ЗагрузитьЗначения(таблица.ВыгрузитьКолонку(Индекс));

        Если Список.Количество() = 0 Тогда
        Возврат "В колонке отсутствуют значения";
    КонецЕсли;

        Список.СортироватьПоЗначению(НаправлениеСортировки.Убыв);

        Возврат Список[0].Значение;

КонецФункции // ВернутьМаксимольноеЗначениеКолонки()

Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!


У меня есть документ, в нем присутствует Табличная Часть Материалы, она же является реквизитом формы.  Как передать её в качестве параметра? пробовал вот так, но что то не вышло(


ТП = Элементы.Материалы;

За счет того, что не занимался раньше 1C туплю ужасно ( Может не так табличную часть создаю?


Вот так

ТП = Материалы.Выгрузить();
Сообщить("В колонке количество максимальное значение = "+ВернутьМаксимольноеЗначениеКолонки("Количество",ТП));

Если управляемое приложение то

ТП = Объект.Материалы.Выгрузить();
Сообщить("В колонке количество максимальное значение = "+ВернутьМаксимольноеЗначениеКолонки("Количество",ТП));

Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!


Попробовал, вот что пишет:
{Документ.МетодЛапласа.Форма.ФормаДокумента.Форма(60)}: Ошибка при вызове метода контекста (Выгрузить)
   ТП = Объект.Материалы.Выгрузить();
по причине:
Метод недоступен на клиенте

А если выполнять &НаСервере, то как вывести сообщение о максимуме?


Цитата: b1ackjke от 05 дек 2012, 13:20
Попробовал, вот что пишет:
{Документ.МетодЛапласа.Форма.ФормаДокумента.Форма(60)}: Ошибка при вызове метода контекста (Выгрузить)
   ТП = Объект.Материалы.Выгрузить();
по причине:
Метод недоступен на клиенте

А если выполнять &НаСервере, то как вывести сообщение о максимуме?

в серверной функции получаете ваше максимальное значение
на клиенте ее вызываете и сообщаете результат функции.

Получил помощь – скажи СПАСИБО.
Разобрался сам – расскажи другим.


Наконец то разобрался! Спасибо всем огромное!


0 / 0 / 0

Регистрация: 28.11.2012

Сообщений: 30

1

1C 8.x

Поиск максимального значения в колонках

02.12.2012, 21:06. Показов 21111. Ответов 20


Студворк — интернет-сервис помощи студентам

Есть таблица значений заполненная числами, количество колонок и строк задается пользователем. Как сделать что бы в сообщении выводилось максимальное значение в каждой колонке ?



0



Dethmontt

Модератор

Эксперт 1С

3720 / 2915 / 574

Регистрация: 10.03.2011

Сообщений: 11,481

Записей в блоге: 1

02.12.2012, 22:44

2

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Процедура КнопкаВыполнитьНажатие(Кнопка)
 
        //Переменная ТП - реквизит формы с типом Табличное поле (таблица значений)
    Для Каждого Колонка Из ТП.Колонки Цикл
        Сообщить("В колонке <"+Колонка.Имя+"> максимальное значение = "+ВернутьМаксимольноеЗначениеКолонки(Колонка.Имя,ТП));
    КонецЦикла;   
        
КонецПроцедуры
 
Функция ВернутьМаксимольноеЗначениеКолонки(Знач ИмяКолонки="",таблица)
 
    Если ПустаяСтрока(ИмяКолонки) Тогда 
        Возврат 0;
    КонецЕсли;
    
    Список = Новый СписокЗначений;
    
    Список.ЗагрузитьЗначения(таблица.ВыгрузитьКолонку(ИмяКолонки));
    
    Если Список.Количество() = 0 Тогда 
        Возврат 0;
    КонецЕсли;
    
    Список.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
    
    Возврат Список[0].Значение;
 
КонецФункции // ВернутьМаксимольноеЗначениеКолонки()



0



0 / 0 / 0

Регистрация: 28.11.2012

Сообщений: 30

03.12.2012, 00:57

 [ТС]

3

Везде 0 возвращает (



0



Dethmontt

Модератор

Эксперт 1С

3720 / 2915 / 574

Регистрация: 10.03.2011

Сообщений: 11,481

Записей в блоге: 1

03.12.2012, 01:27

4

ну ты посмотри почему ноль!

Добавлено через 2 минуты
Так попробуй:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    Для Сч=0 ПО ТП.Колонки.Количество()-1 Цикл
        Сообщить("В колонке <"+ТП.Колонки[сч].Имя+"> максимальное значение = "+ВернутьМаксимольноеЗначениеКолонки(Сч,ТП));
    КонецЦикла;   
        
КонецПроцедуры
 
Функция ВернутьМаксимольноеЗначениеКолонки(Знач ИндексКолонки="",таблица)
 
    Если ПустаяСтрока(ИндексКолонки) Тогда 
        Возврат "не задан индекс колонки";
    КонецЕсли;
    
    Список = Новый СписокЗначений;
    
    Список.ЗагрузитьЗначения(таблица.ВыгрузитьКолонку(ИндексКолонки));
    
    Если Список.Количество() = 0 Тогда 
        Возврат "В колонке нету значений!";
    КонецЕсли;
    
    Список.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
    
    Возврат Список[0].Значение;
 
КонецФункции // ВернутьМаксимольноеЗначениеКолонки()



1



MonoLog

0 / 0 / 0

Регистрация: 28.11.2012

Сообщений: 30

03.12.2012, 09:11

 [ТС]

5

Может окинешь код своим взглядом и скажешь где можно было сделать более короче/ проще. Число_Строк и Число_Колонок это поля ввода которые соответственно вводит пользователь.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Процедура Добавить_КолонкиНажатие(Элемент)
    Для Колонки=1 По Число_Колонок Цикл
    Исходная_Таблица.Колонки.Добавить(, Новый ОписаниеТипов("Число"),);
    КонецЦикла;
    ЭлементыФормы.Исходная_Таблица.СоздатьКолонки();
КонецПроцедуры
 
Процедура Добавить_СтрокиНажатие(Элемент)
    Для Строки=1 По Число_Строк Цикл
    Исходная_Таблица.Добавить();
    КонецЦикла;
КонецПроцедуры
 
Процедура Вставить_Таблицу_УмноженияНажатие(Элемент)
    Количество_Колонок=Исходная_Таблица.Колонки.Количество();
    Количество_Строк=Исходная_Таблица.Количество();
    Для ъ=1 По Количество_Колонок Цикл
    Для ъъ=1 По Количество_Строк Цикл
    Исходная_Таблица[ъ-1][ъъ-1]=ъ*ъъ;
    КонецЦикла;
    КонецЦикла;
    ЭлементыФормы.Исходная_Таблица.СоздатьКолонки();
КонецПроцедуры
 
Процедура Копировать_Исходная_Таблица_В_Заполняемая_ТаблицаНажатие(Элемент)
    Заполняемая_Таблица=Исходная_Таблица.Скопировать();
    ЭлементыФормы.Заполняемая_Таблица.СоздатьКолонки();
КонецПроцедуры
 
Процедура Поиск_Максимального_Значение_В_Колонках_Заполняемая_ТаблицаНажатие(Элемент)
    Для Колоноки=0 По Заполняемая_Таблица.Колонки.Количество()-1 Цикл
        Сообщить("В колонке "+Заполняемая_Таблица.Колонки[Колоноки].Имя+" максимальное значение = "+Максимольное_Значение_Колонки_Вернуть(Колоноки,Заполняемая_Таблица));
    КонецЦикла; 
        
КонецПроцедуры
 
Функция Максимольное_Значение_Колонки_Вернуть(Знач ИндексКолонки="",Заполняемая_Таблица)
    Если ПустаяСтрока(ИндексКолонки) Тогда Возврат "Не задан индекс колонки"; КонецЕсли;                                  
    Список=Новый СписокЗначений;    
    Список.ЗагрузитьЗначения(Заполняемая_Таблица.ВыгрузитьКолонку(ИндексКолонки));    
    Если Список.Количество()=0 Тогда Возврат "В колонке нет значений"; КонецЕсли;                            
    Список.СортироватьПоЗначению(НаправлениеСортировки.Убыв);    
    Возврат Список[0].Значение;                               
КонецФункции



0



Dethmontt

Модератор

Эксперт 1С

3720 / 2915 / 574

Регистрация: 10.03.2011

Сообщений: 11,481

Записей в блоге: 1

03.12.2012, 13:11

6

Да нормально вроде, только вот тут лишнее

1C
1
2
3
4
5
6
7
8
9
10
Процедура Вставить_Таблицу_УмноженияНажатие(Элемент)
    Количество_Колонок=Исходная_Таблица.Колонки.Количество();
    Количество_Строк=Исходная_Таблица.Количество();
    Для ъ=1 По Количество_Колонок Цикл
    Для ъъ=1 По Количество_Строк Цикл
    Исходная_Таблица[ъ-1][ъъ-1]=ъ*ъъ;
    КонецЦикла;
    КонецЦикла;
    ЭлементыФормы.Исходная_Таблица.СоздатьКолонки(); //ЛИШНЕЕ
КонецПроцедуры



0



0 / 0 / 0

Регистрация: 28.11.2012

Сообщений: 30

03.12.2012, 13:16

 [ТС]

7

У меня тут проблемы с поиском макс числа.
Не выводить номер колонки почему то.



0



Dethmontt

Модератор

Эксперт 1С

3720 / 2915 / 574

Регистрация: 10.03.2011

Сообщений: 11,481

Записей в блоге: 1

03.12.2012, 13:23

8

Конкретнее

Добавлено через 6 минут
Задавай имена колонок:

1C
1
2
3
4
5
6
Процедура Добавить_КолонкиНажатие(Элемент)
    Для Колонки=1 По Число_Колонок Цикл //Так например
    Исходная_Таблица.Колонки.Добавить("Колонка"+Колонки, Новый ОписаниеТипов("Число"),"Колонка№"+Колонки);
    КонецЦикла;
    ЭлементыФормы.Исходная_Таблица.СоздатьКолонки();
КонецПроцедуры

И при поиске можно использовать заголовок

1C
1
2
3
4
5
6
Процедура Поиск_Максимального_Значение_В_Колонках_Заполняемая_ТаблицаНажатие(Элемент)
    Для Колоноки=0 По Заполняемая_Таблица.Колонки.Количество()-1 Цикл
        Сообщить("В колонке "+Заполняемая_Таблица.Колонки[Колоноки].Заголовок+" максимальное значение = "+Максимольное_Значение_Колонки_Вернуть(Колоноки,Заполняемая_Таблица));
    КонецЦикла; 
        
КонецПроцедуры



1



MonoLog

0 / 0 / 0

Регистрация: 28.11.2012

Сообщений: 30

04.12.2012, 15:32

 [ТС]

9

Теперь вопрос не по теме, но всё таки достаточно интересующий меня. Сделал следующим образом.
В модуле формы

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Процедура Добавить_КолонкиНажатие(Элемент)
    Колонки_Добавить(Таблица1, Число_Колонок);
    ЭлементыФормы.Таблица1.СоздатьКолонки();
КонецПроцедуры
 
Процедура Добавить_СтрокиНажатие(Элемент)
    Строки_Добавить(Таблица1, Число_Строк);
КонецПроцедуры
 
Процедура Заполнить_Таблицу1Нажатие(Элемент)
    Количество_Колонок=Таблица1.Колонки.Колиество();
    Количество_Строк=Таблица1.Количество();
    Таблица1_Заполнить(ЭлементыФормы.Таблица1, Количество_Колонок, Количество_Строк);
КонецПроцедуры
 
Процедура Копировать_Таблица1_В_Таблица1Нажатие(Элемент)
    Копировать_Таблицу(ЭлементыФормы.Таблица1, ЭлементыФормы.Таблица2);
КонецПроцедуры
 
Процедура Поиск_Максимального_Значение_В_Колонках_Таблица2Нажатие(Элемент)
    Максимальное_Значение_В_Колонках_Найти(Таблица2);
КонецПроцедуры

В Модуле Объекта

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Функция Колонки_Добавить(Таблица1, Число_Колонок)    Экспорт
   Для ъ=1 По Число_Колонок Цикл
       Таблица1.Колонки.Добавить("Колонка"+ъ, Новый ОписаниеТипов("Число"),"Колонка№"+ъ);
   КонецЦикла;
КонецФункции
 
Функция Строки_Добавить(Таблица1, Число_Строк)    Экспорт
    Для ъ=1 По Число_Строк Цикл 
        Таблица1.Добавить();
    КонецЦикла;
КонецФункции
 
Функция Таблица1_Заполнить(Таблица1, Количество_Колонок, Количество_Строк)    Экспорт
    Количество_Колонок=Таблица1.Колонки.Колиество();
    Количество_Строк=Таблица1.Количество();
    Для ъ=0 По Таблица1.Колонки.Количество() Цикл
        Для ъъ=0 По Таблица1.Количество() Цикл
            Таблица1[ъ-1][ъъ-1]=ъ*ъъ;
        КонецЦикла;
    КонецЦикла;
КонецФункции
 
Функция Копировать_Таблицу(Таблица1, Таблица2)    Экспорт
   Таблица2.Значение=Таблица2.Значение.Скопировать();
   Таблица2.СоздатьКолонки();
КонецФункции
 
Функция Максимальное_Значение_В_Колонках_Найти(Таблица2)    Экспорт
   Для ъ=0 По Таблица2.Колонки.Количество() Цикл
       Максимальное_Значение=Таблица2[0][ъ];
       Для ъъ=1 По Таблица2.Количество() Цикл
           Максимальное_Значение=Макс(Максимальное_Значение,Таблица2[ъ-1][ъъ-1]);
       КонецЦикла;
       Сообщить("Максимальное число в колонке "+(ъ+1)+" = "+Максимальное_Значение);
   КонецЦикла;
КонецФункции

Пишет ошибку что не может найти функции.



0



Модератор

Эксперт 1С

3720 / 2915 / 574

Регистрация: 10.03.2011

Сообщений: 11,481

Записей в блоге: 1

04.12.2012, 15:49

10

Полный текст ошибки дай

Добавлено через 1 минуту
И вообще это дурной ТОН переносить работу с формой в модуль объекта



0



0 / 0 / 0

Регистрация: 28.11.2012

Сообщений: 30

04.12.2012, 15:53

 [ТС]

11

{Форма.Заполнение_Таблицы_Числами.Форма(2,2)}: Процедура или функция с указанным именем не определена (Колонки_Добавить)
<<?>>Колонки_Добавить(Таблица1, Число_Колонок);
{Форма.Заполнение_Таблицы_Числами.Форма(7,2)}: Процедура или функция с указанным именем не определена (Строки_Добавить)
<<?>>Строки_Добавить(Таблица1, Число_Строк);
{Форма.Заполнение_Таблицы_Числами.Форма(13,2)}: Процедура или функция с указанным именем не определена (Таблица1_Заполнить)
<<?>>Таблица1_Заполнить(ЭлементыФормы.Таблица1, Количество_Колонок, Количество_Строк);
{Форма.Заполнение_Таблицы_Числами.Форма(17,2)}: Процедура или функция с указанным именем не определена (Копировать_Таблицу)
<<?>>Копировать_Таблицу(ЭлементыФормы.Таблица1, ЭлементыФормы.Таблица2);
{Форма.Заполнение_Таблицы_Числами.Форма(21,2)}: Процедура или функция с указанным именем не определена (Максимальное_Значение_В_Колонках_Найти)
<<?>>Максимальное_Значение_В_Колонках_Найти(Таблиц а2);



0



Модератор

Эксперт 1С

3720 / 2915 / 574

Регистрация: 10.03.2011

Сообщений: 11,481

Записей в блоге: 1

04.12.2012, 15:59

12

Фиг знает что у тебя там вообще =)))

Скинь обработку сюда, попробую подсказать….



0



0 / 0 / 0

Регистрация: 28.11.2012

Сообщений: 30

04.12.2012, 16:10

 [ТС]

13



0



Модератор

Эксперт 1С

3720 / 2915 / 574

Регистрация: 10.03.2011

Сообщений: 11,481

Записей в блоге: 1

04.12.2012, 16:25

14

У тебя какой то косяк со связкой формы и объекта…
Выход создаем реквизит формы ЭтотОбъект с типом твоей обработки
И вызываем функции через этот реквизит
таблица_умножения_v1.4 (ильмир).rar



0



Модератор

Эксперт 1С

3720 / 2915 / 574

Регистрация: 10.03.2011

Сообщений: 11,481

Записей в блоге: 1

04.12.2012, 16:34

15

Ты при создании формы указал что это “Произвольная форма” а произвольная форма никак не связанна с объектом обработки соответственно и с модулем объекта обработки!



0



0 / 0 / 0

Регистрация: 28.11.2012

Сообщений: 30

04.12.2012, 16:57

 [ТС]

16

{ВнешняяОбработка.Заполнение_Таблицы_Умножения.Мод ульОбъекта(15)}: Метод объекта не обнаружен (Количество)
Количество_Строк=Таблица1.Количество();



0



Модератор

Эксперт 1С

3720 / 2915 / 574

Регистрация: 10.03.2011

Сообщений: 11,481

Записей в блоге: 1

04.12.2012, 17:31

17



0



MonoLog

0 / 0 / 0

Регистрация: 28.11.2012

Сообщений: 30

05.12.2012, 23:39

 [ТС]

18

Получилось как то так. Все рабочее. Но в первой функции и в последней ошибка. Найти как обычно не могу.
Модуль формы:

Кликните здесь для просмотра всего текста

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Процедура Колонки_ДобавитьНажатие(Элемент)
    тз_Колонки_Добавить(тз_Таблица_Умножения, ЭлементыФормы.тп_Таблица_Умножения, Количество_Колонок);//ошибка
КонецПроцедуры
 
Процедура Строки_ДобавитьНажатие(Элемент)
    тз_Строки_Добавить(тз_Таблица_Умножения, Количество_Колонок);
КонецПроцедуры
 
 
Процедура Заполнить_Таблицей_УмноженияНажатие(Элемент)
    тз_Заполнить_Таблицей_Умножения(тз_Таблица_Умножения);
КонецПроцедуры
 
Процедура Скопировать_ТаблицуНажатие(Элемент)
    тп_Копировать(ЭлементыФормы.тп_Таблица_Умножения, ЭлементыФормы.тп_Копия_Таблицы_Умножения);
КонецПроцедуры
 
Процедура Найти_максимальное_Значение_В_КолонкахНажатие(Элемент)
    тз_Найти_Максимальное_Значение_В_Колонках(тз_Копия_Таблицы_Умножения);
КонецПроцедуры

Форма Объекта:

Кликните здесь для просмотра всего текста

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Функция тз_Колонки_Добавить(тз_Ссылка, тп_Ссылка, Количество_Колонок) Экспорт
    Для ъ=тз_Ссылка.Колонки.Количество() По тз_Ссылка.Колонки.Количество()+Количество_Колонок-1 Цикл
        тз_Ссылка.Колонки.Добавить("Колонка"+Формат((ъ+1), "ЧГ=0"), Новый ОписаниеТипов("Число"));//ошибка
    КонецЦикла;
    тп_Ссылка.СоздатьКолонки();
КонецФункции
 
Функция тз_Строки_Добавить(тз_Ссылка, Количество_Строк) Экспорт
    Для ъ=1 По Количество_Строк Цикл
        тз_Ссылка.Добавить();
    КонецЦикла;
КонецФункции
 
Функция тз_Заполнить_Таблицей_Умножения(тз_Ссылка) Экспорт
    Для ъ=0 По тз_Ссылка.Колонки.Количество()-1 Цикл
        Для ъъ=0 По тз_Ссылка.Количество()-1 Цикл
            тз_Ссылка[ъъ][ъ]=(ъ+1)*(ъъ+1);
        КонецЦикла;
    КонецЦикла;
КонецФункции
 
Функция тп_Копировать(тп_Источник, тп_Приемник) Экспорт
    тп_Приемник.Значение=тп_Источник.Значение.Скопировать();
    тп_Приемник.СоздатьКолонки();
КонецФункции
 
Функция тз_Найти_Максимальное_Значение_В_Колонках(тз_Ссылка) Экспорт
    //ошибка
    Для ъ=0 По тз_Ссылка.Колонки.Количество()-1 Цикл
        Максимальное_Значение=тз_Ссылка[0][ъ];
        Для ъъ=1 По тз_Ссылка.Количество()-1 Цикл
            Максимальное_Значение=Макс(Максимальное_Значение,тз_Ссылка[ъъ][ъ]);
        КонецЦикла;
        Сообщить("Максимальное число в колонке "+(ъ+1)+" = "+Максимальное_Значение);
    КонецЦикла;
КонецФункции



0



Модератор

Эксперт 1С

3720 / 2915 / 574

Регистрация: 10.03.2011

Сообщений: 11,481

Записей в блоге: 1

06.12.2012, 01:05

19

Какая ошибка то? =))



0



MonoLog

0 / 0 / 0

Регистрация: 28.11.2012

Сообщений: 30

06.12.2012, 10:21

 [ТС]

20

ну как я понимаю
тз_Ссылка.Колонки.Добавить(“Колонка”+Формат((ъ+1), “ЧГ=0”), Новый ОписаниеТипов(“Число”));//ошибка
Можно вывести из цикла каким то образом.
А вот со второй я хз чесн

Добавлено через 1 час 44 минуты
Ну в итоге сузил поиск до

1C
1
2
3
4
5
6
7
8
9
10
Процедура Колонки_ДобавитьНажатие(Элемент)
    тз_Колонки_Добавить(тз_Таблица_Умножения, ЭлементыФормы.тп_Таблица_Умножения, Количество_Колонок, Новый ОписаниеТипов("Число"));
КонецПроцедуры
 
Функция тз_Колонки_Добавить(тз_Ссылка, тп_Ссылка, Количество_Колонок, Тип_Данных) Экспорт
    Для ъ=тз_Ссылка.Колонки.Количество() По тз_Ссылка.Колонки.Количество()+Количество_Колонок-1 Цикл
        тз_Ссылка.Колонки.Добавить("Колонка_"+Формат(ъ, "ЧГ=0"), Тип_Данных, "Колонка "+ъ);
    КонецЦикла;
    тп_Ссылка.СоздатьКолонки();
КонецФункции



0



Добавить комментарий