Приветствую Вас, Гость · RSS Воскресенье, 13.07.2025, 00:27








Главная » 2013 » Июль » 26 » Номенклатура – это святое!!! (Опять 1С)
00:10
 

Номенклатура – это святое!!! (Опять 1С)

Cs-Cs.Net), а не копию этой статьи где-то в другом месте! Дополнительно вы можете прочитать следующие вещи: Правила оформления заказов, Условия использования материалов с блога, и не забыть обратиться в раздел Контакты для связи со мной. Уважайте чужой труд, остерегайтесь подделок! Читайте только оригинальный блог!

УРА! Данный пост написан всем в помощь, и я буду не против, если его кто-то решит опубликовать у себя (не забудьте уведомить меня об этом!).

Форма справочника номенклатуры из 1СПродолжая 1Совскую тему, недавно поднятую на блоге, попробую поматериться на тему Номенклатуры. Поматериться потому что во многих конторах отношение к этой, в общем-то основополагающей части любой базы данных совершенно наплевательское.

Применительно к 1С Номенклатура – это одноимённый справочник конфигурации, который чаще всего хранит список (номенклатуру) товаров или услуг, с которыми работает предприятие. Ну а для “внешних” людей – это банально прайс-лист этого предприятия. Я даже не знаю как объяснить, потому что для меня аккуратное обращение с данными – это аксиома, что вот этот самый спиок товаров должен иметь понятный простому человеку и аккуратный вид.

Основная проблема, которую я встречал чаще всего – это отсутствие единого стиля наименования позиций, даже находящихся в одной и той же группе. Ну например тот же ПРЕСТИЖ страдает чем-то вроде следующего. Есть группа “Автоматы\ABB\S201. И дальше там валяются вперемешку такие позиции как: “Авт.выкл.однопол C16, “Автомат.выкл три полюса С 32, а другой номинал уже без пробела после буквы “С”: “С25. База пытается сортировать это по алфавиту и вместо интуитивно понятного [новым менеджерам] листания по возрастанию количества полюсов и номинала начинается каша. Вроде бы после 25А должно идти 32, а “С 32 стоит с пробелом и база сортирует как “С” 32, “С10, “С16…

Следующая проблема вытекает из первой – так как товар часто невозможно найти по его наименованию (потому что хрен знает как его обозвали), то народ создаёт этот товар ещё раз под другим названием. А ещё бывает как на моей фабрике – не найдут нужный полуфабрикат в группе, и создают его вообще в другой группе. Но с тем же именем. И тогда базу плющит: это ж для неё два разных товара (и плевать что они называются одинаково) – вот одного на складе 10 000 штук, а другого – 100. И что куда расходовать - непонятно. А если это движение было сделано двумя годами назад – то это пиздец. Надо поднимать все бумаги, откатыватрь базу и разбираться.

Поэтому, вообще-то, наименование номенклатуры (и её артикул) должны соответствовать определёнными правилам. Ну например сначала пишем Тип сущности (“Что это?”), потом идёт уточнение типа (“Для чего?”, “Что делает?”) далее основная характеристика (“Сколько?”, “Какое?”) и потом дополнительные уточнения, если они нужны. Ну, например, пример обозначения того же автомата может выглядеть так: “ABB S201 Автоматический выключатель 1-полюсный C16А 6kA”. И так далее.

Моя же база номенклатуры изначально разрабатывалась как универсальный каталог, в котором можно быстро найти сведения о товаре. Я-то ни чем не торгую, максимум – составляю списки на покупку материалов и веду их учёт по складам. Началось это с создания простой формы справочника, а кончилось довольно мощной (и тормозной) штукой. Щас покажу!

У моей номенклатуры можно задать обычные основные свойства типа 1С-овского наименования, производителя и всяких трих-кодов. До кучи у меня (как и в других базах) есть полное наименование. Его появление связано с тем, что штатно 1Ска 7.7 может сделать любой строковой реквизит длиной до 999 знаков, но наименование справочника – только до 100. Не знаю, поправили ли в 8-й версии это ограничение. Артикул и модель используются для быстрого поиска товара по ним. Кстати, это хороший стиль – выделять артикул товара в отдельную колонку формы справочника, чтобы использовать встроенный в 1С поиск по первым буквам. Конкретно мне больше всего нравится прайс АБН, где любое обозначение начинается с наименования производителя и артикула.

Но это всё – цветочки. Это есть в любой базе, даже самой детской. Дальше начинаются интересности. С первой интересностью я столкнулся опять же в своём ПРЕСТИЖе, когда там сменилась парочка менеджеров, а мне дико срочно надо было у них купить кабелей. Ну так я ж умный – я пришёл со своей красивой распечаткой из своей базы со своими красивыми названиями типа “Провод монтажный ПВ-3 (гибкий) 6 кв.мм, Жёлто-Зелёный”. А у народа глаза разбежались – пока они переводили это в свои несчастные ”ПВ3 6 Ж-Зеленый”. Посмотрел я на это и родил мега-фишку: наличие своего наименования для каждого поставщика. Вот посмотрите скрин ниже (цены старые, если что).

Тут у нашего автомата аж три поставщика, и для каждого есть своё название позиции, свой артикул и штрих-код, если надо. Ну и для справки – их цены. Соответственно, когда мы обращаемся к этому поставщику и даём ему заказ, то список заказа формируется именно в его кривых кракозябрах, с его личными артикулами и прочими фишками. Ниже по тексту я покажу как это выглядит. Можно сделать (но я не сделал – лень) обработку, которая действует наоборот: считывает XLS-прайсик поставщика, и по его кодам-наименованиям находит наш товар в базе и всасывает обновление цен. При этом, конечно же, наш товар как у нас в базе звался, так и зовётся.

Далее – у меня идёт стандартная вкладка, где выводятся мои цены для этого товара (часть считается автоматически) и единицы измерения. Тут рассказывать нечего – это всё стандартно. Несколько единиц измерения, в документах можно выбирать любую и ставить количества в ней. Ну например можно купить 300 метров кабеля, а можно – три бухты по 100 метров. До кучи там же есть поле Минимального остатка. Здесь всё тупее некуда. Когда проводится документ списания, база смотрит сколько товара осталось на складе (или на всех) и, если меньше минимума – выкидывает предупреждение. А то я люблю забывать купить всякую мелкую фигню. Вот на ограничители на DIN-рейку тоже поставлен остаток в 10 штук :) Если что – на один щиток хватит, а там можно и подкупить.

А теперь представляю вам уже ягодки. Первые ягодки – это свойства номенклатуры. Опять же, в штатной ТиС такие штуки реализованы, но я пошёл немного вкривь и вкось, так как затачивался на более каталог чем функционал. У меня каждой номенклатуре может быть назначено неограниченное число свойств, которые могут использоваться в коде 1Са (через функции типа ПолучитьЗначениеСвойства()) для генерации всяких отчётов или чего-нибудь ещё. Например у меня есть свойство “(Причина списания)”, значение которого автоматически подставляется как в отчёт наличия ТМЦ на складе, так и в документ СписаниеТМЦ в качестве комментария к строке и позволяет быстренько придумать (или вспомнить) на что был израсходован данный товар. А ещё свойства могут просто служить описательными характеристиками (карточкой) товара.

Список свойств у меня растёт. Там появляются как и обычные характеристики типа Массы, так и специфические типа Количества модулей на DIN-рейке для автоматов или величины U для 19 девайсов.

Вот я тут говорил про документ плана щитка (Проектирование начинки электрического щитка (примочка к 1С)) и что там же можно выбратть конкретную номенклатуру конкретной позиции этого щитка. И вот если у неё есть указанное свойство количества модулей на DIN-рейке, то это число модулей сразу же и подставляется в щиток без лишней работы. У меня вообще в планах написать параметрический поиск. Он сюда уже жутко просится. Скажем “А отбери-ка мне кабеля чёрного, с сечением не менее 10 и не более 12 квадратов, чтобы был цельный медный и ещё было больше 20 метров на складе в наличии”.

Идём далее. Картинки! Ну – картинки прицепить к номенклатуре – это тоже святое. Когда-то я думал сделать это для своей фабрики, чтобы идиоты менеджеры видели ЧТО они вообще продают и что стол и стол-бутылочница – это разные вещи, хоть называются похоже. Но я пошёл ещё дальше!

Мне подумалось, что кроме картинок (или одной картинки товара) можно цеплять ещё и всякие документы, чертежи… итого получилось следующее:

Конкретно у меня возможность подключения любого аттача есть к трём объектам: Контрагенты (карты проезда и т.д.), Номенклатура (фото товаров, документация, справочные листки, инструкции) и любой Документ. Ну например к документу План сметы офигенно удобно приложить чертёж помещения, по которому эта смета и составлялась. В базе всё будет под рукой, никуда не денется, и через год-другой вспомнить “Ашо там было и ваще это хто?!” будет очень легко.

До кучи на свойствах построена мега-фишка: автоматическая генерация наименования номенклатуры. Я вот выше говорил, что по идее наименование номенклатуры должно подчиняться какому-то закону. Так вот что у меня сделано для этого. Есть некий набор служебных свойств, которые обозначают Тип, ПодТип, Модицикатор и прочую фигню (они начинаются со знака “$”). И есть некий набор служебных (опять же) Шаблонов. Причём шаблоны заданы как для чисел, так и для форматирования элементов справочника. Вот смотрите на картинку ниже:

Собственно в 1С были встроенные в конфигурацию функции типа ФорматДаты, ФорматСумм – но у меня всё чуть гибче: шаблон находится в справочнике, и для того, чтобы его изменить, не надо лезть в код конфигурации. Итак, мы задали служебные свойства (см. картинку со свойствами) и указали там же какой из шаблонов форматирования названия использовать. Шаблонов названий может быть несколько потому что для автоматов нужны одни параметры, для кабелей – другие и так далее. На рисунке выше я беру часть служебных свойств и добавляю пару реквизитов в квадратных скобках. Подставлять можно что угодно и как угодно. Наименования для печати и отображения могут различаться.

Пример использования наименований номенклатуры для заказа поставщикам

Демонстрирую работу своей фишки с несколькими наименованиями. Положим мы хотим заказать какой-нибудь фигни в ПРЕСТИЖе. Создаём документик:

Всякие галочки позволяют быстренько запомнить какой-нибудь номер резерва (если заказал по телефону) “Входящий документ”, и сразу же взять денег (оплатить, предоплата) или, если поснимать все галки, составить из документа просто список товаров без конкретных движений в базе. Итак, смотрим на реальные мои наименования товаров и печатаем заказ:

Видим как наш “Кабель силовой (инсталляционный) …” стал “Кабель NYM”, и как проставились всякие артикулы и прочая хрень для заказа в Престиж’е. Тётки теперь со своей же бумажке всё вкурят без каких-то дополнительных пояснений.

Отлично. А теперь поменяем поставщика на АБН:

И снова напечатаем. Опа! Теперь короткий ШТЛП превратился в длиную строчку, да и автоматам досталось :)

Вот так оно и работает. А если движения по документу были сделаны, то вся инфа о заказе идёт в отчёт “Состояние заказов”, который особой инфы не несёт, но мозолит глаза списком “чё купить” и тоже активно используется: например кончились у меня F-разъёмы (минимальный остаток предупредил), я сразу не думая вбил заказ на 100 штук. А потом все эти заказы сортируются по Договорам с клиентами и по Поставщикам. То-есть можно распечатывать (в режиме, когда подставятся наименования поставщиков) и нести в магазины.

Вот такая у меня база. Сейчас номенклатура потихоньку заполняется и переокучивается под мои нужды, а сами ссылки на номенклатуру используются по всей-всей базе. В списке сетей (я таки доделал обещанную привязку трасс и кабелей сетей прям к конкретной номенклатуре), в списке щитков и ещё чёрти-где! Так что любите и берегите свою номенклатуру. Проряжайте, упорядочивайте её так, чтобы сторонний (или новый) человек легко мог в ней разобраться!

