Задача состояла в следующем. В конфигурации 1С Бухгалтерия пользователю понадобился отчет по продажам с показателем валовой прибыли. Валовую прибыль, как известно, можно получить только зная себестоимость реализованной продукции. В большинстве конфигураций отчет "Валовая прибыль (продажи)" существует в стандартном виде, нужно только уметь им пользоваться. Но в конфигурации 1С Бухгалтерия такого отчета нет, потому что нет регистров, по которым можно формировать отчет. Поэтому, для того, чтобы в 1С Бухгаллтерия можно было сформировать требующийся отчет пришлось доработать конфигурацию. Что именно пришлось доработать: в документе Реализация товаров пришлось добавить код, который суммирует проводки по регистру бухгалтерии Хозрасчетный по счету 902 (Себестоимость реализованных товаров) и записывает результат суммы в каждый документ.
В модуль объекта документа Реализация товара после процедуры ПередЗаписью помещена новая функция:
ШАБЛОН КОДА:
Функция ЗаписатьССТВДокумент(СчетДт, Ссылка)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр ("СчетДт", ПланыСчетов.Хозрасчетный.СебестоимостьРеализованныхТоваров);
Запрос.УстановитьПараметр ("Ссылка", ЭтотОбъект.Ссылка);
Запрос.Текст =
"ВЫБРАТЬ
| Хозрасчетный.Период,
| Хозрасчетный.Регистратор,
| Хозрасчетный.СчетДт,
| Хозрасчетный.СчетКт,
| Хозрасчетный.Сумма,
| Хозрасчетный.КоличествоДт,
| Хозрасчетный.КоличествоКт,
| Хозрасчетный.Содержание
|ИЗ
| РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
|ГДЕ
| Хозрасчетный.СчетДт = &СчетДт
| И Хозрасчетный.Регистратор.Ссылка = &Ссылка";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
СуммаССТПоДокументу = Число(0);
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
СчетДТ902 = ВыборкаДетальныеЗаписи.СчетДт;
СуммаССТПоДокументу = СуммаССТПоДокументу + ВыборкаДетальныеЗаписи.Сумма;
КонецЦикла;
Возврат СуммаССТПоДокументу;
КонецФункции
СКРИНШОТ КОДА
Как видите, функция с параметрами (счет, документ) отбирает суммы из текущего документа и только по определенному счету. Результат запроса обрабатывается с помощью цикла и в нем же происходит получение суммы всех строк проводок по дебету 902 счета.
Сама же запись суммы происходит при перепроведении документа групповой обработкой или вручную.
ШАБЛОН КОДА
Для обращения к функции и записи суммы в дополнительный реквизит документа:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
...
ЭтотОбъект.ССТДляОтчета = ЗаписатьССТВДокумент (902,ЭтотОбъект.Ссылка) ;
КонецПроцедуры
СКРИНШОТ КОДА
Реквизит добавленный нами в документ РеализацияТоваров назывался "ССТДляОтчета" - число (длина -10, точнность - 2).
В результате в 1С бухгалтерия можно сформировать вот такой вот отчет по продажам: