Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Ускорение работы документа с большой ТЗ при помощи 1С++ (число прочтений - 11461 )
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Ускорение работы документа с большой ТЗ при помощи 1С++
19. Августа 2010 :: 10:16
Печать  
Есть большой документ - 25тыс.строк. В каждой строке ТЧ есть строковые реквизиты длиной 200 символов. Работать с таким документов - одно мучение - записывается/читается очень долго.
Можно ли как-то ускорить этот документ при помощи 1С++?
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #1 - 19. Августа 2010 :: 10:22
Печать  
Можно переделать на ТабличноеПоле.. вот только нафига столько строк хранить в документе ? - не ясно, нафига строковое поле в 200 символов - тоже.
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #2 - 19. Августа 2010 :: 10:40
Печать  
Eprst писал(а) 19. Августа 2010 :: 10:22:
вот только нафига столько строк хранить в документе ? - не ясно, нафига строковое поле в 200 символов - тоже.

не буду вдаваться в подробности,
надо...

Eprst писал(а) 19. Августа 2010 :: 10:22:
Можно переделать на ТабличноеПоле..

А что даст табличное поле?
Оно на запись и чтение документа не влияет.
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #3 - 19. Августа 2010 :: 10:44
Печать  
Даст то, что форма будет открываться без тормозов вообще.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #4 - 19. Августа 2010 :: 10:46
Печать  
А так, еслм у тебя скуль, можешь проведение такого документа прописать прямиком в таблички, делая инсерт/апдейт и пересчет итогов..
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #5 - 19. Августа 2010 :: 11:01
Печать  
Eprst писал(а) 19. Августа 2010 :: 10:44:
Даст то, что форма будет открываться без тормозов вообще.

дело-то не только в открытии...
запись длительнее

Eprst писал(а) 19. Августа 2010 :: 10:46:
А так, еслм у тебя скуль, можешь проведение такого документа прописать прямиком в таблички, делая инсерт/апдейт и пересчет итогов..


это хорошо!
а можно ссылку на какой-нибудь примерчик?

а то я как-то пробовал записать документ напрямую, но не получилось Печаль
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #6 - 19. Августа 2010 :: 11:12
Печать  
Спроси у Олега Садовникова.. у него есть готовые классы.
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #7 - 19. Августа 2010 :: 11:17
Печать  
Eprst писал(а) 19. Августа 2010 :: 11:12:
Спроси у Олега Садовникова.. у него есть готовые классы.


а это кто? где его искать?
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #8 - 19. Августа 2010 :: 11:19
Печать  
Вообще-то мне итоги не нужны, документ не делает никаких движений.
То есть задача упрощается, нужны только быстрая запись и чтение.
На крайняк - просто ускорить запись, а со чтением можно смириться
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #9 - 19. Августа 2010 :: 11:40
Печать  
es3000 писал(а) 19. Августа 2010 :: 11:17:
Eprst писал(а) 19. Августа 2010 :: 11:12:
Спроси у Олега Садовникова.. у него есть готовые классы.


а это кто? где его искать?


нашел его эл.почту
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #10 - 19. Августа 2010 :: 13:22
Печать  
(0)  Опиши задачу полностью.
Ничего быстрее чем update не придумаешь
Но возникают вопросы по графы отбора, общие реквизиты,
ссылки документов,УРБД и.т.д.
и если этого  нет сейчас то не факт что не появиться завтра
и тогда снова это придеться переписывать.
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #11 - 19. Августа 2010 :: 16:03
Печать  
Z1 писал(а) 19. Августа 2010 :: 13:22:
(0)  Опиши задачу полностью.

Задача очень простая.

Необходимо реализовать обмен данными с другой организацией.
Она нам присылает список контрагентов, мы его заполняем данными по этим контрагентам.
Решили сделать это документом. В табличную часть документа загружаются эти контрагенты. Затем наш сотрудник заполняет недостающие данные, и нажимает кнопку "выгрузить".

Технически проблем никаких, только вопрос быстродействия.
Внести данные по всем сразу нереально. Поэтому с этим документом работают в течение нескольких дней пока не заполнят до конца. И каждый день (а то и несколько раз в день) приходится открывать\записывать этот документ.

Про UPDATE я понимаю что это лучший способ записи в плане быстродействия. Но в помощи не нашел как это сделать.

Помогите для примера простенький запрос сделать: предположим что в ТЧ есть только одно поле - "Контрагент". Как будет выглядеть запрос, который записывает ТЧ в базу? И как сделать, чтобы стандартная запись табличной части не срабатывала?
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #12 - 19. Августа 2010 :: 17:15
Печать  
Мне кажется, что в данном случае всё лучше сделать справочником (или подчиненным справочником). В таком случае одна запись (которая сейчас является строкой документа) соответствует одному элементу справочника, т.е. проблемы тормозов при записи/обновлении данных вообще не будет.
Всё ИМХО и на основании того, как я понял задачу.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #13 - 20. Августа 2010 :: 04:35
Печать  
(es3000) Урбд есть или нет ?
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #14 - 20. Августа 2010 :: 04:35
Печать  
Обмен выполняется ежемесячно,

По каждому факту обмена надо хранить некоторую информацию: сколько строк загружено, сколько выгружено, дата и время загрузки, и т.д. Распечатка акта по этому обмену.

Короче очевидно что сам факт обмена должен быть оформлен документом. Ссылки в табличных частях - на справочник контрагентов. Но кроме ссылки в ТЧ есть и строковые реквизиты, которые имеют отношение только к конкретному обмену и не нужны в справочнике.

Но это вопрос больше архитектурного плана. Мы (в смысле я со своими коллегами на работе) его уже обсуждали и решили сделать документом.
Сейчас на повестке конкретно стоит чисто технический вопрос: как реализовать работу такого документа с большим количеством строк с приемлемой производительностью. Говорят, что это возможно при помощи 1С++.

Как?
Олег Садовников по электронке не отвечает
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #15 - 20. Августа 2010 :: 04:35
Печать  
Z1 писал(а) 20. Августа 2010 :: 04:35:
(es3000) Урбд есть или нет ?

нету
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #16 - 20. Августа 2010 :: 05:01
Печать  
Тогда как бы два Варианта как было предложено  выше справочник
но это тебе придеться переписать все что сейчас и пользователям придеться перестраиваться.
Второй вариант через документ но по другому работать с табличной частью
Предположим сейчас в табличной части поля
Клиент Справочник.Контагенты
Поле1  Строка 300
Поле2  Строка 300
Поле3  Строка 300
Табличная часть в sql  dt100.

Заводим в той же базе еще одну таблицу x_dt100. В ней и будем
хранить Табличную часть документа.
Т.е. в оригинальной таблице dt100 всегда нет строк. все храним
в  x_dt100.
Два подварианта при записи писать таблицу целиком ( это хуже так как данных много и описывать нечего так как все понятно).
Записываем только измененные строки.

ПриОткрытии документа из x_dt100 читаем все в Табличную часть.
Далее при любом изменении данных в строке каким либо образом
помечаем что строка была изменена.

В модуле при записи
пишем update на те строки которые были изменены.

После этого в табличной части удаляем все строки.

Далее для вставки новой строки помечаем эту строку что строка не измененная а новая и для нее при записи вместо update делаем insert.

При удалении строки легче всего сделать сначала записываем все изменения в базу и снимаем маркеры измененных строк
после удаляем строку в x_dt100 и удаляем ее из Табличной части.
можно сделать и вариант учета удаления и в Конце ПриЗаписи но он потребует больше кода и стоит ли его делать тебе решать.

Также можно сделать маркер не на строку а маркер на каждое поле строки тогда если  всего лишь в пятой строке поменяли поле Клиент то update только для этого поля

update x_dt100 set Клиент = <НовЗначКлиент>
where IDDOC = <КонкретныйДокумент> and ИдентСтроки=5



Ну вообщем как-то так.




  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #17 - 20. Августа 2010 :: 05:50
Печать  
спасибо. идея понятна.

возникли вопросы:
1) почему нельзя писать в таблицу dt100?
2) если писать в x_dt100, не затрется ли она при обновлении базы? в случае изменения структуры этого документа.
3) имена колонок в x_dt100 задавать точно такими же как и в dt100 или можно прямо так и назвать: "Клиент", "Строка1"?
4) как правильно написать запрос при создании нового документа? Все строки новые, они должны добавляться.
Такой код правильный?
Код
Выбрать все
В процедуре ПриЗаписи:

ТЗ = СоздатьОбъект("ТаблицаЗначений");
ВыгрузитьТабличнуюЧасть(ТЗ);
УдалитьСтроки();

рс=СоздатьОбъект("ODBCRecordset");
рс.Подготовить("insert into x_dt100 (Клиент, Строка1, Строка2, Строка3) values (?, ?, ?, ?)");
рс.ДобПараметр(1,4,10,0);
рс.ДобПараметр(1,15,200,0);
рс.ДобПараметр(1,15,200,0);
рс.ДобПараметр(1,15,200,0);
рс.ВыполнитьSQL_ИзТЗ(ТЗ); 



  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #18 - 20. Августа 2010 :: 06:14
