|
Как скопировать таблицу значений | ☑ | ||
---|---|---|---|---|
0
GreatOne
18.12.15
✎
12:17
|
Вот такой незамысловатый код очищает обе ТЗ. На выходе ТаблицаДанныхВрем и ТаблицаДанныхОбъекта пустые. Что я не так делаю? |
|||
1
GreatOne
18.12.15
✎
12:19
|
По идее мне нужны типизированные колонки в новой ТЗ. Думал так получится, и очень удивился.
|
|||
2
ukolabrother
18.12.15
✎
12:19
|
а что ты хочешь получить?
|
|||
3
AllJoke
18.12.15
✎
12:19
|
вникни в код внимательно.
|
|||
4
ДенисЧ
18.12.15
✎
12:19
|
ВыгрузитьКолонки() не подойдёт?
|
|||
5
AllJoke
18.12.15
✎
12:19
|
ты возвращаешь очищенную ТЗ
|
|||
6
ukolabrother
18.12.15
✎
12:20
|
ТаблицаЗначений (ValueTable)
СкопироватьКолонки (CopyColumns) Синтаксис: СкопироватьКолонки(<Колонки>) Параметры: <Колонки> (необязательный) Тип: Строка. Список колонок для копирования в формате: "Колонка1, Колонка2...". Если список не задан, то будут скопированы все колонки. Возвращаемое значение: Тип: ТаблицаЗначений. Описание: Создает таблицу значений с заданным списком колонок. Доступность: Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер). Примечание: Содержимое колонок не копируется. |
|||
7
AllJoke
18.12.15
✎
12:20
|
ТаблицаДанныхВрем = ТаблицаДанныхОбъекта;
ТаблицаДанныхВрем.Очитсить(); |
|||
8
GreatOne
18.12.15
✎
12:21
|
(7) ага, с этого и начал. Обе очищает.
сейчас в (6) попробую. В принципе думал, но там колонок туева хуча. Сейчас циклом пробегусь |
|||
9
Господин ПЖ
18.12.15
✎
12:21
|
ТЗ2 = ТЗ1;
ТЗ2.Очистить(); пятница-рукож.пница... |
|||
10
Jonny_Khomich
18.12.15
✎
12:23
|
ну ты очистил у объекта табличную часть. не удивительно.
|
|||
11
DDwe
18.12.15
✎
12:24
|
А раз обе чистые, то скорее "ТаблицаДанныхОбъекта" на входе пустая.
|
|||
12
ukolabrother
18.12.15
✎
12:25
|
да вы не поняли что он хочет. Он хочет получить таблицу из построителя и сделать КОПИЮ СТРУКТУРЫ этой таблицы, то есть колонки только, пустую копию. Надеюсь я то правильно понял. Только вот он нарукож.опил так, что страшно.
|
|||
13
User_Agronom
18.12.15
✎
12:26
|
http://learnpascal.ru/procedure/procedure-and-function-pascal.html
Параметры. При описании процедуры указывается список формальных параметров. Каждый параметр является локальным по отношению к описываемой процедуре, к нему можно обращаться только в пределах данной процедуры (в нашем примере х, у, z — формальные параметры). Фактические параметры — это параметры, которые передаются процедуре при обращении к ней (а, b, с — фактические параметры). Число и тип формальных и фактических параметров должны совпадать с точностью до их следования. Параметры-значения. Другими словами, передача параметров по значению. Копия фактического параметра становится значением соответствующего формального параметра. Внутри процедуры можно производить любые действия с данным формальным параметром (допустимые для его типа), но эти изменения никак не отражаются на значении фактического параметра, то есть каким он был до вызова процедуры, то таким же и останется после завершения ее работы (х, у — параметры-значения). Параметры-переменные. Другими словами, передача параметров по ссылке. Это те формальные параметры, перед которыми стоит идентификатор var. Передается адрес фактического параметра (обязательно переменной), после этого формальный параметр становится его синонимом. Любые операции с формальным параметром выполняются непосредственно над фактическим параметром. |
|||
14
GreatOne
18.12.15
✎
12:27
|
(12)ага
сделал как в 6 - сработало) Ой да ладно, я типовую обработку "Групповое соитие с докумаентами с спр." меняю, там вообще 4 раза на каждом итераторе типа объекта эти таблицы в цикле копируются. Хочу в запрос с объединением |
|||
15
GreatOne
18.12.15
✎
12:27
|
+(14) у нас по 60к доков в неделю, обработка тупит страшно
|
|||
16
Timon1405
18.12.15
✎
12:28
|
(8) Это такое недоООП. кодом "ТЗ2 = ТЗ1;" вы копируете только указатель на таблицу. и знач тут вообще не причем.
|
|||
17
Локи-13
18.12.15
✎
12:29
|
а работает ли ЗНАЧ с объектами? вот вопрос
|
|||
18
Jonny_Khomich
18.12.15
✎
12:29
|
Вообще так лучше не делать.
Но вот так попробуй: Функция СкопироватьТЗ(ЗНАЧ ТЗ1, ТЗ2) ТЗ2 = ТЗ1.Выгрузить(); ТЗ2.Очистить(); Возврат ТЗ2; КонецФункции |
|||
19
GreatOne
18.12.15
✎
12:29
|
(16) просто приму это как есть, хоть и не очень понимаю, почему так
|
|||
20
ukolabrother
18.12.15
✎
12:32
|
(19) так вы создали просто ссылку на таблицу, а не ее копию. Копия делается вот так ТЗ2 = ТЗ1.Скопировать();
|
|||
21
GreatOne
18.12.15
✎
12:34
|
В любом случае, вопреки ожиданиям, замена
на объединение временных таблиц в запросе не дало прироста скорости... |
|||
22
ukolabrother
18.12.15
✎
12:36
|
очень пятнично, вы это оптимизацией тут так занимаетесь? Это прекрасно
|
|||
23
Гёдза
18.12.15
✎
12:38
|
(21) Сколько лет у тебя стажа ты говоришь?
|
|||
24
GreatOne
18.12.15
✎
12:38
|
(22) не поверите, начал это делать, поначитавшись постов на мисте от сереневеньких полосочек, что объединение работает быстрее.
|
|||
25
ptiz
18.12.15
✎
13:00
|
За 20 постов еще никто не говорил, что ЗНАЧ для параметра с типом "таблица значений" - бессмысленно?
|
|||
26
Локи-13
18.12.15
✎
13:00
|
(25) см (17)
|
|||
27
ptiz
18.12.15
✎
13:08
|
(26) Ну я и говорю - ответа не было. Это ж азбука.
|
|||
28
Поpyчик-4
18.12.15
✎
13:10
|
За 20 постов еще никто не говорил, что ЗНАЧ для параметров имеет смысл только для примитивных типов данных?
|
|||
29
ObjectRelation Model
18.12.15
✎
13:15
|
(25)(28) не совсем так:
Процедура Чтото(Знач ТЗ1, ТЗ2) ТЗ1 = Неопределено; ТЗ2 = Неопределено; КонецПроцедуры; ТЗ1 - оставит старое значение |
|||
30
los_hooliganos
18.12.15
✎
13:18
|
Ладно кто подскажет, почему сравнение 2х ОДИНАКОВЫХ списков значений возвращает ложь?
сз1 = Новый СписокЗначений; сз1.Добавить(1); сз2 = Новый СписокЗначений; сз2.Добавить(1); сз1= сз2 вернет Ложь |
|||
31
Поpyчик-4
18.12.15
✎
13:20
|
(30) Потому что сравнивать через операторы имеет смысл только для примтивных и ссылочных типов.
|
|||
32
GreatOne
18.12.15
✎
13:22
|
Нашел даже на ИТС
http://its.1c.ru/db/metod8dev#content:2606:hdoc (31) кстати, судя по статье, сравниваются не значения, а экземпляры |
|||
33
Поpyчик-4
18.12.15
✎
13:22
|
(30) И вообще девушка на фотке в футболке не комильфо. Сними её.
|
|||
34
Лефмихалыч
18.12.15
✎
13:23
|
ТЗ1 = ТЗ2.Скопировать();
|
|||
35
los_hooliganos
18.12.15
✎
13:24
|
(31) СписокЗначений в 1С и есть ссылочная переменная.
Сравнивается 2 ссылки на область памяти. И они не равны. |
|||
36
ObjectRelation Model
18.12.15
✎
13:24
|
(30) потому что переменные хранят только указатели на объекты (слово "ссылка" в 1С уже занята под другое)
выделены две области памяти, естественно указатели (адреса) у них отличаются собственно указатели и "виноваты" в поведении параметров ЗНАЧ |
|||
37
los_hooliganos
18.12.15
✎
13:24
|
сз1 = Новый СписокЗначений;
сз1.Добавить(1); сз2 = сз1; сз1= сз2 вернет Истину |
|||
38
Поpyчик-4
18.12.15
✎
13:25
|
(35) Пипец. Учи матчасть, инженер знаний со стажем в 7 лет.
|
|||
39
los_hooliganos
18.12.15
✎
13:26
|
(38) Какую еще мат часть?
|
|||
40
Лефмихалыч
18.12.15
✎
13:29
|
(38) (39) вы под словом "ссылочный" разное понимаете
|
|||
41
palpetrovich
18.12.15
✎
13:41
|
(37) более того
сз1 = Новый СписокЗначений; сз1.Добавить(1); сз2 = сз1; сз2.Добавить(2); если сз1= сз2 Тогда сообщить("Истина"); Иначе сообщить("ложь"); конецЕсли тоже вернет истину :) |
|||
42
Drac0
18.12.15
✎
13:43
|
(24) Про культ карго слышал?
|
|||
43
Рэйв
18.12.15
✎
13:45
|
ТЗ2=ТЗ1.Скопировать() уже предлагали?
|
|||
44
Timon1405
18.12.15
✎
13:48
|
(41) у списка тоже есть отдельный метод Скопировать()
Даешь ООП срач! |
|||
45
zak555
18.12.15
✎
13:53
|
(0) всё просто
ТаблицаДанныхВрем = ОбщегоНазначенияКлиентСервер.СкопироватьРекурсивно(ТаблицаДанныхОбъекта) |
|||
46
palpetrovich
18.12.15
✎
13:54
|
(45) упс, а что там в СкопироватьРекурсивно?
|
|||
47
zak555
18.12.15
✎
14:00
|
(46)
// Создает копию экземпляра указанного объекта. // // Параметры: // Источник - Произвольный - объект, который необходимо скопировать. // // Возвращаемое значение: // Произвольный - копия объекта, переданного в параметре Источник. // // Примечание: // Функцию нельзя использовать для объектных типов (СправочникОбъект, ДокументОбъект и т.п.). Функция СкопироватьРекурсивно(Источник) Экспорт Перем Приемник; ТипИсточника = ТипЗнч(Источник); Если ТипИсточника = Тип("Структура") Тогда Приемник = СкопироватьСтруктуру(Источник); ИначеЕсли ТипИсточника = Тип("Соответствие") Тогда Приемник = СкопироватьСоответствие(Источник); ИначеЕсли ТипИсточника = Тип("Массив") Тогда Приемник = СкопироватьМассив(Источник); ИначеЕсли ТипИсточника = Тип("СписокЗначений") Тогда Приемник = СкопироватьСписокЗначений(Источник); #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда ИначеЕсли ТипИсточника = Тип("ТаблицаЗначений") Тогда Приемник = Источник.Скопировать(); #КонецЕсли Иначе Приемник = Источник; КонецЕсли; Возврат Приемник; КонецФункции |
|||
48
palpetrovich
18.12.15
✎
14:05
|
(47) тю, а где тут Рекурсивно? :)
|
|||
49
zak555
18.12.15
✎
14:08
|
(48)
// Создает копию значения типа СписокЗначений. // // Параметры: // СписокИсточник - СписокЗначений - список значений, копию которого необходимо получить. // // Возвращаемое значение: // СписокЗначений - копия исходного списка значений. // Функция СкопироватьСписокЗначений(СписокИсточник) Экспорт СписокРезультат = Новый СписокЗначений; Для Каждого ЭлементСписка Из СписокИсточник Цикл СписокРезультат.Добавить( СкопироватьРекурсивно(ЭлементСписка.Значение), ЭлементСписка.Представление, ЭлементСписка.Пометка, ЭлементСписка.Картинка); КонецЦикла; Возврат СписокРезультат; КонецФункции |
|||
50
zak555
18.12.15
✎
14:09
|
// Создает копию значения типа Структура.
// // Параметры: // СтруктураИсточник - Структура - копируемая структура. // // Возвращаемое значение: // Структура - копия исходной структуры. // Функция СкопироватьСтруктуру(СтруктураИсточник) Экспорт СтруктураРезультат = Новый Структура; Для Каждого КлючИЗначение Из СтруктураИсточник Цикл СтруктураРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение)); КонецЦикла; Возврат СтруктураРезультат; КонецФункции // Создает копию значения типа Соответствие. // // Параметры: // СоответствиеИсточник - Соответствие - соответствие, копию которого необходимо получить. // // Возвращаемое значение: // Соответствие - копия исходного соответствия. // Функция СкопироватьСоответствие(СоответствиеИсточник) Экспорт СоответствиеРезультат = Новый Соответствие; Для Каждого КлючИЗначение Из СоответствиеИсточник Цикл СоответствиеРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение)); КонецЦикла; Возврат СоответствиеРезультат; КонецФункции // Создает копию значения типа Массив. // // Параметры: // МассивИсточник - Массив - массив, копию которого необходимо получить. // // Возвращаемое значение: // Массив - копия исходного массива. // Функция СкопироватьМассив(МассивИсточник) Экспорт МассивРезультат = Новый Массив; Для Каждого Элемент Из МассивИсточник Цикл МассивРезультат.Добавить(СкопироватьРекурсивно(Элемент)); КонецЦикла; Возврат МассивРезультат; КонецФункции // Создает копию значения типа СписокЗначений. // // Параметры: // СписокИсточник - СписокЗначений - список значений, копию которого необходимо получить. // // Возвращаемое значение: // СписокЗначений - копия исходного списка значений. // Функция СкопироватьСписокЗначений(СписокИсточник) Экспорт СписокРезультат = Новый СписокЗначений; Для Каждого ЭлементСписка Из СписокИсточник Цикл СписокРезультат.Добавить( СкопироватьРекурсивно(ЭлементСписка.Значение), ЭлементСписка.Представление, ЭлементСписка.Пометка, ЭлементСписка.Картинка); КонецЦикла; Возврат СписокРезультат; КонецФункции |
|||
51
Лефмихалыч
18.12.15
✎
14:10
|
горшочек, не вари
|
|||
52
palpetrovich
18.12.15
✎
14:44
|
(49) ааа, вон оно чё :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |