Создание регистров по товарам 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Создание регистров по товарам



 

Теперь необходимо сконструировать регистры по товарам: регистр остатков — "ОстаткиТоваров" - для хранения информации по остаткам товаров, и регистр оборотов - "ОборотыТоваров" — для накопления информации по оборачиваемости товара.

Регистр "ОстагкиТоваров" будет содержать информацию, где хранится/хранился товар, что хранилось, какого сорта. Следовательно, у нас будут измерения "Склад", "Товар". В задании сказано, что списание товара может идти либо по LIFO, либо по FIFO, либо по среднему. Для первых двух вариантов нам надо хранить еще информацию, когда этот товар поступил на склад. Удобнее всего будет завести еще одно измерение - "Партия" - типа "документ прихода товара" ("ПриходнаяНакладная"). В документе хранятся дата и время, и можно без труда отсортировать их по порядку постановки на учет. Ресурсы регистра — то, что хранит регистр. Нас будет интересовать, во-первых, количество товара в основной единице измерения товара, во-вторых, его сумма по цене поступления - цена учета, и, в-третьих, сумма по цене документа - для определения полученного навара. Ценой документа в случае приходной накладной и накладной на перемещение будет цена поставки, а в случае расходной накладной — цена реализации. Реквизит у нас будет один - "ФлагДвижения" тип Число 1.0. В нем мы будем отражать характер движения, он будет равен 1 при движении Контрагент-Склад/Склад-Контрагент и 2 при движении Склад-Склад. Движения по регистру у нас будут - приход для прихода товара на склад и расход для расхода товара со склада. Данные по регистру сведем в таблицу:

 

Идентификатор: ОстаткиТоваров Тип: Остатки Периодичность: -
Измерения      
Идентификатор Комментарий Тип значения Дополнитель­но
Склад Место хранения С.Склады  
Товар Товар С. Номенклатура  
Партия Партия прихода то­вара Д. Приходная Накладная  
Ресурсы
Идентифика­тор Комментарий Тип значения Дополнитель­но
Количество Количество товара Число 17.2  
СуммаП Сумма по цене по­ступления Число 19.2  
СуммаД Сумма по цене до­кумента Число 19.2  
Реквизиты
Идентификатор Комментарий Тип значения Дополнитель­но
ФлагДвижния Характер движения Число 1.0 +

 

 

Регистр "ОборотыТоваров" будет накапливать информа­цию по движению товара как между складами и контрагента­ми, так и между самими складами. Нас здесь не интересует это приход или расход, нам важен сам факт движения. Но движение вообще мало информативно для анализа. Необхо­димо движение за какой-либо период для сравнения как было раньше и как обстоят дела с оборотами сейчас. В качестве та­кого периода выберем для примера месяц.

Определимся теперь с измерениями. Необходимо знать, по какому складу какой товар какой дал оборот. Таким обра­зом, мы имеем следующие измерения: "Склад", "Товар". Нака­пливаться обороты будут по количеству в основной единице измерения товара и по сумме по цене учета (поступления). Ре­квизит будет такой же, как и в регистре "ОстаткиТоваров".

 

Идентификатор: ОборотыТоваров Тип: Обороты Периодичность: - месяц
Измерения      
Идентификатор Комментарий Тип значения Дополнитель­но
Склад Место хранения С.Склады  
Товар Товар С. Номенклатура  
Ресурсы
Идентифика­тор Комментарий Тип значения Дополнитель­но
Количество Количество товара Число 17.2  
СуммаУ Сумма по цене учета Число 19.2  
Реквизиты
Идентификатор Комментарий Тип значения Дополнитель­но
ФлагДвижния Характер движения Число 1.0 +

 

Создать в конфигураторе эти регистры. Только в регист­ре "ОстаткиТоваров" измерение "Партия" оставить пока неоп­ределенного вида.

 

ЛАБОРАТОРНАЯ РАБОТА №7

 

Приходная накладная

 

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

Номер накладной зависит от поставщика. Значит, нужно сделать возможность заносить не уникальные номера приходных накладных. В накладной, кроме полей Номер документа и Дата документа, присутствуют стороны, участвующие в товарообороте - "От кого" и "Кому". В приходной накладной им будут соответствовать поля "Поставщик" — контрагент и "Склад" - склад. Добавим еще одно поле - "Договор", нам надо знать, на основании чего произошла поставка товара.

Перейти к табличной части. Имеется графа "Наименование товара". Этой графе будет соответствовать графа "Товар", графы "Кол", "Цена", "Сумма". Кроме этих граф, добавятся следующие - "Ед" (единица измерения). Она покажет, в чем измеряется количество. "КолО" - если количество в графе "Кол", например, для яблок можем указать или в килограммах, или в ящиках и написать в произвольной единице измерения, то в графе "КолО" - привести к основной единице измерения товара. По графам "КолО" и "Сумма" понадобится итог по колонке. Документ разместить в журнале накладных.

 

Идентификатор: ПриходнаяНакладная Журнал: Накладные Нумератор: Нет Периодичность: Год Длина: 5 Тип: число Уникальность: нет Автонумерация: нет Оперативный учет: да Может являться основанием для документа любого вида?: нет
Является основанием для Вводится на основании
Шапка
Реквизит Описание ТипЗначения Доп.
Поставщик От кого пришел товар С.Контрагенты  
Договор Основание отгруз­ки товара С. Договора  
Склад Куда пришел товар С.С клады  
Таблица
Реквизит Описание ТипЗначения Доп.
Товар Товар С. Номенклатура  
Кол Количество в про­извольной ед. из­мерения Число 8.2 +
Ед Единица измере­ния С. Единицы  
КолО Количество в ос­новной ед. измере­ния Число 8.2 +,И
Цена Цена поставки Число 7.2 +
Сумма Сумма документа Число 15.2 +, И

 

Здесь:

+ - неотрицательный;

И - итог по колонке.

 

1. Создать в конфигураторе эти документ и журнал.

2. В регистре "ОстаткиТоваров" исправить тип измерения "Партия" с "Неопределенный" на "Д.ПриходнаяНаклад-ная".

3. Создать экранную форму документа.

4. В свойствах поля "Договор" на закладке "Дополнительно" указать, что оно связано с полем "Поставщик" (как в документе "Приход денег").

5. В свойствах колонки "Ед" на закладке "Дополнительно" указать, что она связана с колонкой "Товар" (справочник "Единицы" принадлежит справочнику "Номенклатура").

6. В свойствах колонки "Товар" на закладке "Дополнительно" написать формулу Товар(). Эта процедура будет заполнять колонки "Кол", "Ед", "КолО", "Цена", "Сумма" сразу после ввода товара.

7. При изменении значения в колонке "Кол" изменять "КолО" и "Сумма". В свойствах колонки "Кол" на закладке "Дополнительно" написать формулу Кол().

8. В модуль формы добавить процедуру:

Процедура Кол()

КолО=Окр(Кол*(Ед.Коэффициент), 2,1);

Сумма-Окр(КолО*Цена,2,1);

КонецПроцедуры.

9. Теперь необходимо при изменим единицы измерения пересчитывать "КолО" и "Сумма". В свойствах колонки "Ед" на закладке "Дополнительно" написать формулу Ед().

10. В модуль формы добавить процедуру:

Процедура Ед()

КолО=Окр(Кол*(Ед.Коэффициент),2,1);

Сумма=Окр(КолО*Цена,2.1);

КонецПроцедуры

11. Колонки "КолО" и "Сумма" сделать недоступными для редактирования.

12. Цена в приходной накладной устанавливается из справочника. Оставить себе возможность изменять цену в приходной накладной.

13. При изменении цены накладной должна пересчитываться сумма. В свойствах колонки "Цена" на закладке "Дополнительно" написать формулу Цена().

14. В модуль формы добавить процедуру:

Процедура Цена()

Сумма=Окр(КолО*Цена,2,1);

КонецПроцедуры

15. При изменении поля шапки "Поставщик" поле "Договор" должно очищаться. В свойствах поля "Поставщик" на закладке "Дополнительно" написать формулу Поставщик().

16. В модуль формы добавить процедуру:

Процедура Поставщик()

Договор=ПолучитьПустоеЗначение("Справочник. Договора");

// Функция ПолучитьПустоеЗначение() возвращает пустое значение

// заданного типа

КонецПроцедуры.

17. Добавить в форму документа ниже табличной части элемент диалога Текст. В свойствах текста на закладке "Общие" очистить содержимое поля "Заголовок". На закладке "Дополнительно" в поле "Формула" написать: Итог("КолО"). Функция Итог() вернет итог по указанной колонке таблицы если для реквизита табличной части документа была указана опция "Итог по колонке - да".

18. Добавить в форму документа, рядом с предыдущим полем, еще один элемент диалога Текст. В свойствах текста на закладке "Общие" очистить содержимое поля "Заголовок". На закладке "Дополнительно" в поле "Формула" написать: Итог("Сумма").

19. Экранная форма почти готова. Добавить в документ печатную форму. В остальные документы печатные формы добавлять не будем.

20. Добавить в форму документа, правее кнопки [Закрыть], элемент диалога Кнопка.

21. Заголовок ей дать "Печать". Формула Печать().

22. В модуль формы добавить процедуру:

Процедура Печать() Таб=СоздатьОбъект("Таблица");

Таб.ИсходнаяТаблица("Таблица "); Таб.ВывестиСекцию("Шапка");

ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл

НС=НомерСтроки;

// атрибут НомерСтроки возвращает номер текущей строки

И табличной части

Таб.ВывестиСекцию("Строка");

КонецЦикла;

ИтогПр=Формат(Итог("Сумма"),"ЧПДС");

// В переменную ИтогПр мы выведем сумму прописью

Таб.ВывестиСекцию("Подвал");

Таб.ТолькоПросмотр(1);

Таб.ПараметрыСтраницы(1,100,1);

Таб.Показать("");

КонецПроцедуры.

23. Перейти на закладку "Таблица" формы документа.

24. Создать шаблон таблицы.

25. Перейти в модуль документа.

26. Написать процедуру проведения документа:

Процедура ОбработкаПроведения()

// Долг за поставленный нам товар возрос

Регистр. Взаиморасчеты. Контрагент = Поставщик;

Регистр. Взаиморасчеты. Договор = Договор; Ре

гистр.Взаиморасчеты.Сумма - Итог("Сумма");

Регистр. Взаиморасчеты.Флаг Движения = 1;

Регистр. Взаиморасчеты..ДвижениеПриходВыполнить();

// по каждой строке

ВыбратьСтроки();

Пока ПолучитьСтроку() = 1 Цикл

// Увеличиваем количество товара на складе

Регистр. ОстаткиТоваров.Склад = Склад;

Регистр.ОстаткиТоваров.Товар = Товар;

Регистр.ОстаткиТоваров.Партия = ТекущийДокумент();

Регистр.ОстаткиТоваров.Количество = КолО; Ре

гистр.ОстаткиТоваров.СуммаП = Сумма; Ре

гистр.ОстаткиТоваров.СуммаД = Сумма: Ре

гистр.ОстаткиТоваров.ФлагДвижения = 1;

Регистр.ОстаткиТоваров. ПривязыватьСтроку(НомерСт

роки);

// Указав команду ПривязыватьСтроку() мы к каждой за

писи по движению

// регистра укажем - какая конкретно строка документа

произвела это движение

Регистр.ОстаткиТоваров.ДвижениеПриходВыполнить();

// Добавляем запись о росте товарооборота Ре

гистр.ОборотьТоваров.Склад = Склад;

Регистр.Обороты Товаров.Товар = Товар;

Регистр.Обороты Товаров. Количество = КолО; Ре

гистр.Обороты Товаров.СуммаУ = Сумма; Ре

гистр.Обороты Товаров.ФлагДвижения = 1; Ре

гистр.Обороты Това

ров.ПривязыватьСтроку(НомерСтроки); Ре

гистр.ОборотыТоваров.ДвижениеВыполнить();

// Оборотный регистр осуществляет не приход/расход а,

движение

КонецЦикла;

КонецПроцедуры

 

Перейти теперь к журналу "Накладные".

27. Добавить графу. Назвать ее "Кол". Для графы выберем значение Документ.ПриходнаяНакладная.КолО. Как видно, в списке доступных реквизитов из табличной части присутствуют только те, которые помечены итогом по колонке. В журнал в дополнительную графу тоже попадут значения итога по указанной колонке;

28. Добавить еще графу — "Сумма". Документ. ПриходнаяНакладная.Сумма.

29. Создать форму журнала.

30. Отредактировать размеры и расположение граф.

31. Сохранить конфигурацию.

32. Загрузить 1С:Предприятие.

33. Создать приходную накладную.

34. Теперь сохранить и провести эту накладную.

35. Открыть журнал "Накладные".

36. Найти накладную.

37. Посмотреть, какие движения она совершила.

38. Сделайте еще несколько накладных от разных поставщиков по разным договорам на разные склады.

39. Посмотрите, как изменились данные в отчете "Взаиморасчеты".

 

Отчет по остаткам на складе

Итак, после ввода некоторого количества приходных накладных интересно знать, что на каком складе лежит. Сделать отчет по складам.

1. Отчет "ОстаткиНаСкладе".

2. Вставить в экранную форму два элемента диалога.

3. Первый: поле ввода "ВыбДата" тип Дата.

4. Второй: поле ввода "ВыбСклад" тип С.Склады.

5. Соответственно приставить к ним текстовые поля с надписью, что есть что (вообще, это удобно делать через меню Вставить командой "Элемент диалога..." либо аналогичной кнопкой из панели инструментов).

6. В модуле прописать процедуру:

Процедура ПриОткрытии() ВыбДата=РабочаяДатаО;

// РабочаяДата — дата, на которую установлена в данный момент 1С.

КонецПроцедуры.

7. Заполнить процедуру Сформировать(). Эта процедура вызывается одноименной кнопкой [Сформировать]. Там она прописана в поле "Формула":

Процедура Сформировать()

ТабЗн=СоздатьОбъект("ТаблицаЗначений");

// создаем динамическую 2-х мерную таблицу

ТабЗн.НоваяКолонка("Товар","Справочник. Номенклатура");

ТабЗн.НоваяКолонка("Ост","Число", 17,2):

// указываем какие колонки будет содержать наша динамическая таб

лица

РегОст=СоздатьОбъект("Регистр. ОстаткиТоваров");

// создаем в памяти копию регистра остатков Ре

гОст.ВременныйРасчет(1);

// указываем, что из этого регистра нам. возможно, надо будет полу

чить данные

// на момент времени отличный от текущего

РассчитатьРегистрыНа(ВыбДата);

// указываем на какой момент времени надо получить данные из

регистров

РегОст.ВыбратьИтоги();

// открываем выборку итогов из регистра (на указанный момент

времени)

Пока РегОст.Получ итьИтог()= 1 Цикл

// получаем очередной итог

ТС кладНРегОст. Склад;

Если ТСклад-ВыбСклад Тогда

// если текущий итог по выбранному складу

ТабЗн.НоваяСтрока();

// добавляем в динамическую таблицу новую строку

ТабЗн.Товар=РегОст.Товар;

ТабЗн. Оет=РегОст. Количество;

// заполняем поля д. таблицы

КонецЕсли;

КонецЦикла;

РегОст="";

// убираем из памяти копию регистра. Она нам больше не нужна

СтрокаН=0;

ТабЗн.ВыбратьСтроку(СтрокаН,"Просмотр содержимого таблицы");

// Это мы делаем, чтобы просмотреть содержимое динамической таб

лицы

// у нас будут строки с одинаковым товаром и сортом, они возникли

из-за

// наличия измерения "Партия" нам надо их объединить

ТабЗн.Свернуть(" 1,2");

// методом Свернуть() мы объединяем строки у которых содержимое

// в колонках 1 и 2 одинаковое, а колонку 3 мы суммируем Стро

каН=0;

ТабЗн.ВыбратьС гроку(СтрокаН,"Просмотр содержимого таблицы");

// смотрим что получилось. Строки у нас идут вразнобой

ТабЗн.Сортировать" 1+,2+");

// отсортируем их. сперва сортируем по убыванию колонку 1, Стро

каН=0;

ТабЗн.ВыбратьСтроку(СтрокаН,"Просмотр содержимого таблицы");

// смотрим на результат

Таб=СоздатьОбъект("Таблица");

Таб.ИсходнаяТаблица("Таблица");

Таб.ВывестиСекцию("Шапка");

ТТовар="@#$%&";

// такого товара у нас не будет

ТабЗн.ВыбратьСтроки();

// открываем выборку строк из д. таблицы

Пока ТабЗн.ПолучитьСтроку()= 1 Цикл

Товар=ТабЗн.Товар;

Тов=СокрЛП(Товар.Код)+" ("+СокрЛП(Товар.Наименование)+")";

Ост=ТабЗн.Ост;

Ед=Строка(Товар.ЕдИзм);

Если ТТовароТовар Тогда

// если товар из д. таблицы не совпадает с переменной ТТовар

Таб.ВывестиСекцию("Товар");

// выводим эту секцию таблицы для печати

ТТовар=Товар;

Иначе

// выводим эту секцию

КонецЕсли;

КонецЦикла;

Таб.ТолькоПросмотр(1);

Таб.ПараметрыСтраницы(1,100,1);

Таб. Показать(" ");

КонецПроцедуры

8. Теперь создать шаблон для печатной таблицы.

9. Загрузить 1С:Предприятие.

10. Посмотреть, что покажет отчет на разные даты по разным складам.

 

ЛАБОРАТОРНАЯ РАБОТА №8

 

9.1. Создание перечисления "МетодСписания"

 

В постановке задачи даны три метода списания товара:

- FIFO (F irst I nput F irst O utput) - это такая система, при которой ранее пришедшие партии товара списываются первыми. Цена списания — цена партии товара, из которой списывают товар;

- LIFO (L ast I nput F irst O utput) - это такая система, при которой последняя пришедшая партия товара списывается в первую очередь. Цена списания - цена партии товара, из которой списывают товар;

- по-среднсму — здесь вообще партии не нужны. Цена списания — средняя цена остатка партий товара на складе. Таким образом, при начале работы с конфигурацией необходимо указать, какая система списания в дальнейшем используется. Перечень возможных систем учета будут содержаться в перечислении.

1. Создать новый вид перечисления - "МетодСписания".

2. Добавить значения ФИФО, ЛИФО, По_Среднему. В представлении можно и латинскими буквами, а в идентификаторах — русскими, чтобы при наборе кода лишний раз язык не переключать. Для хранения выбранного нами типа списания заведем константу.

3. Создать константу "МетодСписания" тип П.МетодСписания. При начале работы с программой учета надо обязательно выставлять способ списания. И в последующем не менять его. Пусть программа при начале работы проверит, выбран ли способ списания, если не выбран, то предложить выбрать, а если выбран, ничего не делать. Запрещать редактирование мы не будем.

4. Войти в окно с деревом метаданных.

5. Меню "Действия", команда "Глобальный модуль".

6. Появилось окно глобального модуля.

7. Написать процедуру:

Процедура ПриНачалеРаботыСистемы()

// предопределенная процедура, запускается при начале работы // в

1С: Предприятии Перем Значение; // Объявляем переменную

Если Константа.МетодСписания.Выбран()=0 Тогда // если константа

не заполнена

Рез=ВвестиЗначение(Значение," Выберите способ спи

сания","Перечисление.МетодСписания");

// просим выбрать способ списания. РезН, если выбор произведен, //

0 - если нет

Если Рез"=1 Тогда

Константа.МетодСписания=Значение;

/7 установим константе выбранное значение

Иначе

СтатусВозврата(О);

// Мы просили выбрать значение, а Вы этого не сделали.

// С 1С работать не будете!

// СтатусВозврата определяет, как должно завершиться событие

вызвавшее

// предопределенную процедуру. В данном случае открытие системы

должно

// завершиться неудачей. Т.е. 1С:Предприятие закроется.

КонецЕсли;

КонецЕсли;

КонецПроцедуры

8. Загрузить 1С:Предприятие и попробовать сперва отказаться от выбора, а потом выбрать FIFO.

9. Создать две приходные накладные на Склад №3 с одинаковым товаром и количеством, но с разной ценой прихода.

10. Провести накладные.

11. Все остальные накладные надо распровести. Они будут только мешать и излишне усложнять картину. Для этого - открыть журнал "Накладные".

12. Установить курсор на ненужную нам накладную.

13. Меню "Действия" команда "Сделать документ не проведенным".

14. Подтвердить отмену проведения документа.

15. Галочка с пиктограммы документа исчезла - документ не проведен.

16. Проверить по отчету остатки на складе №3.

 



Поделиться:


Последнее изменение этой страницы: 2017-02-10; просмотров: 154; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.142.12.240 (0.131 с.)