Причесывание субконто
Когда в 1с набирается за месяц накладных больше нескольких тысяч (или десятков тысяч) то перепроведение документов становиться задачей на несколько часов. Но иногда возникает необходимость в перепроведении только части документов. Работая на хлебозаводе у меня время от времени возникала ситуация знакомая наверное многим бухгалтерам: оборотно-сальдовая ведомость по счету показывает нулевые остатки по количеству а по сумме есть или плюс или минус.
Все знают, как с этим бороться перепровести документы и все исчезнет, но иногда перепроведение всех документов невозможно (большая база, нет прав, нужно исправить очень скоро), а перепроведение вручную также невозможно или усложнено (субконто по которому вылез плюс/минус по суме, участвует в движении сотни другой документов).
Для того чтобы избавится от отклонений нужно просто перепровести все документы «Карточки счета» давайте выберем их и программно перепроведем. Обработку я назвал «Причесывание субконто».
Внешний вид обработки следующий думаю, поля в объяснениях не нуждаются.
Нажатие на кнопку «Сформировать» создаст список документов и запустит их перепроведение.
Код, тоже не из сложных:
Процедура Сформировать() док = СоздатьОбъект("Документ"); списокДок = СоздатьОбъект("ТаблицаЗначений"); списокДок.НоваяКолонка("Документ","Документ"); списокДок.НоваяКолонка("Номер","Строка"); Ит = СоздатьОбъект("БухгалтерскиеИтоги"); Ит.ИспользоватьСубконто(ВыбВидСубконто1, Субконто1, 2); Ит.ВыполнитьЗапрос(Дата1, Дата2,,,, 1, "Проводка", "СК"); Ит.ВыбратьПериоды(); Пока Ит.ПолучитьПериод() = 1 Цикл Дт = Ит.ВыбранаПоДт(); Кт = Ит.ВыбранаПоКт(); Опер = Ит.Операция; Сд = Ит.СКД() - Ит.СКК(); если Док.НайтиДокумент(Опер.Документ)=1 Тогда списокДок.НоваяСтрока(); списокДок.Документ =Опер.Документ; списокДок.Номер=Опер.Документ.НомерДок; Сообщить(док); конецесли; КонецЦикла; стр = ""; х=1; списокДок.Свернуть("2","1"); Для НомерСтроки = 1 По списокДок.КоличествоСтрок() Цикл списокДок.ПолучитьСтрокуПоНомеру(НомерСтроки); если Док.НайтиДокумент(списокДок.Документ)=1 Тогда Док.Провести(); Сообщить("Документ "+ Док +" проведен"); конецесли; КонецЦикла; КонецПроцедуры
В случае с базой в 60 тис. документов в месяц и минусах по некоторым позициям обработка очень упрощает жизнь. Ведь перепровести 200 -300 документов обработкой и вручную это 5 мин. против часа, а то и двух. Главное чтобы себестоимость партии расчитивалась в момент перепровдения дкумента.