Пример решения задач учета на платформе 1С 8.3

18.09.23

Разработка - Подготовка к аттестации

Рассмотрен пример решения задачи по управленческому и бухгалтерскому учету.

Задача 1. Управленческий учет

Компания занимается оптовой торговлей. Поступление товаров отражается документом «Приходная накладная», продажа — «Расходная накладная». Помимо продажи товара, могут оказываться дополнительные услуги, например по доставке. И услуги и товары указываются в одной табличной части.

Складской учет товаров не ведется.

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

Списание себестоимости товаров должно быть организовано по партиям, в зависимости от текущего значения принятого на этот год в учетной политике метода списания себестоимости (FIFO или LIFO). Еще раз подчеркивается — учетная политика действует год. На следующий год метод списания может смениться.

Необходимо построить отчет по продажам товаров за период и остаткам товара на указанную дату.

Продажи с 01.01.2019 по 31.03.2019

 

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

Количество

Себестоимость

Продажа

Прибыль

Куртка замшевая

3

300

620

320

Портсигар

3

30

50

20

Доставка

1

 

100

100

 

Прибыль рассчитывается как: «Сумма продаж» — «Себестоимость»

Остатки товаров на 01.01.2019

 

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

Партия

Количество

Стоимость

Куртка замшевая

 

4

350

 

Прих. Накладная №1

2

250

 

Прих. Накладная №2

2

100

Портсигар

 

 

65

 

Прих. Накладная №1

5

50

 

Прих. Накладная №3

1

15

 

Задача 2. Бухгалтерский учет.

Взаиморасчеты с покупателями ведутся в разрезе договоров. С каждым контрагентом может быть заключено произвольное количество договоров. Задолженность покупателей возникает при проведении документа «Расходная накладная». В этом документе пользователем указывается сам покупатель («Контрагент») и договор (договор вместе с контрагентом указывается в шапке документа). Пользователю должно быть запрещено указывать не соответствующий контрагенту договор.

Документ «Расходная накладная» формирует следующую проводку:

Дт «Покупатели» — Кт «Прибыли и убытки» на сумму продажи

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

Документ «Приход денег» формирует следующие проводки:

Дт «Касса» — Кт «Покупатели» на указанную сумму

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

Задолженность покупателей на 01.02.2019

 

Контрагент

Договор

Сумма

АО Рога и Копыта

 

100000

АО Рога и Копыта

Договор основной

40000

АО Рога и Копыта

Договор дополнительный

60000

 

Выполнялось на платформе 1С 8.3.19.1723

Определяемся с составом регистров:

 

 

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

Т.к. оказываются еще и услуги, добавляем в справочник Номенклатура реквизит "Услуга" с типом булево.

Код модуля документа Приходная Накладная:

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

Код модуля объекта Расходная Накладная:


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

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

По второй части задачи:

Справочник Договор подчинен справочнику Контрагенты. 

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

 

 

В виды субконто добавляем справочники Контрагент и Договор.

В плане счетов для счета "Покупатели" добавляем субконто Контрагент и Договор.

В плане счетов "Управленческий" на вкладке субконто проверяем заполненность соответствующего вида субконто.

Модуль объекта документа Расходная Накладная описан выше.

Модуль документа "Приход денег":


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

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

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

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

Запрос отчета "Остатки товаров" в компановке:

ВЫБРАТЬ
	ОстаткиНоменклатурыОстатки.Номенклатура КАК Номенклатура,
	ОстаткиНоменклатурыОстатки.Партия КАК Партия,
	ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК Количество,
	ОстаткиНоменклатурыОстатки.СуммаОстаток КАК Стоимость
ИЗ
	РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки

Для такого же отображения отчета необходимо сделать следующие настройки:

 

См. также

Подготовка к аттестации Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Обучающая программа 1С Online представляет собой интерактивное изучение языка запросов с самого начала: - 50 практических заданий с различным уровнем сложности; - Методические материалы по практике написания запросов; - Описание назначения таблиц и индексов 1С Предприятие 8; - Методика решения реальных задач запросом 1С; - Автоматическая система проверки решений с указанием ошибок; - Инструкции по решению задач с разъяснениями; - Техническая поддержка пользователей. Тренажер запросов подходит для начинающих и действующих разработчиков 1С

1800 руб.

11.02.2014    76984    95    15    

189

Подготовка к аттестации Программист Стажер Бесплатно (free)

Меня зовут Татьяна, в 1С-разработке я уже семь лет, а в этом году официально стала junior-специалистом. Рассказываю, как всё происходило.

10.09.2024    7108    PROSTO-1C    21    

13

Подготовка к аттестации Программист Стажер Платформа 1С v8.3 Россия Бесплатно (free)

Я Олег, разработчик 1С. Расскажу, как сдавал на сертификат Специалиста, в чём ошибся и что стоит учесть.

11.06.2024    14072    PROSTO-1C    51    

66

Подготовка к аттестации Программист Стажер Платформа 1С v8.3 Россия Бесплатно (free)

Хочу поделиться своей историей планирования обучения, подготовки к экзамену и сдачи непосредственно экзамена. Надеюсь, что это будет полезно и откинет все вопросы об экзамене.

04.06.2024    9309    anton99    50    

57

Подготовка к аттестации Стажер Конфигурации 1cv8 Фармацевтика, аптеки Россия Управленческий учет Бесплатно (free)

Краткий рассказ о выборе 1С как основного языка программирования для дипломной работы в университете, и само приложение к диплому.

28.05.2024    4336    DmitryOneBit    20    

20

Подготовка к аттестации Программист Стажер Платформа 1С v8.3 Россия Абонемент ($m)

В публикации предоставлено решения 7 билетов из сборника 2022 года . Решения выполнены по пунктам и подробно, каждый БП описан и решен по условиям задач. Благодаря данному решению к экзамену стало подготовиться проще, чем когда-либо.

10 стартмани

07.05.2024    8367    83    user1988637    16    

42

Подготовка к аттестации Платформа 1С v8.3 1С:ERP Управление предприятием 2 Россия Абонемент ($m)

В публикации представлены только решения тех заданий, который попадаются на экзамене 1С:СК управленческого учета ERP. Благодаря данным решениям к экзамену стало подготовиться проще, чем когда-либо.

10 стартмани

08.04.2024    2970    39    user1988637    4    

15

Подготовка к аттестации Программист Стажер Платформа 1С v8.3 Россия Бесплатно (free)

Готовилась три месяца, сдала с первого раза. Делюсь опытом, лайфхаками и ресурсами, по которым учила материал.

14.03.2024    18096    PROSTO-1C    47    

90
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. rwf96 26.09.23 11:40 Сейчас в теме
В обработке проведения Расходной Накладной есть ошибка. Не уменьшается переменная ОсталосьСписать во вложенном цикле.
Оставьте свое сообщение