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