Создание поступления на основании реализации в Бухгалтерия предприятия
Бывают случаи когда бухгалтерия сначала продает товар, затем его закупает задним числом. В связи с этим необходимо создание закупки на основании реализации, чтобы в программе не было минусов по остаткам.
Ниже рассмотрим вариант доработки конфигурации для автоматического заполнения накладной на закупку товарами, по которым образуются минусы после проведения документа реализации.
Заходим в Конфигуратор и открываем конфигурацию. Сразу сделайте резервную копию! Как это сделать описывалось в статье «Как обновить конфигурацию 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».
Создаем кнопку и перетаскиваем в место где мы хотели бы ее видеть, после привязки к ней команды она появится на форме.

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

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