Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) База DBF и команда DELETE (число прочтений - 7998 )
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
База DBF и команда DELETE
11. Марта 2012 :: 05:22
Печать  
Снова здравствуйте. Появилась еще одна проблема: в файловой БД нужно удалить некоторые записи из 1SConst, отобрав их по условию. Для этого выполняется запрос следующего вида:

DELETE
|      1SConst
|FROM
|      1SConst As История
|INNER JOIN
|      $Справочник.Цены As СпрЦены
|ON
|      СпрЦены.ID = История.OBJID
|INNER JOIN
|      $Справочник.Номенклатура As СпрНом
|ON
|      СпрНом.ID = СпрЦены.Parentext
|INNER JOIN
|      (SELECT
|            История1.OBJID As Объект,
|            MAX(История1.Date) As МаксДата
|       FROM
|            1SConst As История1
|       WHERE
|            История1.Date <= DATE(2012,12,31)
|            AND История1.ID = :РеквЦена
|       GROUP BY
|            История1.OBJID) As SubQuery
|ON
|      SubQuery.Объект = История.OBJID
|WHERE
|      История.Date <= DATE(2012,12,31)
|      AND История.ID = :РеквЦена
|      AND История.Date <> SubQuery.МаксДата

Когда этот запрос скармливаешь методу Выполнить(), то он возвращает 0. В чем м.б. проблема? Касательно параметров, передаваемых в запрос замечу, что при простой выборке записей из 1SConst с теми же условиями отбора данные удаётся получить.

Или может быть, я не в теме, и в файловой БД DELETE не работает вообще? Ужас
  
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #1 - 11. Марта 2012 :: 05:32
Печать  
Замени для начала delete на select и посмотри, что выбирает.
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #2 - 11. Марта 2012 :: 05:33
Печать  
Я же говорю: выборка происходит в этом случае НОРМАЛЬНО.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #3 - 11. Марта 2012 :: 05:45
Печать  
Гонишь ты. Откуда джойн в синтаксисе удаления?
Если надо удалить по условию, которое можно получить только исвратными джойнами, то делай два звпроса:
  • Сначала получаешь идентификаторы удаляемых элементов, ложишь в список, затем во временную таблицу (УложитьСписокОбъектов).
  • Удаляешь простым условием вхождения в список.

P.S.: Вообще-то удалением ты можешь слишком многое испортить, т.к. данные могут быть задействованы где-то еще, например, в таблице ссылок.
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #4 - 11. Марта 2012 :: 05:51
Печать  
Dmitry The Wing писал(а) 11. Марта 2012 :: 05:45:
Гонишь ты. Откуда джойн в синтаксисе удаления?


Втыкай: http://www.script-coding.com/Direct_queries.html#10.

Кстати, в SQL-базе удаление производится без проблем, работает и не жужжит.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #5 - 11. Марта 2012 :: 06:03
Печать  
DCKiller писал(а) 11. Марта 2012 :: 05:51:
Dmitry The Wing писал(а) 11. Марта 2012 :: 05:45:
Гонишь ты. Откуда джойн в синтаксисе удаления?
Втыкай: http://www.script-coding.com/Direct_queries.html#10.

Кстати, в SQL-базе удаление производится без проблем, работает и не жужжит.
И какое отношение к DBF имеет синтаксис языка MSSQL?
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #6 - 11. Марта 2012 :: 06:17
Печать  
Значит, не работает? ых...
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #7 - 12. Марта 2012 :: 04:54
Печать  
Dmitry The Wing писал(а) 11. Марта 2012 :: 05:45:
Если надо удалить по условию, которое можно получить только исвратными джойнами, то делай два звпроса:
  • Сначала получаешь идентификаторы удаляемых элементов, ложишь в список, затем во временную таблицу (УложитьСписокОбъектов).
  • Удаляешь простым условием вхождения в список.


Чёт не пашет. При 'Запрос.ВыполнитьИнструкцию(ТекстЗапроса)' ругается 'Operator/operand type mismatch'  Печаль
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: База DBF и команда DELETE
Ответ #8 - 12. Марта 2012 :: 06:18
Печать  
Можно и без временной таблицы обойтись, просто в ветку where при delete написать все условия удаления, в том числе и вложенные запросы.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #9 - 12. Марта 2012 :: 06:41
Печать  
DCKiller писал(а) 12. Марта 2012 :: 04:54:
ругается 'Operator/operand type mismatch'  Печаль
Значит в запросе ошибка.
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #10 - 12. Марта 2012 :: 06:44
Печать  
Dmitry The Wing писал(а) 12. Марта 2012 :: 06:41:
DCKiller писал(а) 12. Марта 2012 :: 04:54:
ругается 'Operator/operand type mismatch'  Печаль
Значит в запросе ошибка.


Хы-хы... А то я как-то, знаете, не догадывался  Смех
Вот еще бы отловить ее...
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #11 - 12. Марта 2012 :: 06:45
Печать  
Eprst писал(а) 12. Марта 2012 :: 06:18:
Можно и без временной таблицы обойтись, просто в ветку where при delete написать все условия удаления, в том числе и вложенные запросы.


Ага? Было бы неплохо... Но тогда почему сабжевый пример не выполняется?
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #12 - 12. Марта 2012 :: 06:48
Печать  
DCKiller писал(а) 12. Марта 2012 :: 06:44:
Хы-хы... А то я как-то, знаете, не догадывался  Смех
Вот еще бы отловить ее...
Лично я не против - отлавливай.

DCKiller писал(а) 12. Марта 2012 :: 06:45:
Eprst писал(а) 12. Марта 2012 :: 06:18:
Можно и без временной таблицы обойтись, просто в ветку where при delete написать все условия удаления, в том числе и вложенные запросы.
Ага? Было бы неплохо... Но тогда почему сабжевый пример не выполняется?
Потому что фокспро этому не обучено...
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #13 - 12. Марта 2012 :: 06:54
Печать  
Цитата:
Потому что фокспро этому не обучено...


А удалять записи, которые отобраны в запросе при помощи 'просто в ветку where при delete написать все условия удаления', - обучено?
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #14 - 12. Марта 2012 :: 07:00
Печать  
DCKiller писал(а) 12. Марта 2012 :: 06:54:
Цитата:
Потому что фокспро этому не обучено...
А удалять записи, которые отобраны в запросе при помощи 'просто в ветку where при delete написать все условия удаления', - обучено?
Для особо одаренных повторяю:
фокспро не знакомо с синтаксисом "DELETE FROM ... JOIN ...",
однако оно вполне умеет следющее: "DELETE FROM ... WHERE ...", а в условии можешь совать что угодно.
Именно об этом писал Eprst.
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #15 - 12. Марта 2012 :: 07:39
Печать  
Кстати, в чем тогда будет отличие между этой конструкцией и использованием ВТ вместо подзапросов? Ошибка-то 'Operator/operand type mismatch' продолжает выпадать. Хотя я его уже практически носом ткнул, где что смотреть на предмет вхождения  Злой
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: База DBF и команда DELETE
Ответ #16 - 12. Марта 2012 :: 08:42
Печать  
Текст запроса то покажи свой

А так, неплохо бы и про  синтаксис Delete прочитать:
http://msdn.microsoft.com/ru-ru/library/ms189835.aspx

ну нет там джоинов в тексте запроса - только ветка с условием удаления
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #17 - 12. Марта 2012 :: 09:26
Печать  
Ну вот, собственно...

DELETE
     1SConst
FROM
     1SConst As История
WHERE
     История.objid IN (SELECT val FROM e07e6994-4929-4a57-9f24-43586a7ace76) AND
     История.id IN (SELECT val FROM 73539260-a8bd-4bf8-82a2-334fb3909430) AND
     История.date IN (SELECT val FROM b4011ce9-80cb-48ff-a9d1-f2506cdfaf98) AND
     История.partno IN (SELECT val FROM 4fb99197-7817-43f7-8bac-b116309518ec) AND
     История.value IN (SELECT val FROM f00c83e9-fe3d-4c48-aff9-7ab9edcea620) AND
     История.docid IN (SELECT val FROM 1a2590e1-f790-4e75-8a6f-144f9f49a11b) AND
     История.time IN (SELECT val FROM 474a6c89-a563-4a57-ad88-ee9e0888ae11)

