![]() |
![]() |
![]() |
|
Свернуть таблицу | ☑ | ||
---|---|---|---|---|
0
upec
12.10.09
✎
15:33
|
Имеется Таблица примерно такого вида:
Товар1 Ссылка1 Товар1 Ссылка2 Товар2 Ссылка3 Товар2 Ссылка4 Нужно ее привезти к виду: Товар1 СписокЗначений(Ссылка1,Ссылка2) Товар2 СписокЗначений(Ссылка3,Ссылка4) |
|||
1
Ёпрст
гуру
12.10.09
✎
15:37
|
(0)
ТЗ.Сортировать("Товар"); Товар = ""; ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если Товар<>ТЗ.Товар Тогда ТЗ.СЗ = СоздатьОбъект("СписокЗначений"); Товар = ТЗ.Товар; КонецЕсли; ТЗ.СЗ.ДобавитьЗначение(ТЗ.Ссылка); КонецЦикла |
|||
2
Serginio1
12.10.09
✎
15:38
|
||||
3
Mikeware
12.10.09
✎
15:38
|
Или ИндексированнаяТаблица, метод Группировать :-)
|
|||
4
GreyK
12.10.09
✎
15:51
|
(1) Нее, такое не взлетит.
Таблица.Сортировать("Товар"); ТЗ=СоздатьОбъект("ТаблицаЗначений"); Таблица.Выгрузить(ТЗ); ТЗ.Свернуть("Товар,,"всё кроме колонки "Ссылка",",,,,"); ТЗ.НоваяКолонка("СЗ",,,,,,,); Товар=""; ТЗ.ВыбратьСтроки(); Таблица.ВыбратьСтроки(); Пока Таблица.ПолучитьСтроку()=1 Цикл Если Не(Таблица.Товар=ТЗ.Товар) Тогда ТЗ.ПолучитьСтроку(); ТЗ.СЗ=СоздатьОбъект("СписокЗначений"); КонецЕсли; ТЗ.СЗ.ДобавитьЗначение(Таблица.Ссылка); КонецЦикла; |
|||
5
Ёпрст
гуру
12.10.09
✎
15:51
|
(4) Чего курим?
|
|||
6
Ёпрст
гуру
12.10.09
✎
15:54
|
+5 а ну да...свернуть забыл еще..
|
|||
7
Serginio1
12.10.09
✎
16:16
|
(6) Зачем сворачивать?
А сортировать лучше по внутреннему значению с *, т.к. Дубли представлений могут перемешивать (0) +2 смотри (61) Правда там не списокЗначений, а ТЗ |
|||
8
upec
12.10.09
✎
16:29
|
Вот в последнее я вообще не вкурил, сделал как в (1) + потом свернул.
|
|||
9
Serginio1
12.10.09
✎
16:38
|
(8) В разработке по данному адресу
http://1c.proclub.ru/modules/mydownloads/viewcat_personal.php?uid=5702 В отчете C1InDelphi\ErtОбщегоНазначения\ТестЕрт.ert есть примеры функция группирования значений как по одному полю, так и по нескольким полям. Для глСгруппироватьПоПолямСТЗБыстр создаются поля ресурсы в которых записанны итоги по полям (полю) Посмотри Там есть примеры, в том числе и сравнение тз. Для функций глСгруппироватьПоПолюСТЗБыстр(Тз,Поле) глСгруппироватьПоПолямСТЗБыстр(Тз,Поля,Ресурсы) Начальная сортировка учитывает типы Справочник и документ для сортировки по значению, после группирования данных тз содержащая группы сортируется по представлению. Для последней функции параметру Ресурсы можно указать пустую строку, что бы итоги не считались |
|||
10
Эльниньо
12.10.09
✎
17:12
|
(1) Изящно!
|
|||
11
Mikeware
12.10.09
✎
17:25
|
(9) Я так понимаю, что автор - ты. Что ж, "всяк кулик..."
Но ИТЗ, ИМХО, гораздо более проработанная. Плюс более привычный синтаксис. Не лучше ль юзать 1с++ (если учесть, что там много прочих вкусностей?) |
|||
12
Serginio1
12.10.09
✎
17:33
|
(11) Но не всегда ВК нужна, многие просто против ее применения напрочь, кроме того составом является ТаблицаЗначений которую легко закинуть в стандартную обработку.
Я ей пользуюсь достаточно часто, аналог "Итог" 8 ки. Заодно и с иерархией. Против ИТЗ во многом она действительно лучше, просто хотел поделиться тем, чем сам часто пользуюсь, а таких вопросов очень много. Насчет синтаксиса, можно его под себя изменить, кстати я часто использую и для поиска по двум полям. |
|||
13
Ёпрст
гуру
12.10.09
✎
17:34
|
(10) Там неправильно, нужно так было делать:
Товар=""; ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл Если Товар<>ТЗ.Товар Тогда СЗ = СоздатьОбъект("СписокЗначений"); Товар = ТЗ.Товар; КонецЕсли; СЗ.ДобавитьЗначение(ТЗ.Ссылка); ТЗ.СЗ = СЗ; КонецЦикла; ТЗ.Свернуть("Товар,СЗ",""); |
|||
14
Serginio1
12.10.09
✎
17:34
|
(12) Против ИТЗ читать-Итз во многом лучше, но не во всем.
|
|||
15
GreyK
12.10.09
✎
17:41
|
+(4) Пропустил смену товара. Так логичней и правильней.
Таблица.Сортировать("Товар"); ТЗ=СоздатьОбъект("ТаблицаЗначений"); Таблица.Выгрузить(ТЗ); ТЗ.Свернуть("Товар,,"всё кроме колонки "Ссылка",",,,,"); ТЗ.НоваяКолонка("СЗ",,,,,,,); Товар=""; ТЗ.ВыбратьСтроки(); Таблица.ВыбратьСтроки(); Пока Таблица.ПолучитьСтроку()=1 Цикл Если Не(Таблица.Товар=ТЗ.Товар) Тогда ТЗ.ПолучитьСтроку(); ТЗ.СЗ=СоздатьОбъект("СписокЗначений"); Товар=Таблица.Товар; КонецЕсли; ТЗ.СЗ.ДобавитьЗначение(Таблица.Ссылка); КонецЦикла; |
|||
16
Ёпрст
гуру
12.10.09
✎
17:42
|
(15) у меня попроще будет .. и быстрее, не надо иметь 2 тз.. всё делается в одной.
|
|||
17
Serginio1
12.10.09
✎
17:54
|
(16) Ещё быстрее будет если использовать
Выгрузить(<Знач>,<НачСтрока>,<КонСтрока>,<Колонки>) Вместо ДобавитьЗначение |
|||
18
Ёпрст
гуру
12.10.09
✎
18:04
|
(17) Смотри код, там не удасться ничего выгрузить
|
|||
19
GreyK
12.10.09
✎
18:05
|
(16) Помоему вот это у тебя неправильно: "ТЗ.СЗ = СЗ;". В конечном итоге ты меняешь, значение колонки "СЗ" для всех строк ТЗ.
|
|||
20
Ёпрст
гуру
12.10.09
✎
18:06
|
(19) проверено, мин нет.. в (15) 100% рабочий код..
|
|||
21
Ёпрст
гуру
12.10.09
✎
18:07
|
+20
>>>В конечном итоге ты меняешь, значение колонки "СЗ" для всех строк ТЗ. не для всех,а только у тех, у которых товар одинаковый. |
|||
22
GreyK
12.10.09
✎
18:13
|
(21) СЗ объявлена явно, ты присваиваешь значению колонки "СЗ" значение списка СЗ. Обнули в конце цикла СЗ, и все ТЗ.СЗ обнулятся.
|
|||
23
Delorn
12.10.09
✎
18:21
|
(22) не все только для последнего товара.
|
|||
24
GreyK
12.10.09
✎
18:23
|
(23) Попробовал?
|
|||
25
Serginio1
12.10.09
✎
18:28
|
(18) Удастся.
Фиксируешь НомерСтроки первого появления товара и последнюю строку-1 появления нового. И выгружаешь в список выгрузкой. А проще //******************************************* // Функции для группирования Данных ====================================================================== //==========Клонирование и группировка ТЗ ======================= Функция глКлонироватьСтруктуруТЗ(Тз) экспорт перем Тип,Длина,Точность; Резулт=СоздатьОбъект("ТаблицаЗначений"); Для сч=1 по Тз.КоличествоКолонок() Цикл поле=Тз.ПолучитьПараметрыКолонки(сч,тип,Длина,Точность); Резулт.НоваяКолонка(поле,тип,длина,Точность); КонецЦикла; возврат резулт КонецФункции Процедура глКлонироватьЗапись(ТзИсточник,НомСтрИсточник,Тз) Экспорт Тз.НоваяСтрока(); ТекСтр=Тз.КоличествоСтрок(); Для Сч=1 По Тз.КоличествоКолонок() Цикл Колонка=ТзИсточник.ПолучитьПараметрыКолонки(сч); Тз.УстановитьЗначение(ТекСтр,Колонка,ТзИсточник.ПолучитьЗначение(НомСтрИсточник,сч)); КонецЦикла; КонецПроцедуры Функция ИзСтрокиСРазделителями(Сз,Стр,Разделитель) Экспорт Сз.УдалитьВсе(); ТемпСтр=СокрЛП(Стр); поз=Найти(ТемпСтр,Разделитель); Пока Поз>0 Цикл Сз.ДобавитьЗначение(СокрЛП(Лев(ТемпСтр,Поз-1))); ТемпСтр=Сред(ТемпСтр,Поз+1); поз=Найти(ТемпСтр,Разделитель); КонецЦикла; Если ПустаяСтрока(ТемпСтр)=0 Тогда Сз.ДобавитьЗначение(СокрЛП(ТемпСтр)); КонецЕсли; Возврат Сз КонецФункции Функция ИзСтрокиСПробелами(Стр) Экспорт Сз=СоздатьОбъект("СписокЗначений"); Если ПустаяСтрока(стр)=1 Тогда возврат Сз КонецЕсли; Разделитель=" "; ТемпСтр=СокрЛП(Стр); поз=Найти(ТемпСтр,Разделитель); Пока Поз>0 Цикл Сз.ДобавитьЗначение(СокрЛП(Лев(ТемпСтр,Поз-1))); ТемпСтр=СокрЛ(Сред(ТемпСтр,Поз+1)); поз=Найти(ТемпСтр,Разделитель); КонецЦикла; Если ПустаяСтрока(ТемпСтр)=0 Тогда Сз.ДобавитьЗначение(СокрЛП(ТемпСтр)); КонецЕсли; Возврат Сз КонецФункции Функция СравнитьСписки(Сп1,сп2) Для сч=1 по Сп1.РазмерСписка() Цикл Если Сп1.ПолучитьЗначение(сч)<>Сп2.ПолучитьЗначение(сч) Тогда Возврат 0 КонецЕсли; КонецЦикла; возврат 1 КонецФункции //================================================================== Функция ПолучитьСтрокуСортПоля(Колонка,Тз,ЕстьСпр,ЕстьДок) перем Тип,Длина,Точность; поле=Тз.ПолучитьПараметрыКолонки(Колонка,тип,Длина,Точность); Тип=Врег(Тип); Если Найти(Тип,"СПРАВОЧНИК")=1 Тогда ЕстьСпр=1; Резулт=Колонка+"*" ИначеЕсли Найти(Тип,"ДОКУМЕНТ")=1 Тогда ЕстьДок=1; Резулт=Колонка+"*" Иначе Резулт=Колонка; КонецЕсли; Возврат Резулт КонецФункции // ПолучитьСтрокуСортПоля Функция ПолучитьСтрокуСортировки(Спз,Тз,ЕстьСпр,ЕстьДок) Резулт=""; Для сч=1 по Спз.РазмерСписка() Цикл Колонка=Спз.ПолучитьЗначение(сч); Колонка=ПолучитьСтрокуСортПоля(Колонка,Тз,ЕстьСпр,ЕстьДок); Если СЧ=1 Тогда Резулт=Колонка иначе резулт=резулт+","+Колонка КонецЕсли; КонецЦикла; возврат Резулт КонецФункции Функция глСгруппироватьПоПолюСТЗБыстр(Тз,Поле) Экспорт перем Тип,Длина,Точность,ЕстьСпр,ЕстьДок; ЕстьСпр=0; ЕстьДок=0; Тз.ПолучитьПараметрыКолонки(поле,тип,Длина,Точность); // Для того что бы правильно сртировались элементы с одинаковыми представление // Сначала отсортируем по внутреннему значению //а после группирования по представлению по возрастанию Тз.Сортировать(ПолучитьСтрокуСортПоля(Поле,Тз,ЕстьСпр,ЕстьДок)); ТзФ=СоздатьОбъект("ТаблицаЗначений"); ТзФ.НоваяКолонка(поле,тип,длина,Точность); ТзФ.НоваяКолонка("ТзПоГруппе","ТаблицаЗначений"); ТекСтр=0; Заявка=0; НачСтр=0; Если Тз.КоличествоСтрок()>0 Тогда Для сч=1 По Тз.КоличествоСтрок() Цикл ТекЗаявка=Тз.ПолучитьЗначение(сч,Поле); Если (Сч=1) или ( Заявка<>ТекЗаявка) Тогда Если НачСтр>0 Тогда ТекТз=СоздатьОбъект("ТаблицаЗначений"); Тз.Выгрузить(ТекТз,НачСтр,сч-1); Тзф.ТзПоГруппе=ТекТз; КонецЕсли; ТзФ.НоваяСтрока(); ТекСтр=Тзф.КоличествоСтрок(); Заявка=ТекЗаявка; Тзф.УстановитьЗначение(ТекСтр,Поле,ТекЗаявка); НачСтр=сч; КонецЕсли; // глКлонироватьЗапись(Тз,сч,ТекТз) КонецЦикла; Если НачСтр>0 Тогда ТекТз=СоздатьОбъект("ТаблицаЗначений"); Тз.Выгрузить(ТекТз,НачСтр); Тзф.ТзПоГруппе=ТекТз; КонецЕсли; КонецЕсли; // ТзФ.ВыбратьСтроку(); Если (ЕстьСпр=1) или (ЕстьДок=1) Тогда Если ЕстьДок=1 Тогда ТзФ.Сортировать(Поле,1); Иначе ТзФ.Сортировать(Поле); КонецЕсли; КонецЕсли; Возврат ТзФ; КонецФункции Функция глСгруппироватьПоПолямСТЗБыстр(Тз,Поля,Ресурсы) Экспорт перем Тип,Длина,Точность,ЕстьСпр,ЕстьДок; ЕстьСпр=0; ЕстьДок=0; Сз=СоздатьОбъект("СписокЗначений"); СписокИзмерений= ИзСтрокиСРазделителями(Сз,Поля,","); // Для того что бы правильно сртировались элементы с одинаковыми представление // Сначала отсортируем по внутреннему значению //а после группирования по представлению по возрастанию // Но при сортировке обратно по нескольким полям одинаковые элементы могут // располаться не последовательно, т.к. дубли сортируются не по порядку //Стоит добавить уникальное поле (ЗначениеВстрокуВнутр) что бы группировки //С одинаковыми значениями шли друг за другом. СтрокаСортировки=ПолучитьСтрокуСортировки(СписокИзмерений,Тз,ЕстьСпр,ЕстьДок); Тз.Сортировать(СтрокаСортировки); ТзФ=СоздатьОбъект("ТаблицаЗначений"); Для сч=1 по СписокИзмерений.РазмерСписка() Цикл Поле=СписокИзмерений.ПолучитьЗначение(сч); Тз.ПолучитьПараметрыКолонки(поле,тип,Длина,Точность); ТзФ.НоваяКолонка(поле,тип,длина,Точность); КонецЦикла; Сз=СоздатьОбъект("СписокЗначений"); Если ПустаяСтрока(Ресурсы)=1 Тогда СписокРесурсов=СоздатьОбъект("СписокЗначений"); иначе СписокРесурсов=ИзСтрокиСРазделителями(Сз,Ресурсы,","); КонецЕсли; Для сч=1 по СписокРесурсов.РазмерСписка() Цикл Поле=СписокРесурсов.ПолучитьЗначение(сч); Тз.ПолучитьПараметрыКолонки(поле,тип,Длина,Точность); ТзФ.НоваяКолонка(поле,тип,длина,Точность); КонецЦикла; ТзФ.НоваяКолонка("ТзПоГруппе","ТаблицаЗначений"); ТекСтр=0; Измерения=СоздатьОбъект("СписокЗначений"); ТекИзмерения=СоздатьОбъект("СписокЗначений"); Для сч=1 по СписокИзмерений.РазмерСписка() Цикл Измерения.ДобавитьЗначение(""); ТекИзмерения.ДобавитьЗначение(""); КонецЦикла; НачСтр=0; Если Тз.КоличествоСтрок()>0 Тогда Для сч=1 По Тз.КоличествоСтрок() Цикл Для счИзм=1 по СписокИзмерений.РазмерСписка() Цикл Поле=СписокИзмерений.ПолучитьЗначение(счизм); ТекИзмерения.УстановитьЗначение(счИзм,Тз.ПолучитьЗначение(сч,Поле)); КонецЦикла; Если (Сч=1) или ( СравнитьСписки(Измерения,ТекИзмерения)=0) Тогда Если НачСтр>0 Тогда ТекТз=СоздатьОбъект("ТаблицаЗначений"); Тз.Выгрузить(ТекТз,НачСтр,сч-1); Тзф.ТзПоГруппе=ТекТз; Для СчРес=1 по СписокРесурсов.РазмерСписка() Цикл Поле=СписокРесурсов.ПолучитьЗначение(СчРес); Значение=ТекТз.Итог(Поле); Тзф.УстановитьЗначение(ТекСтр,Поле,Значение); КонецЦикла; КонецЕсли; ТзФ.НоваяСтрока(); ТекСтр=Тзф.КоличествоСтрок(); Измерения.УдалитьВсе(); ТекИзмерения.Выгрузить(Измерения); Для счизм=1 по СписокИзмерений.РазмерСписка() Цикл Поле=СписокИзмерений.ПолучитьЗначение(счизм); Значение=Тз.ПолучитьЗначение(сч,Поле); Тзф.УстановитьЗначение(ТекСтр,Поле,Значение); КонецЦикла; ТекТз=глКлонироватьСтруктуруТЗ(Тз); Тзф.ТзПоГруппе=ТекТз; НачСтр=Сч; КонецЕсли; КонецЦикла; Если НачСтр>0 Тогда ТекТз=СоздатьОбъект("ТаблицаЗначений"); Тз.Выгрузить(ТекТз,НачСтр); Тзф.ТзПоГруппе=ТекТз; Для СчРес=1 по СписокРесурсов.РазмерСписка() Цикл Поле=СписокРесурсов.ПолучитьЗначение(СчРес); Значение=ТекТз.Итог(Поле); Тзф.УстановитьЗначение(ТекСтр,Поле,Значение); КонецЦикла; КонецЕсли; КонецЕсли; Если (ЕстьСпр=1) или (ЕстьДок=1) Тогда Если (ЕстьДок=1) Тогда ТзФ.Сортировать(Поля,1); Иначе ТзФ.Сортировать(Поля); КонецЕсли; КонецЕсли; Возврат ТзФ; КонецФункции |
|||
26
Delorn
12.10.09
✎
18:36
|
(24) Пробовал... :) А если написать СЗ=""; то ваще ни чего не произойдет
|
|||
27
GreyK
12.10.09
✎
18:39
|
(26) Ну показывай работающий код.
|
|||
28
Delorn
12.10.09
✎
18:41
|
ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Товар"); ТЗ.НоваяКолонка("Ссылка"); ТЗ.НоваяКолонка("СЗ"); Тз.НоваяСтрока(); Тз.Товар = "Товар 1"; Тз.Ссылка = 2; Тз.НоваяСтрока(); Тз.Товар = "Товар 1"; Тз.Ссылка = 3; Тз.НоваяСтрока(); Тз.Товар = "Товар 2"; Тз.Ссылка = 1; Тз.НоваяСтрока(); Тз.Товар = "Товар 2"; Тз.Ссылка = 2; Тз.НоваяСтрока(); Тз.Товар = "Товар 2"; Тз.Ссылка = 3; //Кусок ЕПРСТ ТЗ.Сортировать("Товар"); Товар = ""; ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если Товар<>ТЗ.Товар Тогда СЗ = СоздатьОбъект("СписокЗначений"); Товар = ТЗ.Товар; КонецЕсли; СЗ.ДобавитьЗначение(ТЗ.Ссылка); ТЗ.СЗ=СЗ; КонецЦикла; ТЗ.Свернуть("Товар,СЗ",""); //Кусок ЕПРСТ Сообщить(ТЗ.ПолучитьЗначение(2,2).РазмерСписка());//3 Сообщить(ТЗ.ПолучитьЗначение(1,2).РазмерСписка());//2 //СЗ.УдалитьВсе(); //Сообщить(ТЗ.ПолучитьЗначение(2,2).РазмерСписка());//0 //Сообщить(ТЗ.ПолучитьЗначение(1,2).РазмерСписка());//2 СЗ=""; Сообщить(ТЗ.ПолучитьЗначение(2,2).РазмерСписка());//3 Сообщить(ТЗ.ПолучитьЗначение(1,2).РазмерСписка());//2 |
|||
29
GreyK
12.10.09
✎
19:00
|
(28) Да, в (16) код нормально отрабатывает. Немогу понять как работает ссылка в ТЗ.
|
|||
30
Mikeware
12.10.09
✎
19:01
|
Процедура Сформировать()
ТЗ=СоздатьОбъект("ИНдексированнаяТаблица"); ТЗ.НоваяКолонка("Товар"); ТЗ.НоваяКолонка("Ссылка"); Тз.НоваяСтрока(); Тз.Товар = "Товар 1"; Тз.Ссылка = 2; Тз.НоваяСтрока(); Тз.Товар = "Товар 1"; Тз.Ссылка = 3; Тз.НоваяСтрока(); Тз.Товар = "Товар 2"; Тз.Ссылка = 1; Тз.НоваяСтрока(); Тз.Товар = "Товар 2"; Тз.Ссылка = 2; Тз.НоваяСтрока(); Тз.Товар = "Товар 2"; Тз.Ссылка = 3; ТЗ.ВыбратьСтроку(); // Смотрим ТЗ.Группировать("Товар:Товар","Ссылка",1); //Собснно, группировка ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл ПромТЗ=ТЗ.тзПотомки; ПромТЗ.ВыбратьСтроку(,""+ТЗ.Товар); //Смотрим СЗ=СоздатьОбъект("СписокЗначений"); ПромТЗ.Выгрузить(СЗ,,"Ссылка"); ТЗ.Ссылка=СЗ; КонецЦикла; //Ну и опять смотрим ккк=""; ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл СЗ=ТЗ.Ссылка; СЗ.ВыбратьЗначение(ккк,""+ТЗ.Товар,,,0); КонецЦикла; КонецПроцедуры |
|||
31
Mikeware
12.10.09
✎
19:02
|
Если сам код свертки, то
ТЗ.Группировать("Товар:Товар","Ссылка",1); //Собснно, группировка ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл ПромТЗ=ТЗ.тзПотомки; СЗ=СоздатьОбъект("СписокЗначений"); ПромТЗ.Выгрузить(СЗ,,"Ссылка"); ТЗ.Ссылка=СЗ; КонецЦикла; |
|||
32
Serginio1
12.10.09
✎
19:09
|
(31) Продолжая тему кулика
Ну по аналогии мой вариант Тз=глСгруппироватьПоПолюСТЗБыстр(Тз,"Товар"); Тз.ВыбратьСтроки(); Пока Тз.ПолучитьСтроку()=1 Цикл ПромТЗ=Тз.ТзПоГруппе; ........................ КонецЦикла; Кстати мне больше нравится Состав, вместо тзПотомки или ТзПоГруппе |
|||
33
Mikeware
12.10.09
✎
19:19
|
(32) Я не тестировал под нагрузкой твой вариант. Есть 1с++, этого хватает :-)
ИМХО, ТЗ.Группировать("Товар:Товар","Ссылка",1); несколько привычнее и правильнее, нежели Тз=глСгруппироватьПоПолюСТЗБыстр(Тз,"Товар"); Но на вкус и цвет все фломастеры... |
|||
34
Serginio1
12.10.09
✎
19:22
|
(33) Кстати очень работает быстро. Опять же я двумя руками за ИТЗ, но там где этого нельзя можно и мой вариант.
|
|||
35
fifaru
12.10.09
✎
19:42
|
проще
|
|||
36
Mikeware
12.10.09
✎
19:48
|
(35) кртсть-сстр. тлнта
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |