Подскажите пожалуйста, написал обработку для сверки ндс 62 счета и 76.АВ, но по некоторым контрагентам почему то не сходятся общие итоги по ОСВ
Написал обработку для сравнения суммы ндс 62.02 с 76.АВ, но столкнулся с проблемой. Итоги в моей таблице не сходятся с итогами в оборотно-сальдовой ведомости, что может быть не так в моих вычислениях?
&НаСервере
Процедура ПолучитьДебетПоСчетам()
ЭтотОбъект.Отчет.Очистить();
//Запрос для счета 62.02
Состояние("Анализируем счет 62.02");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ХозрасчетныйОбороты.СуммаОборотДт,
| ХозрасчетныйОбороты.Субконто1 КАК Контрагент,
| ХозрасчетныйОбороты.Субконто2 КАК Договор,
| ХозрасчетныйОбороты.Субконто3 КАК ДокументРасчетов
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Обороты(&Дата1, &Дата2, ,Счет =&Счет, , , , ) КАК ХозрасчетныйОбороты
|ГДЕ
| ХозрасчетныйОбороты.СуммаОборотДт > 0";
Если ЗначениеЗаполнено(ЭтотОбъект.Контрагент) Тогда
Запрос.Текст = Запрос.Текст + "
|И ХозрасчетныйОбороты.Субконто1 = &Субконто1";
Запрос.УстановитьПараметр("Субконто1", ЭтотОбъект.Контрагент);
Если ЗначениеЗаполнено(ЭтотОбъект.ДоговорКонтрагента) Тогда
Запрос.Текст = Запрос.Текст + "
|И ХозрасчетныйОбороты.Субконто2 = &Субконто2";
Запрос.УстановитьПараметр("Субконто2", ЭтотОбъект.ДоговорКонтрагента);
КонецЕсли;
КонецЕсли;
Запрос.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.02"));
Запрос.УстановитьПараметр("Дата1", НачалоДня(ЭтотОбъект.НачалоПериода));
Запрос.УстановитьПараметр("Дата2", КонецДня(ЭтотОБъект.КонецПериода));
ТаблицаЗначенийПоСчету6202 = Запрос.Выполнить().Выгрузить();
Для Каждого Стр Из ТаблицаЗначенийПоСчету6202 Цикл
//Найдем документы поступления по 62.02
Если Найти(Стр.ДокументРасчетов, "Поступление на расч") > 0 Тогда
А = ЭтотОбъект.Отчет.Добавить();
А.Контрагент = Стр.Контрагент;
А.Договор = Стр.Договор;
А.СуммаДокумента = Стр.СуммаОборотДт;
А.ДокументРасчетов = Стр.ДокументРасчетов;
КонецЕсли;
//Найдем документы корректировки по 62.02
Если Найти(Стр.ДокументРасчетов, "Коррект") > 0 Тогда
А = ЭтотОбъект.Отчет.Добавить();
А.Контрагент = Стр.Контрагент;
А.СуммаДокумента = Стр.СуммаОборотДт;
А.ДокументРасчетов = Стр.ДокументРасчетов;
КонецЕсли;
КонецЦикла;
//Запрос для счета 62.32
Состояние("Анализируем счет 62.32");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ХозрасчетныйОстаткиИОбороты.СуммаОборотДт,
| ХозрасчетныйОстаткиИОбороты.СуммаОборотКт,
| ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Контрагент,
| ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Договор,
| ХозрасчетныйОстаткиИОбороты.Субконто3 КАК ДокументРасчетов
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , , , ) КАК ХозрасчетныйОстаткиИОбороты
|ГДЕ
| ХозрасчетныйОстаткиИОбороты.Счет = &Cчет2";
Если ЗначениеЗаполнено(ЭтотОбъект.Контрагент) Тогда
Запрос.Текст = Запрос.Текст + "
| И ХозрасчетныйОстаткиИОбороты.Субконто1 = &Субконто1";
Запрос.УстановитьПараметр("Субконто1", ЭтотОбъект.Контрагент);
Если ЗначениеЗаполнено(ЭтотОбъект.ДоговорКонтрагента) Тогда
Запрос.Текст = Запрос.Текст + "
| И ХозрасчетныйОстаткиИОбороты.Субконто2 = &Субконто2";
Запрос.УстановитьПараметр("Субконто2", ЭтотОбъект.ДоговорКонтрагента);
КонецЕсли;
КонецЕсли;
Запрос.УстановитьПараметр("Cчет2",ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.32"));
Запрос.УстановитьПараметр("НачалоПериода", ЭтотОбъект.НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", ЭтотОБъект.КонецПериода);
ТаблицаЗначенийПоСчету6232 = Запрос.Выполнить().Выгрузить();
Для Каждого Стр Из ТаблицаЗначенийПоСчету6232 Цикл
//Найдем документы поступления по счету 62.32
Если (Найти(Стр.ДокументРасчетов, "Поступление на расч") > 0) И Стр.СуммаОборотДТ > 0 Тогда
А = ЭтотОбъект.Отчет.Добавить();
А.Контрагент = Стр.Контрагент;
А.Договор = Стр.Договор;
А.СуммаДокумента = Стр.СуммаОборотДт;
А.ДокументРасчетов = Стр.ДокументРасчетов;
КонецЕсли;
//Найдем документы корректировки по счету 62.32
Если Найти(Стр.ДокументРасчетов, "Коррект") > 0 Тогда
А = ЭтотОбъект.Отчет.Добавить();
А.Контрагент = Стр.Контрагент;
А.СуммаДокумента = Стр.СуммаОборотДт;
А.ДокументРасчетов = Стр.ДокументРасчетов;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать&НаСервере
Процедура ПолучитьЗаписиКнигиПокупокКредит()
Состояние("Анализируем счет 76.АВ");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| НДСЗаписиКнигиПокупок.СчетФактура КАК ДокументРасчетов,
| НДСЗаписиКнигиПокупок.СтавкаНДС,
| НДСЗаписиКнигиПокупок.ДоговорКонтрагента,
| НДСЗаписиКнигиПокупок.СуммаБезНДС КАК СуммаБезНДС,
| НДСЗаписиКнигиПокупок.НДС КАК НДС,
| НДСЗаписиКнигиПокупок.Поставщик КАК Контрагент,
| НДСЗаписиКнигиПокупок.ДатаСобытия
|ИЗ
| РегистрНакопления.НДСЗаписиКнигиПокупок КАК НДСЗаписиКнигиПокупок
|ГДЕ
| НДСЗаписиКнигиПокупок.Период МЕЖДУ &Дата1 И &Дата2";
Запрос.УстановитьПараметр("Дата1", НачалоДня(ЭтотОбъект.НачалоПериода));
Запрос.УстановитьПараметр("Дата2", КонецДня(ЭтотОбъект.КонецПериода));
ТЗПокупок = Запрос.Выполнить().Выгрузить();
//Установим НДС по документам из книги покупок
Для Каждого Струк из ЭтотОбъект.Отчет Цикл
ОтборНДС = Новый Структура;
ОтборНДС.Вставить("ДокументРасчетов",Струк.ДокументРасчетов);
ОтборНДС.Вставить("Контрагент",Струк.Контрагент);
ОтборНДС.Вставить("ДоговорКонтрагента",Струк.Договор);
МассНДС = ТЗПОкупок.НайтиСтроки(ОтборНДС);
Отб1 = 0;
Для Каждого Стр1 из МассНДС Цикл
Отб1 = Отб1 + Стр1.НДС;
КонецЦикла;
Если МассНДС.Количество() > 0 Тогда
СтрМас1 = МассНДС.Получить(0);
Струк.СтавкаНДС = СтрМас1.СтавкаНДС;
Если (Струк.СтавкаНДС = Перечисления.СтавкиНДС.НДС18) или (Струк.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118) Тогда
Струк.СуммаНДС = Окр(Струк.СуммаДокумента / 118 * 18, 2, 1);
ИначеЕсли (Струк.СтавкаНДС = Перечисления.СтавкиНДС.НДС20) или (Струк.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120) Тогда
Струк.СуммаНДС = Окр(Струк.СуммаДокумента / 120 * 20, 2, 1);
ИначеЕсли (Струк.СтавкаНДС = Перечисления.СтавкиНДС.НДС10) или (Струк.СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110) Тогда
Струк.СуммаНДС = Окр(Струк.СуммаДокумента / 110 * 10, 2, 1);
ИначеЕсли (Струк.СтавкаНДС = Перечисления.СтавкиНДС.НДС0) или (Струк.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС) Тогда
Струк.СуммаНДС = 0;
Иначе
Струк.СуммаНДС = 0;
КонецЕсли;
Струк.СуммаНДС76счет = Отб1;
КонецЕсли;
Если Струк.СуммаНДС <> Струк.СуммаНДС76счет Тогда
Струк.Признак = Струк.СуммаНДС - Струк.СуммаНДС76счет;
КонецЕсли;
КонецЕсли;
КонецЦикла;
//Для Каждого Строки Из ЭтотОбъект.Отчет Цикл
// Если Найти(Строки.ДокументРасчетов, "долга") Тогда
// Если Строки.ДокументРасчетов.Дата < Дата("20190101") Тогда
//
// Строки.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118;
// Строки.СуммаНДС = Строки.СуммаДокумента / 118 * 18;
// Строки.СуммаНДС76счет = Строки.СуммаНДС;
// Иначе
// Строки.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120;
// Строки.СуммаНДС = Строки.СуммаДокумента / 120 * 20;
// Строки.СуммаНДС76счет = Строки.СуммаНДС;
// КонецЕсли;
// КонецЕсли;
// КонецЦикла;
КонецПроцедуры
ПоказатьОтветы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
//Найдем документы поступления по 62.02
Если Найти(Стр.ДокументРасчетов, "Поступление на расч") > 0 Тогда
А = ЭтотОбъект.Отчет.Добавить();
А.Контрагент = Стр.Контрагент;
А.Договор = Стр.Договор;
А.СуммаДокумента = Стр.СуммаОборотДт;
А.ДокументРасчетов = Стр.ДокументРасчетов;
КонецЕсли;
//Найдем документы корректировки по 62.02
Если Найти(Стр.ДокументРасчетов, "Коррект") > 0 Тогда
А = ЭтотОбъект.Отчет.Добавить();
А.Контрагент = Стр.Контрагент;
А.СуммаДокумента = Стр.СуммаОборотДт;
А.ДокументРасчетов = Стр.ДокументРасчетов;
КонецЕсли;
Показатьвсместо этого как минимум надо писать что то типа:
//Найдем документы поступления по 62.02
Если Найти(Стр.ДокументРасчетов, "Поступление на расч") > 0 Тогда
А = ЭтотОбъект.Отчет.Добавить();
А.Контрагент = Стр.Контрагент;
А.Договор = Стр.Договор;
А.СуммаДокумента = Стр.СуммаОборотДт;
А.ДокументРасчетов = Стр.ДокументРасчетов;
ИначеЕсли Найти(Стр.ДокументРасчетов, "Коррект") > 0 Тогда
А = ЭтотОбъект.Отчет.Добавить();
А.Контрагент = Стр.Контрагент;
А.СуммаДокумента = Стр.СуммаОборотДт;
А.ДокументРасчетов = Стр.ДокументРасчетов;
Иначе
Сообщить ("Неизвестная операция: " + Стр.ДокументРасчетов);
КонецЕсли;
Показатьи лучше напрямую типы документов сравнивать, а не делать поиск по строке
(4)
Костыль убрал, у меня проблема в том что у некоторых контрагентов всё копеечка в копеечку, а у кого-то суммы очень внушительные, на 76.АВ одна сумма, в моей таблице другая. Такое чувство что по моему отбору по 76.АВ попросту откидывает документы которые на 76.АВ. Вот как их заставить чтобы они тоже участвовали в расчете, понятия не имею...
Костыль убрал, у меня проблема в том что у некоторых контрагентов всё копеечка в копеечку, а у кого-то суммы очень внушительные, на 76.АВ одна сумма, в моей таблице другая. Такое чувство что по моему отбору по 76.АВ попросту откидывает документы которые на 76.АВ. Вот как их заставить чтобы они тоже участвовали в расчете, понятия не имею...
(7)
все замечания по коду которые видны невооруженным взглядом я сказал
нужна более детальная информация что с чем не сходится,
но возможно проблема в постановке задачи а не в коде
например ты все время пишешь "76.АВ" то, "76.АВ" сё, и комментарии/имена переменных соответсвующие
но на самом деле это не так от слова совсем
ты анализируешь регистр НДС книги покупок, а не обороты по счету 76.АВ и это далеко не одно и тоже
все замечания по коду которые видны невооруженным взглядом я сказал
нужна более детальная информация что с чем не сходится,
но возможно проблема в постановке задачи а не в коде
например ты все время пишешь "76.АВ" то, "76.АВ" сё, и комментарии/имена переменных соответсвующие
но на самом деле это не так от слова совсем
ты анализируешь регистр НДС книги покупок, а не обороты по счету 76.АВ и это далеко не одно и тоже
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот