helpf.pro
Регистрация
 0 
Распечатать

Проведение документа по регистру бухгалтерии

Задача: Есть два склада Склад1 и Склад2. Нужно переместить определенное количество товара со склада1 на склад2. При списании со склада1 нужно проверять остаток, что хватает товара. Проведение сделать по регистру бухгалтерии.(проверку тоже по регистру бухгалтерии).

Решение: В Шапке документа Склад1 и Склад2. В Табличной части номенклатура и количество.
Код 1C v 8.х
 Процедура ОбработкаПроведения(Отказ, Режим)

Движения.Хозрасчетный.Очистить();
Движения.Хозрасчетный.Записать();
Движения.Хозрасчетный.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Запрос = Новый Запрос; //проверяем сколько осталось на складе1
Запрос.Текст = "ВЫБРАТЬ
| ХозрасчетныйОстатки.КоличествоОстатокДт
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки КАК ХозрасчетныйОстатки
|ГДЕ
| ХозрасчетныйОстатки.Счет = &Счет
| И ХозрасчетныйОстатки.Субконто1 = &Субконто1
| И ХозрасчетныйОстатки.Субконто2 = &Субконто2";
Запрос.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.ТоварыНаСкладах); //41.1
Запрос.УстановитьПараметр("Субконто1",ТекСтрокаТовары.Номенклатура);
Запрос.УстановитьПараметр("Субконто2",Склад1);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Если Выборка.КоличествоОстатокДт < ТекСтрокаТовары.Количество Тогда
Сообщить("На складе1 остака: " + СокрЛП(Выборка.КоличествоОстатокДт));
Отказ = Истина;
Возврат;
КонецЕсли;
Иначе
Сообщить("нет остатка на складе1");
Отказ = Истина;
Возврат;
КонецЕсли;

Движение = Движения.Хозрасчетный.Добавить();
Движение.СчетКт = ПланыСчетов.Хозрасчетный.ТоварыНаСкладах; //Списываем
Движение.СчетДт = ПланыСчетов.Хозрасчетный.ТоварыНаСкладах; //приходуем
Движение.Период = Дата;
Движение.КоличествоКт = ТекСтрокаТовары.Количество;
Движение.ДатаЗаписи = Дата;
Движение.Содержание = "Перемещение";

БухгалтерскийУчет.УстановитьСубконто(Движение.СчетКт,Движение.СубконтоКт,
"Номенклатура",ТекСтрокаТовары.Номенклатура);
БухгалтерскийУчет.УстановитьСубконто(Движение.СчетКт,Движение.СубконтоКт,
"Склады",Склад1);

БухгалтерскийУчет.УстановитьСубконто(Движение.СчетДт,Движение.СубконтоДт,
"Номенклатура",ТекСтрокаТовары.Номенклатура);
БухгалтерскийУчет.УстановитьСубконто(Движение.СчетДт,Движение.СубконтоДт,
"Склады",Склад2);
//Или так
//Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура] = Номенклатура;
//Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады] = Склад1;
//Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура] = Номенклатура;
//Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады] = Склад2;
КонецЦикла;

КонецПроцедуры
Разместил:   Версии: | 8.x | 8.2 УП |  Дата:   Прочитано: 24367
 0 
Распечатать
Возможно, вас также заинтересует
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 50
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
1С Предприятие что это? 12
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое
Восстановление партионного учета в УТ 1
Проблема следующая: при выполнении стандартной обработки " проведение по партиям" , непонятно почему, но граница актуальности партионного учета не сдвигается, хотя при перепроведении документов никаких ошибок не возникает. Оказывается: дата гр
Выборка из результата запроса всех вошедших в него значений группировок 4
При обходе результата запроса нередко возникает необходимость получения всех значений группировок внутри какой-либо другой группировки. Такая возможность может понадобиться, например, при выводе кросс отчета. Для обеспечения такой возможности в объек
Выбрать все движения регистра по датам в заданном интервале дат 0
Выбрать все движения регистра по датам в заданном интервале дат рег=создатьобъект(" Регистр.Обороты" ); рег.ВыбратьДвижения(НачМесяца(ТекущаяДата())); Пока рег.ПолучитьДвижение()=1 Цикл Сообщить(" Товар=" +строка(рег.Товар)+ " склад=" +строка(
Посмотреть все результаты поиска похожих
Комментарии
E_Migachev
09.11.2012 12:57Комментарий: 2
E_Migachev
vad_and_soft, это лишь общий пример не сложной реализации.
о том что надо это делать одним запросом - согласен на все 100%, но каждый может сделать в силу своих способностей! А это как пример начинающим - более-менее работающего кода для основы.
vad_and_soft
09.11.2012 03:14Комментарий: 1
vad_and_soft
Простите, это пример как КАТЕГОРИЧЕСКИ НЕЛЬЗЯ писать обработку! Есть и ошибки: в запросе получаются текущие остатки, а документ может выписываться задним числом. Правильно делать: ОДНИМ запросом получить остатки по НОМЕНКЛАТУРАМ, Складам и счетам учета на момент документа, затем проверять количество и цены списания и т.д.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.