Отчет по документу "Расходная накладная", конфигурация 1С:УНФ

12.08.24

Разработка - Универсальные функции

Внешний отчет, который открывается из документа "Расходная накладная", в качестве параметра в отчет передается ссылка на документ, в самом отчете необходимо видеть информацию из самого документа и информацию по остаткам номенклатуры.

В данном примере я покажу свое решение вот такой задачи - необходимо создать  внешний отчет, который будет открываться из документа "Расходная накладная", в качестве параметра в отчет передается ссылка на документ, в  отчете необходимо видеть информацию из  самого документа (артикул, номенклатура, количество в документе) и информацию по остаткам номенклатуры ( остаток на складе списания, остатки на всех складах и итоги по всем складам). Данные по остаткам необходимо получать на дату документа (Граница.Исключая).

1. Создаем внешний отчет, в свойствах обязательно указываем "Хранилище вариантов отчетов" и в модуле объекта прописываем необходимые функции и процедуры для регистрации  внешнего отчета:

 

Функция СведенияОВнешнейОбработке() Экспорт
	
	НаименованиеОтчета="Анализ по остаткам";
	
	ПараметрыРегистрации = Новый Структура;
	МассивНазначений = Новый Массив();
	МассивНазначений.Добавить("Документ.РасходнаяНакладная");  // указываем вид документа
	ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
	ПараметрыРегистрации.Вставить("Вид", "Отчет");
	ПараметрыРегистрации.Вставить("ОпределитьНастройкиФормы","Истина");
	ПараметрыРегистрации.Вставить("Наименование", НаименованиеОтчета);
	ПараметрыРегистрации.Вставить("Версия", "1.0");
	ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
	ПараметрыРегистрации.Вставить("Информация", НаименованиеОтчета); 
	ПараметрыРегистрации.Вставить("ВерсияБСП", "3.1.7.235");
	ТаблицаКоманд = ПолучитьТаблицуКоманд();
	ДобавитьКоманду(ТаблицаКоманд,
	НаименованиеОтчета,
	"1",
	"ОткрытиеФормы",
	Ложь,"");
	ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); 
	Возврат ПараметрыРегистрации;
	
КонецФункции

Функция ПолучитьТаблицуКоманд() 
	
	Команды = Новый ТаблицаЗначений;
	Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
	Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
	Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
	Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
	Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
	Возврат Команды; 
	
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
	
	НоваяКоманда = ТаблицаКоманд.Добавить();
	НоваяКоманда.Представление = Представление;
	НоваяКоманда.Идентификатор = Идентификатор;
	НоваяКоманда.Использование = Использование;
	НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
	НоваяКоманда.Модификатор = Модификатор; 
	
КонецПроцедуры 

 

2.  Здесь же, в модуле объекта внешнего отчета, прописываем процедуру определения настройки формы:

 

Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт 
	
Настройки.ФормироватьСразу = Истина;
Настройки.РазрешеноИзменятьВарианты = Истина;
Настройки.События.ПриСозданииНаСервере = Истина;   

КонецПроцедуры

 

3.  В экспортной процедуре  "ПриСозданииНаСервере"  получим ссылку на документ и передадим ее в параметр "Ссылка" в СКД. Так как данные по остаткам нам нужны на дату документа (Граница.Исключая), в этой же процедуре в параметр "Период" в СКД передадим необходимое значение:

Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
	
	ОбъектыНазначения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Форма.Параметры, "ОбъектыНазначения");     
	Документ = ОбъектыНазначения[0]; //Получаем ссылку на документ   
	Если ОбъектыНазначения <> Неопределено Тогда
		Форма.ФормаПараметры.Отбор.Вставить("Ссылка", Документ); 
		//Данные по остаткам будем получать на дату документа, Граница.Исключая
		Граница = Новый Граница(Документ.Дата, ВидГраницы.Исключая);
		Форма.ФормаПараметры.Отбор.Вставить("Период", Граница);
	КонецЕсли;
    
КонецПроцедуры

 

4.  Создаем вычисляемое поле "Разница", рассчитываем по формуле: ОстатокНаСкладеСписания  - КоличествоВДокументе (по всем настройкам в СКД смотрим скриншоты).

5.  Указываем ресурсы и  на закладке "Параметры" делаем необходимые настройки.

6.  В настройках СКД создаем таблицу, в качестве строки  укажем группировку по полю "Номенклатура", в выбранных полях группировки сгруппируем поля "Номенклатура" и "Артикул", для того чтобы эти поля находились в разных колонках.

7. В колонки таблицы добавим необходимые группировки и настроим условное оформление.

Проверено на следующих конфигурациях и релизах:

  • Управление нашей фирмой, редакция 3.0, релизы 3.0.1.282

Вступайте в нашу телеграмм-группу Инфостарт

ВнешнийОтчет УНФ Остатки

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    4574    Abysswalker    11    

46

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    8485    DeerCven    15    

62

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    56141    dimanich70    85    

174

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7923    7    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    70538    atdonya    31    

72

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    9914    ke.92@mail.ru    17    

68
Для отправки сообщения требуется регистрация/авторизация