Имя: Пароль:
1C
 
Как функции модуля документа поместить в общий модуль?
0 Parti
 
07.09.09
12:53
В модуле формы документа есть функция по расчету цены. По кнопке автоматически проставляются цены для номенклатуры из регСведений. В табличной части документа есть макет Excel  и цены проставляются в него, перебором всех его ячеек.

Необходимо сделать обработку, которая "вызывала" бы эту функцию у всех документов и проставляла бы всем цены так же из РегСведений. Как это лучше реалзовать? Оставить в моделу формы документа эту функцию и как-то запускать её или перекопировать её в общий модуль и оттуда управлять всеми элементами?
1 Irbis
 
07.09.09
12:54
Сделать функцию "Экспорт"; перебирая нужные документы, вызывать функцию.
2 Ненавижу 1С
 
гуру
07.09.09
12:56
либо в общий модуль, либо в модуль документа, но не формы
3 Parti
 
07.09.09
12:59
(1) я выбрал запросом нужные документы. И как мне запустить экспортную функцию только для этого документа?
4 Irbis
 
07.09.09
13:00
ДокументОбъект знает
5 Parti
 
07.09.09
13:02
(2) А модуль документа знает ЭлементыФОрмы?
6 Irbis
 
07.09.09
13:05
(5) В общем случае нет. Формы может и не быть вообще.
7 Parti
 
07.09.09
13:08
сделал процедуру Экспортной.
вот код Обработки:

Процедура КнопкаВыполнитьНажатие(Кнопка)
   // Вставить содержимое обработчика.
   
   Запрос = Новый Запрос();
Запрос.Текст =   "ВЫБРАТЬ
                |    ЗаявкаГод.Ссылка КАК Ссылка,
                |    ЗаявкаГод.СогласованоПТС
                |ИЗ
                |    Документ.ЗаявкаГод КАК ЗаявкаГод
                |ГДЕ
                |    ЗаявкаГод.СогласованоПТС = ИСТИНА";
   
РезультатЗапроса = Запрос.Выполнить()    ;
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
    Док = Выборка.Ссылка.ПроставитьЦены();
   КОнецЦИкла;
   

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


так, нет?
8 Irbis
 
07.09.09
13:11
Не так. Я же писал ДокументОбъект, а не ДокументСсылка!
9 Parti
 
07.09.09
13:14
(8)
Док = Выборка.ПолучитьОбъект().ПроставитьЦены();

?
10 Irbis
 
07.09.09
13:21
Док = Выборка.Ссылка.ПолучитьОбъект();
Док.ПроставитьЦены();
// Если надо записать
Если Док.Проведен Тогда
Док.Записать(РежимЗаписиДокумента.Проведение);
Иначе
Док.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
11 Parti
 
07.09.09
13:26
{Обработка.Обработка1.Форма.Форма(18)}: Метод объекта не обнаружен (ПроставитьЦены)
Док.ПроставитьЦены();
12 Irbis
 
07.09.09
13:27
В модуле  объекта должна быть процедура или функция ПроставитьЦены() с пометкой Экспорт.
13 Mitriy
 
07.09.09
13:30
миста лучший отладчик?
думай иногда головой, не стесняйся...
14 Parti
 
07.09.09
13:36
(12) ага.. а как a модуле объекта обращаться к Элементамформы?
Ссылка.ПолучитьФОрму() ?
15 Irbis
 
07.09.09
13:37
(14) Никак не обращаться. Неправильно это.
16 vvert
 
07.09.09
13:39
(12) +1 не вижу это она "Экспортная"
17 Parti
 
07.09.09
13:44
(16) Она была в модуле формы. В модуле  она не работает.

(15) Хорошо. А как мне получить доступ к макету, который размещен в ТП на форме документа?
18 Irbis
 
07.09.09
13:51
А что другим способом получить данные из макета никак? Если там файл Excel с известной структурой, что мешает прочитать и разобрать файл, без использования визуальных объектов?
19 Parti
 
07.09.09
14:21
(18) смотри. На форме есть Табличное Поле(ТабДок). В него Вставлен макет Excel. Макет, я так понимаю, только макет. Все данные записываются в ТП. Как мне залезть в табличное поле документа из его общего модуля? Вот кусок кода, каким образом записывается в ТП данные:

