Каталог решений - Предотвращение ошибок в материальном учете Бухгалтерии 7.7

Предотвращение ошибок в материальном учете Бухгалтерии 7.7

Предотвращение ошибок в материальном учете Бухгалтерии 7.7

В наличии

Два небольших участка кода для предотвращения ошибок бухгалтеров в учете материальных запасов.
Для конфигурации 1С 7.7 Бухгалтерский учет 4.5 релиз 510 (будет работать и на других релизах)

Категория:

Описание

В документах стандартной конфигурации имеются две возможности запутаться с учетом материалов: (работу с операциями в ручную нерассматриваем :))

1. В авансовом отчете оприходовать материал на на иной субсчет нежели указанныый в свойствах материала. На остатках материал висеть будет а списание по средством документа ТребованиеНакладная проходить небудет.

2. Произвести списание/передачу материала два раза, обычно задним числом.

Представленный здесь код позволяет блокировать/предупредить эти ошибки.

 

1. Для предупреждения первой ошибки необходимо в модуль формы документа АвансовыйОтчет вставить процедуру:

//Начало изменений
Процедура ПриОкончанииРедактированияСтроки()
 Если (
КоррСчет.ПринадлежитГруппе(СчетПоКоду(«10»)) = 1
   (
КоррСчет.ПринадлежитГруппе(СчетПоКоду(«10.11»)) = 0
    (
КоррСчет <> СчетПоКоду(«10.7»)) Тогда
     Если
Субконто1.Выбран() = 0 Тогда
        
Сообщить(«Не выбран материал»);
     
СтатусВозврата(0);
      Возврат;
     КонецЕсли;
     Если
Субконто2.Выбран() = 0 Тогда
        
Сообщить(«Не выбрано место хранения»);
     
СтатусВозврата(0);
      Возврат;
     КонецЕсли;
     Если
Субконто1.СубСчет10 <> КоррСчет Тогда
        
Предупреждение(«Указано поступление на счет: «+Строка(КоррСчет)+разделительстрок+
     
«Однако выбранный материал учитывается на счете: «+Строка(Субконто1.СубСчет10)+разделительстрок+
     
«Исправьте !»);
     
СтатусВозврата(0);
      Возврат;
     КонецЕсли;
 КонецЕсли;
КонецПроцедуры
//Конец изменений

 

Вставить процедуру можно в любое место, как ориентир смотри картинку «Вставка в модуль формы Авансового отчета»

 

2. Для предупреждения второй ошибки необходимо в модуль проведения документа ТребованиеНакладная вставить два блока. При исходном тексте это строка 44 и строка 138 соответственно:

строка44:

//44я строка
//Начало изменений 1
ПсД = СоздатьОбъект(«Документ»);
ПсД.ОбратныйПорядок(1);
ПсД.ВыбратьДокументы();
Пока (
ПсД.ПолучитьДокумент() = 1)и(ПсД.Проведен() = 0) Цикл
КонецЦикла;
ДатаНачалаД = ДатаДок;
ДатаКонцаД = ПсД.ДатаДок;
Если
ДатаНачалаД > ДатаКонцаД  Тогда
   
ДатаКонцаД = ДатаНачалаД;
КонецЕсли;
Если
ДатаКонцаД < ТекущаяДата() Тогда
   
ДатаКонцаД = ТекущаяДата();
КонецЕсли;
Если
ДатаКонцаД > КонецРассчитанногоПериодаБИ() Тогда
 
ДатаКонцаД = КонецРассчитанногоПериодаБИ();
КонецЕсли;
БИм = СоздатьОбъект(«БухгалтерскиеИтоги»);
БИм.ИспользоватьСубконто(ВидыСубконто.Материалы, СписокМатериалов, 2);
БИм.ИспользоватьСубконто(ВидыСубконто.МестаХранения);
БИм.ВключатьСубсчета(-1);
БИм.ВыполнитьЗапрос(ДатаНачалаД,ДатаКонцаД, «10»,,,,«Операция»,«СК»);
//Конец изменений 1

 

строка 138:

 

//138я строка, с первой вставкой 165я строка
//Начало изменений 2
Если ТаблицаОстатков.Материал.Вид() = «Материалы» Тогда
 Если
БИм.ПолучитьСчет(, ТаблицаОстатков.СчетУчета) = 1 Тогда
  Если
БИм.ПолучитьСубконто(1,, ТаблицаОстатков.Материал) = 1 Тогда
  
ОстатокТекущий = КоличествоНаСкладе;
  
СписаниеТекущее = ТаблицаОстатков.КоличествоОтпущено;
  
ПоступилоПосле = 0;
  
СписаноПосле = 0;
   Если
БИм.ПолучитьСубконто(ВидыСубконто.МестаХранения,, МестоХранения) = 1 Тогда
   
БИм.ВыбратьПериоды();
   
ДЧас = 0; ДМин = 0; ДСек = 0;
   
ПолучитьВремя(ДЧас,ДМин,ДСек);
   
ДокВремя = ДЧас*3600 + ДМин*60 + ДСек;
    Пока
БИм.ПолучитьПериод() = 1 Цикл
    
ПЧас = 0; ПМин = 0; ПСек = 0;
    
БИм.Операция.ПолучитьВремя(ПЧас,ПМин,ПСек);
    
ПериодВремя = ПЧас*3600 + ПМин*60 + ПСек;
     Если
ДатаДок = БИм.Операция.ДатаОперации Тогда
      Если
ДокВремя <= ПериодВремя Тогда
      
ПоступилоПосле = ПоступилоПосле + БИм.ДО(«К»);
      
СписаноПосле = СписаноПосле + БИм.КО(«К»);
      КонецЕсли;
     Иначе
     
ПоступилоПосле = ПоступилоПосле + БИм.ДО(«К»);
     
СписаноПосле = СписаноПосле + БИм.КО(«К»);
     КонецЕсли;
    КонецЦикла;
   КонецЕсли;
   Если (
ОстатокТекущий + ПоступилоПосле)<(СписаниеТекущее + СписаноПосле) Тогда
      
БИм.ВыбратьПериоды();
   
ФлагМ = 1;
   
ДокМ = «»;
    Пока (
БИм.ПолучитьПериод() = 1)и(ФлагМ = 1) Цикл
    
ПЧас = 0; ПМин = 0; ПСек = 0;
    
БИм.Операция.ПолучитьВремя(ПЧас,ПМин,ПСек);
    
ПериодВремя = ПЧас*3600 + ПМин*60 + ПСек;
     Если
ДатаДок = БИм.Операция.ДатаОперации Тогда
      Если
ДокВремя <= ПериодВремя Тогда
       Если (
БИм.СНД(«К») + БИм.ДО(«К»)) < (БИм.КО(«К») + СписаниеТекущее) Тогда
          
ДатаКонцаД = БИм.Операция.Документ.ДатаДок;
       
ДокМ = Строка(БИм.Операция.Документ);
       
ФлагМ = 0;
       КонецЕсли;
      КонецЕсли;
     Иначе
      Если (
БИм.СНД(«К») + БИм.ДО(«К»)) < (БИм.КО(«К») + СписаниеТекущее) Тогда
         
ДатаКонцаД = БИм.Операция.Документ.ДатаДок;
      
ДокМ = Строка(БИм.Операция.Документ);
      
ФлагМ = 0;
      КонецЕсли;
     КонецЕсли;
    КонецЦикла;
      
ТекстМ = «Для материала «+Строка(ТаблицаОстатков.Материал)+» по дату «+Строка(ДатаНачалаД)+» время «+Строка(ДЧас)+«:»+Строка(ДМин)+«:»+Строка(ДСек)+разделительстрок+
     
» на складе «+Строка(МестоХранения)+» имеется отстаток «+Строка(ОстатокТекущий)+» «+ТаблицаОстатков.Материал.ЕдиницаИзмерения+разделительстрок+
     
«Позже имеется поступление «+Строка(ПоступилоПосле)+» «+ТаблицаОстатков.Материал.ЕдиницаИзмерения+разделительстрок+
     
«И списание (перемещение) «+Строка(СписаноПосле)+» «+ТаблицаОстатков.Материал.ЕдиницаИзмерения+разделительстрок+
     
«По документу списывается (перемещается) всего «+Строка(СписаниеТекущее)+» «+ТаблицаОстатков.Материал.ЕдиницаИзмерения+разделительстрок+
     
«»+разделительстрок+
     
Строка(ОстатокТекущий)+» — «+Строка(СписаниеТекущее)+» + «+Строка(ПоступилоПосле)+» — «+Строка(СписаноПосле)+» = «+
     
Строка((ОстатокТекущий + ПоступилоПосле) — (СписаниеТекущее + СписаноПосле))+разделительстрок+
     
«На дату «+Строка(ДатаКонцаД)+» будут отрицательные остатки !»;
      Если
ФлагМ = 0 Тогда
         
ТекстМ = ТекстМ + разделительстрок + «После документа: «+ДокМ;
      КонецЕсли;
    Если
Вопрос(ТекстМ+«Продолжать ?», 4, 10) <> 6 Тогда
       
глНеПроводить(Контекст, ТекстМ);
     Возврат;
    КонецЕсли;
   КонецЕсли;
  КонецЕсли;
 КонецЕсли;
КонецЕсли;
//Конец изменений 2

..

Представленный код не вностит изменений в базу данных.

В первом случае блокировка безусловная + контроль указания места хранения и собственно материала.

Во втором случае разъясняется возможная ситуация и предлагается выбор проводить документ или нет.

 

После введения этих изменений, бухгалтера перестали спрашивать — «почему у меня здесь красным» и «почему несписывает ведь он есть на складе».

Имем взаимную экономию нервов и времени.

has been added to your cart:
Оформление заказа