![]() |
|
v7: Динамическое создание Таблиц значений возможно ли? | ☑ | ||
---|---|---|---|---|
0
Ночной Эльф
22.10.12
✎
10:15
|
Всем доброго времени суток.
Можно ли в 1с 7.7 создавать динамически в коде заранее не известное количество таблиц значений? т.е. скажем программа выдает 5 и создается 5 идентичных таблиц значений если выдает 7 программа то создается 7 ТЗ. Можно ли это сделать и если да то как ? |
|||
1
Mikeware
22.10.12
✎
10:16
|
а в чем проблема-то?
|
|||
2
ДенисЧ
22.10.12
✎
10:16
|
да.
Для сч = 1 по НужноеКоличествоТаблиц Цикл тз = СоздатьОбъект("ТаблицаЗначений"); КОнецЦикла |
|||
3
Privalov
22.10.12
✎
10:16
|
Всегда возникает вопрос - а зачем?
|
|||
4
ДенисЧ
22.10.12
✎
10:16
|
(1) Ты не догадываешься?
|
|||
5
Ночной Эльф
22.10.12
✎
10:18
|
(2) а как я буду отличать что это 1 а это 2 ТЗ ?
И как к данным этой тз потом обращаться? оно же не создастся типо тз1 тз2 тз3 |
|||
6
Privalov
22.10.12
✎
10:18
|
Еще не спросили какая программа выдает.
|
|||
7
Sserj
22.10.12
✎
10:18
|
(2) Не, так обрабатывать неполучится надо что-то типа такого:
спсТЗ = создатьобъект("СписокЗначений"); Для сч = 1 по НужноеКоличествоТаблиц Цикл спсТЗ.ДобавитьЗначение(СоздатьОбъект("ТаблицаЗначений")); КОнецЦикла |
|||
8
Mikeware
22.10.12
✎
10:19
|
(5) Загоняй в ТЗ.
загоняй в СЗ Загоняй в массив. |
|||
9
Sserj
22.10.12
✎
10:19
|
+(7)
Ну или для идентификации лучше даже так: спсТЗ = создатьобъект("СписокЗначений"); Для сч = 1 по НужноеКоличествоТаблиц Цикл спсТЗ.ДобавитьЗначение(СоздатьОбъект("ТаблицаЗначений"), "тз" + сокрЛП(сч)); КОнецЦикла |
|||
10
Ночной Эльф
22.10.12
✎
10:21
|
(9) Спасибо большое.
А как скажем добавить в это ТЗ в списке значений колонки и как потом к ним обратиться? |
|||
11
Sserj
22.10.12
✎
10:24
|
(10) дык... ну элементарно же:
нужнаяТЗ = спсТЗ.ПолучитьЗначение(НомНужнойТЗ); нужнаяТЗ.НоваяКолонка(...); .... |
|||
12
Ночной Эльф
22.10.12
✎
10:32
|
(11) а можно скажем обратиться к нужно колонке уже добавленой в ТЗ вот так
спсТЗ.ТЗ2.ПолучитьЗначение(НужнаяКолонка); ? |
|||
13
Ночной Эльф
22.10.12
✎
10:37
|
или скажем создавать в списке значений уже структурированную ТЗ но пустую скажем вот так
спсТЗ = создатьобъект("СписокЗначений"); Для сч = 1 по НужноеКоличествоТаблиц Цикл спсТЗ.ДобавитьЗначение(ТЗсоСтруктурой, "тз" + сокрЛП(сч)); КОнецЦикла |
|||
14
Sserj
22.10.12
✎
10:37
|
(11) нет, это же списокзначений, в восьмерке можно было бы структуру использовать, тут только сначала получить ссылку, и с ней работать.
нужнаяТЗ = спсТЗ.ПолучитьЗначение(НомНужнойТЗ); |
|||
15
Sserj
22.10.12
✎
10:38
|
(13) Ну ясен пень можешь так сделать:
спсТЗ = создатьобъект("СписокЗначений"); Для сч = 1 по НужноеКоличествоТаблиц Цикл ТЗсоСтруктурой = создатьобъект("ТаблицаЗначений"); ТЗсоСтруктурой.НоваяКолонка(...); .... //Можешь и сразу наполнить ее ТЗсоСтруктурой.НоваяСтрока(); .... спсТЗ.ДобавитьЗначение(ТЗсоСтруктурой, "тз" + сокрЛП(сч)); КОнецЦикла |
|||
16
Тихий омут
22.10.12
✎
10:43
|
(0) покури:
ШТН = СоздатьОбъект("ТаблицаЗначений"); ШТН.НоваяКолонка("Номенклатура","Справочник.Номенклатура"); ШТН.НоваяКолонка("Развертка","Число"); ШТН.НоваяКолонка("ЭтоГруппа","Число"); ШТН.НоваяКолонка("ТН","ТаблицаЗначений"); ШТН.НоваяКолонка("КоличествоН","Число"); ///начальный остаток ШТН.НоваяКолонка("КоличествоП","Число"); ///приход ШТН.НоваяКолонка("КоличествоР","Число"); ///расход ШТН.НоваяКолонка("КоличествоК","Число"); ///конечный остаток ТН = СоздатьОбъект("ТаблицаЗначений"); ШТН.Выгрузить(ТН); МШ=0; ОКС=0; ТЗ="//{{ЗАПРОС(Сформировать1) |Период с Д2 по Д2; |Без итогов; |Товар = Регистр.ОстаткиТМЦ.Номенклатура; |ЗКоличество = Регистр.ОстаткиТМЦ.Количество; |Функция КоличествоН = НачОст(ЗКоличество); |Функция КоличествоП = Приход(ЗКоличество); |Функция КоличествоР = Расход(ЗКоличество); |Функция КоличествоК = КонОст(ЗКоличество); |Группировка Товар без групп; |";//}}ЗАПРОС Запрос = СоздатьОбъект("Запрос"); Если (Запрос.Выполнить(ТЗ)=0) Тогда Сообщить("Не удалось выполнить запрос по остаткам!","!!!"); Возврат; КонецЕсли; //[Запрос.Выполнить(ТЗ)=0] ВР = СоздатьОбъект("ТаблицаЗначений"); Запрос.Выгрузить(ВР,,0); КС=ВР.КоличествоСтрок(); Пр=КС/100; ВР.ВыбратьСтроки(); Пока ВР.ПолучитьСтроку()=1 Цикл Состояние("Обработка остатков "+Цел(ВР.НомерСТроки/Пр)+"%"); СписР = СоздатьОбъект("СписокЗначений"); ПолучитьРодителей(ВР.Товар,СписР); ТекТН=ТН; РС=СписР.РазмерСПиска(); Если (МШ<РС) Тогда МШ=РС; КонецЕсли; //[МШ<РС] Для Сч=1 По РС Цикл Зн=СписР.ПолучитьЗначение(РС-Сч+1); Если (ПустоеЗначение(Зн)=1) Тогда Продолжить; КонецЕсли; //[ПустоеЗначение(Зн)=1] НС=0; Если (ТекТН.НайтиЗначение(Зн,НС,"Номенклатура")=0) Тогда ТекТН.НоваяСТрока(); ОКС=ОКС+1; ТекТН.Номенклатура=Зн; ТекТН.ЭтоГруппа=1; ТекТН.ТН = СоздатьОбъект("ТаблицаЗначений"); ШТН.Выгрузить(ТекТН.ТН); Иначе ТекТН.ПолучитьСтрокуПоНомеру(НС); КонецЕсли; //[ТекТН.НайтиЗначение(Зн,НС,"Номенклатура")=0] ТекТН=ТекТН.ТН; КонецЦикла; //[Сч=1 По СписР.РазмерСПиска()] ///ТекТН - спозиционированная таблица НС=0; Если (ТекТН.НайтиЗначение(ВР.Товар,НС,"Номенклатура")=0) Тогда ТекТН.НоваяСтрока(); ОКС=ОКС+1; ТекТН.Номенклатура=ВР.Товар; Иначе ТекТН.ПолучитьСтрокуПоНомеру(НС); КонецЕсли; //[ТекТН.НайтиЗначение(ВР.Товар,НС,"Номенклатура")=0] ТекТН.КоличествоН=ТекТН.КоличествоН+ВР.КОличествоН; ТекТН.КоличествоП=ТекТН.КоличествоП+ВР.КОличествоП; ТекТН.КоличествоР=ТекТН.КоличествоР+ВР.КОличествоР; ТекТН.КоличествоК=ТекТН.КоличествоК+ВР.КОличествоК; КонецЦикла; //[ВР.ПолучитьСтроку()=1] |
|||
17
Mikeware
22.10.12
✎
10:45
|
И все-таки, на ТКВ так и не отвечено...
|
|||
18
Ночной Эльф
22.10.12
✎
11:14
|
(17) Скажем есть список роликов причем от одного контрагента может быть больше 1 раза повторений одно и того же ролика, так же есть категории роликов которые не должны стоять рядом. Необходимо сделать так чтобы из всего количество роликов скажем их всего 20 штук все время их количество разное. Ролики одного контрагента которые повторяются больше 1 раза стояли во всем списке равномерно. скажем если он 1 то следующий 10 если их 2, а если их 4 то первый ролик на первом месте второй на 5 третий на 10 а четвертый на 15 и чтобы категории роликов не были рядом.
|
|||
19
Mikeware
22.10.12
✎
11:37
|
(18) а зачем в этой задаче "неизвестное количество ТЗ"?
|
|||
20
Ночной Эльф
22.10.12
✎
11:51
|
берем ролик который повторяется максимальное количество раз создаем столько же количество ТЗ и по порядку в каждое ТЗ записываем по разу этот ролик в самое начало. Потом берем остальные и по порядку записываем остальные ролики. Придумал пока только так как по другому незнаю, может подскажешь?
|
|||
21
Privalov
22.10.12
✎
12:01
|
Может понедельник день тяжелый, но что-то из (20) ни фига не понял.
|
|||
22
Ночной Эльф
22.10.12
✎
12:05
|
Т.е. создаем количество ТЗ равное максимальному повторению одного из роликов затем по порядку забиваем их. Затем эти все ТЗ склеиваем в одну и получается что они повторяются равномерно
|
|||
23
Mikeware
22.10.12
✎
12:05
|
(21) тяжелый он, если бухать в ночь с пятницы на понедельник...
(20) ну и пиши в одну ТЗ. в чем проблема-то? добавь колонку "номер рекламного блока" |
|||
24
Ночной Эльф
22.10.12
✎
12:06
|
(23) может ты не понял но как ты равномерно то распределишь? так потом эти блоки склеить можно
|
|||
25
Mikeware
22.10.12
✎
12:14
|
(24) нет никакой разницы между тем, хранятся ли данные в нескольких нумерованных ТЗ, или в одной с дополнительным признаком (колонкй) - скажем, "номерТЗ"
|
|||
26
Mikeware
22.10.12
✎
12:15
|
(24) ты случаем не "того самого года"?
|
|||
27
Ночной Эльф
22.10.12
✎
12:24
|
(26) х?йню не неси
|
|||
28
Privalov
22.10.12
✎
12:47
|
(27)Ну... это грубо даже для интернета ))
|
|||
29
Mikeware
22.10.12
✎
12:50
|
(28) видимо, я угадал...
|
|||
30
Privalov
22.10.12
✎
12:54
|
(29)+100500
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |