Пример решения задач учета на платформе 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    77920    97    15    

191

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

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

1800 руб.

06.07.2015    72473    121    9    

134

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

Источники информации для подготовки к Эксперту.

18.12.2024    9313    GraVVitY    61    

62

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

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

10.09.2024    7755    PROSTO-1C    21    

13

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

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

11.06.2024    15372    PROSTO-1C    51    

66

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

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

04.06.2024    10148    anton99    50    

57

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

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

28.05.2024    4684    DmitryOneBit    20    

20

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

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

10 стартмани

07.05.2024    9031    91    user1988637    16    

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