Комплексная задача 4.2 из материалов по экзамену на 1С специалист
Содержание
Материалы
- используется платформа 8.1
- можно использовать Учебная версия (1Cv8)
- задачи из Медиа:ATT81PL.RTF
- Профессиональная разработка в системе 1С:Предприятие 8
- А.П. Габец, Д.И. Гончаров. 1С:Предприятие 8.1. Простые примеры разработки
- Использование последовательностей (1Cv8)
Конфигурации
- Медиа:НачальнаяИБДляСборника.dt - каркасная конфигурация
- Медиа:ПримерыДляСборника.dt - решения примеров для сборника
- Медиа:Комплексная задача 4_2.dt (История) - решение
Задача
4.2 Импорт товаров, валютный бухгалтерский учет, премия по базе и суммой.
В качестве исходной использовать каркасную конфигурацию.
Автоматизируется торговое предприятие. Закупки данное предприятие может проводить как за границей (за евро), так и на территории страны (за рубли). Продажи происходят только за рубли.
Необходимо дать возможность оформлять приходные накладные в той или иной валюте. Но в дальнейшем оперативный учет товаров должен осуществляться в управленческой валюте компании (рубли). То есть при проведении приходной накладной по оперативным регистрам необходимо пересчитывать суммы в рубли.
Проведение расходной накладной по регистру "ОстаткиНоменклатуры" организовать с контролем остатка товаров и со списанием себестоимости по партиям (по методу ФИФО). В алгоритме проведения расходной накладной необходимо использовать временные таблицы запросов.
Поскольку зачастую имеют место оформление покупок и продаж задним числом – необходимо использовать объект "последовательность" для предоставления возможности поиска и устранения коллизий.
В бухгалтерском учете необходимо предусмотреть ведение многовалютного учета на счетах "Касса" и "Поставщики". Для взаиморасчетов с поставщиками необходимо ввести документ "Расходный Кассовый Ордер". Проводки документа:
Дебет счета "Поставщики" (Субконто "Контрагент ") / кредит счета "Касса"
Оплата поставщикам должна производиться в той валюте, в которой был закуплен товар. Поэтому при проведении документа "Расходный Кассовый Ордер" необходимо контролировать в той ли валюте пытаемся расплатиться и есть ли требуемая сумма в наличии.
Взаиморасчеты с покупателями только рублевые и оформляться должны документом "Приходный кассовый ордер". Проводки документа:
Дебет счета "Касса"/ кредит счета "Покупатели" (Субконто "Контрагент ")
Сотрудники компании работают по шестидневной рабочей неделе. Получают оклад в зависимости от количества отработанных рабочих дней. По результатам работы могут получать премию, как процент от начисленного в этом же месяце оклада или фиксированной суммой (вводится руками расчетчика).
Используя систему компоновки данных создайте отчет по начислениям за произвольный период следующего вида:
Подразделение | Сотрудник | Вид расчета | Период 1 | Период 2 | ... |
---|---|---|---|---|---|
... | |||||
ИТОГО |
Создать бизнес-процесс «Поступление товаров». Карта маршрута бизнес-процесса:
Логика работы.
- После старта бизнес-процесса должна автоматически создаваться задача «Заказ товара».
- После выполнения задачи «Заказ товара», бизнес-процесс должен автоматически создавать следующую задачу – «Поступление товара».
- После выполнения данной задачи бизнес-процесс должен переходить к финишу.
- Пользователь в режиме исполнения должен иметь возможность видеть текущее состояние бизнес-процесса на карте маршрута.
- Необходимо создать специальную форму, в которой пользователь будет видеть только свои невыполненные задачи.
Решение
Текущее состояние
Готовность: 100%
Конфигурация: Медиа:Комплексная задача 4_2.dt (История)
Метаданные
Оперативный учет
Добавлен /Справочники/МестаХранения
В /Документы/ПриходнаяНакладная
- добавлен реквизит шапки Валюта (тип /Справочники/Валюты)
В /Документы/РасходнаяНакладная
В /РегистрыНакопления/ОстаткиНоменклатуры
- добавлено измерение Партия (тип /Документы/ПриходнаяНакладная)
- добавлен ресурс Сумма, тип Число.18.2
Добавлен /Последовательности/ОстаткиНоменклатуры
- Использование/Перемещение границы при проведении: установлено в "Перемещать"
- Использование/Входящие документы
- Документ.РасходнаяНакладная
- Использование/Движения, влияющие на последовательность
- РегистрНакопления.ОстаткиНоменклатуры
- Данные
- Номенклатура, тип /Справочники/Номенклатура
- Соответствие реквизитам документов: Документ.РасходнаяНакладная.ТабличнаяЧасть.Товары.Реквизит.Номенклатура
- Соответствие реквизитам движений: РегистрНакопления.ОстаткиНоменклатуры.Измерение.Номенклатура
- Номенклатура, тип /Справочники/Номенклатура
Бухгалтерия
По условию задачи не совсем понятно:
- Должны ли документы "ПриходнаяНакладная" и "РасходнаяНакладная" делать движения соответственно по счетам "Поставщики" и "Покупатели".
- в этом случае они должны вести учет товаров на счете "Товары", которые в сумме совпадают с регистром "ОстаткиНоменклатуры", но не разделены по партиям, складам и так далее..
- Откуда берется валютный остаток в кассе, если приход в кассу только в рублях? Варианты:
- операция: покупка валюты за наличные ("конвертация" денег прямо в кассе?)
- операция: РКО рублей на расчетный счет, конвертация на валютный счет, ПКО валюты в кассу
- расход в рублях по курсу валюты (РКО: кредит рублевый И валютный, дебет рублевый И валютный)
- в этом случае не совсем понятно что означает фраза "контролировать в той ли валюте пытаемся расплатиться и есть ли требуемая сумма в наличии". "контролировать в той ли валюте пытаемся расплатиться" можно проверив кредитовый остаток по валюте РКО на счете "Поставщики". А вот что значит "есть ли требуемая сумма в наличии"? Есть рублевый эквивалент необходимой сумме в валюте? Или же в кассе должен быть остаток именно в этой валюте? Откуда тогда он возьмется?
Поскольку есть общее правило о замыкании всех остатков, то есть в общем случае должен существовать замкнутый контур движения средств, и этот вопрос надо прояснять прежде чем начинать выполнение задания.
Например, может быть схема:
Вообще-то по российскому законодательству нельзя произвести покупку валюты за наличные из кассы, но в этой задаче видимо можно.. Это тоже надо прояснить в условиях. Если нельзя, то схема должна еще включать расчетный счет.
Модуль проведения приходной накладной
Процедура ОбработкаПроведения(Отказ, Режим)
Для Каждого ТекСтрокаТовары Из Товары Цикл
// регистр ОстаткиНоменклатуры Приход
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Количество = ТекСтрокаТовары.Количество;
Движение.Сумма = ПолучитьСуммуДокумента(ТекСтрокаТовары.Сумма);
Движение.Партия = Ссылка;
КонецЦикла;
КонецПроцедуры
Функция ПолучитьСуммуДокумента(Сумма)
Если Валюта.Пустая() Тогда
Возврат Сумма;
КонецЕсли;
стРесурсы = РегистрыСведений.Валюты.ПолучитьПоследнее(Дата, Новый Структура("Валюта", Валюта));
Возврат Сумма * стРесурсы.Курс;
КонецФункции
Модуль проведения расходной накладной
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
СуммаДокумента=Товары.Итог("Сумма")+Издержки.Итог("Сумма");
КонецПроцедуры
Функция ПолучитьТекстЗапроса()
Возврат "ВЫБРАТЬ
| РасходнаяНакладнаяТовары.Номенклатура,
| СУММА(РасходнаяНакладнаяТовары.Количество) КАК Количество,
| СУММА(РасходнаяНакладнаяТовары.Сумма) КАК Сумма
|ПОМЕСТИТЬ Товары
|ИЗ
| Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары
|ГДЕ
| РасходнаяНакладнаяТовары.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяТовары.Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
| ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) КАК СуммаОстаток,
| ОстаткиНоменклатурыОстатки.Партия,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Количество КАК Количество,
| Товары.Сумма КАК Сумма
|ИЗ
| Товары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
| &МоментВремени,
| Номенклатура В
| (ВЫБРАТЬ
| Товары.Номенклатура
| ИЗ
| Товары)) КАК ОстаткиНоменклатурыОстатки
| ПО Товары.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| ОстаткиНоменклатурыОстатки.Партия.Дата
|ИТОГИ
| СУММА(КоличествоОстаток),
| СУММА(СуммаОстаток),
| МАКСИМУМ(Количество),
| МАКСИМУМ(Сумма)
|ПО
| Номенклатура";
КонецФункции
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
запрос = Новый Запрос(ПолучитьТекстЗапроса());
запрос.УстановитьПараметр("МоментВремени", МоментВремени());
запрос.УстановитьПараметр("Ссылка", Ссылка);
результат = запрос.Выполнить();
выборкаТовар = результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока выборкаТовар.Следующий() Цикл
Если выборкаТовар.Количество = 0 Тогда
Продолжить;
КонецЕсли;
Если выборкаТовар.Количество > выборкаТовар.КоличествоОстаток Тогда
Сообщить("Недостаточно товара " + выборкаТовар.Номенклатура + ", требуется: " + выборкаТовар.Количество + ", в наличии: " + выборкаТовар.КоличествоОстаток);
Отказ = Истина;
Продолжить;
КонецЕсли;
количествоКСписанию = выборкаТовар.Количество;
выборкаПартия = выборкаТовар.Выбрать();
Пока выборкаПартия.Следующий() Цикл
Если выборкаПартия.КоличествоОстаток = 0 Тогда
Продолжить;
КонецЕсли;
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = выборкаТовар.Номенклатура;
Движение.Партия = выборкаПартия.Партия;
КоличествоПоПартии = Мин(количествоКСписанию, выборкаПартия.КоличествоОстаток);
УчетнаяЦена = выборкаПартия.СуммаОстаток / выборкаПартия.КоличествоОстаток;
Движение.Сумма = КоличествоПоПартии * УчетнаяЦена;
Движение.Количество = КоличествоПоПартии;
количествоКСписанию = количествоКСписанию - КоличествоПоПартии;
Если количествоКСписанию = 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если количествоКСписанию > 0 Тогда
Сообщить("Нет остатков по партиям товара " + выборкаТовар.Номенклатура + ", требуется: " + количествоКСписанию);
Отказ = Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Модуль формы обработки "ПоследовательносьОстаткиНоменклатуры"
см. Использование последовательностей (1Cv8)
Процедура КнопкаВыполнитьНажатие(Кнопка)
запрос = Новый Запрос("ВЫБРАТЬ
| ОстаткиНоменклатуры.Регистратор,
| ОстаткиНоменклатуры.Номенклатура
|ИЗ
| Последовательность.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Последовательность.ОстаткиНоменклатуры.Границы КАК ОстаткиНоменклатурыГраницы
| ПО ОстаткиНоменклатуры.Номенклатура = ОстаткиНоменклатурыГраницы.Номенклатура
| И ОстаткиНоменклатуры.МоментВремени > ОстаткиНоменклатурыГраницы.МоментВремени");
ТабличноеПолеПоследовательность = запрос.Выполнить().Выгрузить();
ЭлементыФормы.ТабличноеПолеПоследовательность.СоздатьКолонки();
КонецПроцедуры