Сначала собираем данные в ТЗ посредством запроса в топикстарте. Затем по очереди выгружаем из его колонок в списки значений данные для фильтров. И потом, при помощи УложитьСПисокОбъектов() передаем их в запрос DELETE
  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


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

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: База DBF и команда DELETE
Ответ #18 - 12. Марта 2012 :: 09:31
Печать  
DELETE FROM ...
  
Наверх
wwwICQ  
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #19 - 12. Марта 2012 :: 09:51
Печать  
Anatol писал(а) 12. Марта 2012 :: 09:31:
DELETE FROM ...


Теперь говорит 'Synthax error'
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: База DBF и команда DELETE
Ответ #20 - 12. Марта 2012 :: 11:09
Печать  
Код
Выбрать все
DELETE
FROM
	1SConst
WHERE
	objid IN (SELECT val FROM e07e6994-4929-4a57-9f24-43586a7ace76) AND
     id IN (SELECT val FROM 73539260-a8bd-4bf8-82a2-334fb3909430) AND
     date IN (SELECT val FROM b4011ce9-80cb-48ff-a9d1-f2506cdfaf98) AND
     partno IN (SELECT val FROM 4fb99197-7817-43f7-8bac-b116309518ec) AND
     value IN (SELECT val FROM f00c83e9-fe3d-4c48-aff9-7ab9edcea620) AND
     docid IN (SELECT val FROM 1a2590e1-f790-4e75-8a6f-144f9f49a11b) AND
     time IN (SELECT val FROM 474a6c89-a563-4a57-ad88-ee9e0888ae11) 

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


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #21 - 13. Марта 2012 :: 01:30
Печать  
М-да... 'SQL expression is too complex'

Интересно, какие еще ошибки бывают?  Улыбка
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #22 - 13. Марта 2012 :: 05:21
Печать  
Никто не скажет, как лечится?
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #23 - 13. Марта 2012 :: 05:41
Печать  
DCKiller писал(а) 13. Марта 2012 :: 05:21:
Никто не скажет, как лечится?
Упрощением.
Хотя невооруженным взглядом видно, что в запросе полная чушь:
поля date, partno, value и time глупо совать в списки.
Дата и время либо должны быть точными, либо диапазонами.
Номер части вообще групо фильтровать: если значение удаляется, то полностью, а не частями.
По значениям фильтровать тоже нелогично...
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #24 - 13. Марта 2012 :: 05:45
Печать  
Хорошо, тогда по каким полям следует фильтровать? Получается, только objid и id, а по датам сделать фильтр?
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #25 - 13. Марта 2012 :: 05:49
Печать  
Начни с описания задачи.
Как я понял, тебе надо удалить все цены до определенной даты, сохранив при этом последнюю. Верно?
Если так, то проще сделать в 2 действия:
  • Сформировать цену на точку обрезки (чтобы не вычислять дату).
  • Удалить все до этой точки.
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #26 - 13. Марта 2012 :: 05:51
Печать  
Dmitry The Wing писал(а) 13. Марта 2012 :: 05:49:
Как я понял, тебе надо удалить все цены до определенной даты, сохранив при этом последнюю. Верно?


Да, нужно удалить все цены из истории до заданной даты, и оставить все, что было начиная с нее и позднее.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: База DBF и команда DELETE
Ответ #27 - 13. Марта 2012 :: 06:05
Печать  
Ну если тупо, то так:
Код
Выбрать все
delete
from 1sconst
where date<:Парам1~~
and
(
id = $ИсторияРеквизита.Цены.Цена
or id = $ИсторияРеквизита.Цены.Единица
) 



а по уму нужно разбивать по типам цен и оставлять последнюю цену из периода [  ,Парам1~~]
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #28 - 13. Марта 2012 :: 06:06
Печать  
Правда, для удобства лучше добавить еще одно действие: Получание списка существующих элементов с историей:
Код
Выбрать все
SELECT objid [Элемент :Справочник.Цены]
FROM __1S_Const
WHERE id = :ИсторияРеквизита.Цены.Цена AND date < :ДатаСвертки
GROUP BY objid 

Примечание: В запросе использован 1sqlite, но переделать нетрудно.

Теперь получение последнего значения для каждой строки результата предыдущего запроса:
Код
Выбрать все
SELECT value [Значение :Число]
FROM __1S_Const
WHERE objid = @Элемент AND id = :ИсторияРеквизита.Цены.Цена AND date < @ДатаСвертки
ORDER BY date DESC LIMIT 1 

Здесь Элемент - это значение из первого запроса.
Далее выполняешь обычное Элемент.Цена.Установить(ДатаСвертки, Значение);

А само удаление получится проще н придумаешь:
DELETE FROM 1SConst WHERE id = $ИсторияРеквизита.Цены.Цена AND date < :ДатаСвертки
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: База DBF и команда DELETE
Ответ #29 - 13. Марта 2012 :: 06:06
Печать  
DCKiller писал(а) 13. Марта 2012 :: 05:21:
Никто не скажет, как лечится?


Запррос монопольно делаешь ?

Что в списках ?

А вообще, цены нужно менять только документом  и запретить ручную установку цен - тогда и таких проблем со сверткой не будет.

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


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #30 - 13. Марта 2012 :: 06:10
Печать  
Eprst писал(а) 13. Марта 2012 :: 06:06:
Что в списках ?
Там явно мура. Не понимает он. Если хочешь помочь - придумай, как объединить мои 2 запроса на получение значений в один, заодно переделав его на фокс  Подмигивание
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #31 - 13. Марта 2012 :: 06:40
Печать  
Eprst писал(а) 13. Марта 2012 :: 06:06:
Запррос монопольно делаешь ?

Что в списках ?

А вообще, цены нужно менять только документом  и запретить ручную установку цен - тогда и таких проблем со сверткой не будет.



Видишь ли, цены и так устанавливаются документами. Но тут несколько другое: из старой базы переносились данные в новую, в т.ч. история цен. При этом документы, сформировавшие записи об этих ценах, не переносились. Т.о. цена есть - а документа нет. Если бы цены вводились вручную, то я бы, скорей всего, на файловых базах не стал заморачиваться с прямыми запросами для удаления всех лишних записей. Было бы технически проще произвести это удаление стандартным перебором элементов справочника "Цены" через объект "Периодический". Но поскольку в таблице 1SConst содержатся ID документов из старой базы, сформировавшие эти записи истории цен, то программа считает, что значение введено доком, и при попытке его удалить ругается. Поэтому и пришлось здесь задействовать прямой запрос.
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #32 - 13. Марта 2012 :: 06:42
Печать  
Dmitry The Wing писал(а) 13. Марта 2012 :: 06:10:
Там явно мура. Не понимает он.


Спокойно, епть. Разобрались уже  Улыбка По крайней мере, удаление производится, хотя, возможно, выглядит всё и не так красиво.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: База DBF и команда DELETE
Ответ #33 - 13. Марта 2012 :: 07:09
Печать  
Ёпт.. а раньше сказать не судьба было ?
Там запрос типа того был бы и привет:

Код
Выбрать все
delete
from 1sconst
where date<:Парам1~~
and id = $ИсторияРеквизита.Цены.Цена
and docid<>$ПустойИД
and docid not in(SELECT iddoc FROM 1sjourn ) 



даже условие на дату лишнее, можно выкинуть..да и на id тоже: нет документа -  чистим к едрени фени
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #34 - 13. Марта 2012 :: 07:14
Печать  
Спасибо. Буду думать.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #35 - 13. Марта 2012 :: 08:38
Печать  
Eprst писал(а) 13. Марта 2012 :: 07:09:
нет документа -  чистим к едрени фени
Я так думаю, что ему последнее значение на срезаемый период надо сохранить...
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #36 - 13. Марта 2012 :: 09:19
Печать  
Dmitry The Wing писал(а) 13. Марта 2012 :: 08:38:
Я так думаю, что ему последнее значение на срезаемый период надо сохранить...


Подтвержадю. Именно поэтому пришлось мутить соединение с вложенным запросом, возвращающим макс. дату.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #37 - 13. Марта 2012 :: 09:30
Печать  
Так решение ж уже описано. Осталось только применить.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать