Пример решения задач учета на платформе 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С OnLine. Интерактивная обучающая программа.

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

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

1800 руб.

11.02.2014    74192    679    14    

168

Оптимизация запросов 1С - от теории к практике

Подготовка к аттестации Запросы Конфигурации 1cv8 Платные (руб)

Желаете повысить свой уровень разработки? Не знаете, как оптимизировать работу тяжелых запросов 1С? Или знаете методы оптимизации, но на практике не получаете результат? Тогда эта интерактивная обучающая программа для Вас! Оптимизация запросов прямо в программе 1С:Предприятие 8. Несколько десятков практических заданий, рассматривающих методы оптимизации на практике. От Вас требуются реальные решения - оптимизация представленных запросов. Автоматизированная система оценит Ваш запрос и представит результат проверки.

1800 руб.

06.07.2015    71034    118    9    

128

Экзамен "1С:Специалист-консультант" по внедрению подсистем управленческого учета в 1С:ERP. Полные и правильные решения билетов

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

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

10 стартмани

08.04.2024    1172    14    user1988637    0    

10

Программист 1С: как начать с нуля с минимальными затратами

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

Информация будет полезна многим начинающим программистам 1C и тем, кто хочет что-то изменить в своей жизни, испытывая жизненные трудности, с минимальными затратами.

18.03.2024    2704    AlOkt    4    

6

Как я готовилась к экзамену на Специалиста по платформе 1С

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

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

14.03.2024    11168    PROSTO-1C    46    

85

Как я стал Экспертом по технологическим вопросам за 3 месяца. Часть 2 (обновлена)

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

Мой опыт подготовки и сдачи к экзамену 1С: Эксперт по технологическим вопросам. Часть 2.

04.02.2024    6221    shuhratsj    16    

75

Как я стал Экспертом по технологическим вопросам за 3 месяца

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

Мой опыт подготовки и сдачи к экзамену 1С: Эксперт по технологическим вопросам за 3 месяца. Часть 1.

29.01.2024    13960    shuhratsj    103    

154

1С: Специалист-консультант ЗУП 8. Решения из сборника задач для подготовки к экзамену «1С:Специалист-консультант» по внедрению прикладного решения „1С:Зарплата и управление персоналом 8“, редакция сентябрь 2023. Часть 6

Подготовка к аттестации Зарплата Кадровый учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Абонемент ($m)

Часть шестая. Делюсь сквозным решением 15-ти задач из сборника задач для подготовки к экзамену «1С:Специалист-консультант» по внедрению прикладного решения „1С:Зарплата и управление персоналом 8“, редакция сентябрь 2023.

5 стартмани

01.12.2023    1546    19    Ocherkcons    0    

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