Хитрости СКД. Часть 4

13.01.24

Разработка - СКД

Столкнулся с тем, что мне приходится писать гору отчетов. Во многих приходится использовать повторяющиеся приемы. Решил написать шпаргалку, которая, надеюсь пригодится не только мне. В этой статье: Работа с 2 схемами в одном отчете, когда данные одной схемы являются исходными для другой. Копирование пользовательских отборов из одной схемы в другую. Корректная модификация формы отчета БСП.

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

Проше всего в отчет скопировать стандартную форму отчета из БСП (по умолчанию она и так вызывается из любого отчета на СКД) и модифицировать ее соответствующим образом. К тому же в моем случае это решает еще одну проблему. Я так и не нашел корректного способа передать таблицу из клиента из формы на сервер в фоновое задание, где по умолчанию выполняется компоновка всех отчетов, встроенных в конфигурацию. Для внешних отчетов все работает хорошо, при встраивании конфигурацию вместо таблицы возвращается null. Подозреваю – недоработка 1с. Выход из ситуации - производить компоновку прямо из формы. Если кто-нибудь решил эту проблему другим способом, дайте пожалуйста знать в комментариях.

Итак, модифицируем наш отчет:

В общий модуль вставим несколько функций, которые будем использовать и заглушку, что-б не вызывалась стандартная функция компоновки:

//Важно!!!!! Код компоновки результата находится в модуле форм

Функция ПолучитьПользовательскийПараметр(ИмяПараметра, КомпоновщикНастроек)  Экспорт 
    
    НайденныйПараметр = Неопределено;
    
    НайденныйПараметрВарианта = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
    
    Если НайденныйПараметрВарианта <> Неопределено Тогда
        
        НайденныйПараметр = ПолучитьПредопределенныйЭлементПользовательскихНастроек(НайденныйПараметрВарианта, КомпоновщикНастроек.ПользовательскиеНастройки);
        
    КонецЕсли;
    
    Возврат НайденныйПараметр;
    
КонецФункции

Функция ПолучитьПредопределенныйЭлементПользовательскихНастроек(ЭлементНастроекВарианта, ПользовательскиеНастройки) Экспорт
    
    НайденныйЭлемент = Неопределено;
    
    Если ЭлементНастроекВарианта <> Неопределено Тогда
        
        НайденныйЭлемент = ПользовательскиеНастройки.Элементы.Найти(ЭлементНастроекВарианта.ИдентификаторПользовательскойНастройки);
        
    КонецЕсли;
        
    Возврат НайденныйЭлемент;
КонецФункции
    

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

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	СтандартнаяОбработка=Ложь;
КонецПроцедуры


//Важно!!!!! Код компоновки результата находится в модуле формы

Добавляем на форму отчета, скопированную из общих форм, нашу таблицу цен и кнопку для ее заполнения. Пропишем код на форме:

&НаСервере
Процедура ЗаполнитьЦеныНаСервере()
	
	
	ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
	
	СхемаЗаполненияЦен = ОтчетОбъект.ПолучитьМакет("СхемаЗаполненияЦен");
	
	НастройкиСхемаЗаполненияЦен = СхемаЗаполненияЦен.НастройкиПоУмолчанию;
	
	ПараметрыДанныхСхемаЗаполненияЦен = НастройкиСхемаЗаполненияЦен.ПараметрыДанных.Элементы;
	
	ИспользоватьСпециальныйПрайсПараметр =  ОтчетОбъект.ПолучитьПользовательскийПараметр("ИспользоватьСпециальныйПрайс", ОтчетОбъект.КомпоновщикНастроек);
	ИспользоватьСпециальныйПрайсПараметр2= 	ПараметрыДанныхСхемаЗаполненияЦен.Найти("ИспользоватьСпециальныйПрайс");
	ЗаполнитьЗначенияСвойств(ИспользоватьСпециальныйПрайсПараметр2,ИспользоватьСпециальныйПрайсПараметр,"Использование,Значение");
	СпециальныйПрайсПараметр =  ОтчетОбъект.ПолучитьПользовательскийПараметр("СпециальныйПрайс", ОтчетОбъект.КомпоновщикНастроек);
	СпециальныйПрайсПараметр2= 	ПараметрыДанныхСхемаЗаполненияЦен.Найти("СпециальныйПрайс");
	ЗаполнитьЗначенияСвойств(СпециальныйПрайсПараметр2,СпециальныйПрайсПараметр,"Использование,Значение");
	
	ПериодОтчетаПараметр =  ОтчетОбъект.ПолучитьПользовательскийПараметр("ПериодОтчета", ОтчетОбъект.КомпоновщикНастроек);
	ЭлементНачалоПериода = ПараметрыДанныхСхемаЗаполненияЦен.Найти("ДатаНачала");
	ЭлементНачалоПериода.Использование = Истина;
	ЭлементНачалоПериода.Значение = ПериодОтчетаПараметр.Значение.ДатаНачала;
	ЭлементКонецПериода = ПараметрыДанныхСхемаЗаполненияЦен.Найти("ДатаОкончания");
	ЭлементКонецПериода.Использование = Истина;
	ЭлементКонецПериода.Значение = ПериодОтчетаПараметр.Значение.ДатаОкончания;
	
	
	КомпоновщикНастроекДанных = Новый КомпоновщикНастроекКомпоновкиДанных;
	
	КомпоновщикНастроекДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаЗаполненияЦен));
	
	КомпоновщикНастроекДанных.ЗагрузитьНастройки(СхемаЗаполненияЦен.НастройкиПоУмолчанию);
	
	КомпоновщикНастроекДанных.ЗагрузитьПользовательскиеНастройки(Отчет.КомпоновщикНастроек.ПользовательскиеНастройки);
	
	//Копируем элементы отбора

	КомпоновщикНастроекДанных.Настройки.Отбор.Элементы.Очистить();
	Для Каждого ЭлементНастроек Из Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл 
		Если ТипЗнч(ЭлементНастроек)=Тип("ЭлементОтбораКомпоновкиДанных") И ЭлементНастроек.Использование Тогда
			НовСтрока=КомпоновщикНастроекДанных.Настройки.Отбор.Элементы.Добавить(ТипЗнч(ЭлементНастроек));
			ЭлОтбораООНайден=Ложь;
			Для Каждого ЭлОтбораОО из Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы цикл
				Если  ЭлОтбораОО.ИдентификаторПользовательскойНастройки =  ЭлементНастроек.ИдентификаторПользовательскойНастройки Тогда
					ЭлОтбораООНайден=Истина;
					Прервать;	
				КонецЕсли;
			КонецЦикла;
			Если  ЭлОтбораООНайден Тогда
       		 	ЗаполнитьЗначенияСвойств(НовСтрока,ЭлОтбораОО,"ЛевоеЗначение");
       		 	ЗаполнитьЗначенияСвойств(НовСтрока,ЭлементНастроек,"ВидСравнения,ПравоеЗначение,Использование");
			КонецЕсли;
		КонецЕсли;
    КонецЦикла;

	
	КомпоновщикМакетаСхемаЗаполненияЦен = Новый КомпоновщикМакетаКомпоновкиДанных;
	
	МакетКомпоновкиДанных = КомпоновщикМакетаСхемаЗаполненияЦен.Выполнить(СхемаЗаполненияЦен, КомпоновщикНастроекДанных.ПолучитьНастройки(),,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	
	
	// Инициализация процессора компоновки
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных,,,);
	
	ТаблицаЦенНовая= Новый ТаблицаЗначений;
	
	// Получение результата
	ПроцессорВыводаРезультатаКомпоновкиДанных = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	ПроцессорВыводаРезультатаКомпоновкиДанных.УстановитьОбъект(ТаблицаЦенНовая);
	ПроцессорВыводаРезультатаКомпоновкиДанных.Вывести(ПроцессорКомпоновкиДанных);
	
	Отчет.ТаблицаЦен.Загрузить(ТаблицаЦенНовая);
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьЦены(Команда)
	ЗаполнитьЦеныНаСервере();
КонецПроцедуры

 

Теперь, входим в настройки формы и через состав команд отключаем стандартную кнопку “Сформировать”. Создаем свою команду “Сформировать” , отображаем ее на том же месте и прописываем для нее код:

&НаСервере
Процедура СформироватьОтчетНаСервере(ТабдДок)
	ОбъектОтчет = РеквизитФормыВЗначение("Отчет");
	
	ТабдДок=Новый ТабличныйДокумент;
	
   // Создаем МВТ
    МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	
	
   // Заполняем таблицу в МВТ
	ТаблицаЦенКопия=Отчет.ТаблицаЦен.Выгрузить();
	Запрос =Новый Запрос;
	Запрос.МенеджерВременныхТаблиц= МенеджерВременныхТаблиц;	
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ТабЦен.Номенклатура КАК Номенклатура,
		|	ТабЦен.Цена КАК Цена
		|ПОМЕСТИТЬ ТЦен
		|ИЗ
		|	&ТабЦен КАК ТабЦен
		|ГДЕ
		|	ТабЦен.Цена <> ТабЦен.ЦенаДоРедактирования";
	Запрос.УстановитьПараметр("ТабЦен",ТаблицаЦенКопия);
	РезультатЗапроса = Запрос.Выполнить();
	
	

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

Функция  ПолучитьТаблицуЦен()
	Возврат Отчет.ТаблицаЦен.Выгрузить();
КонецФункции

&НаСервереБезКонтекста
Функция ОбъединятьЯчейки(ТабДок, индСтр, индКол)
    Ячейка = ТабДок.Область(индСтр, индКол);
    ЯчейкаСлед = ТабДок.Область(индСтр, индКол+1);
    Если ПустаяСтрока(Ячейка.Текст) Тогда
        Возврат ложь
    ИначеЕсли
        Ячейка.Текст = ЯчейкаСлед.Текст
            И Ячейка.Верх = Ячейка.Низ И ЯчейкаСлед.Верх = ЯчейкаСлед.Низ Тогда
        Возврат Истина;
    Иначе
        Возврат ложь
    КонецЕсли;
КонецФункции

&НаСервереБезКонтекста
Функция ОбработатьЗаголовки(ТабДок)
    ВысотаФ = ТабДок.ФиксацияСверху;
    ШиринаФ = ТабДок.ФиксацияСлева;
    ОбъединяемаяОбласть = Неопределено;
	СписокТипов=Новый СписокЗначений;
	
    Для индСтр = -ВысотаФ По -1 Цикл
		//Если ТабДок.Область(-индСтр,1).Текст = "" Тогда
		//    Возврат ТабДок;
		//КонецЕсли; 
        НачальнаяКолонка = 0; СчетчикНО=0;   СчетчикКО=0;
        Для индКол=ШиринаФ+1 По ТабДок.ШиринаТаблицы Цикл
			Если -индСтр=ВысотаФ-2 И ТабДок.Область(-индСтр, индКол).Текст=""  Тогда
				ТабДок.Область(ВысотаФ-2, индКол).Текст=ТабДок.Область(ВысотаФ, индКол).Текст;
				ОбъединяемаяОбласть = ТабДок.Область(ВысотаФ-2, индКол, ВысотаФ, индКол);
				ОбъединяемаяОбласть.Объединить();
				ОбъединяемаяОбласть.РазмещениеТекста=ТипРазмещенияТекстаТабличногоДокумента.Переносить;
			ИначеЕсли ТабДок.Область(-индСтр, индКол).Текст="Сумма ДР" Тогда
				ОбъединяемаяОбласть = ТабДок.Область(-индСтр-1, индКол, -индСтр, индКол);
				ОбъединяемаяОбласть.Объединить();
			ИначеЕсли ОбъединятьЯчейки(ТабДок, -индСтр, индКол) Тогда
                Если не НачальнаяКолонка Тогда
                    НачальнаяКолонка = индКол;
                КонецЕсли;
            ИначеЕсли НачальнаяКолонка Тогда
                ТекстЗаголовка = ТабДок.Область(-индСтр, индКол).Текст;
				ОбъединяемаяОбласть = ТабДок.Область(-индСтр, НачальнаяКолонка, -индСтр, индКол);
				ОбъединяемаяОбласть.Объединить();
				ОбъединяемаяОбласть.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
				ОбъединяемаяОбласть.Текст = ТекстЗаголовка;
                НачальнаяКолонка = 0;
            Иначе
                НачальнаяКолонка = 0;
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    Возврат ТабДок;
КонецФункции

В моем случае, дополнительно потребовалось объединить одинаковые заголовки ячеек для красоты

Полезные ссылки:

Хитрости компоновки данных: произвольная иерархия для внешней таблицы данных в отчетах на СКД. (infostart.ru)

Хитрости компоновки данных: программное формирование заголовков отчета и колонок без использования макетов. (infostart.ru)

Другие разработки автора:

Подсистема штрихкодирования серий номенклатуры (УТ 11, КА, ERP)Подсистема штрихкодирования серий номенклатуры (УТ 11, КА, ERP)
Подсистема 'Входной контроль' для ERP ,КА , УТ 11
Подсистема 'Входной контроль' для ERP ,КА , УТ 11
Электронный обходной лист (расширение) для ERP, ЗУП, КА
Отправка электронных писем по задолженностям клиентов (ERP, УТ 11)Отправка электронных писем по задолженностям клиентов (ERP, УТ 11)
Excel Studio for 1CExcel Studio for 1C
Настраиваемый управленческий балансНастраиваемый управленческий баланс
Динамические отчеты СКД
Динамические отчеты СКД
Фоновая отправка уведомлений
Генератор кодаГенератор кода

 

Акция! Вы можете скачать архив всех моих разработок, которые я предлагаю за StartMone, по Специальной  цене:  //infostart.ru/public/960899/#archive

PS: Надеюсь вам понравится эта и другие мои разработки на //infostart.ru/profile/48714/.

Очень жду ваших комментариев  и пожеланий.

Молочников Олег Spb. 2024.

СКД Объединение ячеек копирование пользовательских отборов

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159370    872    399    

861

Производство готовой продукции (работ, услуг) Рабочее место Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Бухгалтерский учет Управленческий учет Платные (руб)

Расширение "Входной контроль" в 1С:ERP, КА 2.5, УТ11.5 и предназначено для удобства отражения операций входного контроля и их результатов в учетной системе, а также фотофиксации брака.

12000 руб.

02.02.2019    36757    43    22    

41

Сканер штрих-кода Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Стандартные конфигурации ERP, КА, УТ 11 позволяют работать с штрихкодированием серий. Есть только одно суровое ограничение – на упаковке должна быть этикетка для номенклатуры и отдельно для серии. Во многих случаях это критически неудобно.

12000 руб.

19.04.2021    22810    64    44    

57

Учет доходов и расходов Бизнес-аналитик Руководитель проекта Платформа 1С v8.3 Управляемые формы Система компоновки данных Конфигурации 1cv8 1С:ERP Управление предприятием 2 Управленческий учет Платные (руб)

Настраиваемый управленческий баланс в 1С предназначен для всех конфигураций, тестирован на: “Управление торговлей”, “Управление производственным предприятием”, “Комплексная автоматизация”, "ERP","УТ11". Содержит конструкторские средства для изменения состава статей баланса и их иерархии, формирования запросов для получения данных по статьям, изменения настроек отчетов для удобного формирования отчетов расшифровки по каждой из статей. Предусмотрено ручное введение данных по статьям баланса в виде ведомостей по датам.

12000 руб.

22.05.2011    98300    115    108    

188

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

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

15.05.2024    8681    implecs_team    6    

47

Инструментарий разработчика СКД Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

По выбранной схеме компоновки данных генерирует программный код, который генерирует СКД, аналогичную исходной схеме. Есть дополнительные инструменты для просмотра дерева схемы, сравнение исходной схемы и полученной по коду, а также сравнение изменений в сгенерированном коде для исходной схемы и для измененной.

3 стартмани

05.02.2024    6991    56    obmailok    21    

79

Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    3146    5    Yashazz    1    

34

СКД WEB-интеграция Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    10800    23    John_d    25    

124
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RocKeR_13 1366 13.10.22 16:22 Сейчас в теме
В этой статье: Работа с 2 схемами в одном отчете, когда данные одной схемы являются исходными для другой. Копирование пользовательских отборов из одной схемы в другую. Корректная модификация формы отчета БСП.


Альтернативы в виде:

1) Вложенные схемы
2) Два набора + связывание через параметры

рассматривали?
2. milkers 2918 13.10.22 16:35 Сейчас в теме
(1) Нет, так данные первой схемы пользователь правит руками -и это уже данные для второй
4. Manoshkin 357 14.10.22 04:34 Сейчас в теме
(2)
данные первой схемы пользователь правит руками
я бы запихал результат в документ или регистр. А то потом концов не найдешь, что и кто направил.
Pavel_Vladivostok; +1 Ответить
6. milkers 2918 14.10.22 08:11 Сейчас в теме
(4) Там пользователь динамически манипулирует ценами и смотри что получится, хранить нет нужды.
3. Timic 52 13.10.22 19:53 Сейчас в теме
Не очень мне нравится подход с дублированием формы и последующей модификацией.
С одной стороны это упрощает разработку, но подход не универсальный. Если обновится основная форма, то дублированные нужно будет переделывать.
Проблему можно решить программной доработкой основной формы (БСП это позволяет). Простой способ это добавить подключаемую команду по которой будет открываться отдельная форма для редактирования таблицы. Способ сложнее- добавить программно таблицу непосредственно на форму.
SlavaKron; +1 Ответить
5. Pavel_Vladivostok 58 14.10.22 06:38 Сейчас в теме
Недавно была подобная задача, но в моем случае первую таблицу править руками не нужно было, поэтому все решилось довольно просто.
Так и не понял в чем проблема с передачей таблицы из формы на сервер разве не получается поместить во временное хранилище и оттуда забрать?
8. milkers 2918 14.10.22 08:23 Сейчас в теме
(5) Поместить во временное хранилище легко. Только вот внутри фонового задания при обращении к нему получаем Неопределенно. Релиз 1С:Предприятие 8.3 (8.3.18.1741).
7. milkers 2918 14.10.22 08:21 Сейчас в теме
(3) Основная форма обновляется довольно редко, большая часть функционального кода выделена в общие модули БСП. Не помню случая, что-б пришлось ее менять. Даже если придется -копируется новая форма из текущий конфигурации и переносится кусок кода обрамленный комментариями из старой формы, который находится в конце модуля формы. Ваши способы хороши, но трудоемки. И не решают главную проблему - нужно переопределить функцию кнопки "Сформировать", да так, что-б она выполнялась не в фоновом задании.
9. RustIG 1747 14.10.22 11:54 Сейчас в теме
(0) изначальная задача какая? может ее можно по другому решить? я в целом не понял, что и зачем делается с СКД.
Портянка кода из сложных объектов (классов в терминологии языка Си) платформы 1С ради чего?
10. milkers 2918 14.10.22 12:06 Сейчас в теме
(9) Наверно, можно многими способами. Главное решить. Цель публикации не решение конкретной задачи, а демонстрация целого набора кубиков, которые могут пригодиться на большом наборе задач. Если мне снова потребуется скопировать пользовательские отборы и параметры, доработать форму отчета, перенести компоновку в модуль формы, обратиться к пользовательским параметрам, передать таблицу в качестве параметра в фоновое задание, работать с нескольким схемами - я буду знать куда быстро глянуть.
11. slknnk 78 15.10.22 00:12 Сейчас в теме
Минусы решения: дублирование формы, реализация логики в форме, а не в объекте.
Есть предположения, что автор не очень подробно разобрался с возможностями подсистемы ВариантыОтчетов, в которой есть возможности настройки и модификации типовой формы отчета под необычные задачи, а так же передать все что угодно через большой набор предопределенных обработчиков и параметров.
Bazil; Yashazz; +2 Ответить
12. milkers 2918 18.10.22 16:17 Сейчас в теме
(11) -Господа, все и началось с невозможности передать таблицу значений в фоновое задание через адрес хранилища значений. Адрес приходит, хранилище пустое. М.б. это проблема релиза. Буду рад узнать другие способы.
13. slknnk 78 18.10.22 17:50 Сейчас в теме
(12) А можете простой пример сделать откуда и куда, а главное зачем не передается таблица, чтобы точно понимать и воспроизвести проблему. Заинтересовал этот кейс, хотелось бы тоже разобраться.
15. ixijixi 1913 31.01.23 10:23 Сейчас в теме
(12) Сталкивался с таким, когда неполностью используешь синтаксис, надо обязательно указать УИ при помещении во ВХ
ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификатор)
14. aShumakoff 154 22.10.22 23:48 Сейчас в теме
При похожей задаче делал отдельный служебный регистр для передачи данных в фоновое задание.
Сейчас бы попробовал другие варианты.
1. По-моему в пользовательские настройки можно передавать дополнительные параметры. Есть свойство ДополнительныеПараметры. Туда бы загнал массив структур, а в обработчике при компоновке результата, уже бы при получении настроек из них вытаскивал и собирал таблицу.
2. Попробовать через хранилище общих настроек. Сохраняю для некоторых форм в хранилище общих настроек всякие пользовательские отборы и тп... тоже должно получиться.
Оба способа используются в типовых.
Второй способ в ут ерп плотно используется для сохранения схем компоновки правил заполнения планов,и передачи их в фоновое задание заполнения
16. milkers 2918 31.01.23 10:28 Сейчас в теме
17. milkers 2918 31.01.23 10:29 Сейчас в теме
(15) - Без этого бы отчет не работал, если его запускать как файл.
Оставьте свое сообщение