1С:Предприятие / Простой склад / Глава 3

2.4 Справочник товаров

Наконец мы подошли к самому главному, созданию непосредственно системы учета. Всякая система учета должна что-нибудь учитывать, поэтому создадим для начала справочник товаров. Графически структуру справочника товаров мы изобразим так, как показано на рисунке.

Здесь время поговорить о группах и уровнях справочника. 1С позволяет разбивать справочник на логические группы, в данном примере это группы "Пром. Товары" и "Продукты" и подгруппы "Мебель" и "Посуда". В группах размещен непосредственно сам товар: В группе "Пром. Товар" в подгруппе "Мебель" товары "Стол на 6 персон" и "Стул мягкий". В группе "Пром. Товар" в подгруппе "Посуда" товары "Тарелка глубокая" и "Супница расписная". В группе "Продукты" товары "Кефир жирность 1.5%" и "яблоки 'Голден'". При наличии подобной структуры справочника в 1С становится возможным ведение учета как по отдельным позициям номенклатуры, так и суммой по группе. Это будет показано в дальнейшем. Группы "Пром. Товары" и "Продукты" у нас лежат на 1-ом уровне справочника, Подгруппы "Мебель" и "Посуда" и товары "Кефир жирность 1.5%" и "яблоки 'Голден'" лежат на 2-ом уровне справочника и товары "Стол на 6 персон", "Стул мягкий", "Тарелка глубокая" и "Супница расписная" лежат на 3-ем уровне справочника. Таким образом у нас справочник будет иметь 3 уровня вложенности.

Определим какие характеристики товара нас будут интересовать.

Теперь разберемся с группами. Группы будут содержать только Код и Наименование.

Переходим к практике...
  • Создаем перечисление с единицами измерения. Для этого в окне метаданных ставим курсор на раздел "Перечисления" и создаем новое перечисление;
  • Идентификатор - ЕдИзм, Синоним - Единицы Измерения, Комментарий - Стандартные Единицы Измерения;
  • Нажатием на [Новый] введем новое значение перечисления;
  • Идентификатор - кг, Комментарий - килограмм, Представление - кг.;
  • Нажмем [ОК];
  • В списке значений перечисления добавилось наше значение - "кг";
  • Аналогично введем еще два значения - шт/штука/шт. и ящ/ящик/ящ.;
  • Закроем окно редактирования перечисления. В окне конфигурации появилось наше перечисление;

 

  1. Создаем справочник номенклатуры. Для этого установив курсор на раздел "Справочники" в дереве метаданных и создадим новый справочник;
  2. Появляется окно конструктора справочников (подробное описание в КиА том. 1);
  3. Идентификатор - Номенклатура, Комментарий - справочник товаров;
  4. Субконто не создаем - тут нужна компонента Бухгалтерия;
  5. Вставляем команду в пользовательское меню;
  6. Вот появилось окно свойств справочника. Доопределим свойства. Как и договаривались количество уровней ставим - 3, длина кода - 8, длина наименования - 50, группы сверху - Да, автоматическая нумерация - не нужна, контроль уникальности - не нужен, серии кодов - все равно, тип кода - текстовый, основное представление - в виде кода (может быть товар с одинаковым наименованием, но разным артикулом), одна форма для элемента и группы - Нет, редактировать - в диалоге;
  7. Добавим реквизиты;
  8. ЕдИзм - основная единица измерения, тип - П.ЕдИзм (П - здесь Перечисление), для элемента;
  9. ЦенаП - цена поступления, тип число 7.2, неотрицательное (отрицательная цена - это очень интересно), периодический!!!, для элемента, изменяется документом и вручную;
  10. Здесь уместно поговорить про различие между периодическими и непериодическими элементами справочника. Периодический элемент справочника хранит историю своего изменения! Он позволяет определить, какое значение он имел в интересующий нас момент времени. И это очень удобно. Но за удобство приходится платить. Код, использующий периодические элементы более сложен, и в списке справочника нельзя сортировать и отбирать по значениям периодических реквизитов.
  11. ЦенаР - цена реализации, тип число 7.2, неотрицательное, периодический, для элемента, изменяется документом и вручную;

  12. Теперь создаем форму элемента справочника. Мы особыми украшательствами заниматься не будем, нам сейчас главное функциональность;
  13. При нажатии на [Форма элемента] появилось окно редактирования формы элемента и диалог с перечнем реквизитов элемента справочника. Пометим все и нажмем [Вставить]. Форма заполнится элементами диалога и подписями к ним. Расставим их поудобнее и изменим подписи;

  14. Если мы будем каждый раз создавать новый элемент справочника, нам придется вводить много раз одну и туже единицу измерения. Это не есть хорошо. Выход из этой ситуации таков. Мы создаем константу в которой будем хранить единицу измерения по умолчанию;
  15. Создаем константу "ЕдИзмПоУмолчанию". Для этого переключимся в окно с деревом метаданных, и в раздел "Константы" введем новую константу. Наименование - "ЕдИзмПоУмолчанию", Комментарий - "единица измерения по умолчанию", Тип - П.ЕдИзм;
  16. Возвращаемся в форму элемента справочника;
  17. Переключаемся на закладку "Модуль". Сюда мы напишем код:

  18. Процедура ВводНового()
    // предопределенная процедура
    // при вводе нового элемента справочника
      ЕдИзм=Константа.ЕдИзмПоУмолчанию;
    // в поле ЕдИзм заносим значение из константы
    КонецПроцедуры
  19. Нам еще не нравится, что при вводе цены прихода цена реализации остается неизменной. Мы хотим чтобы цена реализации была равна цене прихода плюс наценка процентом, с возможностью редактирования цены реализации;
  20. Вводим константу "ПроцентНаценки", Комментарий - "процент наценки на приходную цену", тип - число 5.2;
  21. Переключаемся на закладку "Модуль". В свойствах поля ЦенаП на закладке "Дополнительно" напишем формулу ЦенаП();

  22. В модуле формы элемента напишем следующую процедуру:

  23. Процедура ЦенаП()
      ЦенаР=ЦенаП*(1+(Константа.ПроцентНаценки/100));
    //Константа.ПроцентНаценки у нас в %
    КонецПроцедуры
    Кстати, на картинке есть флаг на опции "Имеет кнопку выбора", если ее ставить у поля ввода, то у числовых полей будет появляться калькулятор, у полей типа дата - календарик (такой маленький справа).
  24. Работа с элементом справочника закончена. Можем закрыть его;
  25. Возвращаемся в окно со свойствами справочника;
  26. Начинаем редактировать форму группы. Она будет иметь самый примитивный вид, как на картинке, но можно и как ни будь украсить (по желанию);

  27. Кода никакого не будет. Закрываем окно редактирования формы группы справочника;
  28. Возвращаемся в окно со свойствами справочника;
  29. Будем редактировать форму списка справочника. У справочника может быть несколько форм списка, для разных случаев, содержащих разные наборы реквизитов. В данном случае пока обойдемся одной формой;
  30. В окне свойств справочника выберем по кнопке [Формы списка] из выпавшего меню пункт "Форма списка";
  31. Появится диалог с перечнем реквизитов похожий на предыдущие, отметим, что нам еще нужно дерево групп и нажмем [Вставить];
  32. Отредактируем размеры формы и элементов диалога и добавим две кнопки;
    1. Первая кнопка Заголовок - Закрыть, Формула - #Закрыть. Эта кнопка будет закрывать форму списка. Команда #Закрыть - напрямую закрывает форму, без написания какого-либо еще кода. Очень полезная команда (см КиА т.2);
    2. Вторая кнопка Заголовок - Печать, Формула - Печать(). Эта кнопка позволит нам распечатать справочник. Но надо писать код;

    (Вид формы списка справочника номенклатуры)
  33. Переключимся на закладку "Модуль" окна редактирования формы списка справочника. Впишем код:

  34. Процедура Печать()
      СпрТов=СоздатьОбъект("Справочник.Номенклатура");
    // это мы создали в памяти копию справочника
      СпрТов.ПорядокКодов();
    // справочник мы желаем сортировать по кодам
      СпрТов.ВыбратьЭлементы();
    // открываем выбор элементов
      Таб=СоздатьОбъект("Таблица");
    // создаем объект для печатной формы
      Таб.ИсходнаяТаблица("Таблица");
    // указываем какую таблицу брать за основу
      Таб.ВывестиСекцию("Шапка");
    // формируем шапку печатной формы
      Пока СпрТов.ПолучитьЭлемент()=1 Цикл
    // пока есть очередной получаемый элемент
        ТЭ=СпрТов.ТекущийЭлемент();
    // временная переменная для краткости
        Если ТЭ.ЭтоГруппа()=1 Тогда
    // если текущий элемент справочника группа
          Код=ТЭ.Код;
          Наз=ТЭ.Наименование;
          Таб.ВывестиСекцию("Группа");
    // выводим строку для группы
        Иначе
    // просто элемент
          Код=ТЭ.Код;
          Наз=ТЭ.Наименование;
          ЕдИ=Строка(ТЭ.ЕдИзм);
          ЦенаП=ТЭ.ЦенаП.Получить(ТекущаяДата());
    // а это как получить значение периодического реквизита!!!
    // ТекущаяДата() - функция возвращающая текущее число
          ЦенаР=ТЭ.ЦенаР.Получить(ТекущаяДата());
          Таб.ВывестиСекцию("Элемент");
        КонецЕсли;
      КонецЦикла;
      Таб.ТолькоПросмотр(1);
    // а нечего редактировать!
      Таб.ПараметрыСтраницы(1,100,1);
      Таб.Показать("");
    // делаем печатную форму видимой. Можно посылать на принтер
    КонецПроцедуры
  35. Теперь переключаемся в закладку "Таблица". Табличных частей у одной формы может быть несколько, но это так, для справки;
  36. Тут хорошо почитать КиА том 2 со стр.162 и далее;
  37. Рисуем шаблон нашей печатной формы. В секции "Шапка" все поля текстовые, в секциях "Группа" и "Элемент" - выражения. Оформление - по желанию. Главное - названия полей. У меня это выглядит так:

  38. Закрываем форму списка;
  39. Закрываем окно свойств справочника;
  40. Сохраняем конфигурацию;
  41. Нас спрашивают про анализ изменений... [Да];
  42. Нам сообщают, что были внесены следующие изменения. Жмем [Принять];

  43. Подтверждаем сообщение о конце реорганизации данных;


