|
Запрос --> Структура --> Массив --> Файлы по определенному условию ??? | ☑ | ||
---|---|---|---|---|
0
листопад
15.03.15
✎
15:15
|
8.3 Управляемое приложение
У каждого физ.лица есть реквизит "Коэффициент". У многих он одинаковый. Подскажите, как мне сформировать dbf-файлы таким образом, чтобы они были сгруппированы по этим коэффициентам? Вот код: &НаКлиенте Процедура СформироватьФайл(Команда) БД = Новый XBase; БД.поля.Добавить("FIO", "S", "30"); БД.поля.Добавить("LCHET", "S", "30"); БД.поля.Добавить("KOEFF", "S", "30"); БД.поля.Добавить("SUMMA", "S", "30"); БД.СоздатьФайл(Каталог + "\" + ИмяФайла + ".dbf"); БД.Записать(); Массив = ВыборкаНаСервере(); Для каждого Строка Из Массив Цикл // вот здесь как раскидать ФЛ по разным dbf-файлам, // в зависимости от Коэффициента БД.Добавить(); КонецЦикла; КонецПроцедуры &НаСервере Функция ВыборкаНаСервере() Массив = Новый Массив; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Сотрудник.ФизическоеЛицо КАК ФЛ, | ВедомостьНаВыплатуЗарплатыВБанкЗарплата.НомерЛицевогоСчета, | ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Сотрудник.ФизическоеЛицо.Коэффициент КАК Коэффициент, | ВедомостьНаВыплатуЗарплатыВБанкЗарплата.КВыплате |ИЗ | Документ.ВедомостьНаВыплатуЗарплатыВБанк.Зарплата КАК ВедомостьНаВыплатуЗарплатыВБанкЗарплата |ГДЕ | ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Ссылка = &Докум"; Запрос.УстановитьПараметр("Докум", Докум); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Структура = Новый Структура; Структура.Вставить("Фамилия", Выборка.ФЛ); Структура.Вставить("НомерЛицевогоСчета", Выборка.НомерЛицевогоСчета); Структура.Вставить("КВыплате", Выборка.КВыплате); Структура.Вставить("Коэффициент", Выборка.Коэффициент); Массив.Добавить(Структура); КонецЦикла; КонецЦикла; Возврат(Массив); КонецФункции |
|||
1
zak555
15.03.15
✎
15:17
|
а что за Коэффициент -- какой его сымсл ?
|
|||
2
GROOVY
15.03.15
✎
15:19
|
Сортировать в запросе научить?
Упорядочить ПО ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Сотрудник.ФизическоеЛицо.Коэффициент |
|||
3
Asmody
15.03.15
✎
15:19
|
(0) в запросе сделать группировку типа Итоги, делать выборку по группировкам, внути создавать и заполнять дбфки.
|
|||
4
листопад
15.03.15
✎
15:26
|
(3) Так не получится, т.к. дбфки заполняться должны НаКлиенте (у нас кодировка на сервере неверная). Поэтому запрос я передаю в виде массива на клиента.
|
|||
5
листопад
15.03.15
✎
15:27
|
(2) Ваш вариант тоже не подойдет нам, по той же причине, что в (4) я написала.
|
|||
6
Asmody
15.03.15
✎
15:28
|
(4) верни массив массивов структур
|
|||
7
листопад
15.03.15
✎
15:32
|
(6) Ничего не поняла... Это как???
|
|||
8
Asmody
15.03.15
✎
15:35
|
(7)
Массив = Новый Массив(); Массив1 = Новый Массив(); Массив1.Добавить(Новый Структура()); Массив.Добавить(Массив1); |
|||
9
GROOVY
15.03.15
✎
15:35
|
Ничего не понятно. Массив, кодировки на клиенте и сервере разные, передавать тудя-сюда... В чем проблема, я не понимаю.
При чем тут вообще клиент-сервер? Кодировку, не установить нужную? Нафига масссив передавать? |
|||
10
Asmody
15.03.15
✎
15:36
|
(9) она на клиенте дбф создает. По какой причине - не важно.
|
|||
11
alle68
15.03.15
✎
15:38
|
(7) Для каждого значения коэффициента получаешь структуру (Коэффициент, Данные) и помещаешь их в массив.
Данные - это массив структур, как в твоём примере, но можно без коэф-та. И не забудь поле "ФЛ" в запросе перевести в строку. |
|||
12
листопад
15.03.15
✎
15:43
|
(8) Спасибо. Но я не поняла из Вашего примера, где тут отбор по коэффициенту?
|
|||
13
листопад
15.03.15
✎
15:47
|
Физ.лиц у нас примерно 1000человек. Коэффициентов примерно 70, соответственно должно сформироваться 70дбф-файлов.
А все коэффициенты прописывать - будет неправильным... Как это сделать??? |
|||
14
листопад
15.03.15
✎
15:48
|
Т.е. если у физ.лиц повторяется коэффициент, то они попадают в один дбф-файл.
|
|||
15
листопад
15.03.15
✎
15:48
|
(11) Как это написать??? Мне что-то подобное и нужно сделать.
|
|||
16
alle68
15.03.15
✎
15:58
|
(15) Сортируешь запрос по коэф-ту, выборку перебираешь 2-мя циклами, внешний СледующийПоЗначениюПоля("Коэф"), здесь создаешь структуру, заполняешь её, как у тебя в примере, после этого добавляешь в результирующий массив.
|
|||
17
листопад
15.03.15
✎
16:00
|
(16) Я это не осилю ((( Помогите пож-та...
|
|||
18
alle68
15.03.15
✎
16:14
|
(17) Ты заранее не сдавайся, начни и всё получится.
Кстати, ты уверена, что нужно создавать так много файлов, под каждый коэффициент? Гораздо удобней обрабатывать один файл. |
|||
19
листопад
15.03.15
✎
17:31
|
HELP!!! Кто-нибудь!!!
|
|||
20
Torquader
15.03.15
✎
18:59
|
А нельзя разве ТЗ передать с сервера на клиента ?
Ну или двумерный массив ? У меня, помнится, всё содержимое листа Excel в виде двумерного массива между сервером и клиентом бегало без проблем. |
|||
21
Torquader
15.03.15
✎
19:00
|
А, извините, "листопад"-то женского полу - может и не получиться.
|
|||
22
zak555
15.03.15
✎
19:03
|
(20) нету ТЗ/ДЗ на клиентах
|
|||
23
yavasya
15.03.15
✎
19:13
|
и дбф зачем? в экселе смотреть удобнее
|
|||
24
Остап Сулейманович
15.03.15
✎
19:16
|
(22) Зато есть табличные части. Доступны и на сервере и без гемора визуализируются на клиенте.
|
|||
25
листопад
15.03.15
✎
19:20
|
Up!
|
|||
26
Torquader
15.03.15
✎
19:24
|
(25) Выбери данные в запросе вместе с коэффициентом во временную таблицу, потом из неё выбери с сортировкой по коэффициенту - потом, то что выбрали в ТЗ - после этого ТЗ - в массив и на клиента - а там пиши всё в dbf, если так хочется.
Какое слово не понятно ? |
|||
27
Остап Сулейманович
15.03.15
✎
19:24
|
(25) Чего "Up!"? Что не получается? Только по буквам и пытаться вопрос прочитать самостоятельно. А то из вот этого вот "сформировать dbf-файлы таким образом, чтобы они были сгруппированы" нифига не понятно.
Что означает фраза "файлы сгуппированы"? Это значит лежат в одном каталоге? |
|||
28
Torquader
15.03.15
✎
19:28
|
(27) Я, например, понял, что файл один, а записи в нём сортированы.
|
|||
29
Asmody
15.03.15
✎
19:30
|
Что вы теоритизируете? Не видите - девушке готовый код нужен.
|
|||
30
Остап Сулейманович
15.03.15
✎
19:31
|
(28) Таки у ТС проблема посортировать выборку запроса?
В самом запросе или выгрузив в ТЧ/ТЗ и посортировать там? |
|||
31
Asmody
15.03.15
✎
19:31
|
Мне это неинтересно, я женат.
|
|||
32
Остап Сулейманович
15.03.15
✎
19:33
|
(29) Показать ей где в конструкторе запроса вкладка "Порядок" - поможет?
|
|||
33
Torquader
15.03.15
✎
19:36
|
(32) А, так там даже в самом запросе есть этот коэффициент - тогда да - достаточно ткнуть носом во вкладку.
(31) Тут, видимо, все в таком же состоянии. Потом, красивых глаз для готового кода не достаточно. |
|||
34
Asmody
15.03.15
✎
19:39
|
Алчные, скупые, мелочные гении
|
|||
35
листопад
15.03.15
✎
19:46
|
Объясняю. В ведомости есть:
ФИО, №лицевого, Коэфф-т, Сумма. Вот так: Иванов 1111111 25 1000 Петров 2222222 15 2000 Сидоров 3333333 25 5000 В данном примере, у меня должно получиться два дбф-файла, т.к. у Иванова и Сидорова одинаковый коэфф-т (25), то они попадают в один файл. А Петров будет в другом дбф-файле. Т.е. на выходе получить должны: Первый дбф-файл: Иванов 1111111 25 1000 Сидоров 3333333 25 5000 Второй дбф-файл: Петров 2222222 15 2000 |
|||
36
zak555
15.03.15
✎
19:47
|
(31) она уже что-то предлагала ?
|
|||
37
zak555
15.03.15
✎
19:47
|
(35) в какой банк идёт выгрузка ?
|
|||
38
Torquader
15.03.15
✎
19:51
|
(35) Отсортировать таблицу по коэффициенту - это просто.
Потом, догадаться при переборе, что если коэффициент меняется, то закрываем старый файл (если открыт, чтобы первую запись обработать) и открываем новый. Так ? |
|||
39
листопад
15.03.15
✎
19:51
|
Написала, как посоветовали в (16), но все равно собирается все в один дбф-файл. Вот код:
&НаКлиенте Процедура СформироватьФайл(Команда) БД = Новый XBase; БД.поля.Добавить("FIO", "S", "30"); БД.поля.Добавить("LCHET", "S", "30"); БД.поля.Добавить("KOEFF", "S", "30"); БД.поля.Добавить("SUMMA", "S", "30"); БД.СоздатьФайл(Каталог + "\" + ИмяФайла + ".dbf"); БД.Записать(); Массив = ВыборкаНаСервере(); Для каждого Строка Из Массив Цикл // вот здесь как раскидать ФЛ по разным dbf-файлам, // в зависимости от Коэффициента БД.Добавить(); КонецЦикла; КонецПроцедуры &НаСервере Функция ВыборкаНаСервере() Массив = Новый Массив; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Сотрудник.ФизическоеЛицо КАК ФЛ, | ВедомостьНаВыплатуЗарплатыВБанкЗарплата.НомерЛицевогоСчета, | ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Сотрудник.ФизическоеЛицо.Коэффициент КАК Коэффициент, | ВедомостьНаВыплатуЗарплатыВБанкЗарплата.КВыплате |ИЗ | Документ.ВедомостьНаВыплатуЗарплатыВБанк.Зарплата КАК ВедомостьНаВыплатуЗарплатыВБанкЗарплата |ГДЕ | ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Ссылка = &Докум"; Запрос.УстановитьПараметр("Докум", Докум); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.СледующийПоЗначениюПоля("Коэффициент") Цикл Структура = Новый Структура; Структура.Вставить("Фамилия", Выборка.ФЛ); Структура.Вставить("НомерЛицевогоСчета", Выборка.НомерЛицевогоСчета); Структура.Вставить("КВыплате", Выборка.КВыплате); Структура.Вставить("Коэффициент", Выборка.Коэффициент); Пока Выборка.Следующий() Цикл Массив.Добавить(Структура); КонецЦикла; КонецЦикла; Возврат(Массив); КонецФункции |
|||
40
Torquader
15.03.15
✎
19:52
|
(39) Читаем внимательно (38) и думаем, как проверить, что коэффициент изменился (запомнить значение с предыдущей строки).
|
|||
41
листопад
15.03.15
✎
19:52
|
(38) Да!!! Как мне догадаться при переборе, что если коэффициент меняется, то закрываем старый файл (если открыт, чтобы первую запись обработать) и открываем новый???
|
|||
42
Torquader
15.03.15
✎
19:52
|
Кстати, самый главный вопрос - как формируется имя файла ?
|
|||
43
Torquader
15.03.15
✎
19:53
|
(41) Человек, который открывает конфигуратор, чтобы писать код, не должен задавать такой вопрос.
|
|||
44
листопад
15.03.15
✎
19:55
|
(42) Имя файла совпадает с коэфф-том.
|
|||
45
Torquader
15.03.15
✎
20:01
|
ПрошлыйКоэффициент=НЕОПРЕДЕЛЕНО;
БД=НЕОПРЕДЕЛЕНО; Для Каждого Эл из НашМассив Цикл Если ПрошлыйКоэффицент=НЕОПРЕДЕЛЕНО Тогда СоздаёмНовыйФайл=Истина; Иначе Если ПрошлыйКоэффицент=Эл.Коэффициент Тогда СоздаёмНовыйФайл=Ложь; Иначе СоздаёмНовыйФайл=Истина; КонецЕсли; Если СоздаёмНовыйФайл=Истина Тогда ПрошлыйКоэффицент=Эл.Коэффициент; Если БД<>НЕОПРЕДЕЛЕНО Тогда БД.Закрыть();КонецЕсли; БД=Новый ХBase; // здесь поля БД.Создать(Каталог+ПрошлыйКоэффицент+".dbf"); КонецЕсли; // здесь записываем элемент КонецЦикла; Если БД<>НЕОПРЕДЕЛЕНО Тогда БД.Закрыть();КонецЕсли; P.S. не помню, а есть ли команда БД.Закрыть() или файл закрывается БД=НЕОПРЕДЕЛЕНО, но это вы сами проверите. |
|||
46
zak555
15.03.15
✎
20:02
|
(45) у всё, сейчас она тебя поведёт в ресторан
|
|||
47
Остап Сулейманович
15.03.15
✎
20:02
|
(35)
1. Отсортировать в запросе. 2. при обходе структуры примерно такой код : &НаКлиенте Функция СформироватьДБФ() БД = Новый XBase; БД.поля.Добавить("FIO", "S", "30"); БД.поля.Добавить("LCHET", "S", "30"); БД.поля.Добавить("KOEFF", "S", "30"); БД.поля.Добавить("SUMMA", "S", "30"); //*** откуда берется ИмяФайла - непонятно //*** но пока оставим так. БД.СоздатьФайл(Каталог + "\" + ИмяФайла + ".dbf"); БД.Записать(); Возврат БД; КонецФункции &НаКлиенте Процедура СформироватьФайл(Команда) Массив = ВыборкаНаСервере(); БД = Неопределено; текКоэфиициент = 0; // ну или такой которого // гарантированно не будет в выборка (например Неопределено) Для Каждого Запись ИЗ Массив[0] Цикл //Вообще тоже непонятно зачем массив с единственным элементом Если Запись.Коэффициент <> текКоэфиициент Тогда Если БД <> Неопределено Тогда БД.ЗакрытьФайл(); КонецЕсли; БД = СформироватьДБФ(); КонецЕсли; БД.Добавить(); БД.FIO = Запись.; БД.LCHET = ...; ... КонецЦикла; КонецПроцедуры |
|||
48
Torquader
15.03.15
✎
20:05
|
(46) Нет уж, лучше потом пусть помогает отчётность с бумажек набивать - у меня, иногда, для этого работников не хватает.
|
|||
49
Остап Сулейманович
15.03.15
✎
20:06
|
+ (47)
В проверку добавить присвоение нового коэфиициента Если Запись.Коэффициент <> текКоэфиициент Тогда Если БД <> Неопределено Тогда БД.ЗакрытьФайл(); КонецЕсли; БД = СформироватьДБФ(); //****** вот здесь текКоэфиициент = Запись.Коэффициент; //****** КонецЕсли; |
|||
50
zak555
15.03.15
✎
20:07
|
(48) ты не автоматизировал себе процесс этот ?
|
|||
51
листопад
15.03.15
✎
20:07
|
(45) Спасибо большое! Сейчас попробую. Только уточните еще пож-та, а запрос оставляю как в (0) или как в (39) я написала?
|
|||
52
листопад
15.03.15
✎
20:08
|
(47) Спасибо. Ваш вариант тоже попробую.
Отпишусь что получилось в результате... |
|||
53
Torquader
15.03.15
✎
20:09
|
(51) В (39) Фигня полная написана.
В запрос нужно добавить "Упорядочить по", а в структуру - пихать каждую строку - боюсь, что код из (39) придётся просто выкинуть. |
|||
54
листопад
15.03.15
✎
20:11
|
(53) Прощу прощения, а где УпорядочитьПо написать?
|
|||
55
Torquader
15.03.15
✎
20:12
|
(54) А где это обычно пишется ? В запросе, конечно, и в правильном месте.
|
|||
56
листопад
15.03.15
✎
20:13
|
(55) Нашла )))
|
|||
57
Остап Сулейманович
15.03.15
✎
20:13
|
(51) Учти, что строчку "Для Каждого Эл из НашМассив Цикл" придется переписать. У тебя в массиве единственный элемент. А обходить нужно "элементы этого элемента". Тавтология конечно, но единственным элементом массива будет структура. Вот ее элементы и нужно будет обходить.
А вообще отлаживать придется и (45) и (47). |
|||
58
Torquader
15.03.15
✎
20:14
|
(57) В (39) Там и в структуре будет один элемент, так как более чем один туда просто не влезет.
В итоге, это реализация схемы "последний герой". |
|||
59
Torquader
15.03.15
✎
20:16
|
Точнее, там будет "замечательный массив" в котором первый чувак с коэффициентом будет упомянут столько раз, сколько человек с коэффициентом было обнаружено.
Так что массив-то, конечно, можно перебирать, но это не спасёт. |
|||
60
листопад
15.03.15
✎
20:17
|
в (45) не поняла:
СоздаёмНовыйФайл - это что? |
|||
61
zak555
15.03.15
✎
20:19
|
зачем вы так мучаетесь ?
создайте реквизит формы ДЗ выгрузите в него данные далее программно создайте элемент табличу формы, связанную с ДЗ и обойдите её |
|||
62
Остап Сулейманович
15.03.15
✎
20:20
|
(60) см СформироватьДБФ() из(47)
|
|||
63
листопад
15.03.15
✎
20:25
|
Запутали совсем...
|
|||
64
zak555
15.03.15
✎
20:38
|
(63) пора спать уже
|
|||
65
ДенисЧ
15.03.15
✎
20:42
|
(64) Сначала ресторан, потом спать ))
|
|||
66
zak555
15.03.15
✎
20:50
|
(65) он же не предлагет
|
|||
67
Torquader
15.03.15
✎
23:18
|
Я понял, почему "листопад" - когда дятел "глумиться" над деревом "сверх нормы", то с него начинают падать листья, а "листопад" - это когда уже полностью "задолбал".
P.S. не обижайтесь, но за вас уже несколько раз задачу решили, а вам всё мало. |
|||
68
Torquader
16.03.15
✎
00:48
|
(66) Нет, я только представил себе поход в ресторан:
Как был, "листопад" - крутой чувак, в красной кепочке и чёрном костюме - говорит, что, дескать, знаю замечательное место, где наши всегда бывают. Ну, раз так, значит - идём. А дальше, как всегда - непонятные переулки в центре города, где, вроде бы и есть жизнь, но вокруг развалины, и даже трудно пройти. Заходим в какой-то подвал с забавной вывеской "весёлый стук". Железные столы, стальные стулья и каменный пол. Заказываем чего-то свежее, как сказал официант - пользуется спросом, ну - не вопрос - раз пользуется, так, значит, не отравят. Ждём немного - официант приносит две таких больших стальных тарелки, немного помятых, как будто на них гвозди распрямляли, и, самое главное пустых. Ставят керамические чашки, полные какой-то жидкости. Я спрашиваю - что это - официант отвечает - как обычно - берёзовый сок - свежевыжатый. Ну, сок как сок - пить можно - опилки же не плавают. И тут приносят еду - два больших еловых полена - запах смолы и коры наполняет помещение. Это наше фирменное - ель с дубовыми вставками - изрекает официант. Я смотрю на полено, потом на официанта, и понимаю, что окружающая действительность перестаёт меня радовать, и мне очень сильно хочется домой. "Листопадец", тем временем начинает поедание - стоит громкий треск и хруст - теперь я понимаю, почему тарелки так выглядят - ведь вместо столовых приборов выдают стамеску и киянку. И вот - уже половины полена, как ни бывало. Я же верчу своё в руках из стороны в сторону и с грустным взглядом изрекаю фразу - эх, надо было программировать на Java или хотя бы на php, тогда бы было что-то вкуснее. ... и тут я проснулся. |
|||
69
Asmody
16.03.15
✎
00:53
|
(68) а я-то думаю: почему в красной шапочке? :)
|
|||
70
шаэс
16.03.15
✎
01:08
|
(68) о, класс, сказки уже начались...
|
|||
71
zak555
16.03.15
✎
07:16
|
(68) вот это да
|
|||
72
Simod
16.03.15
✎
07:35
|
Массив.. в массив структура.. обкурились штоле?
(45) Вообще нечитаемо. |
|||
73
D_E_S_131
16.03.15
✎
09:57
|
В этой теме массовое умопомрачение что ли (или я невнимательно читаю)?
Выборка из результата запроса очень замечательно передается на Клиент, а сделать Итоги по коэффициенту еще Asmody в (3) предложил. |
|||
74
ДенисЧ
16.03.15
✎
09:58
|
(73) Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер). |
|||
75
D_E_S_131
16.03.15
✎
10:01
|
(74) "толстый клиент" — есть же, что не так?
|
|||
76
D_E_S_131
16.03.15
✎
10:01
|
(68) Предлагаю название "Ужин с бобром".
|
|||
77
ДенисЧ
16.03.15
✎
10:02
|
(75) Как бы 1с по умолчанию очень любит запускать именно тонкого. Поэтому нужно уточнять.
|
|||
78
D_E_S_131
16.03.15
✎
10:06
|
(77) Согласен. Если очень нужно именно тонкого клиента, то обход выборки сделать на Сервере, а на клиента передавать структуру:
|
|||
79
Лефмихалыч
16.03.15
✎
10:13
|
отсортировать по Физлицо+Коэффициент, потом вернуть массив
ТекКоэффициент = Массив[0].Коэффициент; ТекФизлоцо = Массив[0].Физлицо; Пока не Массив.Конец Цикл Если ТекФизлоцо <> Массив[0].Физлицо Тогда // началось новое физлицо КонецЕсли; Если ТекКоэффициент <> Массив[0].Коэффициент Тогда // начался новый коэффициент КонецЕсли; ТекКоэффициент = Массив[0].Коэффициент; ТекФизлоцо = Массив[0].Физлицо; |
|||
80
Лефмихалыч
16.03.15
✎
10:14
|
в последних двух строчках Массив[0] читать, как Массив[ТекИтерацияЦикла]
|
|||
81
D_E_S_131
16.03.15
✎
10:26
|
(79) Там вроде бы в условии, что нужно и сам коэффициент вернуть (в имени файла будет использоваться) и еще поля ЛицевойСчет и кВыплате. Видимо придется передавать ТЗ в реквизит формы...
|
|||
82
Лефмихалыч
16.03.15
✎
10:43
|
(81) массив соответствий с соответствиями
|
|||
83
Torquader
16.03.15
✎
14:02
|
(76) Ну какой там бобёр - там самый настоящий ДЯТЕЛ.
Бобра-то на мех сдать можно или попросить деревья нарубить, а что может дятел ? |
|||
84
Torquader
16.03.15
✎
14:02
|
(82) Чем просто массив в массиве не устраивает ?
|
|||
85
ДенисЧ
16.03.15
✎
14:02
|
(83) на перья. И дырку в стволе продубить может...
|
|||
86
Torquader
16.03.15
✎
14:07
|
(85) Ну да, представляем такой восточный рынок, где полно всякой всячины. Стоит такая бабушка неизвестного возраста, и у неё большой тряпичный мешок, а на нём табличка "Перо дятла".
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |