Выпуск 3
В этом выпуске были приведены некоторые соображения по переносу сальдо в ЗиК 7.70.235
Сальдо на начало месяца в "двойке" состоит из двух видов расчета - НачальноеСальдоЗадолженность и НачальноеСальдоОкругления. Как обычно, все рассчитано на то, что предприятие вовремя выдает зарплату, а если задерживает, то платит компенсацию :), уволенных рассчитывают в день увольнения :))), ну и т.д. Еще интересный момент - удержания не должны превышать начисления (текущего месяца). Ну где Вы видели такую фирму? Они существуют, наверное, только в воображении программистов 1С.
Ну и, конечно, скорость работы. При рассчете сальдо программа перелопачивает такой объем информации, что только диву даешься: ЗАЧЕМ???
Далее, а что такое эти два сальдо? Зачем их столько? Первое - это задолженность предприятия. Второе - это невыплаченные копейки. Ну и долг сотрудника, если он есть. Первое сальдо всегда положительно. Второе может быть любым. Спрашивается: а будет ли все это работать, если будет только второе сальдо? БУДЕТ!!! И еще как.
Для этого выкидываем документ "Накопленная задолженность". Т.е. просто им не пользуемся. Если в предыдущих месяцах Вы им все-таки пользовались - ничего страшного. Просто не делайте этого впредь. Далее пишем документ "Начало месяца", который на каждого сотрудника вводит вид расчета НачальноеСальдоОкругления. Модуль расчета придется немного подредактировать, а также в глобальном модуле закоментировать строчку, вводящую этот вид расчета при формировании документа "НачислениеЗарплаты". Зачем так? А да просто так понятнее бухгалтерам. Сделали начало месяца - вот оно сальдо. Его даже можно вводить автоматом при смене периода.
Оригинал функции любой может посмотреть сам. Я привожу здесь исправленный.
Процедура ПровестиРасчет() // Если запись исправлена или фиксирована, то ее не рассчитываем Если (Исправлена = 1) или (Фиксирована = 1) Тогда глСообщениеТрассировки(глСообщенияТрассировки, "" + ?(Исправлена = 1,"Результат записи исправлен вручную","Запись фиксирована") + ". Расчет не проводился.", , 1); Возврат КонецЕсли; //Результат = глСальдоОкругления(Объект,ДатаНачала); // Автор алгоритма Руденко Э.В. ЖрнЗарплата = СоздатьОбъект("ЖурналРасчетов.Зарплата"); Сумма = 0; Сальдо = 0;//Сальдо на начало прошлого месяца Касса = 0; БылоНачислено = 0; БылоУдержано = 0; ВозвратВКассу = 0; ЖрнЗарплата.ВыбратьПериодПоОбъекту(Объект,ДатаНачала - 1); Пока ЖрнЗарплата.ПолучитьЗапись() = 1 Цикл Если ЖрнЗарплата.ВидРасч = ВидРасчета.ВыплатаЗарплаты Тогда Касса = Касса + ЖрнЗарплата.Результат; ИначеЕсли (ЖрнЗарплата.ВидРасч = ВидРасчета.НачальноеСальдоЗадолженность) Тогда Сальдо = Сальдо + ЖрнЗарплата.Результат; ИначеЕсли (ЖрнЗарплата.ВидРасч = ВидРасчета.НачальноеСальдоОкругления) Тогда Сальдо = Сальдо + ЖрнЗарплата.Результат; ИначеЕсли (ЖрнЗарплата.ВидРасч = ВидРасчета.Возврат) Тогда ВозвратВКассу = ВозвратВКассу + ЖрнЗарплата.Результат; ИначеЕсли ЖрнЗарплата.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления) = 1 Тогда БылоНачислено = БылоНачислено + ЖрнЗарплата.Результат; ИначеЕсли ЖрнЗарплата.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеУдержания) = 1 Тогда БылоУдержано = БылоУдержано + ЖрнЗарплата.Результат; КонецЕсли; КонецЦикла; Результат = Сальдо + БылоНачислено - БылоУдержано - Касса + ВозвратВКассу; КонецПроцедуры // ПровестиРасчет() |
Все это должно работать на любой модификации стандартной конфигурации.