Когда впервые столкнулась с подобным требованием пользователя пришлось потратить немало времени на изучение вопроса.. Надеюсь, что моя статья окажется полезной и сэкономит кому-нибудь время и силы.
Пример программного заполнения настроек построю на основе отчёта по оборотному регистру накопления Продажи с измерениями: Контрагент, Номенклатура и ресурсами: Количество и Сумма.
Создание отчёта и настройка схемы компоновки данных.
Итак. Создаём новый отчёт. Открываем схему компоновки данных и добавляем новый набор данных запрос. В окне запроса пишем следующий запрос:
ВЫБРАТЬ
ПродажиОбороты.Регистратор,
ПродажиОбороты.Контрагент,
ПродажиОбороты.Номенклатура,
ПродажиОбороты.СуммаОборот,
ПродажиОбороты.КоличествоОборот
ИЗ
РегистрНакопления.Продажи.Обороты(, , Авто, ) КАК ПродажиОбороты
На закладке «Ресурсы» указываем в качестве ресурсов поля КоличествоОборот и СуммаОборот.
На закладке «Параметры» добавим новый параметр «Период» типа СтандартныйПериод. Для параметра «НачалоПериода» в качестве выражения укажем следующее значение: &Период.ДатаНачала, для параметра «КонецПериода» — &Период.ДатаОкончания. Таким образом, мы избавим себя от приведения даты окончания к концу дня и установки каждого параметра в отдельности. Настройку структуры отчёта мы не делаем. Она будет сформирована программно.
На этом настройка схемы компоновки закончена. Переходим к настройке интерфейса.
Настройка пользовательского интерфейса.
Вначале создадим реквизиты отчёта. Они понадобятся нам при создании интерфейса и дальнейшей программной обработке указанных пользователем настроек. Добавляем реквизит Период – тип СтандартныйПериод, Количество – тип Булево, Сумма – тип Булево. Данные реквизиты будут отвечать за переданный параметр Период и за вывод ресурсов отчёта КоличествоОборот и СуммаОборот соответственно. Также нам потребуется табличная часть Группировки с реквизитами Поле – тип Строка и ТипГруппировки – тип Строка. Табличная часть будет отвечать за выбранные группировки при формировании отчёта.
Необходимые реквизиты созданы, теперь создаём форму отчёта.
На форме располагаем следующие элементы:
- Поля ввода для указания периода: ДатаНачала – данные Период.ДатаНачала, Датаокончания — Период.ДатаОкончания, Период – данные Период и кнопку КнопкаВыбораПериода (для кнопки нужно назначить обработчик, открывающий диалог указания периода. Программный код можно посмотреть в прикреплённом внешнем отчёте) .
- Панель с тремя страницами. Первую страницу назовём Отбор и расположим на ней табличное поле с данными КомпоновщикНастроек.Настройки.Отбор. Вторую страницу назовём УсловноеОформление и расположим на ней табличное поле с данными КомпоновщикНастроек.Настройки.УсловноеОформление. Третью страницу назовём Сортировка и расположим на ней табличное поле с данными КомпоновщикНастроек.Настройки.Порядок.
- Табличное поле Группировки, связанное с табличной частью отчёта «Группировки», и добавляем командную панель с указанием в качестве источника действий табличного поля «Группировки». На командную панель добавляем кнопки «Добавить», «Удалить», «Переместить вверх», «Переместить вниз».
- 2 флажка ВыводитьКоличество и ВыводитьСумму, связанные с реквизитами отчёта Количество и Сумма соответственно.
- Поле табличного документа Результат, автоматически созданное при создании формы, оставляем без изменения.
На этом создание пользовательского интерфейса завершено. Переходим к самому интересному – программной части.
Программная работа со схемой компоновки данных.
В первую очередь, необходимо описать какие группировки будут доступны в нашем отчёте. Для этого в модуле объекта создадим экспортные переменные СписокДоступныхПолейГруппировки и СписокДоступныхТиповГруппировки. В теле основной программы заполним их списками значений:
СписокДоступныхПолейГруппировки = Новый СписокЗначений;
СписокДоступныхПолейГруппировки.Добавить(«Регистратор»);
СписокДоступныхПолейГруппировки.Добавить(«Контрагент»);
СписокДоступныхПолейГруппировки.Добавить(«Номенклатура»);
СписокДоступныхТиповГруппировки = Новый СписокЗначений;
СписокДоступныхТиповГруппировки.Добавить(«Иерархия»);
СписокДоступныхТиповГруппировки.Добавить(«Элементы»);
При открытии формы заполним группировки значениями по умолчанию
Группировки.Очистить();
НоваяГруппировка = Группировки.Добавить();
НоваяГруппировка.Поле = «Регистратор»;
НоваяГруппировка.ТипГруппировки = «Элементы»;
НоваяГруппировка = Группировки.Добавить();
НоваяГруппировка.Поле = «Контрагент»;
НоваяГруппировка.ТипГруппировки = «Элементы»;
НоваяГруппировка = Группировки.Добавить();
НоваяГруппировка.Поле = «Номенклатура»;
НоваяГруппировка.ТипГруппировки = «Элементы»;
Установим доступные списки выбора для полей группировок :
ЭлементыФормы.Группировки.Колонки.Поле.ЭлементУправления.СписокВыбора = СписокДоступныхПолейГруппировки;
ЭлементыФормы.Группировки.Колонки.ТипГруппировки.ЭлементУправления.СписокВыбора = СписокДоступныхТиповГруппировки;
Также нам необходимо определить в модуле объекта обработчик ПриКомпоновкеРезультата, в котором будем загружать наши настройки в схему компоновки данных.
// Добавляет колонки (поля ресурсов) в соответствии с флажками на форме
Если Количество И Не НайтиПолеКомпоновки(«КоличествоОборот», НастройкиСКД.Выбор.Элементы) Тогда
ВыбранноеПоле = НастройкиСКД.Выбор.Элементы.Добавить(Тип(«ВыбранноеПолеКомпоновкиДанных»));
ВыбранноеПоле.Использование = Истина;
ВыбранноеПоле.Заголовок = «Количество»;
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(«КоличествоОборот»);
КонецЕсли;
Если Сумма И Не НайтиПолеКомпоновки(«СуммаОборот», НастройкиСКД.Выбор.Элементы) Тогда
ВыбранноеПоле = НастройкиСКД.Выбор.Элементы.Добавить(Тип(«ВыбранноеПолеКомпоновкиДанных»));
ВыбранноеПоле.Использование = Истина;
ВыбранноеПоле.Заголовок = «Сумма»;
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(«СуммаОборот»);
КонецЕсли;
//Удаляет колонки, соответствующие флажки которых не были отмечены
Счетчик = 0;
Пока Счетчик < НастройкиСКД.Выбор.Элементы.Количество() Цикл
ПолеКомпоновкиДанных = НастройкиСКД.Выбор.Элементы[Счетчик];
Если ПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных(«КоличествоОборот») И Не Количество Тогда
НастройкиСКД.Выбор.Элементы.Удалить(ПолеКомпоновкиДанных);
Продолжить;
ИначеЕсли ПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных(«СуммаОборот») И Не Сумма Тогда
НастройкиСКД.Выбор.Элементы.Удалить(ПолеКомпоновкиДанных);
Продолжить;
КонецЕсли;
Счетчик = Счетчик + 1;
КонецЦикла;
//заполняем поля группировок в соответствии с настройками в табличной части Группировки
НастройкиСКД.Структура.Очистить();
ЭлементСтруктуры = НастройкиСКД;
Для Каждого Группировка Из Группировки Цикл
ЭлементСтруктуры = ЭлементСтруктуры.Структура.Добавить(Тип(«ГруппировкаКомпоновкиДанных»));
ЭлементГруппировки = ЭлементСтруктуры.ПоляГруппировки.Элементы.Добавить(Тип(«ПолеГруппировкиКомпоновкиДанных»));
ЭлементГруппировки.Использование = Истина;
ЭлементГруппировки.Поле = Новый ПолеКомпоновкиДанных(Группировка.Поле);
Если СписокДоступныхТиповГруппировки.НайтиПоЗначению(Группировка.ТипГруппировки)=Неопределено Тогда
ЭлементГруппировки.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Элементы;
Иначе
ЭлементГруппировки.ТипГруппировки = ТипГруппировкиКомпоновкиДанных[Группировка.ТипГруппировки];
КонецЕсли;
ПолеСортировки = ЭлементСтруктуры.Порядок.Элементы.Добавить(Тип(«АвтоЭлементПорядкаКомпоновкиДанных»));
ПолеСортировки.Использование = Истина;
ВыбранноеПоле = ЭлементСтруктуры.Выбор.Элементы.Добавить(Тип(«АвтоВыбранноеПолеКомпоновкиДанных»));
ВыбранноеПоле.Использование = Истина;
КонецЦикла;
Далее, устанавливаем значения параметров и загружаем заполненные настройки
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра(«Период»,Период);
КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
В алгоритме добавления ресурсов в схему компоновки использовалась функция НайтиПолеКомпоновки. Эта функция определяет, есть ли добавляемое поле в выбранных полях схемы или нет. Если уже есть, то добавлять поле не требуется.
Функция НайтиПолеКомпоновки(Имя, Коллекция)
Для Каждого ПолеКомпоновкиДанных Из Коллекция Цикл
Если ПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных(Имя) Тогда
Возврат Истина;
Иначе
Продолжить;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
Готово. Настройки схемы компоновки данных заполнены, и отчёт может быть сформирован.
Расшифровка
Для того чтобы при обработке расшифровки поля отбора и группировок заполнились в соответствии с выбранным полем нужно самостоятельно описать обработчик расшифровки. Для этого создадим булевский реквизит отчёта ЭтоРасшифровка. Реквизит будет показывать, формируем мы простой отчёт или расшифровываем. Для табличного поля Результат создаём обработчик РезультатОбработкаРасшифровки. В созданном обработчике пишем
СтандартнаяОбработка = ложь;
Если ДанныеРасшифровки = Неопределено Тогда Возврат КонецЕсли;
ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
Настройки = ОбработкаРасшифровки.Выполнить(Расшифровка);
Если Настройки<>Неопределено Тогда
КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
ЭтоРасшифровка = Истина;
ЭлементыФормы.Результат.Очистить();
СкомпоноватьРезультат(ЭлементыФормы.Результат,ДанныеРасшифровки);
КонецЕсли;
А в обработчике ПриКомпоновкеРезультата модуля объекта указываем, что заполнять настройки группировок нужно только в том случае, если это не расшифровка. Таким образом, обработчик ПриКомпоновкеРезультата принимает вид:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
Если Не (Количество ИЛИ Сумма ) Тогда
СтандартнаяОбработка = Ложь;
Сообщить(«Необходимо выбрать хотя бы один показатель!»);
Возврат;
КонецЕсли;
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
Если НЕ ЭтоРасшифровка Тогда
УстановитьСтруктуруГруппировокСКД(Настройки);
КонецЕсли;
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра(«Период»,Период);
КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
ЭтоРасшифровка = ложь;
КонецПроцедуры
Итог.
Создан отчёт, не требующий заходить в настройки компоновки данных, переключать вкладки и разбираться в настройках структуры отчёта. Все необходимые настройки пользователь видит на форме отчёта. При необходимости можно расширить функционал. Например, сделать сохранение выбранных пользователем настроек, скрывать настройки, если пользователю требуется всегда один вариант и тд.
Также при желании можно сделать отчёт более универсальным. Например, заполнять список полей группировок и настройки по умолчанию из СКД, создать табличную часть параметры и заполнять её параметрами, перечисленными в макете компоновки данных. Таким образом, получится некий шаблон отчёта, на основе которого можно будет легко делать другие отчёты, меняя только запрос, указание ресурсов и список параметров.
Созданный отчёт прикрепляю к данной статье для ознакомления.
Для обычных форм мне вполне нравится шаблон СКД от 1С. Но он поставляется вместе с общим модулем ТиповыеОтчеты, который (могу соврать) есть в типовых конфигурациях на обычных формах. Имеет достаточно хороший API и много возможностей подлезть в разные этапы компоновки. Есть также свойство ПользовательскиеНастройки компоновщика настроек. Но им пользоваться удобнее в управляемых формах. В 8.3 такие настройки отображаются в виде полей ввода, в 8.2 в виде табличного поля. Для управляемых же форм есть решение и в БСП, которое стало стандартом в типовых управляемых конфигурациях. Но форма вроде там отличается только программной начинкой от генерируемой автоматически, внешний вид вроде такой же.
Но все же молодец, что разобралась. Еще не раз пригодятся знания :).
Зачем изобретать какие-то свои «внешние виды», «удобные формы» и т.д. В типовых — шаблон типового отчета. И если пользователь работал в нем, то ваша поделка, даже если там будет +100500 интересных фич и изюма, ему будет не привычна, хотя бы потому, что он интерфейс у вас — не сможет настроить под себя. Вытащить отборы привычными элементами управления (как пример) и т.д., сделать сохранение всего этого.
Затем, например, вы создали убийцу шаблона типового. Допустим. Поставили его клиенту и ушли. Через нное количество времени, приходит ваш коллега — КАК минимум, ваш отчет нужно открыть в конфигураторе и выгрузить схему компоновки и настройки компоновки, чтобы потом подсунуть это в консоль. Чутка подшаманив схему и настройки, нужно загрузить их обратно и посмотреть — что у вас выполняется на выходе, т.к. вы кодом добавляете/удаляете некоторые весчи. Т.е. по сравнение с типовым механизмом, вы привносите лишние, никому не нужные телодвижения — они не нужны ни вашему коллеге, ни клиенту.
Шаблон типового интегрируется в ЛЮБУЮ конфигурацию за 30 минут под чашечку кофе. Я считаю, это оправданная трата времени, т.к. потом ваша работа по написанию отчетов ускорить в разы. Более того, типовой отчет — это некий признак «хорошего» тона. Вы думаете не только о себе — но и о пользователях, привыкших к типовым отчетам, и ваших коллегах, которые возможно будут модифицировать ваши отчеты.
Все же за труд ставлю жирный плюс. И надеюсь, в реальных ситуациях вы будете стремиться к унификации своих решений.
(2) Новенький_2209,
За плюс спасибо:) К сожалению, до, собственно, публикации не знала о существовании типового отчёта. Обязательно изучу его функционал. Но я всё же думаю, что тема, рассмотренная в моей статье, поможет программистам 1С, только начинающим знакомиться с СКД, разобраться в вопросе «А как же всё-таки оно работает».
(3) she’s, я и не сомневался что вы не знаете стандартный шаблон, т.к. кто знает — просто физически не сможет заставить себя родить столько много кода по программной модификации схемы 🙂 Изучайте, но только по живой конфигурации. К сожалению, сам шаблон обновляется значительно реже, нежели его клоны в типовых. Возьмите последнюю редакцию УПП или КА и оттуда заберите все что нужно для шаблона.
Если же конфа управляемая, то (имхо сугубо) самый удачный вариант в БП 3.0. От типового шаблона он внешне не сильно отличается.
(0)(she’s) Evgeniya,
не слышно воплей что-то, типа «доколе… на главной… такое…», удивило, может потому, что девушка… Обычно здесь такое не прощают. По разным причинам, большинство из которых внутренние противоречия самих критикующих.
Крепитесь, если что, удачи Вам в поисках, так держать!
(4)Если не затруднит, можно более подробно, как найти этот самый шаблон типового отчета? Или имеете ввиду взять за основу любой типовой отчет и из него сделать болванку?
(6) На диске ИТС есть папочка treport. там установка (почему то по 80 или81) и сам шаблон отчета
А я советую автору дополнить материал вышеуказанной в комментариях инфой и скриншотом настроек из 8.3 (пусть пока не актуально, но все посмотрят) и получится блестящий мануал. С меня однозначно плюс!
Хороший типовой шаблончик брал в свое время из ЗУП и использовал на снятой с поддержки БП, просто так не работал, пришлось в общем модуле дописывать пару строк, чтоб как в ЗУП было. Так что не все типовые однозначно типовые (типовые 1С-ники тоже в разных комнатах сидят у них там, видимо…) 🙂
Спасибо за статью, попробовал примерно то же самое сделать в управляемой форме. Только вместо предложенного варианта перетягивал в отбор и остальные закладки таблички компоновки данных. Получилось более навороченно и универсально. Настроек стало на порядок больше, и код дописывать не пришлось.
Есть вопрос по управляемым формам. Там есть кнопочка «Настроить форму», в которой галками можно включить и выключить ненужные блоки настроек. Стоит переименовать отчет, или скинуть другому пользователю, эти настройки сбрасываются. В настройках конфигурации тоже не нашел, как это жестко прописать. К примеру, хочу оставить для выбора колонки, которые нужно показывать в отчете и отбор.
Выглядят такие настройки более красиво, но для каждого пользователя настраивать персонально не разумно.
(10) OrsoBear,
Я не много работала с управляемыми формами, но, возможно, вам поможет флаг «Пользовательская видимость» в свойстве элемента. По умолчанию элемент будет невидимым, но его можно будет включить в меню «Изменить форму».
(11) she’s, В этом вся и сложность. Эта форма видна только в отчете, в конфигураторе ее не видно.
(12) OrsoBear, вы имеете в виду форма отчёта создаётся автоматически? А в конфигураторе создать не хотите?
(14) fort13, пожалуйста:)
(13) she’s, В конфигураторе создается совсем другая форма. Не такая, как автоматическая.
Но я решил вопрос именно таким способом. Нарисовал приближенно похожую форму, и внес в нее поля.
Только это глупый труд. Куда интереснее было бы именно включать и отключать программно блоки настроек.
+ За попытку внимательного отношения к пользователю (наличие настроек на форме),
но за реализацию -.
В попытке сделать лучше Вы «украли» у пользователя почти всю СКД, и вместо универсального
отчета на СКД получили прос
(17) Vlad_2008, ваши замечания оправданы и все перечисленные недочёты действительно есть. Думаю, никто и не будет вставлять этот отчёт в свою конфигурацию копипастом. У меня и не было цели нарисовать идеальный интерфейс с функциональностью полноценного отчёта с учётом всех нагрузок на сервер. Я хотела показать простейший пример с объяснением что, зачем и почему. Чтобы программист, столкнувшись с подобной задачей впервые имел под рукой простой и понятный пример. А нюансы оптимизации, культура создания интерфейса и прочие прелести подробно описаны в литературе и других статьях на этом и других сайтах.
Поддерживаю. И литературу, конечно, читать надо.
Ну и очень хорошо, что мы все движемся в правильном направлении.
(7) glek, Спасибо, тоже вот не знал об этом шаблоне.
Поддерживаю коллег, по поводу использование шаблона типового отчет, который унифицирует интерфейс работы с отчетом, но программная работа с СКД дело важное, нужное и полезное. Поэтому однозначно +.
Поставлю плюс, полезная тема. Хотя лично для меня ничего нового не принесло, но помню себя, когда только начинал разбираться с СКД.
(4) Новенький_2209,
Можно поподробнее, что конкретно нужно вытащить из последней УПП, чтобы получить шаблон типового отчета?
На примере БГУ, в УПП скорее всего то же самое.
Необходимо добавить в конфигурацию следующие объекты:
отчет
— ШаблонТиповогоОтчета
общий модуль
— ТиповыеОтчеты
— ТиповыеОтчетыПереопределяемый
— СохранениеНастроек
справочник
— СохраненныеНастройки
перечисления
— ТипыНастроек
— ПредставленияЭлементовОтчетов
общие формы
— ФормаНастройкиСтруктурыОтчета
общие макеты
— ЗаголовокТиповогоОтчета
(24) anchovy,
Спасибо! Хотя гос. учреждение и производственное предприятие весьма далеки друг от друга, думается мне, перечисленные тобой объекты должны быть универсальными.
Большое спасибо за интересную статью =) Плюсик «+»
Благодарим автора за проделанную работу, но скорее соглашусь с теми комментариями которые говорят о том, что пользователю всё таки необходимо предоставлять возможность модифицирования отчёта, ведь есть же среди них люди соображающие)
удачи на конкурсе 😉
Ничего особенного. Из Хрусталёвой можно почерпнуть столько же, а то и больше. Недоумеваю, отчего такие восторги вокруг этой публикации.
Спасибо очень познавательно и интересно.Появятся деньги обязательно скачаю
да уж лучше не выпиливать возможности, а провести обучение персонала дабы использовать все инструменты предоставляемые платформой
Мне очень пригодилось. Спасибо. Правда, добившись результата, нашёл типовой шаблон и сделал на его основе. Пускай пользователи привыкают.
а мне плюсики понравились.
Никто из плюсовавших (кроме тех, кто плюсовал «за девушку» и «типовой все ж лучше») так и не понял — че тут, зачем…
Интересно, а сколько бы плюсиков Хрусталевой наставили бы, на основе которой статья? Ни одного — «не осилил, автор, пейши исчо»? 🙂
(32) AlexO, Ваш комментарий, наверное, нужно трактовать так : » А что вы тут статьи пишите? В книжках давно всё написано». Даже не знаю что бы вы сказали несчастным учёным, которые строят свои теории на основании научных трудов, например, Эйнштейна. Кстати, а вы сами-то Хрусталёву читали? Предположу, что нет, так как если бы читали, то заметили бы, что конкретно такого примера там нет.
Чувствую тема автора Elva_ вам наскучила и вы решили найти новое место для выяснения отношений и отстаивания своей, неоспоримо правильной, позиции в жизни.
Хрусталеву почитай если обычное приложение, если управляемое, там итак все настройки можно на форму вынести, Радченко в помощь, есть у него немного в его книжице.
Спасибо за публикацию узнал много интересного и полезного. Статья краткая и содержительная все по существу, самое главное все получилось.автору огромное спасибо
Лаконичнее чем книги Хрусталевой и Радченко ) Попробуем, спасибо
(36) Vond,
вообще-то это как раз перепечатка главы книги Хрусталевой.
«Программное создание отчета на СКД» называется.
(3) she’s,
как раз, если не пользоваться ПРОГРАММНЫМ созданием СКД (а им приходится пользоваться лишь в исключительных случаях) — там все НЕ ТАК работает 🙂
В этом и есть «специфика» 1С — что все работает по своим законам при почти полном отсутствии документации.
Объективность… автору спасибо просто хотя бы за то, что не ресурсить в гугл и не на бесконечное кол-во форумов отсылает…а просто дает свою реализацию задачи.. с которой сталкиваемся все мы…особенно на начальном этапе…
(39) AlexSunS,
Присоединяюсь, практическая база набрана — пора учить теорию !
Автору — респект!
То, что доктор прописал 🙂 Спасибо
полезно, спасибо!
И как бы «сделать сохранение выбранных пользователем настроек»?
Все это, конечно, хорошо, но тогда смысл использования СКД несколько нивелируется. Хотя если разработать некий шаблон, куда потом «запихивать» свою схему компоновки, тогда да. В любом случае это «…в 7 раз сытнее, чем ничё…»
Спасибо автору за данную публикацию!!! Кратко, по существу, а главное все понятно описано. Перепечатка главы книги или нет, не суть важно. Не у всех ведь есть исходный материал ))
Для кодеров только начинающих разбираться с СКД очень полезно ))) Еще раз спасибо!
Воспользовался разработкой автора, только вынес настройки на отдельную форму. И сохранил кнопку стандартную настроек, озаглавив «Расширенные настройки».
Спасибо!
(43) ogion,
В подменю Действия можно кнопки соответствующие вывести. 🙂
Однозначно, автору респект. Прочитать литературу, реализовать своё (и ведь работает! обратите внимание на коммент 38) и не полениться написать статью и вынести её на обсуждение… Однозначно плюсую
Снова вернулся к этой теме.
Очередной отчет, где нужно автоматом загружать параметры.
И как всегда, на управляемых формах 🙂
Порылся в комментариях, вспомнил, как делал раньше 🙂
Вы молодец. Завидую. Сама не могу разобраться с этими «СКД»
Подскажите, кто-нибудь, где в конфигураторе БП 3.0 находится модуль переноса в табличную часть документа номенклатуры из подбора. Недавно с 7.7 — ничего не понимаю.