Скачиваний:
46
Добавлен:
01.05.2014
Размер:
177.66 Кб
Скачать

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

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

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

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

Идентификатор: ПриходнаяНакладная Журнал: Накладные Нумератор: Нет         Периодичность: Год Длина: 5         Тип: число Уникальность: нет     Автонумерация: нет Оперативный учет: да Может являться основанием для документа любого вида?: нет

Является основанием для

Вводится на основании

Шапка

Реквизит

Описание

ТипЗначения

Доп.

Поставщик

От кого пришел товар

С.Контрагенты

 

Договор

Основание отгрузки товара

С.Договора

 

Склад

Куда пришел товар

С.Склады

 

Таблица

Реквизит

Описание

ТипЗначения

Доп.

Товар

Товар

С.Номенклатура

 

Сорт

Сорт товара

С.Сорт

 

Кол

Количество в произвольной ед. измерения

Число 8.2

+

Ед

Единица измерения

С.Единицы

 

КолО

Количество в основной ед. измерения

Число 8.2

+,И

Цена

Цена поставки

Число 7.2

+

Сумма

Сумма документа

Число 15.2

+,И

Здесь: + - неотрицательный; И – итог по колонке;

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

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

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

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

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

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

  7. Для того чтобы вводить сорт по умолчанию, создадим константу "СортПоУмолчанию" типа С.Сорт;

  8. В модуль формы добавим процедуру: Процедура Товар()   Если Товар.Выбран()=1 Тогда     Если Сорт.Выбран()=0 Тогда // Если сорт не выбран (сорт может быть выбран если редактируется // существующая строка)       Сорт=Константа.СортПоУмолчанию;     КонецЕсли;     Если Кол=0 Тогда       Кол=1;     КонецЕсли;     СпрЕд=СоздатьОбъект("Справочник.Единицы"); // создаем в памяти копию справочника единиц     СпрЕд.ИспользоватьВладельца(Товар); // указываем, что нам нужны только единицы, принадлежащие // выбранному товару     СпрЕд.ВыбратьЭлементы();     Пока СпрЕд.ПолучитьЭлемент()=1 Цикл // перебираем справочник единиц поэлементно       Если СпрЕд.Ед=Товар.ЕдИзм Тогда // мы нашли единицу соответствующую основной единице товара         Ед=СпрЕд.ТекущийЭлемент(); // передаем в реквизит табличной части найденное значение         Прервать; // прерываем обход по циклу. То, что мы искали уже найдено       КонецЕсли;     КонецЦикла;     КолО=Окр(Кол*(Ед.Коэффициент),2,1); // пересчитываем количество в количество основных единиц     Цена=Окр(Товар.ЦенаП.Получить(ДатаДок)*(Сорт.Процент/100),2,1); // определяем цену товара с учетом текущего сорта     Сумма=Окр(КолО*Цена,2,1); // вычисляем сумму   КонецЕсли; КонецПроцедуры

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

  10. В модуль формы добавляем процедуру: Процедура Сорт()   Если Сорт.Выбран()=1 Тогда     Цена=Окр(Товар.ЦенаП.Получить(ДатаДок)*(Сорт.Процент/100),2,1);     Сумма=Окр(КолО*Цена,2,1);   КонецЕсли; КонецПроцедуры

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

  12. В модуль формы добавляем процедуру: Процедура Кол()   КолО=Окр(Кол*(Ед.Коэффициент),2,1);   Сумма=Окр(КолО*Цена,2,1); КонецПроцедуры

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

  14. В модуль формы добавляем процедуру: Процедура Ед()   КолО=Окр(Кол*(Ед.Коэффициент),2,1);   Сумма=Окр(КолО*Цена,2,1); КонецПроцедуры

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

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

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

  18. В модуль формы добавляем процедуру: Процедура Цена()   Сумма=Окр(КолО*Цена,2,1); КонецПроцедуры

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

  20. В модуль формы добавляем процедуру: Процедура Поставщик()   Договор=ПолучитьПустоеЗначение("Справочник.Договора"); // Функция ПолучитьПустоеЗначение() возвращает пустое значение // заданного типа КонецПроцедуры

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

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

  23. Экранная форма почти готова. Давайте добавим в документ печатную форму. В остальные документы мы печатные формы добавлять не будем. Но если появится желание, то никто не запрещает;

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

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

  26. В модуль формы добавляем процедуру: Процедура Печать()   Таб=СоздатьОбъект("Таблица");   Таб.ИсходнаяТаблица("Таблица ");   Таб.ВывестиСекцию("Шапка");   ВыбратьСтроки();   Пока ПолучитьСтроку()=1 Цикл     НС=НомерСтроки; // атрибут НомерСтроки возвращает номер текущей строки // табличной части     Таб.ВывестиСекцию("Строка");   КонецЦикла;   ИтогПр=Формат(Итог("Сумма"),"ЧПДС"); // В переменную ИтогПр мы выведем сумму прописью   Таб.ВывестиСекцию("Подвал");   Таб.ТолькоПросмотр(1);   Таб.ПараметрыСтраницы(1,100,1);   Таб.Показать(""); КонецПроцедуры

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

  28. Создадим шаблон таблицы такого, примерно, вида:

  29. Строка 10 – Тип "Выражение", Строки 1, 3-6, 13, 14 – Тип "Шаблон";

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

  31. Напишем процедуру проведения документа: Процедура ОбработкаПроведения() // Долг за поставленный нам товар возрос   Регистр.Взаиморасчеты.Контрагент = Поставщик;   Регистр.Взаиморасчеты.Договор = Договор;   Регистр.Взаиморасчеты.Сумма = Итог("Сумма");   Регистр.Взаиморасчеты.ФлагДвижения = 1;   Регистр.Взаиморасчеты.ДвижениеПриходВыполнить(); // по каждой строке   ВыбратьСтроки();   Пока ПолучитьСтроку() = 1 Цикл // Увеличиваем количество товара на складе     Регистр.ОстаткиТоваров.Склад = Склад;     Регистр.ОстаткиТоваров.Товар = Товар;     Регистр.ОстаткиТоваров.Сорт = Сорт;     Регистр.ОстаткиТоваров.Партия = ТекущийДокумент();     Регистр.ОстаткиТоваров.Количество = КолО;     Регистр.ОстаткиТоваров.СуммаП = Сумма;     Регистр.ОстаткиТоваров.СуммаД = Сумма;     Регистр.ОстаткиТоваров.ФлагДвижения = 1;     Регистр.ОстаткиТоваров.ПривязыватьСтроку(НомерСтроки); // Указав команду ПривязыватьСтроку() мы к каждой записи по движению // регистра укажем – какая конкретно строка документа произвела это движение     Регистр.ОстаткиТоваров.ДвижениеПриходВыполнить(); // Добавляем запись о росте товарооборота     Регистр.ОборотыТоваров.Склад = Склад;     Регистр.ОборотыТоваров.Товар = Товар;     Регистр.ОборотыТоваров.Сорт = Сорт;     Регистр.ОборотыТоваров.Количество = КолО;     Регистр.ОборотыТоваров.СуммаУ = Сумма;     Регистр.ОборотыТоваров.ФлагДвижения = 1;     Регистр.ОборотыТоваров.ПривязыватьСтроку(НомерСтроки);     Регистр.ОборотыТоваров.ДвижениеВыполнить(); // Оборотный регистр осуществляет не приход/расход а движение   КонецЦикла; КонецПроцедуры

Условия, при которых документ не должен проводиться напишите сами, если хотите. В этой процедуре мы совершили движение сразу по трем регистрам. По одному - "Взаиморасчеты" – сразу на весь документ суммой, и по двум другим построчно. Сколько строк будет в документе, столько и движений по каждому регистру.

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

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

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

  4. Создадим форму журнала;

  5. Отредактируем размеры и расположение граф;

  6. Сохраним конфигурацию;

  7. Загрузим 1С:Предприятие;

  8. Заполним сперва новую константу значением – 1 сорт;

  9. Создадим приходную накладную №1 от 04.10.2000;

  10. Пусть нам фирма по договору №12 на склад №1 поставит партию товара;

  11. Введем товар. Мы видим, что значения в остальных колонках заполнились автоматически;

  12. Давайте изменим количество на 5. Посмотрим как изменились значения в других колонках;

  13. А теперь единицы;

  14. И сорт поставим второй;

  15. И вообще, это будет другой товар;

  16. Введем еще несколько позиций;

  17. Нажмем [Печать]. Наша накладная готова к посылке на принтер;

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

  19. Откроем журнал "Накладные";

  20. Найдем нашу накладную;

  21. Посмотрим какие движения она совершила;

  22. Как мы и хотели, накладная двинула три регистра;

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

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

Соседние файлы в папке Отчет по производственной практике