Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
19 мар 2024, 05:24

7.7 Предприятие. При наборе фин. обязательства, сумма остатка по юр. договору не изменяется

Автор Александр Дорошенко, 15 окт 2020, 09:45

0 Пользователей и 1 гость просматривают эту тему.

Александр Дорошенко

Здравствуйте! В 1С начинающий.
Собственно сабж. Т е сумма должна уменьшаться на сумму из выписываемого фин. обязательства, но проблема в том, что сумма по юр. договору остается неизменной всегда. На кнопке Ок в форме формирования фин. обязательства прописана команда #Записать?Провести?Закрыть. Это встроенные команды? Где можно править логику их обработки? Такая же конфигурация установлена у другого бухгалтера и у него все снимается. Сравнил все программные модули и все идентично, сделал переиндексацию - результат нулевой. Куда копать и где смотреть, править? Буду благодарен любой помощи!

alexandr_ll

Цитата: Александр Дорошенко от 15 окт 2020, 09:45
Здравствуйте! В 1С начинающий.
Собственно сабж. Т е сумма должна уменьшаться на сумму из выписываемого фин. обязательства, но проблема в том, что сумма по юр. договору остается неизменной всегда. На кнопке Ок в форме формирования фин. обязательства прописана команда #Записать?Провести?Закрыть. Это встроенные команды? Где можно править логику их обработки? Такая же конфигурация установлена у другого бухгалтера и у него все снимается. Сравнил все программные модули и все идентично, сделал переиндексацию - результат нулевой. Куда копать и где смотреть, править? Буду благодарен любой помощи!
Какая конфигурация и ее релиз?
Что есть сумма долга по договору? Это реквизит справочника, остаток на бухгалтерском счете или остаток по регистру?
Обычно все изменения в базе происходят при проведении документа Процедура ОбработкаПроведения() в модуле документа (Смотри Синтакс-помощник)

Александр Дорошенко

Цитата: alexandr_ll от 16 окт 2020, 06:31
Какая конфигурация и ее релиз?
1С Предприятие 7.7, билд 7.70.027
Цитировать
Что есть сумма долга по договору? Это реквизит справочника, остаток на бухгалтерском счете или остаток по регистру?
В начале года, на определенные счета по юр. договорам, мы вносим средства, которые затем тратим в течении года. После проводки финансовых обязательтв по этому договору, должен быть виден остаток по нему, Остаток Юр = Начальная сумма по юр. договору - Сумма(финансовые обязательства). Вот он и не считается, а равен начальной сумме.
Цитировать
Обычно все изменения в базе происходят при проведении документа Процедура ОбработкаПроведения()
Процедура ОбработкаПроведения есть, но в ней происходит проверка на корректное заполнение всех полей и все. При открытии формы вызывается процедура вычисления остатка в которой выполняется запрос.

Процедура ПосчитатьОстатокЮр()
Перем Запрос, ТекстЗапроса;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(ПосчитатьОстатокЮр)
|Период с (НачГода(ДатаДок)) по (ТекущаяДата());
|вКонтрагент = Документ.ЮридическоеОбязательство.Контрагент, Документ.ФинансовоеОбязательство.Контрагент;
|вНомерД = Документ.ЮридическоеОбязательство.НомерД, Документ.ФинансовоеОбязательство.НомерД;
|вКЭКВ = Документ.ЮридическоеОбязательство.КЭКВ, Документ.ФинансовоеОбязательство.КЭКВ;
|вРасчетныйСчет = Документ.ЮридическоеОбязательство.РасчетныйСчет, Документ.ФинансовоеОбязательство.РасчетныйСчет;
|вДатаД = Документ.ЮридическоеОбязательство.ДатаД, Документ.ФинансовоеОбязательство.ДатаД;
|СуммаЮ = Документ.ЮридическоеОбязательство.Сумма;
|СуммаФ = Документ.ФинансовоеОбязательство.Сумма;
|Функция СуммаОст = Сумма(СуммаЮ-СуммаФ);
|Условие(вКонтрагент в Контрагент);
|Условие(вКЭКВ в КЭКВ);
|Условие(СокрЛП(вНомерД) = СокрЛП(НомерД));
|Условие(вДатаД в ДатаД);
|Условие(вРасчетныйСчет в РасчетныйСчет);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

Форма.тОстатокЮр.Заголовок(Формат(Запрос.СуммаОст,"Ч15.2"));
КонецПроцедуры

Если выводить просто Запрос.СуммаФ, то она всегда = 0. Если играться условиями (комментировать некоторые), то что-то считается, но совсем не то. Похоже ошибка в данных какая-то и условия не выполняются. На другом компьютере запрос идентичный и все считается.

alexandr_ll

Цитата: Александр Дорошенко от 01 дек 2020, 09:28
Цитата: alexandr_ll от 16 окт 2020, 06:31
Какая конфигурация и ее релиз?
1С Предприятие 7.7, билд 7.70.027
Цитировать
Что есть сумма долга по договору? Это реквизит справочника, остаток на бухгалтерском счете или остаток по регистру?
В начале года, на определенные счета по юр. договорам, мы вносим средства, которые затем тратим в течении года. После проводки финансовых обязательтв по этому договору, должен быть виден остаток по нему, Остаток Юр = Начальная сумма по юр. договору - Сумма(финансовые обязательства). Вот он и не считается, а равен начальной сумме.
Цитировать
Обычно все изменения в базе происходят при проведении документа Процедура ОбработкаПроведения()
Процедура ОбработкаПроведения есть, но в ней происходит проверка на корректное заполнение всех полей и все. При открытии формы вызывается процедура вычисления остатка в которой выполняется запрос.

Процедура ПосчитатьОстатокЮр()
Перем Запрос, ТекстЗапроса;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(ПосчитатьОстатокЮр)
|Период с (НачГода(ДатаДок)) по (ТекущаяДата());
|вКонтрагент = Документ.ЮридическоеОбязательство.Контрагент, Документ.ФинансовоеОбязательство.Контрагент;
|вНомерД = Документ.ЮридическоеОбязательство.НомерД, Документ.ФинансовоеОбязательство.НомерД;
|вКЭКВ = Документ.ЮридическоеОбязательство.КЭКВ, Документ.ФинансовоеОбязательство.КЭКВ;
|вРасчетныйСчет = Документ.ЮридическоеОбязательство.РасчетныйСчет, Документ.ФинансовоеОбязательство.РасчетныйСчет;
|вДатаД = Документ.ЮридическоеОбязательство.ДатаД, Документ.ФинансовоеОбязательство.ДатаД;
|СуммаЮ = Документ.ЮридическоеОбязательство.Сумма;
|СуммаФ = Документ.ФинансовоеОбязательство.Сумма;
|Функция СуммаОст = Сумма(СуммаЮ-СуммаФ);
|Условие(вКонтрагент в Контрагент);
|Условие(вКЭКВ в КЭКВ);
|Условие(СокрЛП(вНомерД) = СокрЛП(НомерД));
|Условие(вДатаД в ДатаД);
|Условие(вРасчетныйСчет в РасчетныйСчет);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

Форма.тОстатокЮр.Заголовок(Формат(Запрос.СуммаОст,"Ч15.2"));
КонецПроцедуры

Если выводить просто Запрос.СуммаФ, то она всегда = 0. Если играться условиями (комментировать некоторые), то что-то считается, но совсем не то. Похоже ошибка в данных какая-то и условия не выполняются. На другом компьютере запрос идентичный и все считается.
Вы указали только платформу и не написали какая конфигурация.
Если остаток - это разница между суммами документов "Юридическое обязательство" и "Финансовое обязательство" и вычитаемое равно нулю, то нужно проверять все условия запроса (совпадают Контрагенты, КЭК, Номера и даты документов, Расчетный счет) при невыполнении любого СуммаФ будет равна нулю.
Вообще такой расчет остатков методически совершенно неприемлем: при любом изменении реквизитов документа поиск остатка становится блужданием в лабиринте - как у вас.

Александр Дорошенко

Конфигурация похоже писалась с нуля или каких-то наработок, затем вносились изменения в связи с меняющимися требованиями и не одним программистом, теперь я унаследовал все это). Указана только фирма и авторы, версии нет. Установленные компоненты - бух. учет,оперативный учет, расчет. Ваш ответ натолкнул на мысль сравнить свойства всех реквизитов в документе фин. обязательство в работающей и неработающей конфигурациях и которые присутствуют в запросе. Сразу нашел отличие. НомерД в неработающей конфигурации был строкой неограниченной длинны, в работающей 32 символа. И в эту переменную
вНомерД = Документ.ЮридическоеОбязательство.НомерД, Документ.ФинансовоеОбязательство.НомерД;
фактически, непонятно какое значение заносилось, это как я понимаю, т к типы из-за длинны не одинаковы. Соответственно не отрабатывало и условие Условие(СокрЛП(вНомерД) = СокрЛП(НомерД));
Сделал 32 символа вместо неограниченной и все стало считаться. Спасибо!
ЦитироватьВообще такой расчет остатков методически совершенно неприемлем...
Если остаток - это разница между суммами документов "Юридическое обязательство" и "Финансовое обязательство"
Да, остаток так и считается, только фин. обязательств может быть N-количество к одному юр. и для расчета остатка нужна сумма по всем фин. обязательствам. А как бы сделать это по уму?

alexandr_ll

Сделать регистр "Обязательства",
Измерения: Контрагент, КЭК, Расчетный счет, Обязательство
Ресурсы: Сумма
Документ "Юридическое обязательство" при проведении формирует приход по регистру, а "Финансовое обязательство" - расход.
Сразу имеете остаток по обязательству.

Александр Дорошенко

Спасибо, красиво! С регистрами не работал и ни одного в конфигурации не создано. Это можно разобраться. Проблема поболее будет для меня. Как в созданный регистр "Обязательства" вогнать все уже проведенные Юр Документы с начальной суммой, а затем пройтись по всем Фин Документам с номером договора, который в Юр, и вычитать из суммы в регистре расход по текущему Фин. Т е актуализировать текущие остатки.

alexandr_ll

Цитата: Александр Дорошенко от 16 дек 2020, 16:59
Спасибо, красиво! С регистрами не работал и ни одного в конфигурации не создано. Это можно разобраться. Проблема поболее будет для меня. Как в созданный регистр "Обязательства" вогнать все уже проведенные Юр Документы с начальной суммой, а затем пройтись по всем Фин Документам с номером договора, который в Юр, и вычитать из суммы в регистре расход по текущему Фин. Т е актуализировать текущие остатки.
Если проведение документов по регистрам описано в модуле документов в процедуре "Обработка проведения", то просто создаете обработку по групповому проведению документов и запускаете проведение за весь период учета. Ничего самому вычитать не надо, поскольку один документ делает движение с "Плюсом", а другой с "Минусом". Так как при проведении нет расчетов, то процедура выполнится быстро.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск