Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 ноя 2024, 15:01

Задача для подготовки к экзамену специалист по платформе

Автор Дмитрий@, 17 окт 2015, 17:18

0 Пользователей и 1 гость просматривают эту тему.

Дмитрий@

Предмет
1С:Зарплата и управление персоналом
Работодатель до собеседования дал задачу, думаю что такая задача есть в экзамене специалиста по платформе. Поэтому выложил ее решение здесь.
Условие задачи.

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

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

Решение задачи должно представлять собой законченный результат с проработанной прикладной логикой и интерфейсом.

В документе "Расходная" должна быть возможность указания конкретной партии (для каждой строки). Если в строке указана партия, то должна списываться себестоимость указанной партии. Если же партия не выбрана, то себестоимость должна списываться по методу FIFO.

Прописать проведение документов "Приходная" и "Расходная" по регистру бухгалтерии в разрезе складов. В бухгалтерском учете суммовой и количественный учет товаров ведется на счете "Товары" в разрезе справочника "Номенклатура" и "МестаХранения".

Проводки:

​ Приходная:

o​ Дебет счета " Товары " / кредит счета " Поставщики" на сумму поступления

​ Расходная:

o​ Дебет счета "ПрибылиУбытки" / кредит счета "Товары" на сумму себестоимости

o​ Дебет счета "Покупатели" / кредит счета " ПрибылиУбытки" на сумму в продажных ценах

Сформировать отчеты, используя систему компоновки данных:

По регистру бухгалтерии - "Движение товаров" (сальдо на начало дебетовое, дебетовый оборот, кредитовый оборот, сальдо на конец дебетовое) по счету "Товары" в разрезе субконто этого счета.

На форме отчета пользователь должен иметь возможность выбирать период формирования и склад для отбора. Данные реквизиты заполняются опционально.

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

А это код из документа Расходная

Процедура ОбработкаПроведения(Отказ, Режим)

ДвиженияХозрасчетный = Движения.Хозрасчетный;
ДвиженияХозрасчетный.Записывать = Истина;

Блокировка = Новый БлокировкаДанных;

ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.Хозрасчетный");
ЭлементБлокировки.УстановитьЗначение("Счет",ПланыСчетов.Хозрасчетный.Товары);
ЭлементБлокировки.УстановитьЗначение("Организация",Организация);
ЭлементБлокировки.УстановитьЗначение("Субконто1",Склад);
ЭлементБлокировки.ИсточникДанных = Номенклатура;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Субконто2","Номенклатура");

Блокировка.Заблокировать();

//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МАКСИМУМ(РасходнаяНоменклатура.НомерСтроки) КАК НомерСтроки,
| РасходнаяНоменклатура.Номенклатура КАК Номенклатура,
| СУММА(РасходнаяНоменклатура.Количество) КАК Количество,
| СУММА(РасходнаяНоменклатура.Сумма) КАК Сумма,
| РасходнаяНоменклатура.Партия КАК Партия
|ПОМЕСТИТЬ НоменклатураПоПартиям
|ИЗ
| Документ.Расходная.Номенклатура КАК РасходнаяНоменклатура
|ГДЕ
| РасходнаяНоменклатура.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНоменклатура.Номенклатура,
| РасходнаяНоменклатура.Партия
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Партия
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| МАКСИМУМ(НоменклатураПоПартиям.НомерСтроки) КАК НомерСтроки,
| НоменклатураПоПартиям.Номенклатура КАК Номенклатура,
| СУММА(НоменклатураПоПартиям.Количество) КАК Количество,
| СУММА(НоменклатураПоПартиям.Сумма) КАК Сумма
|ПОМЕСТИТЬ НоменклатураОбщая
|ИЗ
| НоменклатураПоПартиям КАК НоменклатураПоПартиям
|
|СГРУППИРОВАТЬ ПО
| НоменклатураПоПартиям.Номенклатура
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ХозрасчетныйОстатки.Субконто2 КАК Номенклатура,
| ХозрасчетныйОстатки.Субконто3 КАК Партия,
| ХозрасчетныйОстатки.СуммаОстаток,
| ХозрасчетныйОстатки.КоличествоОстаток
|ПОМЕСТИТЬ НоменклатураОстатки
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(
| &Период,
| Счет = &Счет,
| ,
| Организация = &Организация
| И Субконто1 = &Склад
| И Субконто2 В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| НоменклатураОбщая.Номенклатура
| ИЗ
| НоменклатураОбщая КАК НоменклатураОбщая)) КАК ХозрасчетныйОстатки
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Партия
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| НоменклатураОбщая.НомерСтроки,
| НоменклатураОбщая.Номенклатура КАК Номенклатура,
| НоменклатураОбщая.Количество,
| НоменклатураОбщая.Сумма,
| ЕСТЬNULL(НоменклатураОстатки.СуммаОстаток, 0) КАК СуммаОстаток,
| ЕСТЬNULL(НоменклатураОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
| НоменклатураСПартиями.Партия КАК Партия,
| ЕСТЬNULL(НоменклатураСПартиями.Количество, 0) КАК КоличествоДляСписанияВПартии
|ПОМЕСТИТЬ НоменклатураОстаткиПоПартиям
|ИЗ
| НоменклатураОбщая КАК НоменклатураОбщая
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| НоменклатураПоПартиям.Номенклатура КАК Номенклатура,
| НоменклатураПоПартиям.Количество КАК Количество,
| НоменклатураПоПартиям.Партия КАК Партия
| ИЗ
| НоменклатураПоПартиям КАК НоменклатураПоПартиям
| ГДЕ
| НоменклатураПоПартиям.Партия <> ЗНАЧЕНИЕ(Документ.Приходная.ПустаяСсылка)) КАК НоменклатураСПартиями
| ЛЕВОЕ СОЕДИНЕНИЕ НоменклатураОстатки КАК НоменклатураОстатки
| ПО НоменклатураСПартиями.Партия = НоменклатураОстатки.Партия
| И НоменклатураСПартиями.Номенклатура = НоменклатураОстатки.Номенклатура
| ПО НоменклатураОбщая.Номенклатура = НоменклатураСПартиями.Номенклатура
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Партия
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| НоменклатураОстаткиПоПартиям.НомерСтроки КАК НомерСтроки,
| НоменклатураОстаткиПоПартиям.Номенклатура КАК Номенклатура,
| НоменклатураОстаткиПоПартиям.Количество КАК КоличествоПродажи,
| НоменклатураОстаткиПоПартиям.Сумма КАК СуммаПродажи,
| НоменклатураОстаткиПоПартиям.СуммаОстаток КАК СуммаОстаток,
| НоменклатураОстаткиПоПартиям.КоличествоОстаток КАК КоличествоОстаток,
| НоменклатураОстаткиПоПартиям.Партия КАК Партия,
| НоменклатураОстаткиПоПартиям.КоличествоДляСписанияВПартии КАК КоличествоДляСписанияВПартии,
| 1 КАК Сортировка,
| НоменклатураОстаткиПоПартиям.Партия.Дата КАК ПартияДата
|ИЗ
| НоменклатураОстаткиПоПартиям КАК НоменклатураОстаткиПоПартиям
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| НоменклатураОбщая.НомерСтроки,
| НоменклатураОбщая.Номенклатура,
| НоменклатураОбщая.Количество,
| НоменклатураОбщая.Сумма,
| ВЫБОР
| КОГДА НоменклатураОстаткиПоПартиям.Партия ЕСТЬ NULL
| ТОГДА НоменклатураОстатки.СуммаОстаток
| ИНАЧЕ ВЫБОР
| КОГДА НоменклатураОстатки.КоличествоОстаток < НоменклатураОстаткиПоПартиям.КоличествоДляСписанияВПартии
| ТОГДА 0
| ИНАЧЕ НоменклатураОстатки.СуммаОстаток - НоменклатураОстатки.СуммаОстаток * НоменклатураОстаткиПоПартиям.КоличествоДляСписанияВПартии / НоменклатураОстатки.КоличествоОстаток
| КОНЕЦ
| КОНЕЦ,
| ВЫБОР
| КОГДА НоменклатураОстаткиПоПартиям.Партия ЕСТЬ NULL
| ТОГДА НоменклатураОстатки.КоличествоОстаток
| ИНАЧЕ ВЫБОР
| КОГДА НоменклатураОстатки.КоличествоОстаток < НоменклатураОстаткиПоПартиям.КоличествоДляСписанияВПартии
| ТОГДА 0
| ИНАЧЕ НоменклатураОстатки.КоличествоОстаток - НоменклатураОстаткиПоПартиям.КоличествоДляСписанияВПартии
| КОНЕЦ
| КОНЕЦ,
| НоменклатураОстатки.Партия,
| 0,
| 2,
| НоменклатураОстатки.Партия.Дата
|ИЗ
| НоменклатураОбщая КАК НоменклатураОбщая
| ЛЕВОЕ СОЕДИНЕНИЕ НоменклатураОстатки КАК НоменклатураОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ НоменклатураОстаткиПоПартиям КАК НоменклатураОстаткиПоПартиям
| ПО НоменклатураОстатки.Номенклатура = НоменклатураОстаткиПоПартиям.Номенклатура
| И НоменклатураОстатки.Партия = НоменклатураОстаткиПоПартиям.Партия
| ПО НоменклатураОбщая.Номенклатура = НоменклатураОстатки.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| Сортировка,
| ПартияДата
|ИТОГИ
| МАКСИМУМ(НомерСтроки),
| МАКСИМУМ(КоличествоПродажи),
| МАКСИМУМ(СуммаПродажи),
| СУММА(СуммаОстаток),
| СУММА(КоличествоОстаток),
| СУММА(КоличествоДляСписанияВПартии)
|ПО
| Номенклатура";

Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("Период", ?(РежимПроведенияДокумента.Оперативный = Режим, МоментВремени(),КонецДня(ТекущаяДата())));
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.Товары);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
СуммаПродажиОбщая = 0;
Пока ВыборкаНоменклатура.Следующий() Цикл
// Вставить обработку выборки ВыборкаНоменклатура
Товар = ВыборкаНоменклатура.Номенклатура;
КоличествоСписать = ВыборкаНоменклатура.КоличествоПродажи;
КоличествоОстатокВсего = ВыборкаНоменклатура.КоличествоОстаток;

Если КоличествоСписать > КоличествоОстатокВсего Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Поле = "Номенклатура["+(ВыборкаНоменклатура.НомерСтроки-1)+"].Количество";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Текст = "Не хватает "+Товар+", есть на складе "+КоличествоОстатокВсего+", нужно списать "+КоличествоСписать+".";
Сообщение.Сообщить();
Продолжить;
КонецЕсли;

СуммаПродажиОбщая = СуммаПродажиОбщая + ВыборкаНоменклатура.СуммаПродажи;

ВыборкаДетальныеЗаписи = ВыборкаНоменклатура.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() И КоличествоСписать > 0 Цикл

Если ВыборкаДетальныеЗаписи.КоличествоОстаток = 0 Тогда
Продолжить;
КонецЕсли;

Если ВыборкаДетальныеЗаписи.КоличествоДляСписанияВПартии <> 0 Тогда
Количество = МИН(ВыборкаДетальныеЗаписи.КоличествоДляСписанияВПартии,
ВыборкаДетальныеЗаписи.КоличествоОстаток);
Иначе
Количество = МИН(КоличествоСписать,ВыборкаДетальныеЗаписи.КоличествоОстаток);
КонецЕсли;

Если Количество = ВыборкаДетальныеЗаписи.КоличествоОстаток Тогда
Сумма = ВыборкаДетальныеЗаписи.СуммаОстаток;
Иначе
Сумма = ВыборкаДетальныеЗаписи.СуммаОстаток * Количество / ВыборкаДетальныеЗаписи.КоличествоОстаток;
КонецЕсли;

// регистр Хозрасчетный
Движение = ДвиженияХозрасчетный.Добавить();
Движение.СчетДт = ПланыСчетов.Хозрасчетный.ПрибылиУбытки;
Движение.СчетКт = ПланыСчетов.Хозрасчетный.Товары;
Движение.Период = Дата;
Движение.Организация = Организация;
Движение.Сумма = Сумма;
Движение.КоличествоКт = Количество;
Движение.СубконтоКт[ПланыВидовХарактеристик.Субконто.Склад] = Склад;
Движение.СубконтоКт[ПланыВидовХарактеристик.Субконто.Номенклатура] = ВыборкаНоменклатура.Номенклатура;
Движение.СубконтоКт[ПланыВидовХарактеристик.Субконто.Партия] = ВыборкаДетальныеЗаписи.Партия;

        КоличествоСписать = КоличествоСписать - Количество;

КонецЦикла;

КонецЦикла;

Если не Отказ Тогда
// регистр Хозрасчетный
Движение = ДвиженияХозрасчетный.Добавить();
Движение.СчетДт = ПланыСчетов.Хозрасчетный.Покупатели;
Движение.СчетКт = ПланыСчетов.Хозрасчетный.ПрибылиУбытки;
Движение.Период = Дата;
Движение.Организация = Организация;
Движение.Сумма = СуммаПродажиОбщая;
КонецЕсли;

//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

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

tubor555

Всем, кто заглянул и обратил внимания доброго времени! Подскажите кто знает где найти "Решение прикладной задачи в 1с". Учусь на прикладной информатике, задали найти с описанием на 5-10 страниц. При чем нужно не просто описание, а рабочий пример. Я конечно в 1с "не в зуб ногой". Наткнулся вот на эту тему, оно не оно? Скачал этот файл с расширением .dt и репу чешу. Как оно вообще должно выглядеть и работать в принципе. Этот кусок готового какого то решения нужно же как то подкидывать в платформу. В общем кто знает куда отфутболить или у кого есть готовое решение любой прикладной задачи...
Заранее спасибо..

Дмитрий@

Есть платформа а есть конфигурация. Платформа это программа при помощи которой запускается конфигурация. Выложенный здесь файл является конфигурацией.

Юрий Осипов


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск