Глава 6
2.17 Документ "Изменение цен".
Мы уже упоминали, что документы при проведении могут изменять значения периодических реквизитов справочников. Разумеется, документы могут изменять значения и непериодических реквизитов, но это мало интересно. При изменении периодических, программа будет запоминать когда и с помощью чего меняли значения.
В справочнике "Номенклатура" мы имеем два реквизита интересующего нас типа: "ЦенаП" и "ЦенаР". В их свойствах мы указали, что они могут изменяться документами. Спроектируем такой документ.
Пусть наш документ будет иметь возможность изменять цену не одного товара, а любого количества. Значит наш документ будет содержать многострочную часть. Документ должен иметь возможность изменять сразу и цену поступления и цену реализации. При работе с ценами товара мы хотим видеть, какие цены были до изменения. Эти поля должны быть не редактируемые. Для документа будет заведен отдельный журнал. Создадим этот документ. Все данные по документу сведем в таблицу:
Идентификатор: ИзменениеЦен Журнал: ИзменениеЦен Нумератор: Нет Периодичность: Год Длина: 5 Тип: число Уникальность: да Автонумерация: да Оперативный учет: нет Может являться основанием для документа любого вида?: нет |
|||
Является основанием для |
Вводится на основании |
||
Шапка |
|||
Реквизит |
Описание |
ТипЗначения |
Доп. |
Таблица |
|||
Реквизит |
Описание |
ТипЗначения |
Доп. |
Товар | Товар | С.Номенклатура | |
СтЦенаП |
Старая цена прихода |
Число 7.2 |
|
ЦенаП |
Новая цена прихода |
Число 7.2 |
|
СтЦенаР |
Старая цена расхода |
Число 7.2 |
|
ЦенаР |
Новая цена расхода |
Число 7.2 |
- Новый документ;
- Идентификатор – "ИзменениеЦен", Синоним – "Изменение цен", Комментарий – "изменение цен товара";
- Документ будет проводиться и перепроводиться;
- Новый журнал – "ИзменениеЦен";
- В окне свойств документа заполним позиции согласно таблицы;
- Создадим форму документа;
- Графы "СтЦенаП" и "СтЦенаР" – сделаем недоступными;
- На поле ввода "Товар" повесим формулу ВыбТовар();
- На поле ввода "ЦенаП" повесим формулу ЦенаП();
- В модуль формы добавим две процедуры:
Процедура ВыбТовар()
СтЦенаП=Товар.ЦенаП.Получить(ДатаДок);
ЦенаП=Товар.ЦенаП.Получить(ДатаДок);
СтЦенаР=Товар.ЦенаР.Получить(ДатаДок);
ЦенаР=Товар.ЦенаР.Получить(ДатаДок);
// Получаем значения периодических реквизитов справочника на дату документа
КонецПроцедуры
//-----------------------------------------------
Процедура ЦенаП()
ЦенаР=Окр(ЦенаП*(1+(Константа.ПроцентНаценки/100)),2,1);
КонецПроцедуры
- Перейдем к модулю документа;
- Напишем процедуру обработки проведения документа:
Процедура ОбработкаПроведения()
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
УстановитьРеквизитСправочника(Товар,"ЦенаП",ЦенаП);
УстановитьРеквизитСправочника(Товар,"ЦенаР",ЦенаР);
// Мы указываем периодические реквизиты элемента справочника,
// указанного в поле Товар и значения, которые они будут теперь иметь
КонецЦикла;
КонецПроцедуры
- Сохраним конфигурацию;
- Загрузим 1С:Предприятие;
- Введем новый документ "Изменение цен" №1 от 04.10.2000;
- В многострочную часть занесем товар "МПР-0342" (Кефир);
- Укажем ему новую цену поступления – 6.50;
- Цена реализации изменилась, и составила теперь – 8.78;
- Подтвердим, что это нас устраивает нажатием на Enter, если нет, то можно отредактировать эту цену;
- Заведем еще один товар – "ФРЯ-908" (Яблоки);
- Новая цена поступления – 18, цена реализации – 25;
- [ОК]. Проведем документ;
- Откроем журнал ИзменениеЦен. Мы журнал не редактировали, таким он выглядит в 1С по умолчанию. Если будет желание, можете поэкспериментировать с изменением внешнего вида этого журнала в Конфигураторе;
- Документ с галочкой. Галочка сиреневого цвета – документ проведен, но он не документ оперативного учета;
- Посмотрим какие движения вызвал наш документ;
- Он не изменял регистров, а внес изменения в реквизиты справочников;
- Мы видим четыре строки. Пиктограммки показывают, что это изменение периодического реквизита. Указано в каком справочнике, какой реквизит, у какого элемента, когда принял новое значение;
- Откроем теперь справочник "Номенклатура";
- Найдем позицию "Кефир";
- Меню Действия команда "История значения". Выберем "ЦенаП";
- Мы видим, когда как менялась цена поступления этого товара;
- Первая строчка с изображением руки – мы ввели цену вручную, при создании этого товара;
- Вторая строка – листик с галочкой – мы изменили цену документом;
Ручное изменение цены никогда не имеет времени. Оно всегда располагается в самом начале дня. Изменение цены документом отслеживает время документа. Оно может располагаться в начале, середине либо конце дня, как было указано при сохранении документа. Если в течении дня было несколько таких документов, они расположатся в зависимости от указанного в них времени.
- Закроем 1С:Предприятие;
2.18 Регистры по товарам.
Нами теперь уже накоплен некоторый опыт работы с документами и регистрами. Займемся конструированием регистров по товарам. Мы уже упоминали, что регистры бывают двух типов: остатков и оборотов. Заведем для примера оба типа регистров. А чтоб никто не догадался, назовем их так: регистр остатков – "ОстаткиТоваров" – для хранения информации по остаткам товаров, и регистр оборотов – "ОборотыТоваров" – для накопления информации по оборачиваемости товара.
Регистр "ОстаткиТоваров" будет содержать информацию: где хранится/хранился товар, что хранилось, какого сорта. Следовательно, у нас будут измерения "Склад", "Товар", "Сорт". В задании сказано, что списание товара может идти либо по LIFO, либо по FIFO, либо по среднему. Для первых двух вариантов нам надо хранить еще информацию – когда этот товар поступил на склад. Удобнее всего будет завести еще одно измерение – "Партия" – типа документ прихода товара ("ПриходнаяНакладная"). В документе хранятся дата и время, и можно без труда отсортировать их по порядку постановки на учет. Ресурсы регистра – то, что хранит регистр. Нас будет интересовать во-первых, количество товара в основной единице измерения товара, во-вторых его сумма по цене поступления – цена учета, и в-третьих сумма по цене документа – для определения полученного навара. Ценой документа в случае приходной накладной и накладной на перемещение будет цена поставки, а в случае расходной накладной – цена реализации. Реквизит у нас будет один – "ФлагДвижения" тип Число 1.0. В нем мы будем отражать характер движения, он будет равен 1 при движении Контрагент-Склад/Склад-Контрагент, и 2 при движении Склад-Склад. Движения по регистру у нас будут – приход для прихода товара на склад и расход для расхода товара со склада. Данные по регистру сведем в таблицу:
Идентификатор: ОстаткиТоваров Тип: Остатки Периодичность: - |
|||
Измерения |
|||
Идентификатор |
Комментарий |
Тип значения |
Дополнительно |
Склад |
Место хранения |
С.Склады |
|
Товар |
Товар |
С.Номенклатура |
|
Сорт |
Сорт |
С.Сорт |
|
Партия |
Партия прихода товара |
Д.Приходная Накладная |
|
Ресурсы |
|||
Идентификатор |
Комментарий |
Тип значения |
Дополнительно |
Количество |
Количество товара |
Число 17.2 |
|
СуммаП |
Сумма по цене поступления |
Число 19.2 |
|
СуммаД |
Сумма по цене документа |
Число 19.2 |
|
Реквизиты |
|||
Идентификатор |
Комментарий |
Тип значения |
Дополнительно |
ФлагДвижения |
Характер движения |
Число 1.0 |
+ |
Регистр "ОборотыТоваров" будет накапливать информацию по движению товара как между складами и контрагентами, так и между самими складами. Нас здесь не интересует – это приход или расход, нам важен сам факт движения. Но движение вообще – мало информативно для анализа. Необходимо движение за какой-либо период для сравнения как было раньше и как обстоят дела с оборотами сейчас. В качестве такого периода выберем, для примера, месяц.
Определимся теперь с измерениями. Нам нужно знать по какому складу какой товар какого сорта дал какой оборот. Таким образом мы имеем следующие измерения: "Склад", "Товар", "Сорт". Накапливать обороты мы будем по количеству в основной единице измерения товара и по сумме по цене учета (поступления). Реквизит будет такой же как и в регистре "ОстаткиТоваров". Сведем все в таблицу:
Идентификатор: ОборотыТоваров Тип: Обороты Периодичность: - месяц |
|||
Измерения |
|||
Идентификатор |
Комментарий |
Тип значения |
Дополнительно |
Склад |
Место хранения |
С.Склады |
|
Товар |
Товар |
С.Номенклатура |
|
Сорт |
Сорт |
С.Сорт |
|
Ресурсы |
|||
Идентификатор |
Комментарий |
Тип значения |
Дополнительно |
Количество |
Количество товара |
Число 17.2 |
|
СуммаУ |
Сумма по цене учета |
Число 19.2 |
|
Реквизиты |
|||
Идентификатор |
Комментарий |
Тип значения |
Дополнительно |
ФлагДвижения |
Характер движения |
Число 1.0 |
+ |
Создадим в конфигураторе эти регистры. Только в регистре "ОстаткиТоваров" измерение "Партия" оставим пока неопределенного вида.
Комментарии