|
v7: ТиС: учет размеров | ☑ | ||
---|---|---|---|---|
0
КонецЦикла
16.12.13
✎
21:25
|
Добрый вечер!
Тема боян, перечитывал старые ветки, читал собственные же ответы. Итак, есть ТиС и есть потребность учитывать размеры одежды. Синхронизация будет осуществляться с двумя программами: 1. С розничной (не на 1С) - по карточкам, т.е. каждая позиция имеет свой размер, ШК, но может иметь неуникальный артикул. 2. С бухгалтерией (1С) - по артикулам. Т.е. позиции с разными размерами будут "свернуты" Но внезапно пронзила мысль. Чтобы не кромсать хранение остатков и минимизовать трудозатраты сделать так. Создать справочник БазоваяНоменклатура и номенклатуру подчинить ему, добавить нее реквизит Размер. Артикул и название будут браться из базовой номенклатуры, в нем же будет храниться иерархия спр-ка. Единицы и ШК будут свои. Работа через форму подбора специальную. Если же понадобиться выбирать номенклатуру руками - будет работать стандартный выбор подчиненного справочника: выбор позиции, а потом размера. А вы как бы делали? |
|||
1
Lazy Stranger
16.12.13
✎
21:34
|
подчиненный номенклатуре справочник "разновидности" с цветами и размерами, ну и доп. измерение в партиях и остатках, могу MD прислать
|
|||
2
КонецЦикла
16.12.13
✎
21:37
|
(1) Надо не просто хранить, а вести учет в разрезе размеров
|
|||
3
КонецЦикла
16.12.13
✎
21:37
|
Где хранить остатки по разновидностям?
|
|||
4
КонецЦикла
16.12.13
✎
21:41
|
Написал на почту :)
|
|||
5
yam
16.12.13
✎
21:45
|
Проще сделать аналог характеристики. Сделать только для регистров остатки ТМЦ и резервы ТМЦ (если используется резервирование).
Прийдется дописать алгоритмы всего лишь в несколько (вроде 4) глобальных процедурах - глПриходОстатковТМЦ, глСписаниеОстатковТМЦ, глФильтрОстатковТМЦ и глПодготовитьТаблицуДокумента. Там очень простые (в сравнении с восьмеркой) модули по 100 строк кода максимум. Я бы так сделал. |
|||
6
yam
16.12.13
✎
21:46
|
В партиях я бы не делал изменений, т.к. они нужны только для определния себестоимости
|
|||
7
Diter
16.12.13
✎
21:47
|
(0) не поверишь - так и делал. года три назад клиент производство+сеть магазинов. чтобы не кромсать типовую влепил подчиненные справочник "размер" и подбор был из двух частей - после подбора номенклатуры - список доступных размеров
|
|||
8
Diter
16.12.13
✎
21:48
|
маякни кину мд (там правда несколько библиотек надо но ты же умный - разберёшься)
|
|||
9
Diter
16.12.13
✎
21:49
|
регистры штатные не трогал - ввел новый. именно для того что чаще всего нужны остатки не по размерам а вот когда надо по размерам - то велкам. есть регистр
|
|||
10
Diter
16.12.13
✎
21:50
|
делал по аналогии своей конфы с нуля для учета моб.телефонов (там аналог "размера" - IMEI аппарата
|
|||
11
КонецЦикла
16.12.13
✎
21:51
|
(8) А мыло какое у тебя?
В принципе мне как бы идея нужна/одобрение/список граблей. Пока теоретически выживаемость решения хорошая. (9) Я вообще их не хочу трогать Т.е. будет элемент группы куртка арт. 1245 (это новый спр-к) и в подчинении (это и есть номенклатура) курка арт. 1245 48 курка арт. 1245 50 |
|||
12
Diter
16.12.13
✎
21:52
|
(11) _avk(гав)list.ru (впереди подчерк ОБЯЗАТЕЛЕН)
|
|||
13
Diter
16.12.13
✎
21:54
|
(11) все ты верно мыслишь. все грабли мной обойдены в конфе что я тебе кину. там и проверка и подборы и остатки по размерам все есть. только нужна формекс и 1с++. там же и сканер подключается 9модули есть) и принтер штрих-кодов и даже экспорт накладных от фабрики в безумном формате "полукартинка" (печать в файл мелкомягких)
|
|||
14
Diter
16.12.13
✎
21:54
|
контора работает без беспокойства меня уже пару лет точно.
|
|||
15
Diter
16.12.13
✎
21:55
|
отправил.
|
|||
16
КонецЦикла
16.12.13
✎
21:56
|
(13) ОК. Написал. Но может быть я попроще сделаю, это просто оптовая конфига. Все можно и штатно сделать в принципе.
|
|||
17
Diter
16.12.13
✎
21:56
|
кстати я ещё там сделал так чтобы юзер вообще никуда не лез и ничего не мог сделать нехорошего. при старте запускается рабочий стол продавца на котором все есть что ему надо. смотри формы списка справочника "номенклатура"
|
|||
18
КонецЦикла
16.12.13
✎
21:57
|
На фронте что ли работа?
|
|||
19
Diter
16.12.13
✎
21:57
|
(16) проще это плодить номенклатуру под каждый размер. прокатывает и оправдано если в принципе вариантов не так много (по тканям и размерам). ты учёл что в зависимости от ткани (а не только от размера) это тоже другой фактически товар
|
|||
20
Lazy Stranger
16.12.13
✎
21:58
|
(6) иногда мелкие размеры могут и по цене отличаться от крупных
|
|||
21
Diter
16.12.13
✎
21:58
|
(18) ну как сказать. комп один. просто вместо стандартного окна 1С перед кассиром красивая картинка. глянь короче. скрин тебе сделать?
|
|||
22
Diter
16.12.13
✎
21:59
|
(20) они всегда отличаются. все размеры имеют разную себестоимость. и в зависимости от ткани тоже разная себестоимость
|
|||
23
КонецЦикла
16.12.13
✎
22:00
|
(19) Ну идеологически правильно имхо было бы иметь отдельную карточку (у нее и свой ШК). Тем более что в розничной программе это так и сделано. На каждый размер - своя карточка.
(21) Та гляну конечно |
|||
24
yam
16.12.13
✎
22:01
|
(22) Тут нужно смотреть по факту. У меня был клиент - розничный бутик одежды, там не было никаких отличий по цене. Да и при наценке в 300% вряд ли отклонения в 1-2% им были бы особо актуальны
|
|||
25
Diter
16.12.13
✎
22:01
|
(19) свой ШК может быть где угодно.
|
|||
26
Lazy Stranger
16.12.13
✎
22:02
|
(22) все - это скорее в случае производства, в торговле близкие размеры, как правило, по цене не отличаются (при одинаковом материале)
|
|||
27
Diter
16.12.13
✎
22:03
|
||||
28
Diter
16.12.13
✎
22:03
|
(26) смотря чем торгую. если это бутик то отличаются. потому как каждое изделие уникально по своей сути. но это не важно в общем то
|
|||
29
Diter
16.12.13
✎
22:04
|
(24), (26) и ещё - цена и себестоимость несколько разные вещи. вы не находите?
|
|||
30
КонецЦикла
16.12.13
✎
22:19
|
(27) Омг )
|
|||
31
yam
16.12.13
✎
22:20
|
(29) Цена соответственно тоже была одинакова. В магазинах одежды она редко зависит от размеров, давно уже не встречал, чтобы 46 и 50 размеры отличались по цене
|
|||
32
Lazy Stranger
16.12.13
✎
22:23
|
(29) так и закупочная цена не отличается обычно
|
|||
33
КонецЦикла
16.12.13
✎
22:27
|
Я не понял почему спор за цены пошел )
В моем варианте с этим все ок |
|||
34
Diter
16.12.13
✎
22:28
|
(32) у меня производство + магазины.
|
|||
35
Diter
16.12.13
✎
22:28
|
(30) что то не так?
|
|||
36
Ranger_83
16.12.13
✎
22:30
|
Что то про размерную сетку не увидел ни у кого
|
|||
37
Diter
16.12.13
✎
22:31
|
(36) ты про что?
|
|||
38
Ranger_83
16.12.13
✎
22:34
|
(37) как это про что,с одеждой никогда не работал.Размер размеру рознь в разных сетках, типа европейская, американская и т.д.
|
|||
39
КонецЦикла
16.12.13
✎
22:35
|
(38) Товар должен именоваться как в доках поставщика. Не понял вопроса
|
|||
40
Ranger_83
16.12.13
✎
22:36
|
(39) я про размер сейчас, не про название
|
|||
41
КонецЦикла
16.12.13
✎
22:39
|
(40) Ну так название содержит размер наверное? уникальный шк... или навалом куртки?
|
|||
42
Diter
16.12.13
✎
22:39
|
(40) переводная таблица проблема? не вижу вопроса или сложности
|
|||
43
Ranger_83
16.12.13
✎
22:39
|
Я работал давно уже правда с одной специализированной конфой.Значит были справочники:номенклатра, размерная сетка и подчиненный ему размеры.Может у вас это не актуально, на всякий случай делюсь опытом
|
|||
44
Ranger_83
16.12.13
✎
22:40
|
(42) а в учете, если нужно хранить в разрезе размеров
|
|||
45
Diter
16.12.13
✎
22:41
|
(44) ну и что? хранится в одной системе (сетке) а переводной таблицей получаешь в любой другой системе.
|
|||
46
КонецЦикла
16.12.13
✎
22:42
|
Что-то вы ищете сложности...
|
|||
47
Ranger_83
16.12.13
✎
22:42
|
(41) В названии не удобно хранить размер, согласись если размеров с десяток
|
|||
48
Diter
16.12.13
✎
22:44
|
(47) у меня в названии только название одежды и модель (смотри скрин выше). размер и ткань выбираются из подчиненных справочников "доступные размеры и артикулы" для конкретной номенклатуры
|
|||
49
Ranger_83
16.12.13
✎
22:45
|
(45) В отчетах получать динамически, задавать соответствия-не айс по-моему.Но опять повторюсь, что это как вариант
|
|||
50
КонецЦикла
16.12.13
✎
22:45
|
(47) Но ведь в инвойсе, ттн они именуются... к сожалению выгнали с компа, нет доступа к докам поставщика
|
|||
51
Diter
16.12.13
✎
22:50
|
(50) короче - если чего не понятно - кричи. в дальше
|
|||
52
Bumer
16.12.13
✎
22:59
|
(0) Запилил бы, даже думать бы не стал. Номенклатуру наплодил + дополнительные реквизиты(размер, цвет итд), всё это из справочников + иерархию по артикулам, поставщикам...
|
|||
53
Сияющий Асинхраль
16.12.13
✎
23:42
|
Сейчас как раз с доработанным тис работаю, на ней сидят несколько обувных магазинов, в ней все размеры в свойствах, а свойства привязаны к партиям
|
|||
54
Злобный Фей
16.12.13
✎
23:48
|
Используй УТ, там это реализовано.
|
|||
55
Сияющий Асинхраль
16.12.13
✎
23:49
|
+(53) там вообще все к свойствам привязано, и цвета в том числе. Т.е свойства там имеют роль характеристик и динамически пополняются без изменения конфы
|
|||
56
Diter
16.12.13
✎
23:50
|
(53), (54) я так понимаю читать раздел "неа"? речь о версии 7.7. Или так.... поумничать "а я я яяяяя знаююююююю"? ;)
|
|||
57
Злобный Фей
16.12.13
✎
23:53
|
(56) А почему бы не поумничать? К тому же, не вижу смысла заниматься внедрением тис, конфа давно окончательно и бесповоротно устарела. Разве что речь про доработки в уже работающей конфе.
|
|||
58
Сияющий Асинхраль
17.12.13
✎
00:01
|
(56) я так понимаю это ты (53) не прочитал, там речь о тис идет, а не об ут
|
|||
59
КонецЦикла
17.12.13
✎
00:02
|
(57) Это очень даже прекрасно что устарела :)
Выпускаются только обновления по законодательству, которые мне нахрен не нужны. Зато нет ПРЫЖКОВ В СТОРОНУ. Мне хочется внедрить и забыть, у них бух-я семерка. С УТ так не получится :) |
|||
60
КонецЦикла
17.12.13
✎
00:04
|
(53) Ну тоже вариант
Но труднее сделать, например, тот же подбор. К тому же объем доработок неоправданно большой. Хотят видеть иерархию и товары в сгруппированном виде, а рядом в окошке перечень размеров с ценами и остатками. |
|||
61
Сияющий Асинхраль
17.12.13
✎
00:04
|
(57) а тебе вроде никто и не предлагал ее внедрением заниматься. Или я чего-то не увидел?
|
|||
62
Сияющий Асинхраль
17.12.13
✎
00:08
|
(60) да, подбор там свой, как раз и показывает размеры и цвета
|
|||
63
Злобный Фей
17.12.13
✎
00:22
|
(61) При чем тут я лично? У тебя проблемы с чтением или с пониманием прочитанного?
|
|||
64
КонецЦикла
17.12.13
✎
00:28
|
(62) Отчеты допиливать труднее. Придется везде к партиям лезть, для тех же остатков... ну и еще кучка гимора.
|
|||
65
КонецЦикла
17.12.13
✎
00:57
|
Вот такое надо грузить от поставщика
SCOW.FI.PS SUPERCOPA FIORENTINA BCO-MORADO INDOOR 10.0C 9994091553129 BLANCO-MORADO FUTBOL SALA JR 14,86 1 101.1 SCOW.FI.PS SUPERCOPA FIORENTINA BCO-MORADO INDOOR 11.0C 9994091553136 BLANCO-MORADO FUTBOL SALA JR 14,86 1 101.1 |
|||
66
Злопчинский
17.12.13
✎
01:02
|
КЦ, если не нужны !!отчеты!! КОНКРЕТНО по размерам, или по цветам - я бы вобще не морочился, никаких дополнительных сущностей не плодил бы, сделал все штатно, на группах и элементах, по типу:
Группа "КУРТКА" --ГРУППА "КУРТКА АЛЯСКА" ----ГРУППА "КУРТКА АЛЯСКА КРАСНАЯ" ------ элемент Куртка Аляска Красная, р48, арт.1111 ------ элемент Куртка Аляска Красная, р50, арт.2222 ------ элемент Куртка Аляска Красная, р52, арт.3333 . Подбор номенклатуры чуть подшаманил (ты ж спец) - вываливать "ТЗ" , сотсоящую из ГРУПП, после выбора конкретной группы - вываливать на выбор элементы. . все. . если неуникальные ШК/АРТИКУЛЫ н аразные размеры/цвета - пофиг. там где присутсвует неуникальност - вывалить список "неуникальных" позиций - выбирают руками. я так у триктажников делал - ночки, калсьоны, трусы... |
|||
67
Злопчинский
17.12.13
✎
01:05
|
Даже делал им вчерновую типа "контрольное место сборщика"
http://content.screencast.com/users/Che66/folders/Jing/media/999cf32a-6bfe-4f85-91bd-91ec981dc2a7/2013-12-17_0104.png |
|||
68
КонецЦикла
17.12.13
✎
01:05
|
Да, но... у них привычная иерархия по брендам и видам, думаю испугаются.
|
|||
69
Злопчинский
17.12.13
✎
01:07
|
а потом, щелкнул сборщик-контролер сканером по носкам - хрясь - таких нескольо разных номенклатур с одинаковым штрихкодом - вываливал список одинаковых ШК (разные эл-ты номенклатуры) - выбирали вручную
http://content.screencast.com/users/Che66/folders/Jing/media/e42ab0d0-825c-49ba-88d7-e0db56c06e5c/2013-12-17_0105.png |
|||
70
КонецЦикла
17.12.13
✎
01:08
|
К тому же нужна синхронизация. А имея "сущность" ее сделать гораздо проще.
|
|||
71
КонецЦикла
17.12.13
✎
01:09
|
(69) Красиво, но традиционное "тыканье" не нравится :)
|
|||
72
Злопчинский
17.12.13
✎
01:10
|
(68) ну и фигли, у меян сейчас один ларечник продвинутый чехлы для телефонов так автоматизируем совместно
http://screencast.com/t/ruN6iuVYjg8 . новые наименования заводятся практически автоматом - при вводе нового иерархия групп переносится в наименование - остается дописать цвет и феньки... |
|||
73
Злопчинский
17.12.13
✎
01:11
|
(70) ну так если в розницу выгружать - выгружается как есть, а в бухию - выгружаются не элементы а группы в качестве элементов.
..? |
|||
74
КонецЦикла
17.12.13
✎
01:13
|
(73) Хм... ну только если набор реквизитов общим сделать. Но что-то мне не очень нравится, не люблю я группы. По ним ни отчеты нормально ни сделать... и поддерживать надо идеально структуру.
|
|||
75
Злопчинский
17.12.13
✎
01:24
|
(74) тут вообще я речь вел об отсутсвии каких-либо дополнительных реквизитов.
. а так, надо танцевать от потребнсотей выгрузки и отчетов которые нужны. . и да. структур надо поддерживать - а куда без этого...? . напримеру ларечника этого по чехлам народ на точках продажи вообще не морочиться никакими групами - работают через модиф.форму поиска - вбивают ключевые слова - получают набор элементов, выбирают нужный. . а вся струткура групп поддерживается и создается исключительно в центре |
|||
76
Злопчинский
17.12.13
✎
01:25
|
(71) кста, не поняд про традиционное тыканье - это что имел в виду?
|
|||
77
Bumer
17.12.13
✎
01:26
|
(74) "По ним ни отчеты нормально ни сделать..."
Да ну? |
|||
78
Diter
17.12.13
✎
01:31
|
(74) в том скрине что я дал и конфе что отправил окошко с возможными размерами, цена и остатками для каждого конкретного товара. это подчиненный справочник. строить все на одном справочнике типа "свойства или категории) неудобно по причине того что в одном месте будет храниться несвязанная между собой информация. делать через группы неудобно т.к. если юзер ошибется и кинет товар не в ту группу то наступит абзац.
в общем на вкус и цвет.... я привык делать так чтобы сделать и забыть про этого клиента если все работает. кто то предпочитает подсадить заказчика на иглуу. каждому свое |
|||
79
Злопчинский
17.12.13
✎
01:32
|
Для отчетов берем
СводнаяНоменклатура = Регистр.остаткиТМЦ.Номенклатура.Родитель; . какие-то проблемы будут..? |
|||
80
Diter
17.12.13
✎
01:33
|
(69) несколько смущает одинаковый штрих код для семи различных товаров. но то дело такое
|
|||
81
Diter
17.12.13
✎
01:33
|
(79) товар поместили не в ту группу - чего будет?
|
|||
82
Злопчинский
17.12.13
✎
01:35
|
(78) хм.. не понял..
какая принципиальная разница что не в ту группу попадет элемент "Куртака Аляска" с подчиненными размерами/цветами и тем, что не в ту группу попадет элемент "Куратка аляска красная, р.48"..? - только если отчет криво будет..? |
|||
83
Злопчинский
17.12.13
✎
01:35
|
Чего будет чего будет..? хз.. зависит как отчеты строятся и как с группами или мимо них работает продавец.
..? |
|||
84
Diter
17.12.13
✎
01:36
|
(82) так ты фильтр по родителю накладываешь а не по свойствам (черт с ними пусть будет на свойствах размеры и ткань).
|
|||
85
Злопчинский
17.12.13
✎
01:36
|
хотя, если подумать, вариант номенклатуры с подчненной сеткой цветов-размеров - он как-то кузявее конечно выглядит
|
|||
86
Diter
17.12.13
✎
01:37
|
я ввел понятие "справочник.допустимыеразмеры" и "справочник.допустимыеткани"
и подчиненный справочник (подчинен номенклатуре) из двух реквизитов "размер" - справочник.допустимыеразмеры "ткань" - справочник.допустимыеткани и все. больше ничего делать не надо |
|||
87
Злопчинский
17.12.13
✎
01:39
|
(84) ну да, условно "фильтр по родителю", засада тут конечно есть, если делать подстраховываясь от засад - то более сложный вариант, как утебя.
. если попроще - жесткий запил и запрет переноса элементов между групп - то можно попроще... а при интерактивном переносе или создании элемента тупо при записи проверять - если в наименование невходит иерархия родителей - то отлуп... |
|||
88
Злопчинский
17.12.13
✎
01:39
|
(86) а остатки по размер-ткань -запилил в отд. регистр?
|
|||
89
Diter
17.12.13
✎
01:39
|
(85) хочешь кину тебе мд. глянешь. может чего покритикуешь. аж самому интересно стало. но фирма работает без меня уже два года. я приезжаю к ним только аккумуляторы в сканере ШК заменить - девочку не могут отвертку в руках держать. некомильфо ;)
|
|||
90
Diter
17.12.13
✎
01:41
|
(88) да. отдельный. проще чем "родной" и только то что надо.
|
|||
91
Злопчинский
17.12.13
✎
01:42
|
(89) я б с удовольствием глняул, но блин реально ПОК АНЕ НАДО и по работе в запареь, еле отхожу от всего...
|
|||
92
Злопчинский
17.12.13
✎
01:42
|
по размерам и цветамбыла отдельная конфига.. что-то там в наименованиисайта было тралял4you
|
|||
93
Diter
17.12.13
✎
01:44
|
по-поводу спроавочника "категории" или "свойства". писал с нуля конфу для автосалона+сто. сделал там такую мульку поддавшись примеру 8-ки. сделал все возможные характеристики авто (любые) в виде списка возможных характеристик которые юзает пользователь указывая не только название характеристики но и тип значения (справочник, число, строка и т.п.) в результате юзерам НЕУДОБНО. почему - х.з ответ "мы путаемся не все выбираем что надо, забываем, можем выбрать дважды одно и то же свойство)
(91) да не волнуйся ты. я же не навязываю |
|||
94
Злопчинский
17.12.13
✎
01:45
|
а, во было: http://www.u4t.ru/odejda.shtml
только блин вмерли.. вот и верь после этого люядм я отдалсь ему при луне а он взял мои девичьи груди... |
|||
95
Diter
17.12.13
✎
01:46
|
(94) ошибка. страница не найдена
|
|||
96
Злопчинский
17.12.13
✎
01:46
|
(93) делал и я черновик такой ;-) но тоже не взлетело.. все хотят чтобы было просто и все было.. ;-)
|
|||
97
Diter
17.12.13
✎
01:46
|
(96) во во... и я про то...
|
|||
98
Злопчинский
17.12.13
✎
01:47
|
(93) ты ж тоже не волнуйся, я ж не выпрашиваю...
|
|||
99
Diter
17.12.13
✎
01:47
|
тю ;)
|
|||
100
Злопчинский
17.12.13
✎
01:47
|
пока что просто мне удалось сделать только на складе ;-)
|
|||
101
Злопчинский
17.12.13
✎
01:48
|
(99) о то ж!
|
|||
102
КонецЦикла
17.12.13
✎
09:56
|
(77) Легче работать (группировать, фильтровать) с реквизитами чем с иерархией групп, разве нет? Особенно штатными методами...
|
|||
103
Diter
17.12.13
✎
09:59
|
(102) "ну шо синку, помогли тебе твои ляхи?" ©
|
|||
104
DGorgoN
17.12.13
✎
10:01
|
1) Самое просто без допилок - создать справочник товаров типа: Группа: Одежда/размер n1..nx/Твои изделия (можно обработку для быстрого ввода номенклатуры)
2) Посложнее приделать регистр (как в УТ) характеристик и вести размеры именно по ним. Допилка небольшая. Уже сделал бы чем тут трепатся ;) |
|||
105
КонецЦикла
17.12.13
✎
10:20
|
(103) Да блин, быстрее сделать как придумал :)
Но все равно спасибо У тебя что-то похожее на ТиС 8.7 (104) А какой смысл вводить в регистры доп. измерения, если карточка своя на каждый цвето-размер? |
|||
106
Diter
17.12.13
✎
10:24
|
(105) это какая то типовая ТиС для Украины. релиз не помню
|
|||
107
КонецЦикла
17.12.13
✎
10:25
|
(106) Не очень конфига, ничего личного.
|
|||
108
Diter
17.12.13
✎
10:25
|
(105) кстати - схема там именно такая как ты "придумал" в топике. подчиненные справочники размер и ткань
|
|||
109
Diter
17.12.13
✎
10:26
|
(107) в чем именно?
|
|||
110
КонецЦикла
17.12.13
✎
10:28
|
(109) Да достаточно взглянуть на регистр партий - 2 измерения вида "документ". В справочнике партий как-то оптимальнее и удобнее.
Чего их в УТ начало носить влево-вправо - непонятно :) |
|||
111
Андрей_Андреич
naïve
17.12.13
✎
10:32
|
Делал 100 лет назад - получилось на мой взгляд легко
естественно справочник размеров в справочнике партии реквизит размер. в справочник ед.изм реквизит размер + наименование единицы измерения = размер. в результате документы поступления-продажи и т.д. переделывать не надо, т.к. ед.изм = размер в документах оприходования при записи в партию записывать размер Изменения небольшие в десятке мест. Если интересно - распишу дальше. Пару лет поработало в нескольких магазинах, потом перешли на УТ |
|||
112
Diter
17.12.13
✎
10:32
|
(110) не говори "гоп". у нас учет по партиям вылизан от и до. два измерения логично вполне.
Поставка, Поставщик - для товаров принятых на реализацию Контрагент, ПрихДокумент - для купленого товара |
|||
113
Андрей_Андреич
naïve
17.12.13
✎
10:34
|
+(111) Регистр партий не переделывал, только вснес размер в регистр остатки тмц
|
|||
114
КонецЦикла
17.12.13
✎
10:36
|
(112) Отчеты не так удобно делать. Из неопределенного документа тянуть неудобно. А работать оно может прекрасно, я же критикую.
(111) Была такая мысль, но если у тебя единица = размер, то ложить надо не в базовой единице в регистры и доставать, а в заданной? |
|||
115
КонецЦикла
17.12.13
✎
10:36
|
я же критикую = я же не критикую
|
|||
116
Андрей_Андреич
naïve
17.12.13
✎
10:39
|
(114) В партиях тмц размер извлекается из партии как реквизит справочника.
В остатках тмц измерение размер есть. Сейчас поднял конфу - переделок вообще минимум. Сейчас перечислю все места измененные и что менять - за день сделаешь + день на отчеты |
|||
117
Андрей_Андреич
naïve
17.12.13
✎
10:42
|
(114) Короче - если действительно интересно - опишу полностью. Если пофик - тогда лениво.
|
|||
118
Diter
17.12.13
✎
10:44
|
(114) а как определить вид если их может быть "до забора"?
|
|||
119
КонецЦикла
17.12.13
✎
10:45
|
(117) Та ладно, это я сам соображу, спс. Принцип понятен.
(118) Вот именно. Когда-то работал на такой. И к тому же измерений больше. |
|||
120
Diter
17.12.13
✎
10:50
|
если уникальность только через размер - схема с ед. изм. работает. но в одежде играет роль ещё и артикул ткани. а тут несколько интереснее получается
|
|||
121
Андрей_Андреич
naïve
17.12.13
✎
10:55
|
(119) Да ладно - отпишусь. Самому-то и правда не быстро.
1. Обработка "ПоказатьОстаткиТМЦ" во всех процедурах добавить в свертке размер: ТаблОстатков.Свернуть("Склад,Размер","Количество"); ТаблицаФормы.Единица = СокрЛП(ТаблОстатков.Размер); 2. Док-т "ПереоценкаРозница" модуль ТабОстатков.НоваяКолонка("Размер", "Справочник.Размеры"); Регистр.ОстаткиТМЦ.Размер=ТаблицаДокумента.Единица.Размер; ТабОстатков.Размер=ТаблицаДокумента.Единица.Размер; Если (ТабОстатков.Номенклатура = ТЗПартий.Номенклатура) И (ТабОстатков.ЦенаПрод = ТЗПартий.ЦенаПрод) И(ТабОстатков.Размер = ТЗПартий.Партия.Размер) Тогда |
|||
122
Андрей_Андреич
naïve
17.12.13
✎
10:59
|
Функция глЗаполнитьПартию(СпрПартии,Партия,Поставщик,ДоговорПоставщика,ПриходныйДокумент,Цена,Размер) Экспорт
Если (Партия.Поставщик<>Поставщик) или (Партия.ДоговорПоставщика<>ДоговорПоставщика) или (Партия.ПриходныйДокумент<>ПриходныйДокумент) или (Цена<>Партия.ЗакупочнаяЦена) ИЛИ (Партия.Размер<>Размер) Тогда Если СпрПартии.НайтиЭлемент(Партия)=0 Тогда Возврат ПолучитьПустоеЗначение("Справочник.Партии"); КонецЕсли; СпрПартии.Поставщик = Поставщик; СпрПартии.ДоговорПоставщика = ДоговорПоставщика; СпрПартии.ПриходныйДокумент = ПриходныйДокумент; СпрПартии.ЗакупочнаяЦена = Цена; СпрПартии.Размер=Размер; СпрПартии.Записать(); КонецЕсли; Возврат Партия; КонецФункции //глЗаполнитьПартию() |
|||
123
Андрей_Андреич
naïve
17.12.13
✎
11:00
|
Процедура глПолучитьРозничныйОстатокЦену(Номенклатура, Ед, ОстаткиТМЦ, ВозврОстаток, ВозврЦена) Экспорт
Перем ТаблОстатков; СписОстаток = СоздатьОбъект("СписокЗначений"); СписЦена = СоздатьОбъект("СписокЗначений"); ОстаткиТМЦ.УстановитьЗначениеФильтра("Номенклатура", Номенклатура, 1); ОстаткиТМЦ.УстановитьЗначениеФильтра("Размер", Ед.Размер, 1); ОстаткиТМЦ.ВыгрузитьИтоги(ТаблОстатков); ТаблОстатков.Свернуть("Номенклатура, ЦенаПрод", "Количество"); ТаблОстатков.ВыбратьСтроки(); Коэфф = Ед.Коэффициент; Пока ТаблОстатков.ПолучитьСтроку() = 1 Цикл НайденнаяЦена = ТаблОстатков.ЦенаПрод * Коэфф; НайденныйОстаток = ТаблОстатков.Количество / Коэфф; СписОстаток.ДобавитьЗначение(НайденныйОстаток); // в представление каждой цены добавим еще и остаток (в скобках) СписЦена.ДобавитьЗначение(НайденнаяЦена, глФРМ(НайденнаяЦена) + " (" + глФРМКоличество(НайденныйОстаток) + " " + Ед + ")"); КонецЦикла; ВозврОстаток = ЗначениеВстроку(СписОстаток); ВозврЦена = ЗначениеВстроку(СписЦена); КонецПроцедуры // глПолучитьРозничныйОстатокЦену() |
|||
124
Андрей_Андреич
naïve
17.12.13
✎
11:02
|
Функция глПриходОстатковТМЦ(Конт,ТаблНоменклатуры,СписокПараметров) Экспорт
// измерения РегОстатки.Размер = ТаблНоменклатуры.Единица.Размер; КонецФункции // глПриходОстатковТМЦ() |
|||
125
Андрей_Андреич
naïve
17.12.13
✎
11:04
|
Функция глСписаниеОстатковТМЦ(Конт,ТаблНоменклатуры,СписокПараметров, ВремОстаткиТМЦ, ВремРезервыТМЦ = "") Экспорт
Перем КонтрольОстатков, КонтрольРезервов; РегОстатки = Конт.Регистр.ОстаткиТМЦ; Фирма = СписокПараметров.Получить("Фирма"); ФирмаДляОстатковТМЦ = СписокПараметров.Получить("ФирмаДляОстатковТМЦ"); Склад = СписокПараметров.Получить("Склад"); ТекДок = СписокПараметров.Получить("ТекДок"); Договор = СписокПараметров.Получить("Договор"); КодОперации = СписокПараметров.Получить("КодОперации"); ВнутреннееПеремещение = ?(((КодОперации = глКО.Перемещение) или (КодОперации = глКО.ПередачаВРозницу) или (КодОперации = глКО.ВозвратИзРозницы)),1,0); КонтрольРезервов = 0; Если Константа.КонтрольОтрицательныхОстатков = Перечисление.СпособыКонтроляОстатковТМЦ.НеКонтролировать Тогда КонтрольОстатков = 0; Иначе КонтрольОстатков = 1; Если глПолучитьПолномочие("РазрешитьПродаватьРезерв") = 0 Тогда КонтрольРезервов = 1; КонецЕсли; КонецЕсли; Если (Склад.РозничныйСклад = 1) Тогда // розничный склад будем контролировать всегда, поскольку там идет // учет в разрезе цен и работа задним числом сильно затруднена. КонтрольОстатков=1; КонецЕсли; ТаблНоменклатуры.ВыбратьСтроки(); Пока ТаблНоменклатуры.ПолучитьСтроку()=1 Цикл ТекНоменклатура = ТаблНоменклатуры.Номенклатура; ТекРазмер=ТаблНоменклатуры.Единица.Размер; Если (ТекНоменклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Услуга) или (ТекНоменклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Работа) или (ТаблНоменклатуры.Количество = 0) Тогда Продолжить; КонецЕсли; Цена = ТаблНоменклатуры.ЦенаПрод; РезервНаСкладе = 0; РезервПоФирме = 0; Если (ТипЗначенияСтр(ВремРезервыТМЦ) = "Регистр") и (КонтрольРезервов = 1) Тогда Если ПустоеЗначение(ФирмаДляОстатковТМЦ) = 1 Тогда // Фильтр по фирме не нужен РезервНаСкладе = ВремРезервыТМЦ.СводныйОстаток(,ТекНоменклатура,Склад,,,"Количество"); Если (ВнутреннееПеремещение = 0) Тогда // для внутренних перемещений не конролируем резерв по фирму в целом // (поскольку он на самом деле не изменится) РезервПоФирме = ВремРезервыТМЦ.СводныйОстаток(,ТекНоменклатура,,,,"Количество"); КонецЕсли; Если (ПустоеЗначение(Договор) = 0) Тогда // вычтем резервы, котрые сделал наш же покупатель РезервНаСкладе = РезервНаСкладе - ВремРезервыТМЦ.СводныйОстаток(,ТекНоменклатура,Склад,Договор,,"Количество"); Если (ВнутреннееПеремещение = 0) Тогда РезервПоФирме = РезервПоФирме - ВремРезервыТМЦ.СводныйОстаток(,ТекНоменклатура, ,Договор,,"Количество"); КонецЕсли; КонецЕсли; ИначеЕсли ТипЗначенияСтр(ФирмаДляОстатковТМЦ) = "СписокЗначений" Тогда // Нужны сводные остатки по нескольким фирмам СчетчикЦикла = 0; Для СчетчикЦикла = 1 По ФирмаДляОстатковТМЦ.РазмерСписка() Цикл ТекФирма = ФирмаДляОстатковТМЦ.ПолучитьЗначение(СчетчикЦикла); РезервНаСкладе = РезервНаСкладе + ВремРезервыТМЦ.СводныйОстаток(ТекФирма,ТекНоменклатура,Склад,,,"Количество"); Если (ВнутреннееПеремещение = 0) Тогда РезервПоФирме = РезервПоФирме + ВремРезервыТМЦ.СводныйОстаток(ТекФирма,ТекНоменклатура,,,,"Количество"); КонецЕсли; Если (ПустоеЗначение(Договор) = 0) Тогда // вычтем резервы, котрые сделал наш же покупатель РезервНаСкладе = РезервНаСкладе - ВремРезервыТМЦ.СводныйОстаток(ТекФирма,ТекНоменклатура,Склад,Договор,,"Количество"); Если (ВнутреннееПеремещение = 0) Тогда РезервПоФирме = РезервПоФирме - ВремРезервыТМЦ.СводныйОстаток(ТекФирма,ТекНоменклатура, ,Договор,,"Количество"); КонецЕсли; КонецЕсли; КонецЦикла; ИначеЕсли ТипЗначенияСтр(ФирмаДляОстатковТМЦ) = "Справочник" Тогда // нужны сводные остатки только по одной фирме РезервНаСкладе = ВремРезервыТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,ТекНоменклатура,Склад,,,"Количество"); Если (ВнутреннееПеремещение = 0) Тогда РезервПоФирме = ВремРезервыТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,ТекНоменклатура,,,,"Количество"); КонецЕсли; Если (ПустоеЗначение(Договор) = 0) Тогда // вычтем резервы, котрые сделал наш же покупатель РезервНаСкладе = РезервНаСкладе - ВремРезервыТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,ТекНоменклатура,Склад,Договор,,"Количество"); Если (ВнутреннееПеремещение = 0) Тогда РезервПоФирме = РезервПоФирме - ВремРезервыТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,ТекНоменклатура,,Договор,,"Количество"); КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; ОстатокНаСкладе = 0; ОстатокПоФирме = 0; ОстатокНаСкладеЦ = 0; Если КонтрольОстатков = 1 Тогда // остаток на складе Если ПустоеЗначение(ФирмаДляОстатковТМЦ) = 1 Тогда ОстатокНаСкладе = ВремОстаткиТМЦ.СводныйОстаток(,ТекНоменклатура,ТекРазмер,Склад,,"Количество"); Если (ВнутреннееПеремещение = 0) Тогда ОстатокПоФирме = ВремОстаткиТМЦ.СводныйОстаток(,ТекНоменклатура,ТекРазмер,,,"Количество"); КонецЕсли; Если Склад.РозничныйСклад = 1 Тогда ОстатокНаСкладеЦ = ВремОстаткиТМЦ.СводныйОстаток(,ТекНоменклатура,ТекРазмер,Склад,Цена,"Количество"); КонецЕсли; ИначеЕсли ТипЗначенияСтр(ФирмаДляОстатковТМЦ) = "Справочник" Тогда ОстатокНаСкладе = ВремОстаткиТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,ТекНоменклатура,ТекРазмер,Склад,,"Количество"); Если (ВнутреннееПеремещение = 0) Тогда ОстатокПоФирме = ВремОстаткиТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,ТекНоменклатура,ТекРазмер,,,"Количество"); КонецЕсли; Если Склад.РозничныйСклад = 1 Тогда ОстатокНаСкладеЦ = ВремОстаткиТМЦ.Остаток(ФирмаДляОстатковТМЦ,ТекНоменклатура,ТекРазмер,Склад,Цена,"Количество"); КонецЕсли; ИначеЕсли ТипЗначенияСтр(ФирмаДляОстатковТМЦ) = "СписокЗначений" Тогда СчетчикЦикла = 0; Для СчетчикЦикла = 1 По ФирмаДляОстатковТМЦ.РазмерСписка() Цикл ТекФирма = ФирмаДляОстатковТМЦ.ПолучитьЗначение(СчетчикЦикла); ОстатокНаСкладе = ОстатокНаСкладе + ВремОстаткиТМЦ.СводныйОстаток(ТекФирма,ТекНоменклатура,ТекРазмер,Склад,,"Количество"); Если (ВнутреннееПеремещение = 0) Тогда ОстатокПоФирме = ОстатокПоФирме + ВремОстаткиТМЦ.СводныйОстаток(ТекФирма,ТекНоменклатура,ТекРазмер,,,"Количество"); КонецЕсли; Если Склад.РозничныйСклад = 1 Тогда ОстатокНаСкладеЦ = ОстатокНаСкладеЦ + ВремОстаткиТМЦ.Остаток(ТекФирма,ТекНоменклатура,ТекРазмер,Склад,Цена,"Количество"); КонецЕсли; КонецЦикла; КонецЕсли; Иначе ОстатокНаСкладе = ТаблНоменклатуры.Количество; ОстатокПоФирме = ТаблНоменклатуры.Количество; КонецЕсли; // КонтрольОстатков = 1 // проверка резерва на складе Если (ОстатокНаСкладе - РезервНаСкладе) < ТаблНоменклатуры.Количество Тогда глНеПроводить(Конт,"На складе нет нужного свободного количества ТМЦ "+СокрЛП(ТекНоменклатура.Наименование) +"("+СокрЛП(ТекНоменклатура.Артикул)+")" +". "+РазделительСтрок+" Всего осталось "+Строка(ОстатокНаСкладе)+" "+ТекНоменклатура.БазоваяЕдиница +?(РезервНаСкладе <> 0 ,". "+РазделительСтрок+" Зарезервировано по выписанным Заявкам "+Строка(РезервНаСкладе) +" "+ТекНоменклатура.БазоваяЕдиница,"") +"."+РазделительСтрок+"Требуемое количество "+Строка(ТаблНоменклатуры.Количество)+" "+ТекНоменклатура.БазоваяЕдиница); Возврат (0); КонецЕсли; // а также по фирме в целом Если (ВнутреннееПеремещение = 0) Тогда Если (ОстатокПоФирме - РезервПоФирме) < ТаблНоменклатуры.Количество Тогда глНеПроводить(Конт,"На фирме в целом нет нужного свободного количества ТМЦ "+СокрЛП(ТекНоменклатура.Наименование) +"("+СокрЛП(ТекНоменклатура.Артикул)+")" +". "+РазделительСтрок+" Всего осталось "+Строка(ОстатокПоФирме)+" "+ТекНоменклатура.БазоваяЕдиница +?(РезервПоФирме<>0,". "+РазделительСтрок+" Зарезервировано по выписанным Заявкам "+Строка(РезервПоФирме) +" "+ТекНоменклатура.БазоваяЕдиница,"") +"."+РазделительСтрок+"Требуемое количество "+Строка(ТаблНоменклатуры.Количество)+" "+ТекНоменклатура.БазоваяЕдиница); Возврат (0); КонецЕсли; КонецЕсли; // проверка цены реализации для розничного склада Если (Склад.РозничныйСклад = 1) Тогда Если (ОстатокНаСкладеЦ) < ТаблНоменклатуры.Количество Тогда глНеПроводить(Конт,"На розничном складе нет ТМЦ "+СокрЛП(ТекНоменклатура.Наименование) +"("+СокрЛП(ТекНоменклатура.Артикул)+")" +" по указанной цене "+глФРМ(Цена)+" "+глРубли +". "+РазделительСтрок+" Всего осталось по указанной цене "+Строка(ОстатокНаСкладеЦ)+" "+ТекНоменклатура.БазоваяЕдиница +"."+РазделительСтрок+"Требуемое количество "+Строка(ТаблНоменклатуры.Количество)+" "+ТекНоменклатура.БазоваяЕдиница); Возврат (0); КонецЕсли; КонецЕсли; // измерения РегОстатки.Фирма = Фирма; РегОстатки.Склад = Склад; РегОстатки.Номенклатура = ТекНоменклатура; //ресурсы РегОстатки.Количество = ТаблНоменклатуры.Количество; РегОстатки.Размер=ТаблНоменклатуры.Единица.Размер; РегОстатки.ЦенаПрод = Цена; //реквизиты РегОстатки.Внутреннее = ВнутреннееПеремещение; РегОстатки.ДвижениеРасходВыполнить(); КонецЦикла; Возврат (1); КонецФункции // глСписаниеОстатковТМЦ() |
|||
126
Diter
17.12.13
✎
11:04
|
все Вадька. капец тебе ;)
|
|||
127
Андрей_Андреич
naïve
17.12.13
✎
11:05
|
Процедура глОприходованиеПартийТМЦ(Конт,ТаблНоменклатуры,СписокПараметров) Экспорт
СпрПартии = СоздатьОбъект("Справочник.Партии"); РегПартии = Конт.Регистр.ПартииНаличие; Фирма = СписокПараметров.Получить("Фирма"); Склад = СписокПараметров.Получить("Склад"); Поставщик = СписокПараметров.Получить("Контрагент"); ДоговорПоставщика = СписокПараметров.Получить("Договор"); ТекДок = СписокПараметров.Получить("ТекДок"); КодОперации = СписокПараметров.Получить("КодОперации"); УчПолитика = Фирма.ЮрЛицо.МетодРасчетаСебестоимости.Получить(Конт.ДатаДок); МОЛ = Склад.МОЛ; ТаблНоменклатуры.ВыбратьСтроки(); Пока ТаблНоменклатуры.ПолучитьСтроку()=1 Цикл Номенклатура = ТаблНоменклатуры.Номенклатура; Если (Номенклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Услуга) или (Номенклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Работа) Тогда Продолжить; КонецЕсли; //измерения РегПартии.Фирма = Фирма; РегПартии.МОЛ = МОЛ; РегПартии.Номенклатура = Номенклатура; РегПартии.СтатусПартии = глПолучитьСтатусПартииПрихода(ТаблНоменклатуры.ВидТМЦ,Номенклатура,КодОперации, Склад); Если (УчПолитика = Перечисление.МетодыРасчетаСебестоимости.FIFO) или (УчПолитика = Перечисление.МетодыРасчетаСебестоимости.LIFO) или (РегПартии.СтатусПартии = глСП.Т_Принятый) Тогда ЗакупочнаяЦена = ?(ТаблНоменклатуры.Количество=0, 0, Окр(ТаблНоменклатуры.Сумма / ТаблНоменклатуры.Количество,2,1)); РегПартии.Партия = глЗаполнитьПартию(СпрПартии, ТаблНоменклатуры.Партия, Поставщик,ДоговорПоставщика,ТекДок,ЗакупочнаяЦена, ТаблНоменклатуры.Единица.Размер); РегПартии.ДатаПартии = ТекДок.ДатаДок; Иначе РегПартии.Партия = ""; РегПартии.ДатаПартии = ""; КонецЕсли; //ресурсы РегПартии.Количество = ТаблНоменклатуры.Количество; РегПартии.СуммаУпр = ТаблНоменклатуры.СуммаУпр; РегПартии.СуммаРуб = ТаблНоменклатуры.СуммаРуб; РегПартии.СуммаБезНДС = ТаблНоменклатуры.СуммаРуб-ТаблНоменклатуры.СуммаНДС; Если Склад.РозничныйСклад = 1 Тогда РегПартии.ПродСтоимость = ТаблНоменклатуры.ПродСтоимость; КонецЕсли; РегПартии.ЦенаПрод = ТаблНоменклатуры.ЦенаПродПриход; //реквизиты РегПартии.КодОперации = КодОперации; РегПартии.ПривязыватьСтроку(ТаблНоменклатуры.НомерСтрокиДокумента); РегПартии.ДвижениеПриходВыполнить(); КонецЦикла; КонецПроцедуры // глОприходованиеПартийТМЦ() |
|||
128
Андрей_Андреич
naïve
17.12.13
✎
11:06
|
Функция глВыяснитьПартииВозврата(ТаблНоменклатуры, ТекДок)
ТаблПартий=СоздатьОбъект("ТаблицаЗначений"); ТаблПартий.НоваяКолонка("Номенклатура"); ТаблПартий.НоваяКолонка("СтатусПартии"); ТаблПартий.НоваяКолонка("Партия"); ТаблПартий.НоваяКолонка("ДатаПартии"); ТаблПартий.НоваяКолонка("Количество"); ТаблПартий.НоваяКолонка("СуммаУпр"); ТаблПартий.НоваяКолонка("СуммаРуб"); ТаблПартий.НоваяКолонка("СуммаБезНДС"); Свернут = 0; Если ТекДок.ДокОснование.Выбран() = 1 Тогда Если глЕстьРеквизитШапки("ФлагСвертки", ТекДок.ДокОснование.Вид())=1 Тогда Если ТекДок.ДокОснование.ФлагСвертки = 1 Тогда Свернут = 1; КонецЕсли; КонецЕсли; КонецЕсли; Если (ТекДок.ДокОснование.Выбран()=1) и (Свернут=0) Тогда РегПартии = СоздатьОбъект("Регистр.ПартииНаличие"); РегПартии.ВыбратьДвиженияДокумента(ТекДок.ДокОснование); Пока РегПартии.ПолучитьДвижение()=1 Цикл Номенклатура = РегПартии.Номенклатура; ЕстьТакойТМЦ = ТаблНоменклатуры.НайтиЗначение(Номенклатура,,"Номенклатура"); Если (РегПартии.Расход=1) и (ЕстьТакойТМЦ = 1) Тогда ТаблПартий.НоваяСтрока(); ТаблПартий.СтатусПартии = РегПартии.СтатусПартии; ТаблПартий.Номенклатура = Номенклатура; ТаблПартий.Партия = РегПартии.Партия; ТаблПартий.ДатаПартии = РегПартии.ДатаПартии; ТаблПартий.Количество = РегПартии.Количество; ТаблПартий.СуммаУпр = РегПартии.СуммаУпр; ТаблПартий.СуммаРуб = РегПартии.СуммаРуб; ТаблПартий.СуммаБезНДС = РегПартии.СуммаБезНДС; КонецЕсли; КонецЦикла; Иначе // документа основания нет - все параметры должны быть введены в документе КурсДоллара = глКурсДляВалюты(глДоллары, ТекДок.ДатаДок); КурсРубля = глКурсДляВалюты(глРубли, ТекДок.ДатаДок); СпрПартии = СоздатьОбъект("Справочник.Партии"); ТаблНоменклатуры.ВыбратьСтроки(); Пока ТаблНоменклатуры.ПолучитьСтроку()=1 Цикл ТаблПартий.НоваяСтрока(); // Определим статус партии СтатусПартии = ""; Если ТаблНоменклатуры.ВидСтатус = глСП.Т_Принятый Тогда СтатусПартии = ТаблНоменклатуры.ВидСтатус; ИначеЕсли ТаблНоменклатуры.Партия.Выбран() = 1 Тогда // Если указана партия и это был прием на комиссию, то установим соответствующий статус Если ТаблНоменклатуры.Партия.ПриходныйДокумент.Выбран() = 1 Тогда Если ТаблНоменклатуры.Партия.ПриходныйДокумент.Вид() = "ПоступлениеТМЦ" Тогда Если (ТаблНоменклатуры.Партия.ПриходныйДокумент.КодОперации = Перечисление.КодыОпераций.ПриемНаРеализацию) ИЛИ (ТаблНоменклатуры.Партия.ПриходныйДокумент.КодОперации = Перечисление.КодыОпераций.ПриемНаРеализациюРозница) Тогда СтатусПартии = Перечисление.СтатусыПартии.Т_Принятый; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; Если ПустоеЗначение(СтатусПартии) = 1 Тогда СтатусПартии = глПолучитьСтатусПартииПрихода(ТаблНоменклатуры.ВидСтатус, ТаблНоменклатуры.Номенклатура, "", ТекДок.Склад); КонецЕсли; ТаблПартий.СтатусПартии = СтатусПартии; ТаблПартий.Номенклатура = ТаблНоменклатуры.Номенклатура; ТаблПартий.Количество = ТаблНоменклатуры.Количество; ТаблПартий.СуммаБезНДС = ТаблНоменклатуры.Себестоимость; ТаблПартий.СуммаРуб = ТаблНоменклатуры.Себестоимость + ТаблНоменклатуры.СебестоимостьНДС; ТаблПартий.СуммаУпр = глПересчет(ТаблПартий.СуммаРуб,глРубли,КурсРубля,глДоллары,КурсДоллара); // Основания нет, если не выбрана конкретная партия, надо заполнить партию по возврату ПрихДокПартии = ТаблНоменклатуры.Партия.ПриходныйДокумент; Если (ПустоеЗначение(ПрихДокПартии) = 1) или (ПрихДокПартии = ТекДок ) Тогда ЗакупочнаяЦена = ?(ТаблПартий.Количество=0,0,Окр(ТаблПартий.СуммаРуб / ТаблПартий.Количество,2,1)); ЗакупочнаяЦена = глПересчет(ЗакупочнаяЦена, глРубли, КурсРубля, ТекДок.Договор.ВалютаВзаиморасчетов, ТекДок.ДатаДок); ТаблНоменклатуры.Партия = глЗаполнитьПартию(СпрПартии, ТаблНоменклатуры.Партия, ТекДок.Контрагент,ТекДок.Договор,ТекДок,ЗакупочнаяЦена, ТаблНоменклатуры.Единица.Размер); КонецЕсли; ТаблПартий.Партия = ТаблНоменклатуры.Партия; ТаблПартий.ДатаПартии = ТекДок.ДатаДок; КонецЦикла; КонецЕсли; // есть или нет ДокОснование Возврат ТаблПартий; КонецФункции // глВыяснитьПартииВозврата() |
|||
129
Андрей_Андреич
naïve
17.12.13
✎
11:07
|
Процедура глСписаниеПартийТМЦ(Конт,ТаблНоменклатуры,СписокПараметров,ВремПартии,ТаблСписПартий="",ТаблСписПартийКом="") Экспорт
Перем ТаблИтогов; // ТЗ, в которую выгружаем итоги Перем ОстПогКоличество, ОстПогСумма, ОстПогСуммаПродУпр, ОстПогСуммаПродРуб, ОстПогСуммаНДС, ОстПогСуммаНП; ТаблСписПартий=СоздатьОбъект("ТаблицаЗначений"); ТаблСписПартий.НоваяКолонка("Фирма"); ТаблСписПартий.НоваяКолонка("МОЛ"); ТаблСписПартий.НоваяКолонка("Номенклатура"); ТаблСписПартий.НоваяКолонка("СтатусПартии"); ТаблСписПартий.НоваяКолонка("Партия"); ТаблСписПартий.НоваяКолонка("ДатаПартии"); ТаблСписПартий.НоваяКолонка("ЦенаПрод"); ТаблСписПартий.НоваяКолонка("Количество"); ТаблСписПартий.НоваяКолонка("СуммаУпр"); ТаблСписПартий.НоваяКолонка("СуммаРуб"); ТаблСписПартий.НоваяКолонка("СуммаБезНДС"); ТаблСписПартий.НоваяКолонка("СтавкаНДС"); ТаблСписПартий.НоваяКолонка("СтавкаНП"); ТаблСписПартий.НоваяКолонка("СуммаПрод"); ТаблСписПартий.НоваяКолонка("СуммаПродРуб"); ТаблСписПартий.НоваяКолонка("СуммаПродУпр"); ТаблСписПартий.НоваяКолонка("СуммаДокРуб"); ТаблСписПартий.НоваяКолонка("НДСПрод"); ТаблСписПартий.НоваяКолонка("НППрод"); ТаблСписПартий.НоваяКолонка("ДоговорКомитента"); ТаблСписПартий.НоваяКолонка("НомерСтрокиДокумента"); ТаблСписПартий.НоваяКолонка("СкидкаРуб"); ТаблСписПартийКом=СоздатьОбъект("ТаблицаЗначений"); ТаблСписПартийКом.Загрузить(ТаблСписПартий); // копируем структуру РегистрУчета = ВремПартии.Вид(); Если РегистрУчета="ПартииНаличие" Тогда РегПартии = Конт.Регистр.ПартииНаличие; Иначе РегПартии = Конт.Регистр.ПартииОтданные; КонецЕсли; Фирма = СписокПараметров.Получить("Фирма"); Склад = СписокПараметров.Получить("Склад"); Договор = СписокПараметров.Получить("Договор"); КодОперации = СписокПараметров.Получить("КодОперации"); Если РегистрУчета="ПартииНаличие" Тогда МОЛ = Склад.МОЛ; КонецЕсли; МетодРасчетаСебестоимости = Фирма.ЮрЛицо.МетодРасчетаСебестоимости.Получить(Конт.ДатаДок); Если ПустоеЗначение(МетодРасчетаСебестоимости)=1 Тогда глНеПроводить(Конт,"Не определен метод расчета себестоимости для юр. лица """+Фирма.ЮрЛицо.Наименование+""""); Возврат; КонецЕсли; Если МетодРасчетаСебестоимости = Перечисление.МетодыРасчетаСебестоимости.FIFO Тогда ЗнакСортировки="+"; Иначе ЗнакСортировки="-"; КонецЕсли; ТаблНоменклатуры.ВыбратьСтроки(); Пока ТаблНоменклатуры.ПолучитьСтроку()=1 Цикл Номенклатура=ТаблНоменклатуры.Номенклатура; Если (Номенклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Услуга) или (Номенклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Работа) Тогда Продолжить; КонецЕсли; ОстПогКоличество = ТаблНоменклатуры.Количество; ОстПогСуммаПрод = ТаблНоменклатуры.Сумма; ОстПогСуммаПродУпр = ТаблНоменклатуры.СуммаУпр; ОстПогСуммаПродРуб = ТаблНоменклатуры.ПродСтоимость; ОстПогСуммаДокРуб = ТаблНоменклатуры.СуммаРуб; ОстПогСкидкаРуб = ТаблНоменклатуры.СкидкаРуб; ОстПогНДСПрод = ТаблНоменклатуры.СуммаНДС; ОстПогНППрод = ТаблНоменклатуры.СуммаНП; ВремПартии.УстановитьЗначениеФильтра("Номенклатура",Номенклатура,1); Если ТаблНоменклатуры.Партия.Выбран()=1 Тогда // выбрана конкретная партия ВремПартии.УстановитьЗначениеФильтра("Партия",ТаблНоменклатуры.Партия,1); Иначе // снимем фильтр по партии ВремПартии.УстановитьЗначениеФильтра("Партия",,0); КонецЕсли; Если РегистрУчета = "ПартииНаличие" Тогда Цена = ТаблНоменклатуры.ЦенаПрод; ВремПартии.УстановитьЗначениеФильтра("ЦенаПрод", Цена); КонецЕсли; ВремПартии.ВыгрузитьИтоги(ТаблИтогов,1,1); ТаблИтогов.НоваяКолонка("ДокПартии", "Документ"); ТаблИтогов.ВыбратьСтроки(); Пока ТаблИтогов.ПолучитьСтроку() = 1 Цикл ТаблИтогов.ДокПартии = ТаблИтогов.Партия.ПриходныйДокумент; КонецЦикла; // Подготовим таблицу итогов взависимости от настройки контроля остатков ПодготовитьТаблИтогов(ТаблИтогов, Фирма); Если РегистрУчета="ПартииНаличие" Тогда ТаблИтогов.Сортировать("-Фирма,"+ЗнакСортировки+"ДатаПартии,"+ЗнакСортировки+"ДокПартии",1); КонецЕсли; ТаблИтогов.ВыбратьСтроки(); Пока (ТаблИтогов.ПолучитьСтроку()=1) и (ОстПогКоличество>0) Цикл Если ТаблИтогов.Партия.Размер<>ТаблНоменклатуры.Единица.Размер Тогда Продолжить; КонецЕсли; Если ТаблИтогов.Количество<=0 Тогда Продолжить; КонецЕсли; Если КодОперации = глКО.ВозвратКомитенту Тогда // возвращаем товары комитенту - только его товары! Если ТаблИтогов.Партия.ДоговорПоставщика<>Договор Тогда Продолжить; КонецЕсли; КонецЕсли; Если ТаблИтогов.Количество>=ОстПогКоличество Тогда // остаток партии больше, чем нам надо списать КоэффСписания=ОстПогКоличество/ТаблИтогов.Количество; Иначе КоэффСписания=1; КонецЕсли; //измерения РегПартии.Фирма = Фирма; РегПартии.Номенклатура = ТаблИтогов.Номенклатура; РегПартии.СтатусПартии = ТаблИтогов.СтатусПартии; РегПартии.Партия = ТаблИтогов.Партия; Если РегистрУчета="ПартииНаличие" Тогда РегПартии.ДатаПартии = ТаблИтогов.ДатаПартии; РегПартии.МОЛ = ТаблИтогов.МОЛ; РегПартии.ЦенаПрод = ТаблИтогов.ЦенаПрод; Иначе РегПартии.Договор = ТаблИтогов.Договор; РегПартии.ДокументПередачи = ТаблИтогов.ДокументПередачи; КонецЕсли; //ресурсы РегПартии.Количество = Окр(ТаблИтогов.Количество *КоэффСписания,5,1); РегПартии.СуммаУпр = Окр(ТаблИтогов.СуммаУпр *КоэффСписания,2,1); РегПартии.СуммаРуб = Окр(ТаблИтогов.СуммаРуб *КоэффСписания,2,1); РегПартии.СуммаБезНДС = Окр(ТаблИтогов.СуммаБезНДС*КоэффСписания,2,1); Если РегистрУчета="ПартииОтданные" Тогда РегПартии.ПродСтоимость = Окр(ТаблИтогов.ПродСтоимость*КоэффСписания,2,1); КонецЕсли; //реквизиты РегПартии.КодОперации = КодОперации; КоэффПогашения = РегПартии.Количество/ОстПогКоличество; // корректировка остатка продажной стоимости к списанию ОстПогКоличество=ОстПогКоличество-РегПартии.Количество; СписСуммаПрод = Окр(ОстПогСуммаПрод *КоэффПогашения,2,1); СписСуммаПродУпр= Окр(ОстПогСуммаПродУпр*КоэффПогашения,2,1); СписСуммаПродРуб= Окр(ОстПогСуммаПродРуб*КоэффПогашения,2,1); СписСуммаДокРуб = Окр(ОстПогСуммаДокРуб *КоэффПогашения,2,1); СписСкидкаРуб = Окр(ОстПогСкидкаРуб *КоэффПогашения,2,1); СписНДСПрод = Окр(ОстПогНДСПрод *КоэффПогашения,2,1); СписНППрод = Окр(ОстПогНППрод *КоэффПогашения,2,1); ОстПогСуммаПрод = ОстПогСуммаПрод - СписСуммаПрод; ОстПогСуммаПродУпр = ОстПогСуммаПродУпр- СписСуммаПродУпр; ОстПогСуммаПродРуб = ОстПогСуммаПродРуб- СписСуммаПродРуб; ОстПогСуммаДокРуб = ОстПогСуммаДокРуб - СписСуммаДокРуб; ОстПогСкидкаРуб = ОстПогСкидкаРуб - СписСкидкаРуб; ОстПогНДСПрод = ОстПогНДСПрод - СписНДСПрод; ОстПогНППрод = ОстПогНППрод - СписНППрод; СтавкаНДС = ТаблНоменклатуры.СтавкаНДС; СтавкаНП = ТаблНоменклатуры.СтавкаНП; Если РегистрУчета = "ПартииНаличие" Тогда РегПартии.ПродСтоимость = СписСуммаПродРуб; КонецЕсли; Если (КодОперации <> глКО.Перемещение) и (КодОперации <> глКО.ПередачаВРозницу) и (КодОперации <> глКО.ВозвратИзРозницы) и (КодОперации <> глКО.ВозвратПоставщикуИзРозницы) Тогда РегПартии.Выручка = Окр(СписСуммаПродРуб - СписНДСПрод - СписНППрод, 2, 1); ИначеЕсли КодОперации = глКО.ВозвратПоставщикуИзРозницы Тогда РегПартии.Выручка = Окр(СписСуммаДокРуб - СписНДСПрод - СписНППрод, 2, 1); Иначе РегПартии.Выручка = 0; КонецЕсли; ЗапомнитьСписаннуюПартию(РегПартии,ТаблСписПартий,СписСуммаПрод,СписСуммаПродУпр,СписСуммаПродРуб,СписНДСПрод,СписНППрод,СтавкаНДС,СтавкаНП, ТаблНоменклатуры.НомерСтрокиДокумента, СписСкидкаРуб, СписСуммаДокРуб); Если РегПартии.СтатусПартии=глСП.Т_Принятый Тогда ЗапомнитьСписаннуюПартию(РегПартии,ТаблСписПартийКом,СписСуммаПрод,СписСуммаПродУпр,СписСуммаПродРуб,СписНДСПрод,СписНППрод,СтавкаНДС,СтавкаНП, ТаблНоменклатуры.НомерСтрокиДокумента, СписСкидкаРуб, СписСуммаДокРуб); КонецЕсли; РегПартии.ПривязыватьСтроку(ТаблНоменклатуры.НомерСтрокиДокумента); РегПартии.ДвижениеРасходВыполнить(); КонецЦикла; // по строкам ТаблИтогов Если ОстПогКоличество>0 Тогда // значит мы расходуем Номенклатуру // а Партии, которые надо погашать исчерпаны, // значит надо выдать сообщение об этом инциденте // и записать текущий документ как Партию с отриц. знаком Если ПустоеЗначение(ТаблНоменклатуры.Партия)=1 Тогда глСообщениеПроведения ("При проведении партий ТМЦ по "+Конт.ТекущийДокумент()+" от "+Конт.ДатаДок+" по ТМЦ " +СокрЛП(Номенклатура)+" не распределилось по партиям "+ОстПогКоличество+" "+Номенклатура.БазоваяЕдиница, Конт.ТекущийДокумент(),,,1); Иначе глСообщениеПроведения("По указанной к списанию партии ТМЦ """ + ТаблНоменклатуры.Партия.ПриходныйДокумент + """ по ТМЦ " +СокрЛП(Номенклатура) + ?(ПустоеЗначение(ТаблНоменклатуры.Партия.Свойство) = 1,"", ", (" + СокрЛП(ТаблНоменклатуры.Партия.Свойство.Владелец) + ": " + СокрЛП(ТаблНоменклатуры.Партия.Свойство) +")" ) + " не распределилось "+ОстПогКоличество+" "+Номенклатура.БазоваяЕдиница, Конт.ТекущийДокумент(),,,1); КонецЕсли; //измерения РегПартии.Фирма = Фирма; РегПартии.Номенклатура = Номенклатура; РегПартии.СтатусПартии = глПолучитьСтатусПартииПрихода(Перечисление.ВидыТМЦ.Товар,Номенклатура,КодОперации, Склад); РегПартии.Партия = ПолучитьПустоеЗначение("Справочник.Партии"); Если РегистрУчета="ПартииНаличие" Тогда РегПартии.ДатаПартии = ""; РегПартии.МОЛ = МОЛ; РегПартии.ЦенаПрод = ТаблНоменклатуры.ЦенаПрод; РегПартии.ПродСтоимость = ОстПогСуммаПродРуб; Если (КодОперации <> глКО.Перемещение) и (КодОперации <> глКО.ПередачаВРозницу) и (КодОперации <> глКО.ВозвратИзРозницы) и (КодОперации <> глКО.ВозвратПоставщикуИзРозницы) Тогда РегПартии.Выручка = Окр(ОстПогСуммаПродРуб - ОстПогНДСПрод - ОстПогНППрод, 2, 1); ИначеЕсли КодОперации = глКО.ВозвратПоставщикуИзРозницы Тогда РегПартии.Выручка = Окр(ОстПогСуммаДокРуб - ОстПогНДСПрод - ОстПогНППрод, 2, 1); Иначе РегПартии.Выручка = 0; КонецЕсли; Иначе РегПартии.Выручка = Окр(ОстПогСуммаПродРуб - ОстПогНДСПрод - ОстПогНППрод, 2, 1); РегПартии.Договор = Договор; РегПартии.ДокументПередачи = ""; КонецЕсли; //ресурсы РегПартии.Количество = ОстПогКоличество; РегПартии.СуммаУпр = 0; РегПартии.СуммаРуб = 0; РегПартии.СуммаБезНДС = 0; Если РегистрУчета="ПартииОтданные" Тогда РегПартии.ПродСтоимость = ОстПогСуммаПрод; КонецЕсли; //реквизиты РегПартии.КодОперации = КодОперации; СтавкаНДС = ТаблНоменклатуры.СтавкаНДС; СтавкаНП = ТаблНоменклатуры.СтавкаНП; ЗапомнитьСписаннуюПартию (РегПартии,ТаблСписПартий,ОстПогСуммаПрод,ОстПогСуммаПродУпр,ОстПогСуммаПродРуб,ОстПогНДСПрод,ОстПогНППрод,СтавкаНДС,СтавкаНП, ТаблНоменклатуры.НомерСтрокиДокумента, ОстПогСкидкаРуб, ОстПогСуммаДокРуб); Если РегПартии.СтатусПартии=глСП.Т_Принятый Тогда ЗапомнитьСписаннуюПартию(РегПартии,ТаблСписПартийКом,ОстПогСуммаПрод,ОстПогСуммаПродУпр,ОстПогСуммаПродРуб,ОстПогНДСПрод,ОстПогНППрод,СтавкаНДС,СтавкаНП, ТаблНоменклатуры.НомерСтрокиДокумента, ОстПогСкидкаРуб, ОстПогСуммаДокРуб); КонецЕсли; // все, погасили всю строку документа ОстПогКоличество= 0; ОстПогСуммаПрод = 0; ОстПогСуммаПродУпр = 0; ОстПогСуммаПродРуб = 0; ОстПогСкидкаРуб = 0; ОстПогНДСПрод = 0; ОстПогНППрод = 0; РегПартии.ПривязыватьСтроку(ТаблНоменклатуры.НомерСтрокиДокумента); РегПартии.ДвижениеРасходВыполнить(); КонецЕсли; КонецЦикла; // по строкам ТаблНоменклатуры КонецПроцедуры // глСписаниеПартийТМЦ() |
|||
130
Андрей_Андреич
naïve
17.12.13
✎
11:08
|
Процедура глДвижениеОборотовПродаж(Конт,
Фирма, Контрагент, Поставщик, Номенклатура, Количество, Себестоимость, ПродСтоимость ,Размер="") Экспорт РегПродажи = Конт.Регистр.Продажи; // измерения РегПродажи.Фирма = Фирма; РегПродажи.Поставщик = Поставщик; РегПродажи.Покупатель = Контрагент; РегПродажи.Номенклатура = Номенклатура; РегПродажи.Размер = Размер; // ресурсы Если Количество >= 0 Тогда РегПродажи.Себестоимость = Себестоимость; РегПродажи.ПродСтоимость = ПродСтоимость; РегПродажи.Количество = Количество; Иначе РегПродажи.СебестоимостьВ = - Себестоимость; РегПродажи.ПродСтоимостьВ = - ПродСтоимость; РегПродажи.КоличествоВ = - Количество; КонецЕсли; РегПродажи.ДвижениеВыполнить(); КонецПроцедуры //глДвижениеОборотовПродаж() |
|||
131
Андрей_Андреич
naïve
17.12.13
✎
11:11
|
Я извиняюсь за подобный спам - вроде все места кроме отчетов выложил где размер встречается. Дальше поиск по слову и понятно что и где.
Кстати, ничего не мешает вместо размера завести справочник "характеристика" с реквизитами размер, цвет и т.д. и остается только в отчетах вставить группировки по этим реквизитам. Это если не только по размерам вести. |
|||
132
Diter
17.12.13
✎
11:13
|
(131) читай первую страницу обсуждения там расписано почему это неудобно
|
|||
133
КонецЦикла
17.12.13
✎
11:13
|
(131) Спасипки, возможно пригодится
|
|||
134
Андрей_Андреич
naïve
17.12.13
✎
11:17
|
(132) Ну а я написал, почему мне так было удобно. Если размер/цвет/характеристику запхать в ед.изм. - ни одну форму документа и печ.форму переписывать не надо. Это удобная фишка. А так на вкус и цвет.
|
|||
135
Diter
17.12.13
✎
11:19
|
(134) вроде удобно. но вот вопрос у клиента - есть ли на остатке платья размера 40 (например). какие модели и какие цвета? как строить отчет?
|
|||
136
Андрей_Андреич
naïve
17.12.13
✎
11:22
|
(135) Отчеты переделал - там группировка размер и отбор по размеру есть. Всего-то отчеты по остаткам, продажам и партиям. Это как раз всего полдня работы.
|
|||
137
Diter
17.12.13
✎
11:25
|
(136) вариант имеет право на жизнь. по сути тот же подчиненный справочник. только у тебя допиливается штатный а у меня отдельный.
|
|||
138
Андрей_Андреич
naïve
17.12.13
✎
11:30
|
(137) Твой правильнее и универсальнее, а мой проще в реализации. А КЦ уже пусть решает.
|
|||
139
beholder
17.12.13
✎
11:41
|
(0) Просто добавь реквизит АртикулБух и по нему синхронизируй с 1С:Бухгалтерией. А в справочнике кажлый размер отдельно учитывай.
|
|||
140
Diter
17.12.13
✎
11:43
|
(139) такое решение "в лоб" не подходит в виду необходимости получать отчеты с группировками по размерам и видам ткани.
|
|||
141
Андрей_Андреич
naïve
17.12.13
✎
11:49
|
(140) А у ТС учет по видам ткани требуется? Я понял, что только размер.
|
|||
142
Diter
17.12.13
✎
11:52
|
(141) тут такое дело. заказчик считает учет по видам материала "само собой разумеющимся" сталкивался не раз и не два с подобной ситуацией. поэтому привык просчитывать все варианты с самым большим возможным количеством "разворотов" учета. не понадобится - проще. понадобится - переделывать не надо будет.
|
|||
143
Diter
17.12.13
✎
11:55
|
именно поэтому я в конфе что отправил КЦ ещё ввел разворот по ценам продажным предполагая что в принципе возможно чтобы разные размеры стоили по разному. в реале может и не так у конкретного клиента, но в принципе это возможно - значит я это лучше заложу сейчас чем потом переделывать все. тут разные принципы работы программистов наверное. мне просто не интересно долго работать с клиентом "допиливая" его хотелки по мелочам (есть исключения но там объем таких вот хотелок гораздо меньше чем реально интересная работа). Я считаю что в идеале должно быть так - получил задачу, реализовал, получил бабки, попрощался с клиентом. И заказчику комфортнее потом тебе бабло за крупную переделку заплатить чем каждый раз дёргать тебя как ему кажется по мелочам и платить тебе опять же по мелочам (по его мнению)
|
|||
144
Андрей_Андреич
naïve
17.12.13
✎
12:10
|
(143) Да я не спорю, просто в моем случае постановка была известна на 100% и 2 года без изменений отпахала.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |