Добрый вечер. Очень давно хотела обработку по Формированию РН из ТЗОстатков. Как смогла так и настряпала. Прошу не ругать меня.
1.Сначала я выбрала в ТЗКлиенты данные по контрагентам по 361 счету с отрицательным долгом
2.Набрала ВыбДок (это излишки по остаткам ТМЦ между Бух.базой и Складом и загрузила их в Расходную накладную по продажной цене)
3.Выгрузила эти излишки в ТЗОстатки
4.СоздатьОбъект("Документ.РасходнаяНакладная") и загружаю в ТЗОстатки
5. Необходимо их обработать
а)Если докРН.СуммаДокНал>докРН.Итог("СуммаСНДС") Тогда
Сообщить ("Нехватает товара!!!");
прерываю!!!!!!!
б) Если докРН.СуммаДокНал>докРН.Итог("СуммаСНДС") Тогда
и начинается самое ТРУДНОЕ как расчитать ТекКво= если ТМЦ.БазЕдиница "шт". то ОКР, если "кг" оставляем как есть ("помогите расчитать нужное колво!!!!");
Я понимаю, что нужно пробежаться по строках в документе и убрать лишнее кво и вернуть его в ТЗОстатки для создания следующей РН !!!!!!
Если не трудно подскажите
Процедура СоздатьДокРН()
//=========================не трогать====================================================================
//---1---//
//==========создаем расходныйе накладный по выбраным контрагентам==========
ТЗКлиенты.ВыбратьСтроки();
Пока ТЗКлиенты.ПолучитьСтроку()=1 Цикл//1 начало
докРН = СоздатьОбъект("Документ.РасходнаяНакладная");
докРН.Новый();
докРН.Фирма = глВосстановитьЗначение(,"БазФирма");
докРН.Валюта = Константа.ОсновнаяВалюта;
докРН.Курс = докРН.Валюта.Курс.Получить(докРН.ДатаДок);
докРН.ВидНДС = докРН.Фирма.СтавкаНДС;
докРН.ДатаДок = ТекущаяДата();
докРН.Контрагент = ТЗКлиенты.Контрагент;
докРН.СуммаДокНал= ТЗКлиенты.Долг;
докРН.ВидТорговли = докРН.Контрагент.ВидТорговли;
докРН.СчетКонтрагента =СчетПоКоду("361");
докРН.МестоХранения = ВыбСклад;
//=========================не трогать====================================================================
//----2----//
//==========создаем список ТМЦ в расходных накладных по выбраным контрагентам====
ТЗОстатки.ВыбратьСтроки();
Пока ТЗОстатки.ПолучитьСтроку()=1 Цикл //2 начало
докРН.НоваяСтрока();
докРН.ТМЦ = ТЗОстатки.ТМЦ;
докРН.Ед = ТЗОстатки.Ед;
докРН.Коэффициент = ТЗОстатки.Коэффициент;
докРН.Кво = ТЗОстатки.СписатьКво;
докРН.ЦенаСНДС = ТЗОстатки.ЦенаСНДС;
докРН.СуммаСНДС = докРН.Кво* докРН.ЦенаСНДС;
//=========================не трогать====================================================================
//----3----//
Если докРН.СуммаДокНал>докРН.Итог("СуммаСНДС") Тогда
Сообщить ("Нехватает товара!!!");
возврат;
КонецЕсли;
//=========================не трогать====================================================================
//----4----//
// как расчитать сколько нужно списать колва в РН !!!!!!!!!!!
Если докРН.СуммаДокНал>докРН.Итог("СуммаСНДС") Тогда
докРН.ВыбратьСтроки();
Пока докРН.ПолучитьСтроку()=1 Цикл //3
ИзлишекСуммы=докРН.СуммаДокНал-докРН.Итог("СуммаСНДС");
сообщить("излишек"+ ИзлишекСуммы);
// не обходимо пробежаться по строках в документе и убрать лишее!!!!!!
текКолСтрокРН = ТЗОстатки.КоличествоСтрок();
Для ы = 1 По текКолСтрокРН Цикл
ТекКво= если ТМЦ.БазЕдиница "шт". то ОКР, если "кг" оставляем как есть ("помогите расчитать нужное колво!!!!");
докРН.Кво = ТекКво;
докРН.ЦенаСНДС = ТЗОстатки.ЦенаСНДС;
докРН.СуммаСНДС = докРН.Кво* докРН.ЦенаСНДС;
КонецЦикла;
КонецЦикла;
КонецЕсли;
//----5----//
// возращаяю в таблицу ТЗОстатки-лишее кол-во товара из РН
докРН.ВыбратьСтроки();
Пока докРН.ПолучитьСтроку()=1 Цикл //3
ТЗОстатки.НоваяСтрока();
ТЗОстатки.СписатьКво=ТЗОстатки.СписатьКво-докРН.Кво;
ТЗОстатки.СписатьЦенаСНДС= ТЗОстатки.ЦенаСНДС;
ТЗОстатки.СписатьСумма= ТЗОстатки.СписатьКво*ТЗОстатки.СписатьЦенаСНДС;
КонецЦикла;
//=========================не трогать====================================================================
КонецЦикла;//2 конец
Сообщить(докРН.Контрагент);
Сообщить("Итого"+докРН.Итог("СуммаСНДС"));
//=========================не трогать====================================================================
докРН.Записать();
Сообщить(докРН.ТекущийДокумент()+"Создан!");
Если флПроводить=1 Тогда
докРН.Провести();
Сообщить(докРН.ТекущийДокумент()+"Проведен!");
КонецЕсли;
//====================================================================================================
КонецЦикла; //1 конец
КонецПроцедуры
//=====================================================================
Процедура Удалить()
Если ТЗОстатки.СписатьКво<=0 Тогда
ТЗОстатки.УдалитьСтроку(ТЗОстатки.НомерСтроки);
КонецЕсли;
КонецПроцедуры
Процедура СоздатьДокРН()
//=========================не трогать====================================================================
//---1---//
//==========создаем расходныйе накладный по выбраным контрагентам==========
ТЗКлиенты.ВыбратьСтроки();
Пока ТЗКлиенты.ПолучитьСтроку()=1 Цикл//1 начало
докРН = СоздатьОбъект("Документ.РасходнаяНакладная");
докРН.Новый();
докРН.Фирма = глВосстановитьЗначение(,"БазФирма");
докРН.Валюта = Константа.ОсновнаяВалюта;
докРН.Курс = докРН.Валюта.Курс.Получить(докРН.ДатаДок);
докРН.ВидНДС = докРН.Фирма.СтавкаНДС;
докРН.ДатаДок = ТекущаяДата();
докРН.Контрагент = ТЗКлиенты.Контрагент;
докРН.СуммаДокНал= ТЗКлиенты.Долг;
докРН.ВидТорговли = докРН.Контрагент.ВидТорговли;
докРН.СчетКонтрагента =СчетПоКоду("361");
докРН.МестоХранения = ВыбСклад;
//=========================не трогать====================================================================
//----2----//
//==========создаем список ТМЦ в расходных накладных по выбраным контрагентам====
ТЗОстатки.ВыбратьСтроки();
Пока ТЗОстатки.ПолучитьСтроку()=1 Цикл //2 начало
докРН.НоваяСтрока();
докРН.ТМЦ = ТЗОстатки.ТМЦ;
докРН.Ед = ТЗОстатки.Ед;
докРН.Коэффициент = ТЗОстатки.Коэффициент;
докРН.Кво = ТЗОстатки.СписатьКво;
докРН.ЦенаСНДС = ТЗОстатки.ЦенаСНДС;
докРН.СуммаСНДС = докРН.Кво* докРН.ЦенаСНДС;
//=========================не трогать====================================================================
//----3----//
Если докРН.СуммаДокНал>ТЗОстатки.Итог("СписатьКво") Тогда
Сообщить (ТЗОстатки.Итог("СписатьКво"));
Сообщить ("Нехватает товара!!!");
возврат;
КонецЕсли;
//=========================не трогать====================================================================
//----4----//
// как расчитать сколько нужно списать колва в РН !!!!!!!!!!!
Если докРН.СуммаДокНал<докРН.Итог("СуммаСНДС") Тогда
докРН.ВыбратьСтроки();
Пока докРН.ПолучитьСтроку()=1 Цикл //3
ИзлишекСуммы=докРН.СуммаДокНал-докРН.Итог("СуммаСНДС");
сообщить("излишек"+ ИзлишекСуммы);
// не обходимо пробежаться по строках в документе и убрать лишее!!!!!!
текКолСтрокРН = ТЗОстатки.КоличествоСтрок();
Для ы = 1 По текКолСтрокРН Цикл
ТекКво= ОКР("помогите расчитать нужное колво!!!!");
докРН.Кво = ТекКво;
докРН.ЦенаСНДС = ТЗОстатки.ЦенаСНДС;
докРН.СуммаСНДС = докРН.Кво* докРН.ЦенаСНДС;
КонецЦикла;
КонецЦикла;
КонецЕсли;
//----5----//
// возращаяю в таблицу ТЗОстатки-лишее кол-во товара из РН
докРН.ВыбратьСтроки();
Пока докРН.ПолучитьСтроку()=1 Цикл //3
ТЗОстатки.НоваяСтрока();
ТЗОстатки.СписатьКво=ТЗОстатки.СписатьКво-докРН.Кво;
ТЗОстатки.СписатьЦенаСНДС= ТЗОстатки.ЦенаСНДС;
ТЗОстатки.СписатьСумма= ТЗОстатки.СписатьКво*ТЗОстатки.СписатьЦенаСНДС;
КонецЦикла;
//=========================не трогать====================================================================
КонецЦикла;//2 конец
Сообщить(докРН.Контрагент);
Сообщить("Итого"+докРН.Итог("СуммаСНДС"));
//=========================не трогать====================================================================
докРН.Записать();
Сообщить(докРН.ТекущийДокумент()+"Создан!");
Если флПроводить=1 Тогда
докРН.Провести();
Сообщить(докРН.ТекущийДокумент()+"Проведен!");
КонецЕсли;
//====================================================================================================
КонецЦикла; //1 конец
КонецПроцедуры
//=====================================================================
Процедура Удалить()
Если ТЗОстатки.СписатьКво<=0 Тогда
ТЗОстатки.УдалитьСтроку(ТЗОстатки.НомерСтроки);
КонецЕсли;
КонецПроцедуры
Количество рассчитывается так :
Количество = Док.Количество * Док.Коэффициент
После того как я загрузила из ТЗОстатков в РН мне необходимо пробежаться по строках в документе снизу в вверх и убрать лишние суммы и расчитать ТекКво= если ТМЦ.БазЕдиница "шт". то ОКР, если "кг" оставляем как есть ("помогите расчитать нужное колво!!!!"); чтобы расзницу по кво вернуть обратно в ТЗОстатки.
Acid @ Сегодня, 10:48
,
inna.innainna84 @ Сегодня, 11:05
,
Там же написано "не трогать" , а вы трогаете.
Может нужно создать еще третью ТЗ и выгрузить туда Долги по клиенту и Остатки по ТМЦ? Может кто-то такое уже делал подскажите пожалуйста наглядный код.
У меня получилось. Я это сделала!:32542460: inna.innainna84 @ Вчера, 13:36
,
//----4----//
//=========================не трогать====================================================================
Если ДокРН.Итог("СуммаСНДС")<ДокРН.СуммаДокНал Тогда// **начало
сообщить ("Не хватает товара!!");
иначе
//правим суммы
Ном = ДокРН.КоличествоСтрок();
Если Ном > 0 Тогда //**1
Пока Ном > 0 Цикл
ДокРН.ПолучитьСтрокуПоНомеру(Ном);
Если ДокРН.Итог("СуммаСНДС")>ДокРН.СуммаДокНал Тогда //**2
Дельта2= ДокРН.Итог("СуммаСНДС")-ДокРН.СуммаДокНал;
ДокРН.СуммаСНДС=ДокРН.Суммасндс-Дельта2;
Если ДокРН.СуммаСНДС=0 Тогда
ДокРН.Удалитьстроку();
КонецЕсли;
//**выбрает вессой или штучный товар и правим кво с условием
Если ДокРН.ТМЦ.Весовой = 0 тогда
ДокРН.Кво=Окр(ДокРН.СуммаСНДС/ДокРН.ЦенаСНДС);
иначе
ДокРН.Кво=ДокРН.СуммаСНДС/ДокРН.ЦенаСНДС;
КонецЕсли;//**выбрала
ДокРН.ЦенаСНДС= ДокРН.СуммаСНДС/ДокРН.Кво;
ДокРН.СуммаБезНДС=Формат(ДокРН.СуммаСНДС/1.2,"Ч12.2");
ДокРН.НДС= Формат(ДокРН.СуммаСНДС-ДокРН.СуммаБезНДС,"Ч12.2");
ДокРН.СуммаБезСкидки=ДокРН.СуммаБезНДС;
КонецЕсли; //**2
Ном = Ном-1;
КонецЦикла;
КонецЕсли; //**1
КонецЕсли; //*** начало
вай маладэц! если мне прийдётся подгонять цены товара под сумму оплаты. именно так и сделаю.
Спасибо за "спасибо". С первым меня "Спасибо." XBrut @ Сегодня, 9:18
,
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua