Как открыть форму выбора с определенным отбором в 1С 8.3 ?

Часто требуется дополнить условия выбора объекта на форме. Для этого существует обработчик события «НачалоВыбора». В примере приведен случай когда при выборе договора нужен отбор по реквизиту Контрагент, заданного на форме. Для элемента управления «Договор» формируем обработчик события «ДоговорНачалоВыбора», в котором пишем следующий код:

&НаКлиенте
Процедура ДоговорНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;
ЗначениеОтбора = Новый Структура(«Контрагент», Объект.Контрагент);
ПараметрыВыбора = Новый Структура(«Отбор», ЗначениеОтбора);
ОткрытьФорму(«Справочник.ДоговорыКонтрагентов.ФормаВыбора», ПараметрыВыбора, Элемент);

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

Сравнение строковых массивов

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

 Пример:

Источник 1 Источник 2
Реализация товаров и услуг №10 от 07.12.2016 Реализация товаров и услуг №5 от 01.12.2016
Реализация товаров и услуг №12 от 05.12.2016 Реализация товаров и услуг №20 от 10.12.2016
Реализация товаров и услуг №5 от 01.12.2016

Предположим, в левой колонке  проверенные реализации, в которых мы точно уверены, в правой — реализации, которые выводит некий отчет, созданный новым программистом. По замыслу — отчет должен выводить реализации только из перечня в левой колонке (возможно не все), когда надо проверить какие реализации НЕ вошли в перечень левой колонки, возникает проблема — нет средств проверки, даже Excel не поможет, только визуально.

 Для решения проблемы создана обработка, сравнивающая массивы строк. На рисунке показано первоначальное заполнение левой и правой части, как в таблице выше:

 sm1

После нажатия кнопки в правой части остаются те строки, которых нет в левой части:

sm2

 Скачать обработку (1C v8.3) >>

Программно открыть любой файл в операционной системе из 1С

Для того, что бы открыть для просмотра любой файл на диске, например файл Excel, необходимо выполнить одну команду на клиенте:

ЗапуститьПриложение(ИмяФайла);

Имя файла в данном случае полное, например C:\Documents\File.xlsx

Получение имени типа ссылочного значения

Определение имени типа ссылочного значения нужно в случаях выгрузки данных например в XML файл что бы описать формат хранимых данных. К примеру, имя типа для документа «Реализация товаров и услуг» будет выглядеть так: «Документ.РеализацияТоваровУслуг».

Имя типа ссылочного значения «Ссылка» определяется следующим выражением:

ИмяТипа = Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)).ПолноеИмя();

Получение ссылки по идентификатору 1С 8.х

При загрузке ссылочных данных из текстовых файлов иногда необходимо получать саму ссылку по имеющемуся строковому идентификатору этой ссылки:

// идентификатор ссылки хранится в переменной Строка_ИД
// получение уникального идентификатора
УИД = новый УникальныйИдентификатор(Строка_ИД);
// непосредственно получение ссылки
Контрагент = Справочники.Контрагенты.ПолучитьСсылку(УИД);

Получить идентификатор ссылки 1С 8.х

Когда требуется получить не саму ссылку, а ее текстовый уникальный идентификатор, например, для записи в текстовый или XML файл, необходимо воспользоваться функцией, доступной из любой ссылки:

// тип получаемого значения — уникальный идентификатор
Идентификатор НекотораяСсылка.Ссылка.УникальныйИдентификатор();
// идентификатор можно преобразовать в строку
ИдентификаторТекстом = Строка(Идентификатор);

 

Сохранение таблицы в файл Doc, Excel, PDF, HTML и Txt на клиенте с открытием

Как правило выгружать данные в Excel требуется в табличной форме. В примере на клиенте (на форме) имеется таблица с колонками «Номер», «Наименование» и «Сумма». Выгрузка в Excel проходит только на клиенте для экономии времени и когда на сервере не установлен Excel. Выполняется в два этапа:
1. Заполнение табличного документа
2. Сохранение табличного документа в нужном формате
3. Открытие файла нужной программой

Код выгрузки

allformats

Скачать текст программы >>

Полоса прогресса для серверных процедур

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

fz

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

Код формы:

%d0%ba%d0%be%d0%b42-2

Код фонового задания в общем серверном модуле «ФоновыеЗадания»:

%d0%ba%d0%be%d0%b4-3-2

Посмотреть текст модулей

Программный запуск отчета 1с 8.3 (управляемые формы)

Если нужно по кнопке на произвольной форме запустить отчет с параметрами (отбором) написанный на СКД, можно сделать как показано далее. Создадим простой отчет  — продажи по номенклатурным группам (Конфигурация 1С Бухгалтерия 3.0). Запрос отчета:

ВЫБРАТЬ
   РеализацияУслугОбороты.НоменклатурнаяГруппа,
   РеализацияУслугОбороты.СуммаОборот
ИЗ
   РегистрНакопления.РеализацияУслуг.Обороты КАК РеализацияУслугОбороты

Настройки отчета в СКД:

salerep

Обратим внимание на форму отчета, в верхней части размещен отбор ФИКСИРОВАННЫХ НАСТРОЕК, обратите на это внимание.

repparam2

Отчет надо поместить в конфигурацию. Допустим, есть обработка и надо вывеси отчет с отбором  по номенклатурной группе, в обработке создаем команду и в клиентском обработчике пишем код:

ОтборОтчета = новый Структура(«НоменклатурнаяГруппа», Ссылка_НоменклатурнаяГруппа);
ПараметрыОтчета = Новый Структура(«СформироватьПриОткрытии, Отбор», истина, ОтборОтчета);
ОткрытьФорму(«Отчет.ПродажиПоНоменклатурнымГруппам.Форма», ПараметрыОтчета);

В переменной «Ссылка_НоменклатурнаяГруппа» указана номенклатурная группа по которой делается отбор. В результате, получим такой вид сформированного отчета:

repfinal

Замена обработки в конфигурации

Если надо существующую обработку в конфигурации заменить на новую, например кем-то подправленную, необходимо запустить 1С в режиме конфигуратора, найти в дереве нужную обработку, затем в контекстном меню выбрать «Заменить на внешнюю обработку, отчет …»

chobrab

Затем выберите файл с нужной обработкой, в диалоге выбора нажмите «Открыть»:

dialopen

Обновите конфигурацию и перезапустите 1С Предприятие:

renconf

Обработка загружена и готова к использованию.