Как обычно ведется учет в торговом предприятии?
В первые несколько лет - все гонятся за прибылью: побольше закупить, побыстрее продать, никого пока не интересуют зависающие остатки товаров в магазинах и на складах. Объем базы растет как на дрожжах, т.к. пока порядок оприходуемого товара хаотичный.
Например, вчера купили красный стул, сегодня зеленый стул, поначалу так и вбивают в базу данные: 1) старая позиция - красный стул;2) новая позиция - зеленый стул. Но после инвентаризации - всегда появляется пересорт товара, и здесь приходят к варианту - создать новую позицию, без конкретного описания в названии товара его спец.свойств, т.е. заводят товар так, например, просто "Стул", а две предыдущие позиции товара - помечают на удаление.
Через некоторое время - свободных оборотных средств становится лимитное количество. Здесь возникает вопрос: а какие именно товары имели больший спрос, чтобы вкладывать средства в них, а не в зависающий товар.
То есть вновь требуется знать дополнительные характеристики товара, но вводить эти характеристики в базу нужно уже не в хаотичном порядке, - просто в названии товара добавив какие-нибудь описания, а четко и правильно:название должно быть коротким, лаконичным, и в дополнительном поле - описаны всевозможные характеристики данного товара: например, его цвет, объем, вес, производителя и многое другое.
Тут если мы запишем свойства товара в справочнике Номенклатуры в поле "Комментарии", то Аналитику будет не просто сделать нужный ему отчет по популярности и оборачиваемости конкретно данного товара с конкретно данными свойствами товара.
Мы можем прикрепить к справочнику Номенклатура - подчиненный справочник, в который пользователь может вводить необходимые свойства и описания товара, но в таком подходе - мы столкнемся с проблемой невозможности угадать какого именно типа пользователь захочет ввести доп.информацию.
Н-р, под товаром "Стул" - пользователь желает указать свойство товара - цвет, это строковое значение данных. Значит в подчиненном справочнике - мы реквизит сделаем строковым. А если он желает указать доп.свойство товара, например, производителя? Тогда мы должны реквизит в подчиненном справочнике сделать ссылочного типа, указывая на др.справочник "Производители". А если пользователь в доп.свойствах к своему товару желает указать сколько ножек у стула? Мы в подчиненном справочнике должны реквизит сделать числовым.....
Отсюда, когда нам нужно дать возможность пользователю самому создавать ТИП данных, в значения которых он будет вносить свою информацию, то нам нужно создавать ПВХ (план видов характеристик).
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Мы создадим в нашем примере сложный ПВХ, чтобы был полноценный механизм описания дополнительных свойств товара.
Но для начала рассмотрим урок по созданию ПВХ из книги (стр.476) "1С_ Предприятие 8.3. Практическое пособие разработчика. Примеры и типовые приемы" Радченко/Хрусталева http://v8.1c.ru/metod/books/book.jsp?id=441
Здесь у нас уже есть справочник Номенклатура. Цель задачи: иметь возможность знать остатки материалов, обладающих некоторым значением характеристики. Для этого создадим в Конфигураторе новые объекты:1) регистр Сведений "ЗначенияСвойствНоменклатуры";2) ПВХ "СвойстваНоменклатуры";3) подчиненный Номенклатуре справочник "ВариантыНоменклатуры", чтобы описывать партии материалов;4) подчиненный ПВХ справочник "ДополнительныеСвойстваНоменклатуры", чтобы задавать значения видов характеристик,для которых нет подходящих типов в конфигурации.
В результате нам достаточно будет выбирать из регистра сведений все элементы подчиненного справочника с этим значением характеристики и затем по ним и их владельцам - получить остатки регистра накоплений.
В создаваемом нами ПВХ в поле "Тип значения характеристик" - укажем составной тип данных: Число,Строка,Дата,Булево,СправочникСсылка.ДополнительныеСвойстваНоменклатуры. А так же в поле ПВХ "Дополнительные значения характеристик" - указываем подчиненный ПВХ справочник "ДополнительныеСвойстваНоменклатуры".
Далее, при создании регистра сведений "ЗначенияСвойствНоменклатуры": указываем регистру два измерения:
1) НаборыСвойств, тип = СправочникСсылка.ВариантыНоменклатуры;
2) ВидСвойства, тип = ПланВидовХарактеристикСсылка.СвойстваНоменклатуры
И создаем ресурс регистра сведений:
Значение, тип = Характеристика.СвойстваНоменклатуры.
Все новые объекты мы создали. Добавлять их в подсистемы (в интерфейс пользователя) не нужно, так как между новыми объектами есть связь, и главное - это подчиненный Номенклатуре справочник "ВариантыНоменклатуры", который мы можем увидеть, открыв любой товар из справочника Номенклатура:
Существует несколько ньюансов при настройки регистра сведений "ЗначенияСвойствНоменклатуры", здесь желательно установить измерение регистра НаборСвойств (сюда попадает выборка из спр.ВариантыНоменклатуры) - как Ведущее, это даст нам возможность из спр."ВариантыНоменклатуры" - вызывать данный регистр Сведений. А так же для ресурса регистра Значение - установить "Связь по типу" = ВидСвойства и "Связи параметров выбора" = Отбор.Владелец(ВидСвойства).Данные настройки регистра сведений - упростят ввод пользователем данных.
Кроме того, в книге в данном уроке идет подробное описание - как лучше всего настроить формы списка и основные формы новых объектов, чтобы пользователь видел при заполнении свойств товаров - только необходимую ему информацию. Здесь мы не будем показывать всю эту деталировку.
Просто попробуем в нашем товаре, н-р, "Кабели электрические" - задать дополнительное свойство "Белые кабели", а состав свойства: "тип свойства"=Цвет и "значение свойства" = Белый. Вот по такой схеме открывающихся друг за другом окон:
....я не знаю как у вас, но у меня уже закружилась голова и уже не совсем понятно - что мы делаем и зачем))))
А представьте - объяснить такую цепочку пользователю?!?.....Чтобы наш пользователь смог понять того, чего мы уже сами не понимаем - у него должно быть минимум три сертификата по 1С)))
Если вас пугает и расстраивает введение свойств товара по выше описанной схеме, то можно посмотреть эту же схему из самого учебника:
....это просто нереально сложно!!! И любой начинающий программист решит, что проще никогда не связываться с ПВХ, чем пытаться в подобной схеме разобраться.....
Чтобы получить итоговый результат задачи - остатки товаров по его свойствам, в книге предлагается в регистр Остатков добавить измерение "НаборСвойств" с сылочным типом на подчиненный Номенклатуре справочник "ВариантыНоменклатуры". Далее в документы прихода/расхода материалов добавить в табличные части поле с таким же названием и типом данных, дописать модулях этих документах проведение по регистру остатков "НаборСвойств". На самом справочнике "ВариантыНоменклатуры" - прописать в его меню Характеристики, что позволит их видеть потом в СКД отчете. И, как окончание, создать сам СКД-отчет по Остаткам Товара с отбором по Характеристикам:
Да, отчет получается интересный, но сам процесс создания дополнительных Характеристик (свойств) товара - очень запутанный, кроме того, пользователь при вводе стольких дополнительных данных при заполнении приходных/расходных накладных - создаст ни одну ошибку.....Начиная с ввода "НабораСвойств" в полях документа....
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Давайте попробуем разобраться в самом механизме создания доп.Свойств Товару, возможно у нас получится прийти к решению задачи более простым путем.
Итак, что нам нужно:
1. Дать возможность пользователю к Номенклатуре добавлять описание Свойств.
2. Дать возможность Аналитику исследовать показатели продаж в отборе по Свойствам Товара.
Рассмотрим какие у нас есть варианты при решении первого пункта задачи:
1. Мы можем добавить к справочнику Номенклатура подчиненный справочник, в который пользователь будет описывать только конкретными, заданные нами в Конфигураторе, данные строчного типа....это не подходит, так как при описании Свойств товара может понадобиться "непредсказуемый" нами в Конфигураторе Тип данных: например дата, число, строка, ссылка на др.справочник.
2. Поэтому для создания доп.Свойств Номенклатуры - мы должны создать ПВХ, так как ПВХ - это справочник + Описание Типов данных.
Если мы в справочнике Номенклатура - создадим табличную часть, в которой будет два поля - Тип данных вводимого Свойства товара и,непосредственно, само значение. Это очень просто - одно поле у нас будет ссылаться на ПВХ, др.на Характеристику этого ПВХ.
Но в этом случае, у нас не получится сделать записи уникальными....Только представьте себе вариант, где под товаром,например, Сосиски - можно ввести два вида значения Свойства "Цвет": и красные и зеленые)))
Поэтому этот метод самый простой, но не дает уникальности в свойствах Номенклатуры.
3. Создадим ПВХ, но его значения будем набирать через регистр Сведений. Регистр Сведений - содержит только уникальные данные.
Это самый универсальный вариант. У нас будут записываться Свойства товара с разными типами данных, причем значения этих свойств для конкретного товара будет уникальным.
п.с. здесь можно создать подчиненный ПВХ справочник, чтобы в него записывать все строковые Свойства номенклатуры. Но пока не будем усложнять.
Далее создаем РегистрСведений, который будет непосредственно хранить уникальные значения Свойств Товара.
Для этого в регистре сведений добавляем два измерения:
1) Номенклатура, тип = СправочникСсылка.Номенклатура. Обязательно ставим галочку "Ведущее", благодаря этой галочки - мы будем видеть данный регистр из справочника Номенклатура!
2) СвойстваНоменклатуры, тип = ПланВидовХарактеристикСсылка.УниверсальныйПВХ.
В ресурсах регистра указываем "ЗначениеСвойства", тип = Характеристика.УниверсальныйПВХ:
Пока на данном этапе все, мы создали механизм уникальных свойств товара. Нам еще нужно настроить удобство выбора данных для пользователя.
Выделим ресурс "ЗначениеСвойства" регистра сведений и в меню справа на вкладке "Представления" - создадим связи, чтобы при выборе значения данного регистра в пользовательском режиме - нам выпадал сразу список из измерения данного регистра "СвойствоНоменклатуры". Т.к. помним, что измерение "СвойствоНоменклатуры"-это ПВХ, а ресурс "ЗначениеСвойства" - это и есть Характеристика данного ПВХ. Итак, на этой владке указываем "Связь по Типу" = "СвойствоНоменклатуры". Теперь, если мы в измерении регистра выбрали Тип данных,н-р, строка, то когда будем вводить значение в ресурс - у нас сразу будет стоить тип строка, а не все возможные перечни типов!
Переходим в пользовательский режим, выберем любой товар из справочника Номенклатура, откроем его, на верхней части элемента справочника у нас появилась ссылка на созданный регистр сведений, в который и будем добавлять новые свойства нашего товара:
В данном примере Товару "Транзистор Philips 2N2369" - создаем сначала Вид желаемого свойства товара, пусть это будет "Транзисторы", и сразу указываем тип данных для этого свойства - в данном примере мы выбираем вручную тип данных = Строка. Сохраняем. И далее нам нужно задать значения этому виду свойств товара, пусть это будет "Слаботочечные транзисторы":
Добавим еще одно Свойство этому товару, например, производитель "Корея".
Возьмем другой товар, создадим ему свойство "Трансформаторы", тип = строка, значение = "Строчные трансформаторы". А второе свойство, которое мы желаем ввести этому товару будет тоже "Производитель" - его создавать не нужно, оно уже есть у нас в выборке, но вот если мы попробуем ввести то же самое значение этого свойства, равного "Корея", то нам придется набирать его вручную....Это не очень удобно...Хорошо, когда один раз введенное значение - можно подставлять множество раз.
Чтобы добавить данное удобство, перейдем в Конфигуратор и создадим справочник, на вкладке "Владелец" укажем созданный ранее наш "УниверсальныйПВХ". Теперь, если у нас свойства значений будут строковыми, то нам не обязательно постоянно выбирать тип = Строка, достаточно будет дать ссылку на этот подчиненный справочник: в него очень удобно сохранять строковые значения, а кроме того - такой способ позволит нам выбирать уже готовые строковые значения для Свойств товара.
Произведем небольшие настройки ПВХ в связи с появившемся подчиненным ему справочником:
Также и в регистре сведений нам нужно добавить настройки, чтобы при выборе значения ресурса регистра - у нас сразу же появлялась выборка по Владельцу данного свойства.
С первым пунктом поставленной задачи мы справились - механизм создания уникальных свойств товару создали.
Заполним различные свойства номенклатуры в пользовательском режиме 1с. Обратим внимание, что уже введенные ранее свойства, такие как,н-р, Производитель, уже сразу есть в варианте выборке свойств, а так же нам дается сразу выбрать готовое значение этого свойства,н-р, "Корея".
Теперь перейдем ко второму этапу решения поставленной задачи: дать возможность в отчете делать отбор,н-р, по остаткам товара или по продажам товара от Свойств этого товара.
Сразу скажу, что мы не будем придумывать сложный механизм, добавляя в поля табличных частей документов какие-нибудь свойства товара!!! На практике так нельзя делать, иначе будет такая неразбириха с документами, что потом никаких сил не хватит это исправить....
Все гораздо проще. У нас есть товар, название его краткое, лаконичное, в свойствах его описаны все ньюансы. Если у нас появился товар с другими видами свойств - то это значит, что этот товар другой, а не тот же самый!
Н-р, у нас есть один товар "Строчный трансформатор Samsung", у которого два свойства:1) "Трансформаторы" = "Строчные трансформаторы";2) "Производитель" = "Корея", и другой товар "Строчный трансформатор Россия", у которого два свойства:1) "Трансформаторы" = "Строчные трансформаторы";2) "Производитель" = "Россия". Так вот мы никак не можем сказать, что эти два товара одинаковые, а отличаются только свойствами!!! Нет, эти два товара разные, чем мы коротко указываем различие их в Названии, и более подробно - описываем в свойствах данного товара.
Отсюда, нам не нужно создавать какое-то дополнительное поле в первичных документах, чтобы в нем прописывать одну из характеристик товара (у нас этих характеристик может быть более одной!).
Перепроведем вновь все наши приходные накладные и док.ОказаниеУслуг. (здесь в документах от первого метода из книги - есть поля с доп.характеристиками, но они ни как не влияют на наш только что созданный собственный механизм ПВХ)
В Конфигураторе создадим Отчет по регистру "УникальностьУниверсальногоПВХ". Запишем в запрос СКД-отчета следующий код:
ВЫБРАТЬ
ОстаткиМатериаловОстаткиИОбороты.Материал,
ОстаткиМатериаловОстаткиИОбороты.КоличествоНачальныйОстаток КАК НачальныйОстаток,
ОстаткиМатериаловОстаткиИОбороты.КоличествоПриход КАК Приход,
ОстаткиМатериаловОстаткиИОбороты.КоличествоРасход КАК Расход,
ОстаткиМатериаловОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонечныйОстаток,
УникальностьУниверсальногоПВХ.СвойствоНоменклатуры,
УникальностьУниверсальногоПВХ.ЗначениеСвойства
ИЗ
РегистрНакопления.ОстаткиМатериалов.ОстаткиИОбороты КАК ОстаткиМатериаловОстаткиИОбороты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УникальностьУниверсальногоПВХ КАК УникальностьУниверсальногоПВХ
ПО ОстаткиМатериаловОстаткиИОбороты.Материал = УникальностьУниверсальногоПВХ.Номенклатура
В настройках СКД-отчета разрешим использовать в пользовательском режиме "Отбор". При формировании отчета в 1с-Предприятии - в отборе выбирем СвойствоНоменклатуры=Производитель. У нас получится очень интересный отчет:
Заменив регистр остатков на регистр Продаж - создадим второй отчет Продажи с возможностью отбора по свойствам товаров.
Мы выполнили и даже перевыполнили второй пункт задачи - дать возможность Аналитику создавать отчеты в разрезе Свойств товара.
В нашем варианте - механизм ПВХ получился простой, наглядный и быстронастраиваемый.
п.с. при создании данной статьи мне очень помогла информация, прочитанная вот отсюда:
http://1clancer.ru/article/osobennost_ispolzovaniya_mekhanizma_kharakteristik_v_skd_821
http://www.1s-portal.ru/index.php/stati/configuration/16-common-objects/80-pvh-v-1c.html
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Надеюсь, что моя статья пригодится начинающим программистам на платформе 1с 8.3
п.с. в загрузку прилагаю учебную базу, в которой созданы были все текущие примеры. Эту базу я начала писать с нуля по урокам книги "1С_ Предприятие 8.3. Практическое пособие разработчика. Примеры и типовые приемы" Радченко/Хрусталева http://v8.1c.ru/metod/books/book.jsp?id=441, просто дополняя ее еще и свои наработки.
Успехов в освоении ПВХ, в случае с решением этой непростой задачки - очень подходит лозунг ниже)):