Печать  
es3000 писал(а) 20. Августа 2010 :: 04:35:
Обмен выполняется ежемесячно,

По каждому факту обмена надо хранить некоторую информацию: сколько строк загружено, сколько выгружено, дата и время загрузки, и т.д. Распечатка акта по этому обмену.

Короче очевидно что сам факт обмена должен быть оформлен документом.

Для меня вообще не очевидно.
Навскидку.
Добавляем Справочник.Обмен, которому добавляем все нужные тебе реквизиты (строк загружено, выгружено, дата и время выгрузки и т.д.)
Добавляем Справочник.СоставОбмена подчиненный справочнику "Обмен". Добавляем здесь реквизиты с нужным тебе типом ( "на справочник контрагентов и строковые реквизиты, которые имеют отношение только к конкретному обмену).

В форме элемента Справочника.Обмен добавляем ТП, состоящая из всех подчиненных элементов справочника "СоставОбмена" (если использовать класс "ПоставщикДанных", то там вообще несколько строк в модуль добавил и всё)

И никакой проблемы долгой записи ТЧ нет. И уж тем более сделать на основе этих данных печатную форму.
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #19 - 20. Августа 2010 :: 06:24
Печать  
JohnyDeath писал(а) 20. Августа 2010 :: 06:14:
es3000 писал(а) 20. Августа 2010 :: 04:35:
Обмен выполняется ежемесячно,

По каждому факту обмена надо хранить некоторую информацию: сколько строк загружено, сколько выгружено, дата и время загрузки, и т.д. Распечатка акта по этому обмену.

Короче очевидно что сам факт обмена должен быть оформлен документом.

Для меня вообще не очевидно.

Ну обычно, если надо зафиксировать факт с датой и временем - то это документ.

JohnyDeath писал(а) 20. Августа 2010 :: 06:14:
Навскидку.
Добавляем Справочник.Обмен, которому добавляем все нужные тебе реквизиты (строк загружено, выгружено, дата и время выгрузки и т.д.)
Добавляем Справочник.СоставОбмена подчиненный справочнику "Обмен". Добавляем здесь реквизиты с нужным тебе типом ( "на справочник контрагентов и строковые реквизиты, которые имеют отношение только к конкретному обмену).

В форме элемента Справочника.Обмен добавляем ТП, состоящая из всех подчиненных элементов справочника "СоставОбмена" (если использовать класс "ПоставщикДанных", то там вообще несколько строк в модуль добавил и всё)

И никакой проблемы долгой записи ТЧ нет.

В принципе нормальный вариант, только у меня уже все под документы заточено. Остался только вопрос с запросом INSERT.
Конечно, если не заработает после некоторых усилий, то придется переделывать.

Создал таблицу dt471_x, при помощи сгенерированного скрипта от таблицы dt471. При выполнении запроса выдается ошибка:
Код
Выбрать все
Invalid object name 'dbo.dt471_x'. 


Что не правильно
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #20 - 20. Августа 2010 :: 06:27
Печать  
1 потому что в 1с вся табличная часть сначала затирается потом пишеться заново целиком
т.к. у тебя большие размеры это не оптимально.

2.нет чужие таблицы в родной базе 1с не трогает.
1с проверяет только свои таблицы.

3. как назвать поля в x_dt100 не принципиально главное чтобы тебе было удобно и понятно.

4. Давай я еще раз опишу.
Предположим  что для конкретного документа у нас 5015 строк
ПриОткрытии загружаем их в Табличную часть

далее в модуле ПриОткрытии()
ТзМаркерСтрок = СоздатьОбъект("ТаблицаЗначений");
ТзМаркерСтрок.НоваяКолонка("ЭтоНоваяСтрока","число",1,0);
ТзМаркерСтрок.НоваяКолонка("ИзменилиСтроку","число",1,0);
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
  ТзМаркерСтрок.НоваяСтрока();
КонецЦикла;



Когда добавляем новую строку то нужен код
  ТзМаркерСтрок.НоваяСтрока();
  ТзМаркерСтрок.ЭтоНоваяСтрока = 1;
т.е в ТзМаркерСтрок появиться строка с номером = 5016

Когда изменяем что либо в строке то код
  ТзМаркерСтрок.УстановитьЗначение(НомерСтроки,"ИзменилиСтроку",1);


Процедура ПриЗаписи()
  ....
  ТзМаркерСтрок.ВыбратьСтроки();
  Пока ТзМаркерСтрок.ПолучитьСтроку() = 1 Цикл
      Если ТзМаркерСтрок.ЭтоНоваяСтрока = 1 Тогда
// Одиночный insert на одну текущую строку
      ИначеЕсли ТзМаркерСтрок.ЭтоНоваяСтрока = 1 Тогда
// Одиночный update на одну  текущую  строку
      КонецЕсли;
  КонецЦикла;
  ....

PS в таблице x_dt100 должен быть маркер и документа IDDOC
и маркер строки документа.



  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #21 - 20. Августа 2010 :: 06:29
Печать  
Invalid object name 'dbo.dt471_x'.

Стоп, Это мой косяк! Сейчас поправлю
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #22 - 20. Августа 2010 :: 06:31
Печать  
es3000 писал(а) 20. Августа 2010 :: 06:24:
Ну обычно, если надо зафиксировать факт с датой и временем - то это документ.

Справочник с реквизитом типа "Дата" с установленным отбором и сортировкой.

Я тебя не принуждаю, но я не понимаю, зачем лезть с прямыми апдейтами и инсертами табличек там, где всё это можно сделать штатными средствами (причем получится эффективнее, чем с "прямыми апдейтами"). У справочника есть еще один большой плюс: можно установить индекс(отбор) на любой из его реквизитов.

Ладно, всё, умолкаю Подмигивание
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #23 - 20. Августа 2010 :: 06:35
Печать  
JohnyDeath писал(а) 20. Августа 2010 :: 06:31:
es3000 писал(а) 20. Августа 2010 :: 06:24:
Ну обычно, если надо зафиксировать факт с датой и временем - то это документ.

Справочник с реквизитом типа "Дата" с установленным отбором и сортировкой.

Я тебя не принуждаю, но я не понимаю, зачем лезть с прямыми апдейтами и инсертами табличек там, где всё это можно сделать штатными средствами (причем получится эффективнее, чем с "прямыми апдейтами"). У справочника есть еще один большой плюс: можно установить индекс(отбор) на любой из его реквизитов.

Ладно, всё, умолкаю Подмигивание

на свою таблицу можно тоже установить какие хочешь индексы(а значит и отборы).
Автору предложено два варианта, что выбрать зависит от многих факторов пусть автор сам и решает.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #24 - 20. Августа 2010 :: 06:38
Печать  
Z1 писал(а) 20. Августа 2010 :: 06:35:
на свою таблицу можно тоже установить какие хочешь индексы(а значит и отборы).

Ну как бы она не совсем "своя". И штатно это никак не сделаешь.
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #25 - 20. Августа 2010 :: 06:42
Печать  
JohnyDeath, Z1


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

Помогите с INSERT-ом.
Можно ли в этом INSERT-е обратиться к колонке как к имени реквизита в документе?

То есть написать не:
Код
Выбрать все
"insert into x_dt100 (SP1746, SP1747, SP1748, SP1749) values (?, ?, ?, ?)" 



а
Код
Выбрать все
"insert into x_dt100 (Клиент, Строка1, Строка2, Строка3) values (?, ?, ?, ?)" 



сейчас для второго варианта выдается ошибка:
Код
Выбрать все
Invalid column name 'Клиент' 


  
Наверх
ICQ  
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #26 - 20. Августа 2010 :: 06:44
Печать  
В варианте со справочником есть еще один плюс: с его элементами смогут одновременно работать несколько человек, а с табличной частью документа - только один.
  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #27 - 20. Августа 2010 :: 06:46
Печать  
es3000 писал(а) 20. Августа 2010 :: 06:42:
Просто действительно уже для справочника переделывать лень. Даже не лень, а время поджимает

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

Млни, чё-т опять распирает. Пятница? )
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #28 - 20. Августа 2010 :: 06:48
Печать  
вместо вопросов надо значения

Код
Выбрать все
ТекстЗАпроса = "insert into x_dt100 (SP1746, SP1747, SP1748, |SP1749) values (
|'     0   '
|, 'Значение Строки 1'
|, 'Значение Строки 2'
|, 'Значение Строки 3'
|)";
rc.ВыполнитьСкалярный(ТекстЗАпроса);
 

  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #29 - 20. Августа 2010 :: 07:00
Печать  
Z1 писал(а) 20. Августа 2010 :: 06:48:
вместо вопросов надо значения

Код
Выбрать все
ТекстЗАпроса = "insert into x_dt100 (SP1746, SP1747, SP1748, |SP1749) values (
|'     0   '
|, 'Значение Строки 1'
|, 'Значение Строки 2'
|, 'Значение Строки 3'
|)";
rc.ВыполнитьСкалярный(ТекстЗАпроса);
 



Это если я одну запись вставляю.
А я хочу при записи нового документа, когда все строки новые сделать ВыполнитьSQL_ИзТЗ.

Переделал команду так:
Код
Выбрать все
	рс.Подготовить("insert into dt1741_x ($Документ.Загрузка.Клиент, $Документ.Загрузка.Строка1, $Документ.Загрузка.Строка2, $Документ.Загрузка.Строка3) values (?, ?, ?, ?)");
 


Так на реквизиты не ругается, но 1С-ка вываливается вообще.
Я так понимаю возможно что из-за преобразования типов.
Какой тип преобразования мне надо указывать в ТЗ для длинных строк?
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #30 - 20. Августа 2010 :: 08:00
Печать  
Х.з. у меня такое работает (делал через хранимую процедуру на сервере):
Цитата:
     ТекстЗапроса = "select top 1 Date_F,Tovar,Post,iddoc_F,Cena,ProcPlus,ProcMinus,Active into #tmpCenaDogovor
     | from CenaDogovor where 0=1";
     глРС_Аддон.ВыполнитьСкалярный(ТекстЗапроса);
     ТекстЗапроса = "insert into #tmpCenaDogovor(Date_F,Tovar,Post,iddoc_F,Cena,ProcPlus,ProcMinus,Active) Values(?,?,?,?,?,?,?,?)";
     глРС_Аддон.Подготовить(ТекстЗапроса);
     //глРС_Аддон.ПостроитьПараметры();
     глРС_Аддон.ДобПараметр(1,10,10,0);
     глРС_Аддон.ДобПараметр(1,14,9,0);
     глРС_Аддон.ДобПараметр(1,14,9,0);
     глРС_Аддон.ДобПараметр(1,14,13,0);
     глРС_Аддон.ДобПараметр(1,11,12,3);
     глРС_Аддон.ДобПараметр(1,11,5,2);
     глРС_Аддон.ДобПараметр(1,11,5,2);
     глРС_Аддон.ДобПараметр(1,3,2,0);
     ПромДок.ВыбратьСтроки();
     глРС_Аддон.УстПараметр(1,дСКЛ);
     глРС_Аддон.УстПараметр(3,ПромДок.ОсновнойПоставщик);
     глРС_Аддон.УстПараметр(4,времДок);
     глРС_Аддон.УстПараметр(8,вДок);
     Пока ПромДок.ПолучитьСтроку() = 1 Цикл
           глРС_Аддон.УстПараметр(2,ПромДок.Товар);
           глРС_Аддон.УстПараметр(5,ПромДок.Цена);
           глРС_Аддон.УстПараметр(6,ПромДок.ПроцентОтклоненияПлюс);
           глРС_Аддон.УстПараметр(7,ПромДок.ПроцентОтклоненияМинус);
           глРС_Аддон.ВыполнитьСкалярный();
     КонецЦикла;
     // В хранимке идут поля "Дата, Документ, Поставщик"
     глРС_Аддон.УстановитьТекстовыйПараметр("ПромДата",дСКЛ);
     глРС_Аддон.УстановитьТекстовыйПараметр("времДок",времДок);
     );
     ТекстЗапроса = "exec CD_Update :ПромДата,:времДок~,:ПромПоставщик";
     глРС_Аддон.ВыполнитьСкалярный(ТекстЗапроса);

UPD: делал в цикле, так как были некоторые мои косяки при использовании "ВыполнитьSQLИзТЗ", а посмотреть на результат его работы через Отладка(1) - нельзя. А как заработало, то я и не стал трогать.
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #31 - 20. Августа 2010 :: 12:30
Печать  
Заработало таким способом:
Код
Выбрать все
	ТЗ = СоздатьОбъект("ТаблицаЗначений");
	мКонтекст.ВыгрузитьТабличнуюЧасть(ТЗ);

	Мета = СоздатьОбъект("MetaDataWork");
	рс = СоздатьОбъект("ODBCRecordset");
	лТекущийДокумент = мКонтекст.ТекущийДокумент();

	Сообщить("Удаляем строки");
	рс.УстановитьТекстовыйПараметр("Док", лТекущийДокумент);
	рс.Выполнить("DELETE * FROM dt1741_x WHERE iddoc = :Док");
	Сообщить("лРез = " + лРез + " Ошибка: " + рс.ПолучитьОписаниеОшибки());

	лТекстЗапроса = "insert into dt1741_x (
			|iddoc,
			|LINENO_,
			|$ДокументСтроки.Загрузка.Клиент,
|$ДокументСтроки.ЗагрузкаИзСоцЗащиты.Строка1)
			|values (?, ?, ?, ?)";
	лТекстЗапроса = Мета.ОбрМетаСКЛ(лТекстЗапроса);
	рс.Подготовить(лТекстЗапроса);
 	рс.ДобПараметр(1,14,9,0);
 	рс.ДобПараметр(1,3,0,0);
 	рс.ДобПараметр(1,14,10,0);
 	рс.ДобПараметр(1,14,200,0);
	ТЗ.ВыбратьСтроки();
	Пока ТЗ.ПолучитьСтроку() = 1 Цикл
		рс.УстПараметр(1, лТекущийДокумент);
		рс.УстПараметр(2, ТЗ.НомерСтроки);
		рс.УстПараметр(3, ТЗ.Клиент);
		рс.УстПараметр(4, ТЗ.Строка1);
		рс.ВыполнитьСкалярный();
	КонецЦикла;
 



Теперь проблема: как быть если пользователь просто нажимает кнопку "Записать".
Мой код срабатывает в процедуре "ПриЗаписи" и удялает строки. В результате пользователь видит пустую ТЧ. А если строки в ТЧ не удалять, то 1С начинает сама записывать ТЧ и опять все надолго "замолкает"
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #32 - 20. Августа 2010 :: 13:53
Печать  
Выставляй в "ПриЗаписи()" СтатусВозврата(0) и не надо будет удалять строки из ТЧ
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #33 - 23. Августа 2010 :: 11:00
Печать  
А что если не создавать новую таблицу, а использовать таблицу многострочной части документа? И самому напрямую в нее писать и читать? Все данные хранить в ТЗ, для ее редактирования использовать ТабличноеПоле.

Я сейчас так сделал, вроде работает. Какие могут быть в дальнейшем грабли?
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #34 - 23. Августа 2010 :: 11:12
Печать  
es3000 писал(а) 23. Августа 2010 :: 11:00:
А что если не создавать новую таблицу, а использовать таблицу многострочной части документа? И самому напрямую в нее писать и читать? Все данные хранить в ТЗ, для ее редактирования использовать ТабличноеПоле.

Я сейчас так сделал, вроде работает. Какие могут быть в дальнейшем грабли?

Если табличную часть хранишь в ТЗ то не сможешь по табличной части делать sql отчеты. Также так как ты писал что у тебя огромные таблицы и количество строк и сами реквизиты то ТЗ скорее всего в какой то момент свалится  по ошибке.
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #35 - 23. Августа 2010 :: 11:21
Печать  
Z1 писал(а) 23. Августа 2010 :: 11:12:
es3000 писал(а) 23. Августа 2010 :: 11:00:
А что если не создавать новую таблицу, а использовать таблицу многострочной части документа? И самому напрямую в нее писать и читать? Все данные хранить в ТЗ, для ее редактирования использовать ТабличноеПоле.

Я сейчас так сделал, вроде работает. Какие могут быть в дальнейшем грабли?

Если табличную часть хранишь в ТЗ то не сможешь по табличной части делать sql отчеты. Также так как ты писал что у тебя огромные таблицы и количество строк и сами реквизиты то ТЗ скорее всего в какой то момент свалится  по ошибке.


1) с отсутствием отчетов пока можно смириться
2) свалится из-за чего? из-за недостатка оперативки?
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #36 - 23. Августа 2010 :: 11:23
Печать  
Еще вопрос:
Существует ли поставщик данных для табличной части?  Не ODBC-поставщик а именно поставщик ТЧ?
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #37 - 23. Августа 2010 :: 11:23
Печать  
es3000 писал(а) 23. Августа 2010 :: 11:21:
Z1 писал(а) 23. Августа 2010 :: 11:12:
es3000 писал(а) 23. Августа 2010 :: 11:00:
А что если не создавать новую таблицу, а использовать таблицу многострочной части документа? И самому напрямую в нее писать и читать? Все данные хранить в ТЗ, для ее редактирования использовать ТабличноеПоле.

Я сейчас так сделал, вроде работает. Какие могут быть в дальнейшем грабли?

Если табличную часть хранишь в ТЗ то не сможешь по табличной части делать sql отчеты. Также так как ты писал что у тебя огромные таблицы и количество строк и сами реквизиты то ТЗ скорее всего в какой то момент свалится  по ошибке.


1) с отсутствием отчетов пока можно смириться
2) свалится из-за чего? из-за недостатка оперативки?


2 (это мое ИХМО) нет из-за того что никто не отлаживал(имеется ввиду фирму 1с) работы с огромными таблицами и скорее всего в самый неподходящий момент это и произойдет.

  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #38 - 23. Августа 2010 :: 11:55
Печать  
ну пока ошибок никаких нету,
а как все-таки насчет поставщика данных многострочной части?
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #39 - 23. Августа 2010 :: 11:57
Печать  
ошибку нашел!

Когда документ не записан и я его сохраняю первый раз, то iddoc для новых строк записывается равным нулю! И при следующем открытии (уже записанного документа у которого есть конкретный iddoc) записи не читаются из базы.

Как это можно обойти?
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #40 - 23. Августа 2010 :: 12:11
Печать  
es3000 писал(а) 23. Августа 2010 :: 11:57:
ошибку нашел!

Когда документ не записан и я его сохраняю первый раз, то iddoc для новых строк записывается равным нулю! И при следующем открытии (уже записанного документа у которого есть конкретный iddoc) записи не читаются из базы.

Как это можно обойти?


Пока  НовыйДокумент то не давай добавлятьстроку в табличную часть.
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #41 - 23. Августа 2010 :: 12:27
Печать  
Z1 писал(а) 23. Августа 2010 :: 12:11:
Пока  НовыйДокумент то не давай добавлятьстроку в табличную часть.


спасибо
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #42 - 23. Августа 2010 :: 12:31
Печать  
Остается вопрос про использование "родной" таблицы многострочной части документа? Если самому напрямую в нее писать и читать, данные хранить в ТЗ, и для работы с этой ТЗ использовать табличное поле.

Будет ли 1С-ка кроме моих ручных действий по записи и чтению моей ТЗ, записывать и читать свою родную табличную часть? Если да, то тогда выигрыша по времени у меня не будет.
А если на диалоге табличной части не будет, так может 1С-ка и не будет ее читать\писать? Никто не пробовал так делать?
  
Наверх
ICQ  
IP записан
 
Anatol
Senior Member
****
Отсутствует


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #43 - 23. Августа 2010 :: 13:18
Печать  
нет на форме ТЧ то и читат ее 1с не будет, выводить то некуда...

писать ТЧ будешь сам, читать тоже сам
  
Наверх
wwwICQ  
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #44 - 23. Августа 2010 :: 14:35
Печать  
(0) А почему не делаете вместо одного документа с кол-вом строк в тч 25000 например 50 доков с 500 строками ?
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #45 - 29. Августа 2010 :: 17:31
Печать  
ev-kov писал(а) 23. Августа 2010 :: 14:35:
(0) А почему не делаете вместо одного документа с кол-вом строк в тч 25000 например 50 доков с 500 строками ?


возни много, чтобы все это заработало
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #46 - 29. Августа 2010 :: 17:42
Печать  
А как в табличном поле вывести колонку с порядковым номером строки моей индексированной таблицы, которая содержит строки документа?

Я сделал так:

Код
Выбрать все
	мТабличноеПолеСоответствие = оФорма.СоздатьЭлементУправления("ТабличноеПоле", Форма.дТабСоответствие);

	лКолонки = мТабличноеПолеСоответствие.Колонки;

	лКол = лКолонки.Добавить("НомерСтроки");
	лКол.Данные = "НомерСтроки";
	лКол.Заголовок = "№";
	лКол.Ширина = 10;
 



Но получилось не совсем корректно.

При первом заполнении ИТ номера строк правильные, но после выполнения какой-либо сортировки, порядок строк ИТ меняется, но реквизит ИТ "НомерСтроки" не меняется. И получается в первой строке в колонке "НомерСтроки" выводится число, например, "2134".

Как это побороть?
  
Наверх
ICQ  
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #47 - 30. Августа 2010 :: 19:43
Печать  
А почему бы вообще не отказаться от документа и сделать своими двумя табличками? Выгоды сразу две: 1- проведение и запись документа на блокирует _1SJOURN, 2 - создаешь индексы по своему вкусу.
  
Наверх
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #48 - 31. Августа 2010 :: 09:52
Печать  
pvase писал(а) 30. Августа 2010 :: 19:43:
А почему бы вообще не отказаться от документа и сделать своими двумя табличками? Выгоды сразу две: 1- проведение и запись документа на блокирует _1SJOURN, 2 - создаешь индексы по своему вкусу.


1) и 2) пункты для меня в данный момент не являются критичными, про это вообще даже не было мыслей,

а вот документ дает некоторые преимущества
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #49 - 31. Августа 2010 :: 09:53
Печать  
Вообще-то все сейчас работает в том виде как описывалось.
По скорости - приемлемо.
Осталась одна проблема с нумерацией строк в табличном поле
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #50 - 31. Августа 2010 :: 12:05
Печать  
es3000 писал(а) 31. Августа 2010 :: 09:53:
Вообще-то все сейчас работает в том виде как описывалось.
По скорости - приемлемо.
Осталась одна проблема с нумерацией строк в табличном поле

Варианты:
1. Не создавай колонку с номером строки, а в событии "ПриВыводеСтроки" выводи номер в ячейку
Яч.Текст = ИТЗ.НомерСтроки("_ИндексТекущейСортировки_");
2. При наложении сортировки - перенумеровывай Индексированную таблицу, удобно через "ЗаполнитьКолонкуПоАлгоритму" http://www.1cpp.ru/bugs/show_bug.cgi?id=3813
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #51 - 01. Сентября 2010 :: 13:16
Печать  
Salimbek писал(а) 31. Августа 2010 :: 12:05:
es3000 писал(а) 31. Августа 2010 :: 09:53:
Вообще-то все сейчас работает в том виде как описывалось.
По скорости - приемлемо.
Осталась одна проблема с нумерацией строк в табличном поле


Варианты:
1. Не создавай колонку с номером строки, а в событии "ПриВыводеСтроки" выводи номер в ячейку
Яч.Текст = ИТЗ.НомерСтроки("_ИндексТекущейСортировки_");
2. При наложении сортировки - перенумеровывай Индексированную таблицу, удобно через "ЗаполнитьКолонкуПоАлгоритму" http://www.1cpp.ru/bugs/show_bug.cgi?id=3813


1. Так ведь я сортирую ИТ командой "Сортировать". То есть индекса никакого нету. По идее ИТ.НомерСтроки должен совпадать  с реальным физическим номером строки. А он не совпадает.
Поэтому я думаю, что ИТЗ.НомерСтроки("") также выведет какой-нибудь неправлиьный номер.

Кроме того номер строки нужен при записи в SQL-таблицу в поле lineno_

2. с этим понятно, попробую
  
Наверх
ICQ  
IP записан
 
viddik
Junior Member
**
Отсутствует



Сообщений: 37
Зарегистрирован: 22. Октября 2008
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #52 - 02. Сентября 2010 :: 23:41
Печать  
es3000 писал(а) 01. Сентября 2010 :: 13:16:
1. Так ведь я сортирую ИТ командой "Сортировать". То есть индекса никакого нету.

В доке написано:
Таблица всегда имеет 1 индекс (в дальнейшем будем называть его "основной индекс"), который нельзя удалить. Номер этого индекса - 1, имя - "" (пустая строка). Если в операциях, использующих индекс, не указано имя индекса, то используется основной индекс.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #53 - 03. Сентября 2010 :: 11:06
Печать  
es3000 писал(а) 01. Сентября 2010 :: 13:16:
1. Так ведь я сортирую ИТ командой "Сортировать". То есть индекса никакого нету. По идее ИТ.НомерСтроки должен совпадать  с реальным физическим номером строки. А он не совпадает.
Поэтому я думаю, что ИТЗ.НомерСтроки("") также выведет какой-нибудь неправлиьный номер.

Кроме того номер строки нужен при записи в SQL-таблицу в поле lineno_

2. с этим понятно, попробую


Ага, первый вариант не сработает, а второй выдаст ошибку, т.к. такой колонки "НомерСтроки" нет. Таким образом остается лишь создание собственной колонки и заполнение ее по алгоритму. Пример прикладываю.
  

_1_.ert ( 29 KB | Загрузки )
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #54 - 06. Сентября 2010 :: 12:52
Печать  
Посмотрел, идея понятна, спасибо.
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #55 - 06. Сентября 2010 :: 12:52
Печать  
А почему не правильно работает НомерСтроки("")?
Это баг?
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Ускорение работы документа с большой ТЗ при помощи 1С++
Ответ #56 - 06. Сентября 2010 :: 13:24
Печать  
es3000 писал(а) 06. Сентября 2010 :: 12:52:
А почему не правильно работает НомерСтроки("")?
Это баг?

Похоже на то, все же ожидается, что после "Сортировать" - номера строк будут по порядку Улыбка
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать