Поставили задачу, необходимо добавить колонку "Сумма Потрачено" в список документа "Авансовый Отчет". Сумма эта вычисляется в форме документа на основе заполнения 2 вкладок на форме. Как можно вытащить это значение?
Приложение обычное, платформа 8.2.
Добавить в документ реквизит и вычислять его значение перед записью. В список вывести данный реквизит.
Можно обработкой записать, если сильно надо. ДокументОбъект.Записать(РежимЗаписиДокумента.Запись) - это не перепроведение, на партии запасов не повлияет.
Обработать групповой обработкой.
Все понял, кроме одного - как через групповую обработку процесс записи дать, не нашел я там такой "педали".
Вообще надо инициировать запись документа и процедуру по расчету нового реквизита. Значит, надо реквизит какой-то поменять. Теоретически - пробел в Комментарий записать. А если там уже был комментарий заполнен?.. Но я бы лучше написала свою обработку в три строки. Быстро, сурово, ничего лишнего.
Если Комментарий = неопределено Тогда
Комментарий = " ";
Иначе
Комментарий = Комментарий + " "
КонецЕсли;
В этом случае обязательно сделать копию базы. На копии потренироваться с групповой обработкой. Поинтересуйтесь у бухгалтеров нужны ли комментарии в авансовых отчетах. В групповой обработке отобрать все документы Авансовый отчет, на второй закладке выбрать действие Изменить комментарий. Выполнить. В этом случае проведения не будет, только запись.
Если своей обработкой... Можно получить выборку документов запросом, а можно перебрать без запроса.
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| АвансовыйОтчет.Ссылка
|ИЗ
| Документ.АвансовыйОтчет КАК АвансовыйОтчет
|ГДЕ
| АвансовыйОтчет.Дата МЕЖДУ &Дата1 И &Дата2";
//делаем выборку
Выборка = Запрос.Выполнить().Выбрать();
//перебираем элементы выборки в цикле
Пока Выборка.Следующий() Цикл
//получим сам объект, чтобы иметь возможность его записать
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
Сообщить("Записан " + ДокументОбъект);
КонецЦикла;
Предупреждение("Обработка завершена!");
Через произвольный алгоритм в "Универсальный подбор и обработка объектов" попробовал сейчас - оно отработало, выдало, мол успешно завершено и количество обработанных элементов показало, а в списке документов как было пусто в поле суммы, так и осталось.
А если документ вручную перезаписать - суммы появляются? Возможно, расчет вашего реквизита отрабатывает только при интерактивном проведении.
Реквизит в модуле форме рассчитывается? Если да - тогда надо в тот код, что я написала добавить еще расчет реквизита и присвоение.
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
ДокументОбъект.СуммаПотрачено = ...; //здесь итоги складываем или что там надо посчитать
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
Курс = ?(КурсВал = 0, 1, КурсВал);
СуммаПотрачено = Состав.Итог("Сумма") + ?(НЕ ЦеныСНДС, Состав.Итог("НДС"), 0) / Курс + Оплата.Итог("Сумма");
Ну вот этот кусочек туда и впихнуть, в эту обработку. А еще лучше попробовать ее перенести в модуль документа. Посмотрите для примера процедуру ПередЗаписью() в модуле документа и обратите внимание на то, как рассчитывается реквизит СуммаДокумента.
В общем реализовал таким образом:
Через "Универсальный подбор и обработка объектов", на вкладке "Обработка" в разделе "Произвольный алгоритм" вписал и выполнил такой код:
Попытка
Курс = ?(Объект.КурсВал = 0, 1, Объект.КурсВал);
Объект.СуммаПотрачено = Объект.Состав.Итог("Сумма") + ?(НЕ Объект.ЦеныСНДС, Объект.Состав.Итог("НДС"), 0) / Курс + Объект.Оплата.Итог("Сумма");; //здесь итоги складываем или что там надо посчитать
Объект.Записать(РежимЗаписиДокумента.Запись);
Исключение
Сообщить("Ошибка");
КонецПопытки;
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua