четверг, 4 сентября 2008 г.

1С7.7. Работа с забалансовым счетом.Бухгалтерский запрос

Важно. Использовать метод Ит.Опции(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");
  Исключение
  КонецПопытки;
   
  КонецЦикла; //фармЗаказы
 КонецЕсли;
 
КонецПроцедуры
//******************************************************************************

Комментариев нет: