Универсальное заполнение табличных частей на основе внешнего отчета или обработки (с примером для СКД на УПП)

26.09.11

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

Заполнение табличных частей и СКД - можно ли вместе?

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Бесплатно
Zapolnitel.epf
.1245841386 5,21Kb
274
274 Скачать бесплатно
OtchetPoKontragentam_.erf
.1245841488 9,57Kb
172
172 Скачать бесплатно

Думал куда добавить в статьи, или в обработки. Добавил в обработки.

Возникла тут у меня необходимость заполнять контрагентов в скидках с отбором по различным критериям. СКД для этого отлично подходит, но СКД не подключается в моей базовой платформе (УПП 1.2.14.1 - да старая, первый этап обновления уже прошел, скоро в 1-2 скачка до 19 или 22 дойдем) к табличной части. Решил написать обработку...Подумал ещё и сделал её более универсальной. В результате получилась обработка, которую можно подключить к любой табличной части не меняя код. Модифицируется только внешние параметры обработки, которые регулируют подключение источника строк для заполнения и соответствие колонок. Пишется внешняя обработка или отчет, который в итоге при закрытии основной формы выдает таблицу значений. Эта таблица и впихивается в табличную часть.

Параметры:

 ВнешнийФайл (булево) - истина, если обработка с диска, а не из справочника внешних обработок,

 КодПутьОбработкиЗаполнения (строка) - код обработки из справочника или полный путь к обработке на диске

 СКД (булево) - является ли подключаемый файл отчетом или обработкой

 ПолеТабличнойЧасти (строка) - наименование поля табличной части, которое нужно заполнять

 ПолеСКД (строка) - наименование поля таблицы значений из которого брать значения

Если одно из последних двух полей не заполнено, то обработка проходит по всем полям таблицы значений и пытается вставить по совпадающим именам полей

Код обработки:

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

        Если ДополнительныеПараметры.СКД Тогда //если это СКД
            Форма = ВнешниеОтчеты.ПолучитьФорму(ИмяФайла); //открываем как внешний отчет
        Иначе
            Форма = ВнешниеОбработки.ПолучитьФорму(ИмяФайла); //открываем как обработку
        КонецЕсли;
        Если Не Форма = Неопределено Тогда
            ТаблицаЗначений=Форма.ОткрытьМодально(); //открываем основную форму, где выполняется обработку и возвращается таблица
        КонецЕсли;
        Если НЕ ДополнительныеПараметры.ВнешнийФайл Тогда //если файл создавался временно,
            УдалитьФайлы(ИмяФайла); //то удаляем его
        КонецЕсли;
    Исключение
       Предупреждение("Выбранный файл не соответствует заявленному типу.  
|Либо данная обработка не предназначена для
|запуска в этой конфигурации.");
    КонецПопытки;
    Если ТаблицаЗначений=Неопределено Тогда
        Возврат;
    КонецЕсли;
    СсылкаНаТабЧасть=Объект[ИмяТабличнойЧасти];
    Ответ=Вопрос("Очистить список контрагентов?", РежимДиалогаВопрос.ДаНет);
    Если Ответ=КодВозвратаДиалога.Да Тогда
        СсылкаНаТабЧасть.Очистить();
    КонецЕсли;
    Для Каждого стр из ТаблицаЗначений Цикл //собственно заполнение
        стр1=СсылкаНаТабЧасть.Добавить();
        Если ДополнительныеПараметры.ПолеТабличнойЧасти<>"" И ДополнительныеПараметры.ПолеСКД<>"" Тогда
            Попытка
                стр1[ДополнительныеПараметры.ПолеТабличнойЧасти]=стр[ДополнительныеПараметры.ПолеСКД]; //название заполняемого поля берется из дополнительных параметров
            Исключение
                Сообщить("Не найдено "+ДополнительныеПараметры.ПолеТабличнойЧасти+" или "+ДополнительныеПараметры.ПолеСКД);
            КонецПопытки
        Иначе
            Для Каждого Кол из ТаблицаЗначений.Колонки Цикл
                Попытка
                    стр1[Кол.Имя]=стр[Кол.Имя];
                Исключение
                    Сообщить("Не найдено "+Кол.Имя);
                КонецПопытки;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры;

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

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

К СКД прицеплены характеристики с запросом. Проверьте, чтобы верный был. Может отличаться в различных конфах.

См. также

SALE! 50%

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

Корректируйте банковские документы быстро и легко! Создайте правило обработки, и оно автоматически применится при загрузке выписки, экономя ваше время. Решение позволяет автоматически заполнять расшифровку платежа, исключать загрузку ненужных документов (дублей) из банка, заполнять комиссию за эквайринг и многое другое. Вам не нужно доплачивать за алгоритмы, они уже включены в решение.

15000 руб.

20.12.2024    8520    26    21    

27

Операции по ВЭД Оптовая торговля Розничная торговля Логистика, склад и ТМЦ Мастера заполнения Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

СКАЧАЙТЕ И ПОПРОБУЙТЕ БЕСПЛАТНО! Данная обработка расширяет функционал типовой конфигурации «1С:Бухгалтерия предприятия» и позволяет осуществлять автоматическое заполнение ГТД в документах «Реализация товаров и услуг», «Списание товаров», «Отчет о розничных продажах», «Отчет комиссионера (агента) о продажах», «Требование-накладная», «Возврат товаров от покупателя», «Комплектация номенклатуры», «Безвозмездная передача», «Отчет производства за смену». Обработка предназначена для работы в конфигурации «1С:Бухгалтерия предприятия 8, редакция 3.0» Есть версия обработки оптимизированная для работы в 1CFresh

9600 руб.

19.06.2012    141363    282    81    

240

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

Данное расширение автоматически заполняет бизнес-регион партнера в 1С (УТ 11, КА 2, ERP) при записи на основании КПП или индекса из адреса. Присутствует возможность сохранить имеющиеся бизнес-регионы партнеров, а также перезаполнить или очистить их при первичном заполнении. Возможен выбор региона по умолчанию для партнера без КПП или адреса (например, если вы не указываете адреса физ. лиц и знаете, что они из Вашего региона).

2000 руб.

29.04.2019    34467    65    51    

69

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

В расширение реализовано контроль изменения объектов, пломбировка (блокировка) объектов, установка своих статусов на объекты, настроить видимость объектов. Возможно настроить контроль на изменения любого реквизита и реквизитов табличных частей справочников и документов и контроль на действия с документами с возможностью автоматической отправки письма на почту при изменении реквизита. Возможно настроить запрет записи объекта при изменение контролируемых реквизитов. Возможно устанавливать свои статусы на объекты. Возможно устанавливать пломбы на объекты. Возможно настроить какие объекты пользователей будет видеть пользователь в списке.

10000 руб.

09.06.2025    378    2    0    

2

Логистика, склад и ТМЦ Мастера заполнения Пользователь Платформа 1С v8.3 1C:Бухгалтерия Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Обработка заполняет справочник "Автоработы" 3000 авторабот (реквизит сопоставления "Наименование") и справочник "Номенклатура" 200000 артикулами запчастей на популярные модели автомобилей (реквизиты сопоставления "Наименование" и "Артикул").

3600 руб.

07.10.2022    7960    23    0    

21

Мастера заполнения Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Расширение для типовых конфигураций 1С:БП 3.0 и 1С:УНФ 3.0 добавляет в справочник "Контрагенты" поля "Код ОКВЭД" и "Наименование ОКВЭД" и заполняет их по ИНН контрагента через сервис "1С-Контрагент"

7200 руб.

28.10.2024    991    2    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. igor_gk 49 01.07.09 17:17 Сейчас в теме
Чувствую - нужная вещь, плюсану, пожалуй :)
3. Alex_1066 31.08.09 14:09 Сейчас в теме
Как и (1) что-то чувствую... Но хотелось, чтобы бы в описание программы автор вставлял не код, чуда, им сотворённого, а что-то типа "Help". Что бы любой смертный мог попробовать воспользоваться сим произведением. Но, впрочем, задумка понятна и интерессна. Плюсанём...
2. Telepat 06.08.09 05:16 Сейчас в теме
Мне реально помогло, плюс однозначно.
4. anig99 2858 31.08.09 16:04 Сейчас в теме
(2) так вроде написано (: Нужно написать обработку с основной формой, которая при закрытии возвращает некоторую таблицу значений. Далее нужно заполнить 4 параметра в справочнике внешних обработок для этой обработки и указать откуда её вызывать и для какой табличной части. Всё.
12. dentoma51 8 18.10.11 13:30 Сейчас в теме
До конца не понял,но что хотел получить-получил.
Есть отчет на СКД. Добавил табличную часть ПродажиАвтомобилей,в которой разместил реквизиты результата запроса СКД.
Добавил форму отчета и автоматически разместил на ней все элементы управления. В результате построено ПолеТабличногоДокумента с именем Результат и табличное поле ПродажиАвтомобилей с колонками ,собственно,полей табличной части ПродажиАвтомобилей.
Далее,добавил кнопку с именем ЗаполнитьТЗ,к которой по нажатию привязал процедуру,которую приводит автор,в конце которой загружаю из ТаблицыЗначений свою табличную часть,то есть


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

Процедура работает,если в настройках отчета выбирать Список.
Если выбрать Таблица,то процедура дает ошибку генерации макета
Форма.ФормаОтчета(4)}: Ошибка при вызове метода контекста (Выполнить): Ошибка компоновки макета
МакетКомпоновки=КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,КомпоновщикНастроек.Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
по причине:
Ошибка компоновки макета
по причине:
Ошибка генерации макета
по причине:
Не поддерживается вывод таблиц, диаграмм и вложенных отчетов в универсальную коллекцию значений

Автору большой плюс. Надо теперь попытаться осмыслить глобальное назначение разработки
5. anig99 2858 31.08.09 16:05 Сейчас в теме
(2)упс...
(3) чуть выше, это для тебя
6. Alex_1066 31.08.09 16:29 Сейчас в теме
(5) Ага, спасибочки, кажется понял - буду пробовать...
7. Alex_1066 01.09.09 15:49 Сейчас в теме
Получилось. Ещё вопросик в развитие...
Возможна ли, при всём при этом, в данном примере передача дополнительных параметров из документа, определяющих условия для СКД (например: заполнение ТЧ остатков по значению склада, счета, МОЛ и т.д... )?
8. anig99 2858 01.09.09 16:29 Сейчас в теме
Подумаю... Теоретически можно. (7) Точное решение скоро выложу
9. SergeyT2006 02.09.09 05:12 Сейчас в теме
10. anig99 2858 02.09.09 08:03 Сейчас в теме
(9) Система компоновки данных - альтернатива Универсального отчета, но более продвинутая и настраиваемая. По дефолту сложнее универсального отчета для пользователей, но если в нём разобраться, но намного лучше.
11. MrXaN 45 23.09.11 14:16 Сейчас в теме
Оставьте свое сообщение