Комплексная задача 4.2 из материалов по экзамену на 1С специалист

Материал из КинтВики
Перейти к: навигация, поиск


Материалы

Конфигурации

Задача

4.2 Импорт товаров, валютный бухгалтерский учет, премия по базе и суммой.

В качестве исходной использовать каркасную конфигурацию.

Автоматизируется торговое предприятие. Закупки данное предприятие может проводить как за границей (за евро), так и на территории страны (за рубли). Продажи происходят только за рубли.

Необходимо дать возможность оформлять приходные накладные в той или иной валюте. Но в дальнейшем оперативный учет товаров должен осуществляться в управленческой валюте компании (рубли). То есть при проведении приходной накладной по оперативным регистрам необходимо пересчитывать суммы в рубли.

Проведение расходной накладной по регистру "ОстаткиНоменклатуры" организовать с контролем остатка товаров и со списанием себестоимости по партиям (по методу ФИФО). В алгоритме проведения расходной накладной необходимо использовать временные таблицы запросов.

Поскольку зачастую имеют место оформление покупок и продаж задним числом – необходимо использовать объект "последовательность" для предоставления возможности поиска и устранения коллизий.

В бухгалтерском учете необходимо предусмотреть ведение многовалютного учета на счетах "Касса" и "Поставщики". Для взаиморасчетов с поставщиками необходимо ввести документ "Расходный Кассовый Ордер". Проводки документа:

Дебет счета "Поставщики" (Субконто "Контрагент ") / кредит счета "Касса"

Оплата поставщикам должна производиться в той валюте, в которой был закуплен товар. Поэтому при проведении документа "Расходный Кассовый Ордер" необходимо контролировать в той ли валюте пытаемся расплатиться и есть ли требуемая сумма в наличии.

Взаиморасчеты с покупателями только рублевые и оформляться должны документом "Приходный кассовый ордер". Проводки документа:

Дебет счета "Касса"/ кредит счета "Покупатели" (Субконто "Контрагент ")

Сотрудники компании работают по шестидневной рабочей неделе. Получают оклад в зависимости от количества отработанных рабочих дней. По результатам работы могут получать премию, как процент от начисленного в этом же месяце оклада или фиксированной суммой (вводится руками расчетчика).

Используя систему компоновки данных создайте отчет по начислениям за произвольный период следующего вида:

Подразделение Сотрудник Вид расчета Период 1 Период 2 ...
...
ИТОГО

Создать бизнес-процесс «Поступление товаров». Карта маршрута бизнес-процесса:

Комплексное задание 4 2.png

Логика работы.

  • После старта бизнес-процесса должна автоматически создаваться задача «Заказ товара».
  • После выполнения задачи «Заказ товара», бизнес-процесс должен автоматически создавать следующую задачу – «Поступление товара».
  • После выполнения данной задачи бизнес-процесс должен переходить к финишу.
  • Пользователь в режиме исполнения должен иметь возможность видеть текущее состояние бизнес-процесса на карте маршрута.
  • Необходимо создать специальную форму, в которой пользователь будет видеть только свои невыполненные задачи.

Решение

Текущее состояние

Готовность: 100%

Конфигурация: Медиа:Комплексная задача 4_2.dt (История)

Метаданные

Оперативный учет

Добавлен /Справочники/МестаХранения

В /Документы/ПриходнаяНакладная

  • добавлен реквизит шапки Валюта (тип /Справочники/Валюты)

В /Документы/РасходнаяНакладная

В /РегистрыНакопления/ОстаткиНоменклатуры

  • добавлено измерение Партия (тип /Документы/ПриходнаяНакладная)
  • добавлен ресурс Сумма, тип Число.18.2

Добавлен /Последовательности/ОстаткиНоменклатуры

  • Использование/Перемещение границы при проведении: установлено в "Перемещать"
  • Использование/Входящие документы
    • Документ.РасходнаяНакладная
  • Использование/Движения, влияющие на последовательность
    • РегистрНакопления.ОстаткиНоменклатуры
  • Данные
    • Номенклатура, тип /Справочники/Номенклатура
      • Соответствие реквизитам документов: Документ.РасходнаяНакладная.ТабличнаяЧасть.Товары.Реквизит.Номенклатура
      • Соответствие реквизитам движений: РегистрНакопления.ОстаткиНоменклатуры.Измерение.Номенклатура


Бухгалтерия

По условию задачи не совсем понятно:

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

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

Например, может быть схема:

This is a graph with borders and nodes. Maybe there is an Imagemap used so the nodes may be linking to some Pages.

Вообще-то по российскому законодательству нельзя произвести покупку валюты за наличные из кассы, но в этой задаче видимо можно.. Это тоже надо прояснить в условиях. Если нельзя, то схема должна еще включать расчетный счет.

Модуль проведения приходной накладной

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

Функция ПолучитьСуммуДокумента(Сумма)
	Если Валюта.Пустая() Тогда
		Возврат Сумма;
	КонецЕсли;
	стРесурсы = РегистрыСведений.Валюты.ПолучитьПоследнее(Дата, Новый Структура("Валюта", Валюта));
	Возврат Сумма * стРесурсы.Курс;
КонецФункции

Модуль проведения расходной накладной

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	СуммаДокумента=Товары.Итог("Сумма")+Издержки.Итог("Сумма");
КонецПроцедуры

Функция ПолучитьТекстЗапроса()
	Возврат "ВЫБРАТЬ
	        |	РасходнаяНакладнаяТовары.Номенклатура,
	        |	СУММА(РасходнаяНакладнаяТовары.Количество) КАК Количество,
	        |	СУММА(РасходнаяНакладнаяТовары.Сумма) КАК Сумма
	        |ПОМЕСТИТЬ Товары
	        |ИЗ
	        |	Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары
	        |ГДЕ
	        |	РасходнаяНакладнаяТовары.Ссылка = &Ссылка
	        |
	        |СГРУППИРОВАТЬ ПО
	        |	РасходнаяНакладнаяТовары.Номенклатура
	        |;
	        |
	        |////////////////////////////////////////////////////////////////////////////////
	        |ВЫБРАТЬ
	        |	ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
	        |	ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) КАК СуммаОстаток,
	        |	ОстаткиНоменклатурыОстатки.Партия,
	        |	Товары.Номенклатура КАК Номенклатура,
	        |	Товары.Количество КАК Количество,
	        |	Товары.Сумма КАК Сумма
	        |ИЗ
	        |	Товары КАК Товары
	        |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
	        |				&МоментВремени,
	        |				Номенклатура В
	        |					(ВЫБРАТЬ
	        |						Товары.Номенклатура
	        |					ИЗ
	        |						Товары)) КАК ОстаткиНоменклатурыОстатки
	        |		ПО Товары.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
	        |
	        |УПОРЯДОЧИТЬ ПО
	        |	Номенклатура,
	        |	ОстаткиНоменклатурыОстатки.Партия.Дата
	        |ИТОГИ
	        |	СУММА(КоличествоОстаток),
	        |	СУММА(СуммаОстаток),
	        |	МАКСИМУМ(Количество),
	        |	МАКСИМУМ(Сумма)
	        |ПО
	        |	Номенклатура";
КонецФункции

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	запрос = Новый Запрос(ПолучитьТекстЗапроса());
	запрос.УстановитьПараметр("МоментВремени", МоментВремени());
	запрос.УстановитьПараметр("Ссылка", Ссылка);
	результат = запрос.Выполнить();
	
	выборкаТовар = результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	Пока выборкаТовар.Следующий() Цикл
		
		Если выборкаТовар.Количество = 0 Тогда 
			Продолжить;
		КонецЕсли;
		
		Если выборкаТовар.Количество > выборкаТовар.КоличествоОстаток Тогда
			Сообщить("Недостаточно товара " + выборкаТовар.Номенклатура + ", требуется: " + выборкаТовар.Количество + ", в наличии: " + выборкаТовар.КоличествоОстаток);
			Отказ = Истина;
			Продолжить;
		КонецЕсли;
		
		количествоКСписанию = выборкаТовар.Количество;
		выборкаПартия = выборкаТовар.Выбрать();
		
		Пока выборкаПартия.Следующий() Цикл
			Если выборкаПартия.КоличествоОстаток = 0 Тогда
				Продолжить;
			КонецЕсли;
			
			Движение = Движения.ОстаткиНоменклатуры.Добавить();
			Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
			Движение.Период = Дата;
			Движение.Номенклатура = выборкаТовар.Номенклатура;
			Движение.Партия = выборкаПартия.Партия;
			
			КоличествоПоПартии = Мин(количествоКСписанию, выборкаПартия.КоличествоОстаток);
			УчетнаяЦена = выборкаПартия.СуммаОстаток / выборкаПартия.КоличествоОстаток;
			
			Движение.Сумма = КоличествоПоПартии * УчетнаяЦена;
			Движение.Количество = КоличествоПоПартии;
			
			количествоКСписанию = количествоКСписанию - КоличествоПоПартии;
			Если количествоКСписанию = 0 Тогда
				Прервать;
			КонецЕсли;
			
		КонецЦикла;
		
		Если количествоКСписанию > 0 Тогда
			Сообщить("Нет остатков по партиям товара " + выборкаТовар.Номенклатура + ", требуется: " + количествоКСписанию);
			Отказ = Истина;
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

Модуль формы обработки "ПоследовательносьОстаткиНоменклатуры"

см. Использование последовательностей (1Cv8)

Процедура КнопкаВыполнитьНажатие(Кнопка)
	запрос = Новый Запрос("ВЫБРАТЬ
	                      |	ОстаткиНоменклатуры.Регистратор,
	                      |	ОстаткиНоменклатуры.Номенклатура
	                      |ИЗ
	                      |	Последовательность.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры
	                      |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Последовательность.ОстаткиНоменклатуры.Границы КАК ОстаткиНоменклатурыГраницы
	                      |		ПО ОстаткиНоменклатуры.Номенклатура = ОстаткиНоменклатурыГраницы.Номенклатура
	                      |			И ОстаткиНоменклатуры.МоментВремени > ОстаткиНоменклатурыГраницы.МоментВремени");
	ТабличноеПолеПоследовательность = запрос.Выполнить().Выгрузить();
	ЭлементыФормы.ТабличноеПолеПоследовательность.СоздатьКолонки();
КонецПроцедуры