Важно. Использовать метод Ит.Опции(1), чтобы расчитывались итоги по забалансовому счету
//******************************************************************************
Процедура СнятьЗаказы(МестоХранения,ДатаДок)//МАК
Если ПустоеЗначение(СниматьАвтоматически) = 1 Тогда
Возврат;
КонецЕсли;
Если ПустоеЗначение(МестоХранения) = 1 Тогда
Сообщить("Автоматическое снятие заказов не выполнено, так в текущем документе как не заполнено место хранения", "!");
Возврат;
КонецЕсли;
Если ПустоеЗначение(КолДней) = 1 Тогда
Сообщить("Автоматическое снятие заказов не выполнено, так как не заполнено количество дней", "!");
Возврат;
КонецЕсли;
СнятиеЗаказа = СоздатьОбъект("Документ.фармСнятиеЗаказа");
//смотрим остатки на дату документа
//Можно брать именно дату документа, а не позицию, так как анализируются заказы, отстоящие от даты не менее, чем на 1 день
ВидСубконто_МестаХранения = ВидыСубконто.МестаХранения;
ВидСубконто_фармЗаказы = ВидыСубконто.фармЗаказы;
ВидСубконто_фармГруппыНоменклатуры = ВидыСубконто.фармГруппыНоменклатуры;
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.Опции(1);//учитываем забалансовые счета
Ит.ИспользоватьСубконто(ВидСубконто_МестаХранения,МестоХранения, 2); //Отбираем по субконто "МестаХранения"
Ит.ИспользоватьСубконто(ВидСубконто_фармЗаказы,, 1); //Разворачиваем по субконто "фармЗаказы"
Ит.ИспользоватьСубконто(ВидСубконто_фармГруппыНоменклатуры,, 1); //Разворачиваем по субконто "фармЗаказы"
Ит.ВыполнитьЗапрос(, ДатаДок, СчетПоКоду("ЗАК"),,, 1,, "4"); //Остатки и обороты по счету в целом, рассчитываем количество
//Выбираем контрагентов
Ит.ВыбратьСубконто(1);
Если Ит.ПолучитьСубконто(1) = 1 Тогда //МестаХранения
Ит.ВыбратьСубконто(2);//фармЗаказы
Пока Ит.ПолучитьСубконто(2) = 1 Цикл //фармЗаказы
Если Ит.СКД(3)<=0 Тогда //Берем СКД по количеству (это 3)
Продолжить; //Заказ уже снят
КонецЕсли;
мЗаказ = Ит.Субконто(2);
Если мЗаказ.ДатаДок > ДатаДок - КолДней Тогда
Продолжить;
КонецЕсли;
СнятиеЗаказа.Новый();
СнятиеЗаказа.МестоХранения = МестоХранения;
СнятиеЗаказа.ДокументОснование = мЗаказ;
СнятиеЗаказа.Поставщик = мЗаказ.Поставщик;
//Сообщить(Строка(мЗаказ) + " " + Строка(Ит.СКД(3)));
Ит.ВыбратьСубконто(3);//ВидСубконто_фармГруппыНоменклатуры
Пока Ит.ПолучитьСубконто(3) = 1 Цикл //ВидСубконто_фармГруппыНоменклатуры
Если Ит.СКД(3)<=0 Тогда //Берем СКД по количеству (это 3)
Продолжить; //Заказ уже снят
КонецЕсли;
Группа = Ит.Субконто(3);
//Сообщить(Строка(Группа) + " " + Строка(Ит.СКД(3)));
СнятиеЗаказа.НоваяСтрока();
СнятиеЗаказа.Группа = Группа;
СнятиеЗаказа.Количество = Ит.СКД(3);
КонецЦикла; //ВидСубконто_фармГруппыНоменклатуры
Попытка
СнятиеЗаказа.Записать();
СнятиеЗаказа.Провести();
Сообщить("Создан и проведен документ " + Строка(СнятиеЗаказа), "i");
Исключение
КонецПопытки;
КонецЦикла; //фармЗаказы
КонецЕсли;
КонецПроцедуры
//******************************************************************************
Комментариев нет:
Отправить комментарий