Хитрости СКД. Часть 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.

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

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

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

10000 руб.

02.09.2020    124960    683    389    

732

Подсистема штрихкодирования серий номенклатуры для 1С:УТ 11.4/11.5 КА, ERP 2.4/2.5

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

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

12000 руб.

19.04.2021    20910    58    35    

53

Настраиваемый управленческий баланс V4.20 (Управляемые и обычные формы)

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

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

12000 руб.

22.05.2011    96827    114    108    

187

Электронный обходной лист (расширение) для ERP, ЗУП, КА

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

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

9600 руб.

11.01.2022    12416    2    5    

8

Excel Studio for 1C V2.11

Загрузка и выгрузка в Excel Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

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

2400 руб.

16.11.2016    29611    2    10    

32

Генератор схемы компоновки данных (СКД), написание кода схемы программно

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

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

3 стартмани

05.02.2024    4376    31    obmailok    19    

69

Набор-объект для СКД по тексту или запросу

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

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

1 стартмани

31.01.2024    2149    2    Yashazz    0    

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


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

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

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