2.5 Работа со справочником товаров - номенклатуры.

Нами был создан справочник номенклатуры. Теперь мы можем войти в 1С:Предприятие и посмотреть не него. Заодно и заполним наш справочник.

  1. Входим в 1С:Предприятие в нашу базу "Учебная" под именем "Программист" с паролем 123;
  2. В меню мы видим раздел "Справочники". В справочниках есть пока только один - Номенклатура;
  3. Если вы этого пункт меню не видите, это значит, что вы при создании справочника либо не пользовались конструктором, либо не указали необходимость включения справочника в интерфейс. Тогда входите а меню Операции. Там находим команду "Справочники". Появился список справочников. В списке находим справочник номенклатуры и открываем его;
  4. Через меню Действие командой "Новая группа" создадим группу из первого уровня - Код - 00000001, Наименование - "Пром. товары", [ОК];
  5. Программа спросит нас сохранить ли элемент. Ответим [Да];
  6. Аналогично введем группу "Продукты" с кодом 00000002;
  7. Теперь входим внутрь группы "Пром. товары";

  8. Вводим две подгруппы второго уровня: "Мебель" - 00000003, и "Посуда" - 00000004. Коды 00000001-00000004 придумал я просто для порядка сортировки в отчете;
  9. Теперь можно заводить товары. Но сперва укажем значения наших констант;
  10. В меню Операции выбираем команду "Константы";
  11. Появилось окошко с перечнем наших констант. Введем значения. Для единицы измерения по умолчанию - шт., для процента наценки - 35;

  12. Закроем окно с константами;
  13. В справочнике "Номенклатура" входим в подгруппу "Мебель";
  14. Меню Действие команда "Новый";
  15. Появилось окошко для ввода данных по товару;
  16. Заполняем: Артикул - СТО-023, Наименование - "Стол на 6 персон", Ед.Изм - шт, цена поступления - 2500 цена реализации сформировалась сразу после нажатия на [ENTER] после ввода цены прихода и составила 3375, [ОК]. Сохранить элемент - [Да]. Остальные товары занесем в соответствующие группы, если цена расхода предлагаемая машиной и цена в табличке не равны, поправляем машину;
  17. Группы и товары
    Цена поступления
    Цена реализации
    Ед. измерения
    Пром. товары
    Мебель
    Стол на 6 персон СТО-023 2500 3375 шт.
    Стул мягкий СТУ-012 780 1050 шт.
    Посуда
    Супница расписная СУП-004 87.25 118 шт.
    Тарелка глубокая ТАР-123 18.75 25 шт.
    Продукты
    Кефир жирность 1.5% МПР-0342 6.90 9.32 шт.
    Яблоки "Голден" ФРЯ-908 17.50 25 кг.

  18. Теперь нажмем [Печать] в форме списка справочника. Это будет выглядеть примерно так. Любуемся результатом;

  19. Полученную табличную печатную форму мы можем послать на принтер;
  20. Выходим из 1С:Предприятия. Так как сохранить изменения в конфигураторе мы можем только если ВСЕ пользователи выйдут из программы 1С:Предприятие. Не вышедших можно найти, если воспользоваться Монитором, но и он ничего не покажет, если кто-то открыл окно для ввода имени пользователя и пароля и не вошел. Таких надо учить...


2.6 Продолжение работы с товарами.

У нас есть справочник номенклатуры. В нем у каждого товара мы указали основную единицу измерения. Но мы ведь можем работать и с большими количествами. Например мы можем продать ящик яблок, в ящике, к примеру, 25 кг. Или ящик с тарелками, где их 12 штук. Мы можем пользоваться и другими единицами, если их занесем, соответственно, как значения перечисления ЕдИзм. Это не возбраняется. Хорошо посмотреть "Общероссийский классификатор единиц измерения". Но вернемся к нашей программе. Мы пришли к выводу, что нам необходимо как-то указать, что товар может измеряться не только в базовой единице, но и в каких-то кратных ей других единицах измерения. Так яблоки у нас будут либо в килограммах, либо в ящиках по 25 кг., тарелки либо в штуках, либо в ящиках комплектом на дюжину персон, кефир либо в пакетах по 1 штуке, либо в ящиках по 15 штук пакетов.
Эта задача в 1С решается следующим способом. Мы заведем новый справочник подчиненный справочнику товаров. Подчиненность означает, что каждая запись справочника товаров может иметь, принадлежащие только ей, одну, либо несколько, либо вообще не иметь, записей в подчиненном справочнике. Тут неплохо ознакомится с теорией реляционных баз данных. Литературы по этому вопросу есть много. Например книги Баркера, любая книжка по MS Access для начинающих и т.д.
Опишем каким мы хотим видеть наш подчиненный справочник. Название ему дадим "Единицы". В нем должны быть перечислены единицы измерения товара, включая базовую, и коэффициенты пересчета этих единиц в базовую, для базовой это "1". Реализуем нашу идею.

  1. Создаем новый справочник;
  2. Идентификатор - "Единицы", Комментарий - "единицы измерения товара";
  3. В интерфейс вставлять не будем, это служебный справочник;
  4. [Готово]. Появилось окно свойств справочника;
  5. ГЛАВНОЕ: В поле подчинен выбираем справочник "Номенклатура". Этим мы и указываем характер их отношений;

  6. Количество уровней - 1, следовательно групп у нас не будет, и зачем?. Длина кода - 5, длина наименования - 0. Мы не будем использовать это поле за ненадобностью. Серии кодов в пределах подчинения, тип кода - текст, сюда мы будем заносить текстовое представление названия единицы измерения, основное представление - код (другого варианта и нет). Автоматическая нумерация и контроль уникальности нам не нужны;
  7. Занесем два новых реквизита: Первый - "Ед", тип - П.ЕдИзм. Второй - "Коэффициент", тип Число 5.0, неотрицательный;
  8. Редактировать будем в диалоге;
  9. Создаем форму элемента;
  10. Если Вы обратили внимание, предопределенное поле Наименование нам для выбора не предложили, это потому, что мы указали его длину = 0;
  11. Расставим поля как-нибудь поудобнее, но можем оставить и так;
  12. Поле ввода кода сделаем недоступным - сюда мы будем, как и договорились ранее, автоматически заносить строковое представление названия единицы измерения;
  13. Пусть поле ввода "Коэффициент" у нас будет с кнопкой выбора - так симпатичнее;
  14. В поле ввода "Ед" добавим в формулу процедуру Ед();
  15. В модуле формы пишем код процедуры Ед():

  16. Процедура Ед()
      Код=Строка(Ед);
    // Здесь функцией Строка() мы получаем строковое
    // представление значения перечисления
    КонецПроцедуры
  17. Еще мы хотим при вводе новой единицы измерения нам по умолчанию бы ставилось то значение, которое стоит у товара-владельца в качестве основного, ну соответственно и коэффициент должен ставиться равным единице. Пишем знакомую уже нам предопределенную процедуру:

  18. Процедура ВводНового()
      Ед=Владелец.ЕдИзм;
    // А вот это важно. Здесь "Владелец" это указание на запись в справочнике
    // "Номенклатура", которой будет принадлежать эта единица измерения
      Коэффициент=1;
      Код=Строка(Ед);
    КонецПроцедуры
    В 1С ссылки на реквизиты таблиц имеют такой же вид как и ссылки на атрибуты и методы объектов (через "."), а не как в VBA, где используется "!";
  19. Для закрепления информации о ссылке "Владелец" внесем текстовое поле, которое в форме элемента будет нам выводить код и наименование товара-владельца:
    1. В диалоге вставим из меню Вставить командой "Текст" текстовое поле;
    2. В окошке свойств этого текста очистим поле "Заголовок";
    3. На закладке "Дополнительно" введем формулу
    4. "("+СокрЛП(Владелец.Код)+") "+СокрЛП(Владелец.Наименование)
      Здесь СокрЛП() - это функция, которая удаляет пробелы в конце и в начале текстовой строки, "(" - текстовое выражение в коде в 1С заключают в кавычки, + в 1С служит и знаком конкатенации текстовых выражений;
    5. На закладке "Шрифт" выберем какой нибудь шрифт и оформление по нашему вкусу;
    6. Нажмем [ОК];
  20. Разместим это текстовое поле где ни будь сверху формы;
  21. Скопируем это текстовое поле в буфер обмена;
  22. Форма элемента готова. Закроем ее;
  23. Создадим форму списка;
  24. Растянем поля пошире, чтоб заголовки полей были видны полностью, и вставим наверх из буфера обмена текстовое поле;
  25. Форму списка можно закрыть;
  26. Сохраняем изменения и входим в 1С:Предприятие;
  27. Войдем в справочник номенклатуры;
  28. Найдем "Кефир" и установим на него курсор;
  29. Из меню Действия командой "Подчиненный справочник" вызовем справочник "Единицы". Если бы у нас было несколько справочников подчиненных справочнику товаров, то нам пришлось бы выбирать из списка;
  30. Введем новый элемент. Это будет элемент с базовой единицей. Ничего изменять не будем и сохраним его;
  31. Теперь введем еще один элемент - с производной единицей измерения;
  32. Единица Ц ящик (ящ.), коэффициент - 15;
  33. В списке единиц у нас две записи;
  34. Переключимся в справочник товаров и установим курсор на яблоках;
  35. Возвращаемся в справочник единиц - он пуст. Две единицы, что мы только что ввели относятся к кефиру, соответственно в списке записей относящихся к яблокам их и не должно быть;
  36. Введем аналогичным образом две записи для яблок: килограмм (кг.) коэффициент - 1, ящик (ящ.) коэффициент - 25;
  37. Для остальных товаров внесем записи, как было сказано в начале главы. Обратите внимание, мы не можем создать подчиненные записи к элементу типа группа;
  38. Разместив на экране рядом справочники товаров и единиц и переходя курсором по записям о товарах, мы можем видеть как в справочнике единиц меняются наборы записей;
  39. Закроем справочник товаров. Установим курсор в справочнике единиц на любой записи;
  40. Через меню Действия выполним команду "Иерархический список";
  41. В справочнике единиц стало видно сразу множество записей;
  42. Переходя по ним курсором, мы видим как меняется содержание текстового поля вверху списка, где мы указали выводить код и наименование владельца;
  43. Остановимся на какой либо из записей;
  44. Через меню Действия выполним команду "Иерархический список";
  45. Снова в списке остались только записи относящиеся к какому-то одному товару;
  46. Через меню Действия выполним команду "Справочник-владелец";
  47. Открылся справочник товаров. Курсор в нем установился на том товаре, который являлся владельцем текущей единицы измерения;
  48. Если мы будем выключать-включать иерархический список в справочнике товаров, то мы будем видеть соответственно либо все товары и группы сразу, либо только относящиеся к текущей группе/подгруппе;
  49. Закроем 1С:Предприятие.

<< Предыдущая глава | Содержание | Следующая глава >>