15 Отзывов на “Номенклатура – это святое!!! (Опять 1С)”

  • Ещё в 1С в других конфигурациях есть такая тема как “Нормы расхода”. Отсюда можно потырить следующую идею. К позиции услуг сметы (скажем, “Штробление бетона, за 1 пог.метр”) добавляются ссылки на ту же номенклатуру с указанием количества, необходимого на 1 метр этой штробы. Ну скажем ссылки на алебастр, ссылки на диск для штробореза (что на 1 м его уходит 0,002 штуки и после 50 метров нужен новый диск) и т.д.
    И когда ты в смете пишешь “Штробление 150 метров”, тебе сразу вываливает примерный список расходников или материалов. Скажем, три комплекта дисков и 4 мешка ротбанда.
    А так как у меня есть те самые свойства, то можно на них сваять парсинг формул. Ну типа Ротбанд = 0,024 мешка * [Ширина штробы] * [Глубина штробы].

    Мне лень этим морочиться, и я не буду :) Мне хватает такой считалки. Но так возможности программирования безграничны. Последнее что я сделал у себя – тупо сменил единицы измерений у некоторых позиций сметы. Ну если раньше у меня было штук 70 позиций вида “Установка щитка для автоматов на [2, 4, 6, 8, ...48, 56] модулей в [бетонные, кирпичные, гипсовые] стены”, то теперь стало “Установка щитка для автоматов в твёрдые стены, за DIN-модуль” – и в итоге я пишу размер щитка, а не пложу сущности :)

  • Эээыээ… это щас выглядит примерно как “какие рычаги надо жать на машине, чтобы выиграть формулу 1. Тут так и сразу не прокатит. Тебе придётся потихоньку подбираться.
    Вот тут есть всякое старое гавно, но для понятия принципа хватит: http://mista.ru/tutor_1c/index.htm
    Ещё можно запереться сюда: http://forum.sources.ru/index.php?s=a271e834ec46be7c1433d663f70d77f5&showforum=34 , там есть и я evGenius, который в 1С шпарит даже лучше меня.
    То-есть, кое-что придётся рыть и изучать самому – тут как в нашей электрике не получится прям сразу сесть и написать.

    У меня тут сделано очень просто. Для всяких вложений и свойств, поставщиков использованы подчинённые к Номенклатуре справочники. Все эти кнопочки “добавить/удалить/изменить” написаны программно, а в качестве таблицы прям таблица и использована (она в 1С есть как компонент). Туда программно добавляются колонки и при открытии формы из справочников считывается список свойств и прочего. Ну, скажем, вложения грузятся так:
    Процедура ОбновитьВложения()
    //Объект справочника, откуда читаем вложения
    СпрВл = СоздатьОбъект(“Справочник.ВложенияНоменклатуры”);
    СпрВл.ИспользоватьВладельца(ТекущийЭлемент());

    //Запоминаем выбранную строку, чтобы не сбрасывать её
    ТекСтрока = ТабВложений.ТекущаяСтрока();
    ТабВложений.УдалитьСтроки();

    //Очистить картинку текущую
    СписКартинок.УдалитьВсе();
    ПустоБля = СоздатьОбъект(“Картинка”);
    Картинка.УстановитьКартинку(ПустоБля);

    //Ищем в справочнике подряд ВСЁ, кроме картинок (картинки будут отдельно)
    Если (СпрВл.ВыбратьЭлементы() = 1) Тогда
    Пока (СпрВл.ПолучитьЭлемент() = 1) Цикл
    //Добавим в таблицу…
    ТабВложений.НоваяСтрока();
    ТабВложений.Объект = СпрВл.ТекущийЭлемент();
    ТабВложений.Наименование = ТабВложений.Объект.Наименование;
    Если (СпрВл.Тип = Перечисление.ТипВложения.Документ) Тогда
    ТабВложений.Тип = “Док”;
    ИначеЕсли (СпрВл.Тип = Перечисление.ТипВложения.Картинка) Тогда
    ТабВложений.Тип = “Кар”;
    ИначеЕсли (СпрВл.Тип = Перечисление.ТипВложения.Программа) Тогда
    ТабВложений.Тип = “Прг”;
    ИначеЕсли (СпрВл.Тип = Перечисление.ТипВложения.Архив) Тогда
    ТабВложений.Тип = “Арх”;
    Иначе
    ТабВложений.Тип = “?”;
    КонецЕсли;
    ТабВложений.Файл = СокрЛП(СпрВл.ИсходноеИмяФайла) + ” (” + глФорматРазмера(СпрВл.РазмерФайла) + “)”;

    Если (СпрВл.Тип = Перечисление.ТипВложения.Картинка) Тогда //Добавим картинку в список картинок для быстрого просмотра
    СписКартинок.ДобавитьЗначение(ТабВложений.Объект, ТабВложений.Объект.Наименование);
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;

    //Сортируем по наименованию
    ТабВложений.Сортировать(“Объект+”);
    ТабВложений.ТекущаяСтрока(ТекСтрока);

    СписКартинок.Сортировать();
    ПриВыбореКартинки();
    КонецПроцедуры

    Вот… так что спрашивай )) Или начинай с малого. Ты ж вроде по мылу спрашивал) И учти что эта конфа у меня писалась с 2008 года… это так, для справки :)

Оставить отзыв

Вы должны войти, чтобы отсавить комментарий.

Просмотров: 323 | Добавил: washou | Рейтинг: 0.0/0
Всего комментариев: 0
Конструктор сайтовuCoz
Copyright MyCorp © 2025