Создание закупки на основании реализации в Бухгалтерия предприятия

1С:Бухгалтерия

Бывают случаи когда бухгалтерия сначала продает товар, затем его закупает задним числом. В связи с этим необходимо создание закупки на основании реализации, чтобы в программе не было минусов по остаткам.

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

Заходим в Конфигуратор и открываем конфигурацию. Сразу сделайте резервную копию! Как это сделать описывалось в статье «Как обновить конфигурацию 1С:Бухгалтерия самому».

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

Если у вас конфигурация находится на поддержке, то нам необходимо включить возможность редактирования конфигурации с дальнейшей поддержкой. Для этого переходим в «Конфигурация» — «Поддержка» — «Настройка поддержки…» и меняем настройку на «Объект поставщика редактируется с сохранением поддержки».

Настройка поддержки 1С

Редактирование формы документа ПоступлениеТоваровУслуг

Все изменения мы будем вносить в документ «ПоступлениеТоваровУслуг». В конфигурации в разделе «Документы» находим «ПоступлениеТоваровУслуг», дважды нажимаем на него, затем в открывшемся окошке переходим в «Формы» и дважды нажимаем на «ФормаДокументаТовары».

ПоступлениеТоваровУслуг

Теперь нам необходимо написать код, который будет заполнять товары после выбора реализации. Для этого в открывшейся форме документа переходим в «Модуль» и в самом конце перед #КонецОбласти пишем следующий код:

&НаСервере
Процедура Команда1НаСервере(док)
	
	для каждого оно из  док.товары цикл		
		запрос=новый запрос;
		запрос.установитьпараметр("Субконто1",оно.Номенклатура);
		запрос.установитьпараметр("сч",планысчетов.Хозрасчетный.ТоварыНаСкладах);
		запрос.установитьпараметр("дат",док.дата-1);
		запрос.текст=
		"ВЫБРАТЬ
		|	ХозрасчетныйОстатки.Субконто1,
		|	ХозрасчетныйОстатки.КоличествоОстаток как количество
		|ИЗ
		|	РегистрБухгалтерии.Хозрасчетный.Остатки(&дат, счет = &сч, , ) КАК ХозрасчетныйОстатки
		|ГДЕ
		|	ХозрасчетныйОстатки.Субконто1 = &Субконто1";
		новОст1=запрос.выполнить().Выгрузить();
		запрос=новый запрос;
		запрос.установитьпараметр("Субконто1",оно.Номенклатура);
		запрос.установитьпараметр("сч",планысчетов.Хозрасчетный.ТоварыНаСкладах);
		запрос.установитьпараметр("дат",док.дата+1);
		запрос.текст=
		"ВЫБРАТЬ
		|	ХозрасчетныйОстатки.Субконто1,
		|	ХозрасчетныйОстатки.КоличествоОстаток как количество
		|ИЗ
		|	РегистрБухгалтерии.Хозрасчетный.Остатки(&дат, счет = &сч, , ) КАК ХозрасчетныйОстатки
		|ГДЕ
		|	ХозрасчетныйОстатки.Субконто1 = &Субконто1";
		новОст=запрос.выполнить().Выгрузить();
		если новОст.Итог("Количество")<0 тогда
			нов=   объект.товары.Добавить();
			нов.цена = 0;
			нов.сумма = 0;
			заполнитьзначениясвойств(нов,оно);
			нов.счетучетандс=планысчетов.Хозрасчетный.НДСпоПриобретеннымМПЗ;
			если новОст1.Итог("Количество")<0 тогда
				нов.Количество=новОст1.Итог("Количество")-новОст.Итог("Количество");
				нов.цена = 0;
				нов.сумма = 0;
			иначе	
				нов.Количество=-новОст.Итог("Количество");
				нов.цена = 0;
				нов.сумма = 0;
			конецесли;
		конецесли;	
	конеццикла;
	тз=объект.товары.Выгрузить();
	тз.Свернуть("ЕдиницаИзмерения,Коэффициент,Номенклатура,СтавкаНДС,СчетУчета,СчетУчетаНДС,НомерГТД,СтранаПроисхождения","Количество,КоличествоМест,Цена,Сумма,СуммаНДС");
	объект.товары.Очистить();
	для каждого воть из тз цикл
		воть.сумма = воть.цена*воть.количество;
		воть.СуммаНДС = воть.сумма/1.18*0.18;
		во=объект.товары.Добавить();
		заполнитьзначениясвойств(во,воть);
		во.СчетУчетаНДС=планысчетов.Хозрасчетный.НДСпоПриобретеннымМПЗ;
		во.Всего=во.сумма;
	конеццикла;	
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьАМС(Команда)

	Перем ВыбТМЦ;
	МассивТипов = Новый Массив;
	МассивТипов.Добавить(Тип("ДокументСсылка.РеализацияТоваровУслуг"));
	ОписаниеТиповТМЦ = Новый ОписаниеТипов(МассивТипов);
	
	Если ВвестиЗначение(ВыбТМЦ, "Выберите реализацию", ОписаниеТиповТМЦ) Тогда
		Команда1НаСервере(ВыбТМЦ);
		ОбновитьИтоги(ЭтаФорма);
	КонецЕсли;
	
КонецПроцедуры

Вкратце опишу что делают написанные процедуры:

  • Берутся товары из реализации товаров;
  • Смотрится остатки товаров до реализации и остатки товаров после реализации;
  • Если товары ушли в минус, то добавляем в закупку необходимое количество товаров, чтобы на остатках стало 0 или добавляем все количество из реализации.

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

Для начала добавляем команду в форму. Переходим снова в форму из модуля, затем открываем вкладку «Команды» и нажимаем на «+».

Команды 1С

У нас создается команда для которой мы назначаем действие «ЗаполнитьАМС»  — это наша процедура, которую мы написали выше.

Команда 1С

Теперь нам осталось добавить в нужное место кнопку на форму и назначить ей созданную выше команду, в нашем случае «Команда1».

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

Создание кнопки на форме 1С

Все, осталось сохранить и обновить конфигурацию (клавиша F7).

Создание закупки на основании реализации

Теперь можно проверить как работает наша кнопка. Запускаем 1С Предприятие, переходим в «Покупки» — «Поступление (акты, накладные)» и создаем новый документ.

Создание закупки на основании реализации

В открывшемся документе заполняем обязательные поля и затем записываем. Нажимаем на нашу кнопку «Заполнить по реализации» (можете назвать по-своему), выбираем нужную реализацию и смотрим какие товары и в каком количестве заполнились.