Запрос1 = Новый Запрос;
               Запрос1.Текст ="ВЫБРАТЬ *
               |ИЗ
               |    РегистрСведений.ЦеныНаГод КАК ЦеныНаГод
               |ГДЕ
               |    (ЦеныНаГод.Материал = &Материал) И
               |    (ЦеныНаГод.Год = &Год)";
               
               Запрос1.УстановитьПараметр("Материал", Материал1);
               Запрос1.УстановитьПараметр("Год", ЗначВыб1.Год);
               Результат1 = Запрос1.Выполнить();
               КолЗап1 = Результат1.Выбрать().Количество();
               Выборка1 = Результат1.Выбрать();
               
               Если КолЗап1 <> 0 Тогда
                   Выборка1.Следующий();
                   Цена1 = Выборка1.Цена;
                   
                   Обл1 = "R" + Сч2 + "C8";
                   ЭлементыФормы.ТабДок.Область(Обл1).Значение = Цена1;
                   
                   Обл1 = "R" + Сч2 + "C7";
                   Результат1 = Цена1 * ЭлементыФормы.ТабДок.Область(Обл1).Значение;
                   
                   Обл1 = "R" + Сч2 + "C9";
                   ЭлементыФормы.ТабДок.Область(Обл1).Значение = Результат1;
                   
                   Для Сч1 = 1 По 12 Цикл
                       Стлб1 = 12 + (Сч1 - 1) * 3;
                       Стлб2 = 11 + (Сч1 - 1) * 3;
                       Обл1 = "R" + Сч2 + "C" + Стлб1;
                       Обл2 = "R" + Сч2 + "C" + Стлб2;
                       Результат1 = Цена1 * ЭлементыФормы.ТабДок.Область(Обл2).Значение;
                       ЭлементыФормы.ТабДок.Область(Обл1).Значение = Результат1
                   КонецЦикла
                   
               КонецЕсли;
20 Irbis
 
07.09.09
14:24
>> Все данные записываются в ТП - в корне неверно ТП - элемент визуализации данных. Что является источником данных для табличного поля?
21 Irbis
 
07.09.09
14:25
Обращайся к РС.
22 Parti
 
07.09.09
14:27
(20)ок. Ща гляну. Источником скорее всего является Табличная часть документа.
Просто док не я создавал, тут такого наверчено, сижу вот разбираюсь..
23 Parti
 
07.09.09
14:35
Как я понял: В табл части дока есть: материал, количество, тип, едИзм и пр. Нет цены. В ТП пользователем добавляется все это и по кнопке "Цены" проставляются цены из РС. Как выводятся - я пока не разобрался, но думаю, что так же из РС проставляются в соответствие материалам и времени установки цен.

Теперь же нужно сделать обработку, чтобы по ней цены проставлялись автоматически из РС. Для этого нужно залезть в ТП документа и как-то проставить их там..
24 Irbis
 
07.09.09
14:41
Неверное решение, если цены заполняются на основании данных РС, то и брать их при заполнении из модуля объекта следует по тому же самому алгоритму и из того же самого места, то есть из РС.

Еще раз повторяю ТП - элемент визуализации и никаких данных в себе не хранит.
25 Parti
 
07.09.09
14:51
>> ТП - элемент визуализации и никаких данных в себе не хранит.

Не хранит. Но вывести-то их как-то нужно. Нужно, чтобы пользователю отображались цены и суммы в ТП документа. С модуля формы документа это сделать просто:
ЭлементыФормы.ТабДок.Область(Обл2).Значение = Результат1

А вот с модуля документа это сделать сложнее..

Форма =Ссылка.ПолучитьОбъект().ПолучитьФорму("ФормаДокумента", ЭтаФОрма);
Форма.ЭлементыФормы.Табдок // дальше никак..
26 Irbis
 
07.09.09
15:03
(25) А зачем это делать из модуля? Пусть форма отрабатывает свои методы, а объект свои. Получение данных - забота объекта, отображение - формы. В конце концов передай в модуль объекта элемент формы, то же самое ТП. И хоть обзаполняйся там.
27 Parti
 
07.09.09
15:13
Irbis, ты самый терпеливый! Спасибо тебе. Буду думать над задачей..
28 Irbis
 
07.09.09
15:15
Так что все-таки является источником данных для ТП?
29 Parti
 
07.09.09
15:24
Хороший вопрос. Наверно все-таки Табличная Часть документа. ТП служит для ввода данных и вывода их на экран... если честно, у меня уже болит голова разбираться с их кодом.. вот только одна процедура :

Процедура ПриОткрытии()
   
   //04.09.09 <прогер3>  Интеррактивное изменение доступности форм в зависимости от прав пользователя
   ЭлементыФОрмы.Флажок1.Доступность=Ложь;
   ЭлементыФОрмы.Флажок2.Доступность = Ложь;
   ЭлементыФОрмы.КомментарийПТС.Доступность = ЛОЖЬ;
   ЭлементыФОрмы.КомметарийОМТСиМ.Доступность = Ложь;
   ЭлементыФОрмы.Комментарий.Доступность = Истина;
   ЭлементыФОрмы.Комментарий.Доступность = Истина;
  Если  РольДоступна("ПТС")  Тогда
   ЭлементыФОрмы.Флажок1.Доступность=ИСТИНА;
   ЭлементыФОрмы.КомментарийПТС.Доступность = Истина;
КОнецЕсли;
  Если  РольДоступна("ОМТСиМ")  Тогда
   ЭлементыФОрмы.Флажок2.Доступность = ИСТИНА;
   ЭлементыФОрмы.КомметарийОМТСиМ.Доступность = ИСТИНА;
 КОнецЕсли;
   //КОнецФрагмента <прогер3>

   ЭлементыФормы.ТабДок.Вывести(ОбластьШапка);
   ЭлементыФормы.ТабДок.ФиксацияСверху=3;
   ЭлементыФормы.ТабДок.ФиксацияСлева=9;
   ЭлементыФормы.ТабДок.ТолькоПросмотр=Истина;
   
   СтарыйОбъектВид = NULL;
   СтарыйМатериал = NULL;
   СтарыйМатериалМарка = NULL;
   Комментарий1 = NULL;
   Сдвиг = 10;
   
   СчВыведенныхСтрок = 3;
   ВыводСледующейСтроки = истина;
   
   СчСтрокТабличнойЧасти = 0;//20.08.2009 <прогер1>. Счетчик обработанных строк табличной
                             //части документа, через каждые 12 строчек должен сбрасываться
                             //сброс счетчика должен означать вывод новой строки с материалом
   
   ПрГр1 = 0; // Добавил <прогер2> И.В. 13.05.2009 - это для создания итогов.
   Для Каждого строка Из ТаблицаМатериалов
       Цикл
       
       СчСтрокТабличнойЧасти = СчСтрокТабличнойЧасти + 1; //20.08.2009 <прогер1>
           
       // Добавил <прогер2> И.В. 13.05.2009 - для итогов
       // --- Начало фрагмента ---
       
       ФлагИтога1 = Ложь;
       Если ПрГр1 = 0 Тогда
           ПрГр1 = Строка.Группа;
       КонецЕсли;
       
       Если ПрГр1 <> Строка.Группа Тогда
           ПрГр1 = Строка.Группа;
           ФлагИтога1 = Истина;
       КонецЕсли;    
       
       // --- Конец фрагмента ---
       
       Если СтарыйОбъектВид = NULL
           Тогда
           
               СтарыйОбъектВид = Строка.ОбъектВид;
               ОбластьОбъектВид.Параметры.ОбъектВид = Строка.ОбъектВид;
               ЭлементыФормы.ТабДок.Вывести(ОбластьОбъектВид);
               СчВыведенныхСтрок = СчВыведенныхСтрок + 1;
               
           КонецЕсли;
           
       Если СтарыйОбъектВид <> Строка.ОбъектВид
           Тогда
           
               СтарыйОбъектВид = Строка.ОбъектВид;
               ОбластьОбъектВид.Параметры.ОбъектВид = Строка.ОбъектВид;
               ЭлементыФормы.ТабДок.Вывести(ОбластьОбъектВид);
               СчВыведенныхСтрок = СчВыведенныхСтрок + 1;
               
           КонецЕсли;
           
       // <прогер2> И.В. 14.03.2009 - для вывода подгрупп и невывода пустого материала
       // --- Начало фрагмента ---
       Если Строка.Материал = Справочники.Материалы.ПустаяСсылка() Тогда
       КонецЕсли;
       // --- Конец фрагмента ---
           
       Если СтарыйМатериал = NULL
                   Тогда
                   
                       СтарыйМатериал = Строка.Материал;
                       СтарыйМатериалМарка = Строка.Материал.Тип;
                       Комментарий1 = Строка.Комментарий;
                       ПланГод = 0;
                       КоличествоГод = 0;
                       
                   КонецЕсли;
                               
       // <прогер2> И.В. xx.03.2009
       // ---------------------------
       // Здесь названия материалов совпадали - различия только в марке
       // Т.е. надо контролировать различие не материалов, а марки!
       // Плюс оказывается надо контролировать комментарии -
       // в них идентификатор одинаковых по типу (марке) материалов.
       // Этот момент в программе я уже исправил - ниже исправленный код.
       
       
       // <прогер1> Р.А. 20.08.2009 Закоментировал всвязи со сложностью проверок, например
       // если комментарий пустой?
       
       //Если (СтарыйМатериал <> Строка.Материал) ИЛИ
       //     (СтарыйМатериалМарка <> Строка.Материал.Тип) ИЛИ
       //     (Комментарий1 <> Строка.Комментарий)
       
       
       Если СчСтрокТабличнойЧасти >12 // <прогер1> Р.А. 20.08.09 так мне кажется проще всего
                                      // Все равно по 12 строк табличной части на 1 материал
                                      // Приходится
                     Тогда
                   
                       СчСтрокТабличнойЧасти = 1;
                       ВыводСледующейСтроки = Истина;
                       СтарыйМатериал = Строка.Материал;
                       СтарыйМатериалМарка = Строка.Материал.Тип;
                       Комментарий1 = Строка.Комментарий;
                       ПланГод = 0;
                       КоличествоГод = 0;
                       Сдвиг = 10;
                                               
                   КонецЕсли;
                   
       // Добавил <прогер2> И.В. 13.05.2009 - вывод итогов
       // --- Начало фрагмента ---
       Если ФлагИтога1 = Истина Тогда
           СчВыведенныхСтрок = СчВыведенныхСтрок + 1;
       КонецЕсли;
       // --- КонецФрагмента ---
               
       Если ВыводСледующейСтроки
                       Тогда
                           // <прогер2> И.В. 14.05.2009 для вывода нескольких групп добавил это условие
                           // Без условия несколько групп не выводится - надо оставить то, что внутри Если
                           Если Строка.Материал <> Справочники.Материалы.ПустаяСсылка() Тогда
                               ОбластьСтрока.Область("R1C1").Расшифровка = Строка.ОбъектВид;
                               ОбластьСтрока.Параметры.Материал = СокрЛП(Строка.Материал) + " "+СокрЛП(Строка.Материал.Тип)+" "+СокрЛП(Строка.Материал.Параметры);
                               ОбластьСтрока.Область("R1C2").Расшифровка=Строка.Материал;
                               //ОбластьСтрока.Параметры.Гост = Строка.Материал.ГОСТ;
                               ОбластьСтрока.Область("R1C4").Текст = Строка.Материал.БазоваяЕдиницаИзмерения;    
                               ОбластьСтрока.Параметры.Норма = Строка.НормаНаЕдиницу;
//                                ОбластьСтрока.Область("R1C13").Текст = Строка.Комментарий;
                               ОбластьСтрока.Область("R1C4").Расшифровка=Строка.Материал.БазоваяЕдиницаИзмерения;
                               ЭлементыФормы.ТабДок.Вывести(ОбластьСтрока);
                               СчВыведенныхСтрок = СчВыведенныхСтрок + 1;
                               ВыводСледующейСтроки = Ложь;
                           КонецЕсли;
                       КонецЕсли;
       Если Не ВыводСледующейСтроки
                           Тогда
                               Попытка
                                   КолонкаПлан = Сдвиг;
                                   КолонкаКоличество = Сдвиг+1;
                           
                                   ЭлементыФормы.ТабДок.Область("R"+Строка(СчВыведенныхСтрок)+"C"+Строка(КолонкаПлан)).Значение = Строка.ПланируемыйОбъем;
                                   ЭлементыФормы.ТабДок.Область("R"+Строка(СчВыведенныхСтрок)+"C"+Строка(КолонкаКоличество)).Значение = Строка.Количество;
               
                                   ПланГод = ПланГод + Строка.ПланируемыйОбъем;
                                   КоличествоГод = КоличествоГод + Строка.Количество;
                   
                                   ЭлементыФормы.ТабДок.Область("R"+Строка(СчВыведенныхСтрок)+"C6").Значение = ПланГод;
                                   ЭлементыФормы.ТабДок.Область("R"+Строка(СчВыведенныхСтрок)+"C7").Значение = КоличествоГод;
                               Исключение
                                   Сообщить("R"+Строка(СчВыведенныхСтрок)+"C"+Строка(КолонкаПлан));
                                   Сообщить(Строка.Материал);
                                   Сообщить(Строка.Материал.Тип);
                           КонецПопытки;
                           
                               Сдвиг = Сдвиг + 3;
                           КонецЕсли;
                           
       КонецЦикла;

//--- Добавил <прогер2> И.В. 03.08.2009 ---
//--- Фрагмент подставляет цены ---
//--- Начало фрагмента ---

   //Закомментировал <прогер1> 20.08.2009
   //Что это? зачем нам тогда нам нужен регистр цен?
   
   //ЗначВыб1 = Ссылка.ПолучитьОбъект().ДокЦены;  
   //Если ЗначВыб1 <> Документы.ЗаявкаГод.ПустаяСсылка() Тогда
       
       // Пробегаем по всем строкам документа
       Сч2 = 4;
       Значение1 = "Непустое_значение";
       
       Пока (Значение1 <> "") Цикл
           Сч2 = Сч2 + 1;
           Обл1 = "R" + Сч2 + "C4";
           ЕдИзм1 = ЭлементыФормы.ТабДок.Область(Обл1).Текст;
           
           Обл1 = "R" + Сч2 + "C2";
           Значение1 = ЭлементыФормы.ТабДок.Область(Обл1).Текст;
                       
           Если (Значение1 <> "") И (ЕдИзм1 <> "") Тогда
               Материал1 = ЭлементыФормы.ТабДок.Область(Обл1).Расшифровка;
               
               Запрос1 = Новый Запрос;
               Запрос1.Текст ="ВЫБРАТЬ *
               |ИЗ
               |    РегистрСведений.ЦеныНаГод КАК ЦеныНаГод
               |ГДЕ
               |    (ЦеныНаГод.Материал = &Материал) И
               |    (ЦеныНаГод.Год = &Год)";
               
               Запрос1.УстановитьПараметр("Материал", Материал1);
               Запрос1.УстановитьПараметр("Год", ПериодПланирования);//Дату берем прямо из екщего документа
               Результат1 = Запрос1.Выполнить();
               КолЗап1 = Результат1.Выбрать().Количество();
               Выборка1 = Результат1.Выбрать();
               
               Если КолЗап1 <> 0 Тогда
                   Выборка1.Следующий();
                   Цена1 = Выборка1.Цена;
                   
                   Обл1 = "R" + Сч2 + "C8";
                   ЭлементыФормы.ТабДок.Область(Обл1).Значение = Цена1;
                   
                   Обл1 = "R" + Сч2 + "C7";
                   Результат1 = Цена1 * ЭлементыФормы.ТабДок.Область(Обл1).Значение;
                   
                   Обл1 = "R" + Сч2 + "C9";
                   ЭлементыФормы.ТабДок.Область(Обл1).Значение = Результат1;
                   
                   Для Сч1 = 1 По 12 Цикл
                       Стлб1 = 12 + (Сч1 - 1) * 3;
                       Стлб2 = 11 + (Сч1 - 1) * 3;
                       Обл1 = "R" + Сч2 + "C" + Стлб1;
                       Обл2 = "R" + Сч2 + "C" + Стлб2;
                       Результат1 = Цена1 * ЭлементыФормы.ТабДок.Область(Обл2).Значение;
                       ЭлементыФормы.ТабДок.Область(Обл1).Значение = Результат1
                   КонецЦикла
                   
               КонецЕсли;    
           
           КонецЕсли
           
       КонецЦикла;
       ЭтаФорма.ЭлементыФормы.КоманднаяПанель2.Кнопки.Формулы.Доступность = Ложь
   //КонецЕсли // Удалил <прогер1>

// --- Конец фрагмента ---
           
КонецПроцедуры
30 Irbis
 
07.09.09
15:26
Не читая (29) до конца, а что в свойствах табличного поля написано? Неужели сложно посмотреть?
31 Irbis
 
07.09.09
15:28
А так, камменты рулят.
32 Parti
 
07.09.09
15:31
Процедура ТабДокПриИзмененииСодержимогоОбласти(Элемент, Область)
   // Вставить содержимое обработчика.
   
   Если Область.СодержитЗначение тогда    
   
   Если СокрЛП(ТипЗнч(Область.Значение))="Число"
       Тогда
           ПозицияR = Найти(Область.Имя,"C");
           ИмяОбластиСтроки = Лев ( Область.Имя, ПозицияR -1);
           
           //Обновим цену и сумму для измененного столбца
           //Добавил <Прогер1> Р.А. 20.08.2009
           СтолбецСумма = Число(Прав (Область.Имя,СтрДлина(Область.Имя)-ПозицияR))+1;
           Материал = ЭлементыФормы.ТабДок.Область(ИмяОбластиСтроки+"C2").Расшифровка;
           ЦенаМатериала = ЦенаМатериалаГод (Материал, ПериодПланирования);
           ЭлементыФормы.ТабДок.Область(ИмяОбластиСтроки+"C8").Значение = ЦенаМатериала;
           ЭлементыФормы.ТабДок.Область(ИмяОбластиСтроки+"C"+Строка(СтолбецСумма)).Значение = Область.Значение * ЦенаМатериала;
                                   
           //Конец фрагмента
           
           СчМес = 0;
           Сдвиг = 10;
           ПланГод = 0;
           КоличествоГод = 0;
           СуммаГод = 0; // Добавил <Прогер1> Р.А. 20.08.2009 для обновления информации по
                         //суммам при изменеии количества
           
           Пока СчМес <=11
               Цикл
               
                   КолонкаПлан = Сдвиг;
                   КолонкаКоличество = Сдвиг + 1;
                   КолонкаСумма = Сдвиг + 2;// Добавил <Прогер1> Р.А. 20.08.2009 для обновления информации по
                                              //суммам при изменеии количества
               
                   ПланГод = ПланГод + ЭлементыФормы.ТабДок.Область(ИмяОбластиСтроки+"C"+Строка(КолонкаПлан)).Значение;
                   КоличествоГод = КоличествоГод + ЭлементыФормы.ТабДок.Область(ИмяОбластиСтроки+"C"+Строка(КолонкаКоличество)).Значение;
                   
                   // Добавил <Прогер1> Р.А. 20.08.2009 для обновления информации по
                   //суммам при изменеии количества
                   
                   // Обновим суммы во всех столбцах, вдруг цены не было на момент добавления этой позиции ранее
                   ЭлементыФормы.ТабДок.Область(ИмяОбластиСтроки+"C"+Строка(КолонкаСумма)).Значение = ЭлементыФормы.ТабДок.Область(ИмяОбластиСтроки+"C"+Строка(КолонкаКоличество)).Значение * ЦенаМатериала;
                   СуммаГод = СуммаГод + ЭлементыФормы.ТабДок.Область(ИмяОбластиСтроки+"C"+Строка(КолонкаСумма)).Значение;
                   // Конец фрагмента
                   
                   
                   Сдвиг = Сдвиг + 3;
                   СчМес = СчМес + 1;
               КонецЦикла;
               
           ЭлементыФормы.ТабДок.Область(ИмяОбластиСтроки+"C6").Значение = ПланГод;
           ЭлементыФормы.ТабДок.Область(ИмяОбластиСтроки+"C7").Значение = КоличествоГод;
           // Добавил <Прогер1> Р.А. 20.08.2009 для обновления информации по
           //суммам при изменеии количества
           ЭлементыФормы.ТабДок.Область(ИмяОбластиСтроки+"C9").Значение = СуммаГод;
           
       КонецЕсли;
       
   КонецЕсли;
   
КонецПроцедуры
33 Irbis
 
07.09.09
15:36
Пхоже что источник данных - табличный документ. Пусть его функция и возвращает, но ИМХО тупость такой реализации неимоверна.
34 Parti
 
07.09.09
15:39
(33) это еще немного. Чтобы во всем модуле разобраться, нужно вселенское терпение и мудрость предков.. Надеюсь не поседеть к тому времени.

Буду потихоньку разбираться, авось что-нить придумаю:)