Полезные процедуры и функции для программиста

Публикация № 1131402 07.10.19

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

процедура функция БСП временные таблицы массив регистр зарплата кадры форма запрос реквизит полезный объект ОбщегоНазначения МенеджерВременныхТаблиц Результат ЗарплатаКадры СотрудникиКлиент фильтр

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

1. Просмотр временной таблицы

Запрос.МенеджерВременныхТаблиц.Таблицы.Получить(0).ПолучитьДанные().Выгрузить();

2. Установка видимости реквизита по умолчанию

    РеквизитыПозиции = ДанныеДолжности();

    Если РеквизитыПозиции <> Неопределено Тогда

Объект.Учащийся = ?(РеквизитыПозиции.Учащийся = Неопределено, Ложь, РеквизитыПозиции.Учащийся);

        ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(

               Элементы,

               "ОбразованиеКвалификация",

               "Видимость",

               Объект.Учащийся);

    КонецЕсли;

3. Уничтожение временной таблицы

3.1

ЗарплатаКадры.УничтожитьВТ(

        МенеджерВременныхТаблиц,

        СтрРазделить("ВТФизическиеЛицаПатент,ВТКадровыеДанныеСотрудников,ВТИностранцыСотрудники,ВТИностранцы,ВТНерезиденты,ВТФиксированныеСтатусыФизическихЛиц,ВТТекущиеСтатусыФизическихЛиц,ВТИностранцыСДатами,ВТНачисления,ВТРегистрация,ВТРассчитанныеДниВРФ",","));

3.2

УдалитьВТ = Новый Массив;

УдалитьВТ.Добавить("втВременныеПозиции");

УдалитьВТ.Добавить("втВременныеПодразделения");

УдалитьВТ.Добавить("втФинальная");

ЗарплатаКадры.УничтожитьВТ(МенеджерВТ, УдалитьВТ);

4. Удаление значения из массива

ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ВидыВремениВЗачетНормыСуммированногоУчета, ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.НеявкиПоНевыясненнымПричинам"));

5. Удаляет повторяющиеся элементы массива

Взаимодействия.УдалитьПовторяющиесяЭлементыМассива(МассивСпособовОтражений);

6. Формирует временную таблицу периодов с заданной периодичностью, формируемой, с помощью, запроса, возвращаемого методом ЗапросВТПериоды. Создает в МенеджерВременныхТаблиц временную таблицу с именем <ИмяВТ> и периодичностью <Периодичность> за интервал с <НачалоИнтервала> по <ОкончаниеИнтервала>.

ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТПериоды(Запрос.МенеджерВременныхТаблиц, НачалоПериода, ОкончаниеПериода);

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

6.1. Временная таблица периодического регистра с периодами

ОписаниеФильтраПолученияГрафиков = ЗарплатаКадрыПериодическиеРегистры.ОписаниеФильтраДляСоздатьВТИмяРегистра("ВТПериодыЗапросаКадровойИстории", "ФизическоеЛицо", "ФизическоеЛицо");

ЗарплатаКадрыПериодическиеРегистры.СоздатьВТИмяРегистраПериоды("КадроваяИсторияСотрудников", МенеджерВременныхТаблиц, Ложь, ОписаниеФильтраПолученияГрафиков);

7. Создать временную таблицу из таблицы значений

ЗарплатаКадры.СоздатьВТПоТаблицеЗначений(Запрос.МенеджерВременныхТаблиц, ТаблицаСКД, "ВТСКД", Истина);

8. Предупреждение на сервере

ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(

        НСтр("ru='Текст сообщения ""%1"".'"),

        СтрокаСотрудника.Сотрудник);

ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстПредупреждения);

9. Создать ВТ по имени регистра СрезПоследних

9.1

ОписаниеФильтра = ЗарплатаКадрыОбщиеНаборыДанных.ОписаниеФильтраДляСоздатьВТИмяРегистра("ВТСотрудникиПериоды","Сотрудник");

ОписаниеФильтра.СоответствиеИзмеренийРегистраИзмерениямФильтра.Вставить("Период", "Период");

ОписаниеФильтра.СоответствиеИзмеренийРегистраИзмерениямФильтра.Вставить("Сотрудник", "Сотрудник");

ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТИмяРегистраСрезПоследних(

        "ГрафикРаботыСотрудников",

        МенеджерВременныхТаблиц,

        Истина,

        ОписаниеФильтра,, "ВТГрафики");

9.2

ОписаниеФильтра = ЗарплатаКадрыПериодическиеРегистры.ОписаниеФильтраДляСоздатьВТИмяРегистра("ВТФильтрПозиции", "Позиция");   

ПараметрыПостроения = ЗарплатаКадрыПериодическиеРегистры.ПараметрыПостроенияДляСоздатьВТИмяРегистраСрез();

ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(ПараметрыПостроения.Отборы, "Позиция", "<>", Справочники.ШтатноеРасписание.ПустаяСсылка());

мТиповыеПоказатели = Новый Массив;

мТиповыеПоказатели.Добавить(Справочники.ПоказателиРасчетаЗарплаты.НайтиПоРеквизиту("Идентификатор", "ПроцентПпремииПроизводственной"));

ПоказателиПремий.Добавить(Справочники.ПоказателиРасчетаЗарплаты.НайтиПоРеквизиту("Идентификатор", "ПроцентГодовойПремии"));

ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(ПараметрыПостроения.Отборы, "Показатель", "В", ПоказателиПремий);

ЗарплатаКадрыПериодическиеРегистры.СоздатьВТИмяРегистраСрезПоследних("ЗначенияПлановыхПоказателейРасчетаЗП", МенеджерВТ, Истина, ОписаниеФильтра, ПараметрыПостроения, "ВТЗначенияПлановыхПоказателейРасчетаЗП");

10. Открытие формы с последующим вызовом формы завершения

ОткрытьФорму("Справочник.Сотрудники.Форма.ФормаЭлемента",,ЭтотОбъект,,,, Новый ОписаниеОповещения("ЗагрузитьИзExcelЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

11. Сообщение пользователю из модуля объекта с параметрами

ТекстСообщения = СтрШаблон(НСтр("ru = 'Текст сообщения'"), СокрЛП(Код), Выборка.Организация, Выборка.Состояние);

ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "Код", "Объект", Отказ);

12. Сообщение пользователю из модуля менеджера

ОбщегоНазначенияКлиентСервер.СообщитьПользователю(

        СтрШаблон(

               НСтр("ru = 'Код введен в неверном формате. Проведено преобразование из %1 в %2'"),

               СтрокаКод,

               НовыйКод),

        ,,,     Отказ);

13. Получение данных из регистра сведений не запросом

ДанныеОРаботнике = РегистрыСведений.РаботникиОрганизаций.СрезПоследних(ТекущаяДата(),Новый Структура("Сотрудник", Сотрудник));

14. Значения реквизитов:

14.1 Возврат значения реквизита объекта через точку

ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ФизическоеЛицо, "Наименование");

14.2 Значения реквизитов, прочитанные из информационной базы для нескольких объектов

ВидыРасчета = Новый Массив;

Для Каждого СтрокаИсточника Из ТаблицаВычислений Цикл

        ВидыРасчета.Добавить(СтрокаИсточника.ВидНачисления);

КонецЦикла;

ВидыРасчетаИнфо = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ВидыРасчета, "УчетВремениВЧасах,КатегорияНачисленияИлиНеоплаченногоВремени,ТребуетсяРасчетБазы");

15. Открытие дополнительной формы

СотрудникиКлиент.ОткрытьДополнительнуюФорму(

СотрудникиКлиентСервер.ОписаниеДополнительнойФормы("Справочник.МедицинскиеСтраховыеПолисы.Форма.ФормаПолисыПоСотруднику"), ЭтотОбъект);

16. Значение в массиве

ФизЛица = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ФизЛицо);

17. Создание временной таблицы "КадровыеДанныеСотрудников"

ОписательВТ = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(Запрос.МенеджерВременныхТаблиц, "ВТСотрудникиПериоды");

КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(ОписательВТ, Ложь, "ТекущаяДолжность, ДатаПриема, ДатаУвольнения");

18. Проверка даты запрета изменения данных.

ДатыЗапретаИзменения.ПроверитьДатыЗапретаИзмененияДанных(Источник, Отказ, ИсточникРегистр = Ложь, Замещение = Истина, Удаление = Ложь)

19. Получает номер документа для вывода на печать; из номера удаляются префиксы и лидирующие нули.

ТабельныйНомер = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Сотрудник.Код, Истина, Истина);

20. Возвращает полное имя объекта метаданных по переданному значению ссылки.

ИмяТаблицы = ОбщегоНазначения.ИмяТаблицыПоСсылке(Ссылка);

21. Получить значение реквизита объектов (&НаСервере). Значения реквизита, прочитанного из информационной базы для нескольких объектов.

ФизическиеЛицаПодобранныхСотрудников = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(МассивСотрудников, "ФизическоеЛицо");

22. Запуск длительной процедуры в фоне

НаименованиеЗадания = НСтр("ru = 'Заполнение документа ""Начисление зарплаты""'");

Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне(

        УникальныйИдентификатор,

        "Документы.НачислениеЗаПервуюПоловинуМесяца.ПодготовитьДанныеДляЗаполнения",

        СтруктураПараметров,

        НаименованиеЗадания);

23. Создает временную таблицу по набору записей

ЗарплатаКадры.СоздатьВТПоНаборуЗаписей(Запрос.МенеджерВременныхТаблиц, Движения.СведенияОДоходахНДФЛ, Истина, "ВТПеренесенныеДоходы");

24. Создание и инициализация менеджера расчета зарплаты. Возвращаемое значение - обработка менеджера расчета.

МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(МесяцНачисления, Организация);

25. Проверка реквизита, элемента формы на существование. Получает значение элемента по указанному имени, а также проверяет, имеется ли указанное свойство.

25.1

СтруктураПараметров.Свойство("ЗначенияРазовыхПоказателей", ЗначенияРазовыхПоказателей)

25.2

Элементы.Найти("ИсполнителиРабот")

26. Ищет по имени временную таблицу в менеджере

ЗарплатаКадры.ВТСуществует(МенеджерВременныхТаблиц, "ВТПоказателиРасчета")

27. Устанавливает текст заголовка, отображаемого, когда группа свернута.

ЗарплатаКадры.НастроитьОтображениеГруппыПодписей(Элементы.ПодписиГруппа, "Объект.Руководитель", "Объект.ГлавныйБухгалтер");

28. Очищает записи наборов из коллекции Движения и проставляет флаг Записывать наборам, по которым документ уже имеет движения.

ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);

29. Возвращает виды времени сплошной регистрации в массиве

УчетРабочегоВремениРасширенный.ВидыВремениСплошнойРегистрации()

30. Подставляет параметры в строку. Максимально возможное число параметров - 9. Возвращаемое значение - текстовая строка с подставленными параметрами.

ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибкиШаблон, Выборка.СотрудникНаименование, Формат(Выборка.Дата, "ДФ='dd.MM.yyyy ""г.""'"), Выборка.ВидВремениНаименование);

31. Получает ссылку предопределенного элемента по его полному имени.

31.1

ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.РаботаНочныеЧасы");

31.2

ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.РабочееВремя");

32. Проверяет корректность вводимых дат, не проверяет заполненность дат. При нахождении ошибки формирует сообщение пользователю, взводит флаг Отказ.

ЗарплатаКадры.ПроверитьКорректностьДаты(Ссылка, ДатаНачала, "Объект.ДатаНачала", Отказ, НСтр("ru='Новая дата начала'"), , , Ложь);

33. Получает значение реквизита формы.

Таблица = ОбщегоНазначенияКлиентСервер.ПолучитьРеквизитФормыПоПути(ЭтотОбъект, ИмяТаблицы);

34. Возвращает ссылку на общий модуль по имени.

Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");

35. Начисления

35.1.

СотрудникиДаты = тзТаблица.Скопировать(, "Объект, Период");

СотрудникиДаты.Колонки.Объект.Имя = "Сотрудник";

ТекущиеДанныеОплатыТруда = ПлановыеНачисленияСотрудников.ТекущиеДанныеОплатыТрудаСотрудников(Параметры.Объект.Ссылка, СотрудникиДаты);

35.2.

ДанныеНачислений = ЗарплатаКадрыРасширенный.ДействующиеНачисленияСотрудников(СотрудникиДаты, Параметры.Объект.Ссылка);

36. Возвращает соответствие имен предопределенных значений по ссылкам на них.

ПредопределенныеЗначения = СтандартныеПодсистемыПовтИсп.СсылкиПоИменамПредопределенных(СПРАВОЧНИК.ВИДЫИСПОЛЬЗОВАНИЯРАБОЧЕГОВРЕМЕНИ);

37. Массив видов рабочего времени, отражающих отработанное время (ОтработанноеВремя).

УчетРабочегоВремениРасширенный.ВидыВремениОтработанноеВремяДляСуммированногоУчета()

38. Массив видов рабочего времени, отражающих норму времени для суммированного учета рабочего времени.

    Это рабочее время + выходные + время, когда сотрудник отсутствовал по своей вине.

УчетРабочегоВремениРасширенный.ВидыВремениВЗачетНормыСуммированногоУчета()

39. Кадровые данные физических лиц

#Область КадровыеДанныеФизическихЛиц

КадровыйУчетРасширенный.ЗапросВТКадровыеДанныеСотрудников

...

#КонецОбласти

40. Проверка заполнения на клиенте

Если НЕ ПроверитьЗаполнение() Тогда

     Возврат;

КонецЕсли;

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

ТекущиеДанные.СпособКомпенсацииПереработки = ПредопределенноеЗначение("Перечисление.СпособыКомпенсацииПереработки.ПовышеннаяОплата")

42. Возвращает сумму значений в поле [ИмяПоля] всех элементов коллекции.

УчетСреднегоЗаработкаКлиентСервер.ИтогиПоПолю(Коллекция, ИмяПоля)

43. Подключение внешней обработки/отчета, пример оформления модуля объекта.

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область СлужебныеПроцедурыИФункции

Функция СведенияОВнешнейОбработке() Экспорт

ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.4.4.106");

ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();

        ПараметрыРегистрации.Версия = "1.0";

        ПараметрыРегистрации.БезопасныйРежим = Истина;

        ПараметрыРегистрации.Наименование = НСтр("ru = 'Добавляемая обработка'");

        НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();

        НоваяКоманда.Представление = НСтр("ru = 'Имя команды обработки'");

        НоваяКоманда.Идентификатор = "ИдентификаторКоманды";

НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();

        НоваяКоманда.ПоказыватьОповещение = Истина;

        Возврат ПараметрыРегистрации;

КонецФункции

#КонецОбласти

#КонецЕсли

44. Узнать версию библиотеки стандартных подсистем - БСП

ОбновлениеИнформационнойБазыБСП.ПриДобавленииПодсистемы(Описание)

Процедура ПриДобавленииПодсистемы(Описание) Экспорт

        Описание.Имя    = "СтандартныеПодсистемы";

        Описание.Версия = "3.0.3.43";

        Описание.ИдентификаторИнтернетПоддержки = "SSL";

        Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";

        Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";

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

45. Узнать СпособОтраженияЗарплатыВБухучете у сотрудника

ОтражениеЗарплатыВБухучетеРасширенный.СоздатьВТСведенияОБухучетеЗарплатыСотрудников(Запрос.МенеджерВременныхТаблиц, "ВТСотрудники", "Сотрудник,Период", Организация);

46. Выполнить процедуру под полными правами

УстановитьПривилегированныйРежим(Истина);

 

ОписательВТ = КадровыйУчетРасширенный.ОписательВременнойТаблицыОтборовДляВТСтажиФизическихЛиц("ВТИсходныеДанные");

ОписательВТ.ИмяПоляВидСтажа = "ВидСтажа";

КадровыйУчетРасширенный.СоздатьВТСтажиФизическихЛиц(Запрос.МенеджерВременныхТаблиц, Ложь, ОписательВТ, "ВТСтажиФизическихЛиц");

 

УстановитьПривилегированныйРежим(Ложь);

47. Преобразовать строку таблицы значений в структуру

ПараметрыСтроки = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(ТаблицаПоказателей[0]);

48. Создать временную таблицу, с данными учета времени и состояний сотрудников

ПараметрыЗаполнения = УчетРабочегоВремениРасширенный.ПараметрыДляЗапросВТДанныеУчетаВремениИСостоянийСотрудников();

ПараметрыЗаполнения.ИмяВТСотрудники = "ВТСотрудникиПериоды";

ПараметрыЗаполнения.ИмяВТРезультат = "ВТУчетРабочегоВремениПолный";

ПараметрыЗаполнения.РассчитыватьПлановоеВремя = Истина;

ПараметрыЗаполнения.ДатаАктуальности  = ПериодПланирования;

ПараметрыЗаполнения.ДатаНачала = АнализируемыйГод;

ПараметрыЗаполнения.ДатаОкончания = КонецГода(АнализируемыйГод);

ПараметрыЗаполнения.МесяцДатаНачала = АнализируемыйГод;

ПараметрыЗаполнения.МесяцДатаОкончания = КонецГода(АнализируемыйГод);

ПараметрыЗаполнения.ВыделятьВыходныеВПериодыОтклонений = Ложь;

УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаВремениИСостоянийСотрудников(Запрос.МенеджерВременныхТаблиц, Истина, ПараметрыЗаполнения);

49. Создать временную таблицу "Штатное расписание"

ПараметрыТаблицы = КадровыйУчет.ПараметрыПолученияВсехСотрудниковОрганизацийПоСпискуФизическихЛиц();

ПараметрыТаблицы.Организация = СтруктураПараметров.Организация;

ПараметрыТаблицы.НачалоПериода = СтруктураПараметров.Дата;

ПараметрыТаблицы.ОкончаниеПериода = СтруктураПараметров.Дата;

КадровыйУчет.СоздатьВТСотрудникиОрганизации(МенеджерВТ, Истина, ПараметрыТаблицы, "ВТСотрудникиПредварительно");

Запрос.Текст =

        "ВЫБРАТЬ

        |       *

        |ПОМЕСТИТЬ ВТСотрудники

        |ИЗ

        |       ВТСотрудникиПредварительно КАК ВТСотрудникиПредварительно

        |ГДЕ

        |       ВТСотрудникиПредварительно.ДатаУвольнения = ДАТАВРЕМЯ(1,1,1)

        |;

        |УНИЧТОЖИТЬ ВТСотрудникиПредварительно

        |";

Запрос.Выполнить();

ПараметрыТаблицы = УправлениеШтатнымРасписанием.ПараметрыПостроенияВТШтатноеРасписание(СтруктураПараметров.Дата, СтруктураПараметров.Организация);

ПараметрыТаблицы.ДополнитьОписаниемНачислений = Истина;

ПараметрыТаблицы.ПолноеОписаниеНачислений = Истина;

ПараметрыТаблицы.Вставить("ПоказыватьПлановыеПозиции");

 

УправлениеШтатнымРасписанием.СоздатьВТШтатноеРасписание(МенеджерВТ, Истина, ПараметрыТаблицы, , "ВТВыбраныПозицииШР");

50. Динамическое добавление реквизита на форму из общего модуля

ЗарплатаКадрыРасширенный.МногофункциональныеДокументыДобавитьЭлементыФормы(Форма, НСтр("ru='Новый'"), "ГруппаНовых", "Новый");

Элементы.Новый.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Лево;

Элементы.Новый.Доступность = Пользователи.РолиДоступны("ДобавлениеНовых");

51. Программное добавление возможности отбора в динамический список формы

Если Не Пользователи.РолиДоступны("ИспользованиеДополнителныхРеквизитов") Тогда

        Форма.Список.ТекстЗапроса = Форма.Список.ТекстЗапроса + "

        |ГДЕ

        |       Документ.НужныйРеквизит = ЛОЖЬ";

КонецЕсли;

52. Обновить список документов - аналог кнопки F5

ОповеститьОбИзменении(Тип("ДокументСсылка.РаботаВВыходныеИПраздничныеДни"));

53. Создать объект ОписаниеТипов

НоваяКолонка = ТЗ.Колонки.Добавить("КолонкаДата", ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.Дата));

НоваяКолонка = ТЗ.Колонки.Добавить("КолонкаЧисло", ОбщегоНазначения.ОписаниеТипаЧисло(12));

НоваяКолонка = ТЗ.Колонки.Добавить("КолонкаСтрока", ОбщегоНазначения.ОписаниеТипаСтрока(100));

НоваяКолонка = ТЗ.Колонки.Добавить("КолонкаСсылка", ОбщегоНазначения.ОписаниеТипаВсеСсылки());

54. Преобразовать таблицу значений в массив

мсДанных = Новый Массив;

Для Каждого СтрокаТЗ Из тзДанных Цикл   

    стСтрокаТаблицы = Новый Структура;

    Для Каждого ИмяКолонки Из тзДанных.Колонки Цикл

        стСтрокаТаблицы.Вставить(ИмяКолонки.Имя, СтрокаТЗ[ИмяКолонки.Имя]);

    КонецЦикла;   

    мсДанных.Добавить(стСтрокаТаблицы);   

КонецЦикла;

55. Преобразовать адрес формата XML контактной информации в структуру старого формата

СтруктураАдреса = ЗарплатаКадры.СтруктураАдресаИзXML(Адрес,

ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.ПочтовыйАдресОрганизации"));

Адрес = СтруктураАдреса.Представление;

56. Дополнить массив МассивПриемник значениями из массива МассивИсточник

ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивПриемник, МассивИсточник, Истина);

57. Дополнить таблицу значений - приемника данными из таблицы значений - источника

ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ТаблицаИсточник, ТаблицаПриемник);

58. Вернуть значения реквизитов объекта

ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Данные.ФизическоеЛицо, "ФИО,Фамилия,Имя,Отчество,УточнениеНаименования");

ФИО = Новый Структура("Фамилия,Имя,Отчество");

ЗаполнитьЗначенияСвойств(ФИО, ЗначенияРеквизитов);

59. Вернуть текущего пользователя

ТекущийПользователь=ОбщегоНазначенияУХ.ПолучитьЗначениеПеременной("глТекущийПользователь");

60. Выполнить копирование документа

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

61. Подставить свой макет в СКД

СхемаКомпоновкиДанных          = ПолучитьМакет("МакетСКД");

АдресСхемыКомпоновкиДанных     = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, Новый УникальныйИдентификатор);

ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКомпоновкиДанных);

       

КомпоновщикНастроек.Инициализировать(ИсточникДоступныхНастроек);

КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);

 

62. Отладить внешнюю обработку

Общий модуль ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку

Функция ПодключитьВнешнююОбработку(Ссылка) Экспорт

        СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Подключение, БезопасныйРежим = ""%1"".'"), БезопасныйРежим));

        //ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежим,

        //ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений());

        ИмяОбработки = Менеджер.Создать("C:\1C\МояОбработка.epf", Ложь);

        ИмяОбработки = "МояОбработка";

        Возврат ИмяОбработки;       

КонецФункции

63. Схема запроса

СхемаЗапроса = Новый СхемаЗапроса;

СхемаЗапроса = УстановитьТекстЗапроса(ТекстЗапроса);

 

64. Преобразовать строковое представление УИД в ссылку на объект текущей информационной базы

ПолученныеДанные.ОсновнойДоговор = ОбменДаннымиXDTOСервер.СсылкаОбъектаПоУИДОбъектаXDTO(ДанныеXDTO.AdditionalInfo, Тип("СправочникСсылка.ДоговорыКонтрагентов"), КомпонентыОбмена);

 

65. Выполнить поиск правила конвертации объекта по имени

ПКОСвойство = ОбменДаннымиXDTOСервер.ПКОПоИмени(КомпонентыОбмена, "Справочник_ДополнительныеРеквизиты_Получение");

 

66. Вернуть объект информационной базы, соответствующий полученным данным XDTO

ТекСвойство = ОбменДаннымиXDTOСервер.СтруктураОбъектаXDTOВДанныеИБ(КомпонентыОбмена, СтрТабДопСвойств.Свойство, ПКОСвойство, "КонвертироватьИЗаписать");

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 626 07.10.19 08:34 Сейчас в теме
У меня нет ЗарплатаКадры. Нет и БСП. Как мне быть?
Dementor; Quasar; GATTUSO; Serega-artem; alex_4x; dsdred; semagin@gmail.com; portwein; DrAku1a; ivanov660; jaroslav.h; asdf_88; CyberCerber; frkbvfnjh; BigB; zqzq; geron4; WizaXxX; Hans; Kami4; +20 Ответить
4. Kami4 07.10.19 08:56 Сейчас в теме
(1)
Согласен.
Нужно было заголовок темы изменить на "Типовые конфигурации: Полезные процедуры и функции для программиста".
DrAku1a; bulpi; itoptimum; +3 Ответить
12. MenZurKa 07.10.19 14:02 Сейчас в теме
(4) Еще и не все типовые, Розница и УТ точно не имеют механизмов ЗарплатаКадры, ЗарплатаКадрыОбщиеНаборыДанных и подобные...
_MavR_; DrAku1a; Kami4; +3 Ответить
6. acces969 311 07.10.19 09:18 Сейчас в теме
Вел когда-то подобные записи, когда начинал. Может кому - пригодится. БСП, разумеется, не используется.

Вставка рисунка в табличный документ без изменения макета
Рисунок = Шапка.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Верх = 4;
Рисунок.Высота = 22;
Рисунок.Ширина = 95;
Рисунок.Лево = 45;
Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии,-1);
Карт = БиблиотекаКартинок.ВашаКартинка;
Рисунок.Картинка = Карт;


Программная эмуляция нажатий на кнопки клавиатуры
WSHShell = Новый COMОбъект("WScript.Shell");
      WSHShell.SendKeys("{UP}");


Пример раскраски текста форматированной строки
Если СокрЛП(ЭлементТекста) = "="
или СокрЛП(ЭлементТекста) = ">"
или СокрЛП(ЭлементТекста) = "<"
или СокрЛП(ЭлементТекста) = "*"
или СокрЛП(ЭлементТекста) = "/"
или СокрЛП(ЭлементТекста) = "+"
или СокрЛП(ЭлементТекста) = "-" тогда

ЭлементТекста = Новый ФорматированнаяСтрока(ЭлементТекста,, WebЦвета.Красный, WebЦвета.Белый);

иначеЕсли Нрег(СокрЛП(ЭлементТекста)) = "результат"
или нРег(СокрЛП(ЭлементТекста)) = "база"
или нРег(СокрЛП(ЭлементТекста)) = "размероклада"
или нРег(СокрЛП(ЭлементТекста)) = "недельнаяставканорма"
или нРег(СокрЛП(ЭлементТекста)) = "недельнаяставкафакт"
или нРег(СокрЛП(ЭлементТекста)) = "отработанодней"
или нРег(СокрЛП(ЭлементТекста)) = "отработаночасов" тогда

ЭлементТекста = Новый ФорматированнаяСтрока(ЭлементТекста,, WebЦвета.Синий, WebЦвета.Белый);

иначе
ЭлементТекста = Новый ФорматированнаяСтрока(ЭлементТекста,, WebЦвета.Белый, WebЦвета.Черный);
конецесли;
Показать


Типизация таблицы значений
РезультатТЗ = новый ТаблицаЗначений;
    Для Каждого Колонка из ТЗ.Колонки Цикл
        Имя = Колонка.Имя;
        МассивТипов = новый Массив(1);
        МассивТипов[0] = ТипЗнч(ТЗ[0][Имя]);
        Описатель = новый ОписаниеТипов(МассивТипов);
        РезультатТЗ.Колонки.Добавить(Имя, Описатель);
    КонецЦикла;
    
    Для каждого Строка из ТЗ Цикл
        СтрокаРез = РезультатТЗ.Добавить();
        ЗаполнитьЗначенияСвойств(СтрокаРез, Строка);
    КонецЦикла;
    
    ТЗ = РезультатТЗ.Скопировать();
Показать


Нестандартное обновление конфигурации. Конфигурация поставщика так же обновляется.
1) Загрузить новую конфигурацию из файла
конфигурация - загрузить конфигурацию из файла
2) На вопрос "обновить конфигурацию БД" нажать "НЕТ"
3) Включить возможность изменения
конфигурация - поддержка - настройка поддержки - включить возможность изменения
4) Конфигурация - конфигурация базы данных - сравнить,объединить с конфигурацией базы данных
5) Отметить галками объекты, которые изменялись. Там, где стоит галка, будут взяты старые (дописанные) модули. Где галка не стоит - будут взяты из типовой конфигурации Рейтинг
6) Действия - установить режим для всех - взять из базы данных
7) Выполнить


В приложенных файлах
1. Компоновка данных СКД наглядно (блок-схема и программный код)
2. Попсовые способы решения ошибки формата потока
3. Для размышлений
Прикрепленные файлы:
Компоновка данных скд.docx
Ошибка формата потока в 1С.docx
Подключение 1с к ардуино через COM-порт.txt
Lacoste4life; SLukin; user1017560; Terve!R; Dmitryflagman; rpgshnik; HameleonA; Hans; jONES1979; muwa_; Aili; О.Ж; SkyJack; kompas-dm; ksnik; Olga12; dhurricane; NataliaZh; shard; wowik; kote; acanta; +22 Ответить
16. fenixnow 261 08.10.19 07:17 Сейчас в теме
(1) проходить мимо, эта статья не для вас
2. nomad_irk 64 07.10.19 08:44 Сейчас в теме
(0) БСП, конечно, годная подсистема, нужная, но, ИМХО, она сильно разбаловала программистов 1С......
bulpi; Kami4; +2 4 Ответить
3. QuickMix 07.10.19 08:55 Сейчас в теме
(2)да и не только БСП, а также функции работы с датами, строками, числами. Настоящие программисты перебирают в цикле каждый символ в строке, и не пользуются никакими функциями, дабы не слишком баловать себя.
user1017560; IgorS; Korolev; VladimirMelnychenko; rabid_otter; portwein; m_aster; aegoncharov; erutan; hydro2588_2015; bendarik; mark_oilbass; mivari; gulagm; memb3r; user774630; MrArmHaze; PLAstic; CyberCerber; A_Max; Kami4; +21 Ответить
17. nomad_irk 64 08.10.19 07:57 Сейчас в теме
(3) Естественно, всегда найдется тот, кто возведет что-угодно в абсолют и доведет это до абсурда :)
20. Monte Carlo 15.10.19 15:15 Сейчас в теме
(3) Настоящие программисты пишут только с использованием 0 и 1. Остальные - это избалованные лентяи.
AnKonAlm; alanto23; Hatson; Serg_1C(M); +4 Ответить
7. YannikAlx 41 07.10.19 10:02 Сейчас в теме
(2) Ну чтоб программисты не баловались нужно запретить все языки кроме Ассемблера...
Вот где ИСТИННОЕ программирование, а остальное - баловство одно... ))))))))))
portwein; Leon29; Monte Carlo; hydro2588_2015; gulagm; memb3r; user774630; MrArmHaze; KonstB; +9 Ответить
8. nomad_irk 64 07.10.19 10:10 Сейчас в теме
(7) тогда уж машинные коды, а ассемблер - для слабаков :)
Serg_1C(M); +1 Ответить
9. EvgeniuXP 07.10.19 11:06 Сейчас в теме
5. wowik 873 07.10.19 09:08 Сейчас в теме
Отлично! Сохранил себе в минимализмы.
10. ixijixi 1474 07.10.19 11:43 Сейчас в теме
Это какая-то каша
SergeyTerentyev; tolyan_ekb; SerVer1C; rpgshnik; vtsuganov; azhilichev; Oldsad; kuzyara; MishaD; user774630; CSiER; CyberCerber; +12 Ответить
11. Lus_85 07.10.19 11:59 Сейчас в теме
Поделиться наработками с общественностью это хорошо. Но еще лучше их перед этим привести в порядок, а не вываливать файл Текущаяработа.txt.
Вывод сообщения пользователю- 3 пункта, получение предопределенного - 4 пункта. Просто надерганные куски из типовой.
Вот расскажите, кто кроме разработчиков БСП и типовых на ней использует п.35.
CyberCerber; +1 Ответить
13. PLAstic 291 07.10.19 14:19 Сейчас в теме
(11) Я. Есть РИБ на 26 баз. Правила обмена обновляются в ЦБ и для всех ПБ едины. При этом ПБ обновляются в разное время региональными админами. Нужно, чтобы правила обмена отрабатывали корректно по кускам кода, которые выполняются при загрузке в ПБ с разными версиями конфигурации: где есть общий модуль и где его нет.
Вообще, с увеличением сложности КИС задействуется больше механизмов.

А по теме: да, сумбур из обескураживших в момент первого знакомства кусков кода. :)
14. AlexandrSmith 66 07.10.19 21:59 Сейчас в теме
Статья полезная, хотя мне кажется нужно несколько другую тему осветить, и соответственно другие функции представить.
Alex1053669; +1 Ответить
15. buganov 195 08.10.19 06:11 Сейчас в теме
Почему всю БСП сюда не перепечатали? Там еще много полезностей.
Кстати, СтрРазделить не взлетит на 82, так что было бы полезно указывать платформу, на которой юзать тот или иной метод.
38. DarkAn 1049 30.04.20 13:11 Сейчас в теме
(15) Разделить на платформы и конфигурации
18. vadver 39 08.10.19 13:26 Сейчас в теме
п.15 надо изложить в следующей редакции:
Функция СведенияОВнешнейОбработке() Экспорт
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.4.4.106");
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
	ПараметрыРегистрации.Версия = "1.0";
	ПараметрыРегистрации.БезопасныйРежим = Истина;
	ПараметрыРегистрации.Наименование = НСтр("ru = 'Добавляемая обработка'");
        
        МассивРазрешений = Новый Массив;
	МассивРазрешений.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина, ""));
	МассивРазрешений.Добавить(РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("Word.Application",,,""));
        ПараметрыРегистрации.Разрешения = МассивРазрешений;

	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Представление = НСтр("ru = 'Имя команды обработки'");
	НоваяКоманда.Идентификатор = "ИдентификаторКоманды";
	НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
	НоваяКоманда.ПоказыватьОповещение = Истина;
	Возврат ПараметрыРегистрации;
КонецФункции
Показать


И тут еще нет описания массива назначений, но там просто
ПараметрыРегистрации.БезопасныйРежим = Ложь;
это очень плохая практика
MSK_Step; +1 Ответить
39. DarkAn 1049 30.04.20 13:13 Сейчас в теме
И кроме того противоречит стандартам на 1С Совместимо
19. МимохожийОднако 140 13.10.19 07:26 Сейчас в теме
До кучки..)).
Получить массив из таблицы значений в 3 строчки
Функция МассивИзТЗ(ТЗ)
ТЗ.Колонки.Добавить("ккк");
ОтборИзТЗ= Новый Структура("ккк",Неопределено);
МассивДанных=ТЗ.НайтиСтроки(ОтборИзТЗ);
Возврать МассивДанных;
КонецФункции
user659124_s.kostina; kotov2000; +2 Ответить
23. Cyberhawk 133 30.10.19 10:38 Сейчас в теме
(19) В чем польза от такого "финта"?
25. 1c-intelligence 12628 17.02.20 22:16 Сейчас в теме
(19) многовато. Можно так:
Функция МассивИзТЗ(ТЗ)
ТЗ.Колонки.Добавить("ккк");
Возврат ТЗ.НайтиСтроки(Новый Структура("ккк",Неопределено));
КонецФункции
21. acanta 15.10.19 15:44 Сейчас в теме
Современные настоящие программисты уже пишут в кубитах с вероятностью 50 процентов что 2*2 =4 и по 20% вероятности что 3 или 5 и по 5% все остальное.
40. DarkAn 1049 30.04.20 13:15 Сейчас в теме
22. AgentNiCho 18.10.19 17:46 Сейчас в теме
А я думаю полезная статья. Кое-что подсмотрел, буду использовать.
24. mm_84 14.01.20 18:42 Сейчас в теме
Оказывается, можно просто взять функции из типового отчета или документа ЗУП и выкладывать на инфостарт с заголовком "полезные функции для программиста" (ЗУП). пойду скопирую функции из БСП "Работа с файлами".
yaroslav_bondarev; Aquashop; rabid_otter; birusik; +4 1 Ответить
26. chng 06.03.20 09:21 Сейчас в теме
(24) Ваш каммент хорошо иллюстрирует тот факт, что придумать что сделать, в разы сложнее, чем реализовать придуманное...
27. rpgshnik 3362 10.03.20 03:32 Сейчас в теме
Жалко, что картинками и без оглавления
28. DrAku1a 1590 29.04.20 04:17 Сейчас в теме
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
		Элементы,
		"ОбразованиеКвалификация",
		"Видимость",
		Объект.Учащийся);

Вместо
Элементы.ОбразованиеКвалификация.Видимость=Объект.Учащийся;

Да, весьма полезно.
Infector; z4z4z; +2 Ответить
29. platonov.e 129 29.04.20 07:36 Сейчас в теме
У меня была идея, сделать библиотеку полезных методов, которую бы наполняли программисты. Так и осталась на уровне идеи)))
31. m.bolsun 188 29.04.20 10:37 Сейчас в теме
32. platonov.e 129 29.04.20 10:51 Сейчас в теме
30. Prom-komplekt 29.04.20 07:54 Сейчас в теме
ОбщегоНазначенияКлиентСервер.СообщитьПользователю Устарела. Следует использовать ОбщегоНазначенияКлиент.СообщитьПользователю или ОбщегоНазначения.СообщитьПользователю
33. MaxPowerr 45 29.04.20 14:46 Сейчас в теме
Супер.
Возможно, кому понадобится или автор захочет добавить в свой список "вкусностей" распределение сумм, лично мне часто приходится пользоваться или у кого-то есть более красивое решение с удовольствием ознакомлюсь.
Распределение сумм (из стандартного функционала):
//МассивДляРаспределения - это массив сумм, которые являются базой для распределения
РаспределяемаяСумма = 900;
МассивСумм = Новый Массив;
Для каждого Стр из МассивДляРаспределения Цикл
	МассивСумм.Добавить(Стр.Количество);	
КонецЦикла;

МассивРезультата = ОбщегоНазначения.РаспределитьПропорционально(РаспределяемаяСумма, МассивСумм, 2);
			
Если МассивРезультата <> неопределено тогда
	Для НомерСтроки = 0 По МассивРезультата.Количество() - 1 Цикл
                //Допустим мы распределяем вес продукции
		МассивДляРаспределения[НомерСтроки].ВесНетто = МассивРезультата[НомерСтроки];
	КонецЦикла; 
КонецЕсли;
Показать
BoryaMbi; +1 Ответить
34. Infector 195 29.04.20 15:04 Сейчас в теме
Фактически отдельный модуль. Подключает записи вспомогательных регистров сведений к формам объектов, с которыми они имеют связь.

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

Процедура ЗаписатьНаборЗаписейРС(УпрФорма, ИмяРегистра, СтруктураОтбора,
				ИмяРеквизитаУФ = Неопределено, ЗначенияЗаполнения = Неопределено)  Экспорт
	
	Если ИмяРеквизитаУФ = Неопределено Тогда
		ИмяРеквизитаУФ = ИмяРегистра;	
	КонецЕсли;
	
	Если ЗначенияЗаполнения = Неопределено Тогда
		ЗначенияЗаполнения = Новый Структура;
	КонецЕсли;	
	
	НаборЗаписей = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей();
	
	Для Каждого Парам Из СтруктураОтбора Цикл
		НаборЗаписей.Отбор[Парам.Ключ].Установить(Парам.Значение);
	КонецЦикла;
	
	НаборЗаписей.Прочитать();
    НаборЗаписей.Очистить();

	НаборЗаписейУФ = УпрФорма[ИмяРеквизитаУФ];

	Для Каждого Стр Из НаборЗаписейУФ Цикл
		СтрНабора = НаборЗаписей.Добавить();
		ЗаполнитьЗначенияСвойств(СтрНабора, Стр);
		
		Для Каждого Парам Из СтруктураОтбора Цикл
			СтрНабора[Парам.Ключ] = Парам.Значение;	
		КонецЦикла;	
		
		Для Каждого Зн Из ЗначенияЗаполнения Цикл
			Если Не ЗначениеЗаполнено(СтрНабора[Зн.Ключ]) Тогда
				СтрНабора[Зн.Ключ] = Зн.Значение;	
			КонецЕсли;
		КонецЦикла;	
		
	КонецЦикла;	
	
	НаборЗаписей.Записать();
	
КонецПроцедуры	

Процедура ПрочитатьМенеджерЗаписиРС(УпрФорма, ИмяРегистра, СтруктураОтбора, ИмяРеквизитаУФ = Неопределено) Экспорт

	Если ИмяРеквизитаУФ = Неопределено Тогда
		ИмяРеквизитаУФ = ИмяРегистра;	
	КонецЕсли;	

	МенеджерЗаписиУФ = УпрФорма[ИмяРеквизитаУФ];
	
	Запрос = ПодготовитьЗапросНаЧтениеРегистраСведений(ИмяРегистра, СтруктураОтбора);
	Выборка = Запрос.Выполнить().Выбрать();

	Если Выборка.Следующий() Тогда
		ЗаполнитьЗначенияСвойств(МенеджерЗаписиУФ, Выборка);
	Иначе
		ПустойМенеджерЗаписи = РегистрыСведений[ИмяРегистра].СоздатьМенеджерЗаписи();
		ЗаполнитьЗначенияСвойств(МенеджерЗаписиУФ, ПустойМенеджерЗаписи);
	КонецЕсли;	
	
КонецПроцедуры	

Процедура ЗаписатьМенеджерЗаписейРС(УпрФорма, ИмяРегистра, СтруктураОтбора,
				ИмяРеквизитаУФ = Неопределено, ЗначенияЗаполнения = Неопределено)  Экспорт
				
	ПроверитьЗаполнение = СтруктураНеключевыхПолейРС(ИмяРегистра, СтруктураОтбора);			
				
	Если ИмяРеквизитаУФ = Неопределено Тогда
		ИмяРеквизитаУФ = ИмяРегистра;	
	КонецЕсли;
	
	Если ЗначенияЗаполнения = Неопределено Тогда
		ЗначенияЗаполнения = Новый Структура;
	КонецЕсли;	
	
	МенеджерЗаписиУФ = УпрФорма[ИмяРеквизитаУФ];
	МенеджерЗаписи = РегистрыСведений[ИмяРегистра].СоздатьМенеджерЗаписи();
	
	ЗаполнитьЗначенияСвойств(МенеджерЗаписи, МенеджерЗаписиУФ);
	
	Для Каждого Парам Из СтруктураОтбора Цикл
		МенеджерЗаписи[Парам.Ключ] = Парам.Значение;	
	КонецЦикла;

	Для Каждого Зн Из ЗначенияЗаполнения Цикл
		Если Не ЗначениеЗаполнено(МенеджерЗаписи[Зн.Ключ]) Тогда
			МенеджерЗаписи[Зн.Ключ] = Зн.Значение;	
		КонецЕсли;
	КонецЦикла;	
	
	Писать = Ложь;
	Для Каждого Поле Из ПроверитьЗаполнение Цикл
		Если ЗначениеЗаполнено(МенеджерЗаписи[Поле.Ключ]) Тогда
			Писать = Истина;
			Прервать;	
		КонецЕсли;	
	КонецЦикла;	
	
	Если Писать Тогда
		МенеджерЗаписи.Записать();
	Иначе
		МенеджерЗаписи.Удалить();
	КонецЕсли;
	
КонецПроцедуры

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

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

КонецФункции

Функция СтруктураНеключевыхПолейРС(ИмяРегистра, СтруктураОтбора)
	
	НеключевыеРеквизиты = Новый Структура;
	МетаданныеРС = Метаданные.РегистрыСведений[ИмяРегистра];
	
	Для Каждого Изм Из МетаданныеРС.Измерения Цикл
		Если Не СтруктураОтбора.Свойство(Изм.Имя) Тогда
			НеключевыеРеквизиты.Вставить(Изм.Имя);
		КонецЕсли;	
	КонецЦикла;	
	
	Для Каждого Рес Из МетаданныеРС.Ресурсы Цикл
		Если Не СтруктураОтбора.Свойство(Рес.Имя) Тогда
			НеключевыеРеквизиты.Вставить(Рес.Имя);
		КонецЕсли;
	КонецЦикла;	
	
	Для Каждого Рекв Из МетаданныеРС.Реквизиты Цикл
		Если Не СтруктураОтбора.Свойство(Рекв.Имя) Тогда
			НеключевыеРеквизиты.Вставить(Рекв.Имя);
		КонецЕсли;
	КонецЦикла;	

	Если МетаданныеРС.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда
		НеключевыеРеквизиты.Вставить("Период");
	КонецЕсли;
	Возврат НеключевыеРеквизиты;
	
КонецФункции	

Показать
35. MaxPowerr 45 29.04.20 15:10 Сейчас в теме
(34)
Было бы классно прочитать полноценную статью по использованию данного функционала.
36. Infector 195 29.04.20 15:20 Сейчас в теме
(35)может быть оформлю как-нибудь
Terve!R; user986734; +2 Ответить
41. glek 117 05.02.21 10:58 Сейчас в теме
26.
МенеджерВременныхТаблиц.Таблицы.Найти(<ИмяТаблицы>) <> Неопределено
Оставьте свое сообщение

См. также

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

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

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    11804    89    sapervodichka    92    

114

Система контроля ведения учета [БСП]

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

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    5500    quazare    8    

101

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

СКД Универсальные функции Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

28.05.2022    6673    milkers    11    

87

Базовые принципы работы с регламентными заданиями подсистем БСП

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

В очередной публикации рассмотрим некоторые базовые приемы работы с регламентными заданиями в рамках библиотеки стандартных подсистем

22.05.2022    9415    quazare    25    

54

Модули общего назначения - готовые полезные функции и процедуры конфигураций на БСП

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

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

25.04.2022    10184    quazare    11    

130

Полезный код для программистов 1С (часть 3). Подготовка печатных форм + подсистема Управление печатью (БСП)

БСП (Библиотека стандартных подсистем) Универсальные функции Платформа 1С v8.3 Бесплатно (free)

Мы все любим 1С, не так ли? Вот дает 1С прекрасный механизм возможности модификации макетов печатных форм в БСП. А из всех рекомендаций это получение макета и заполнение параметров областей. И вы спросите: "А что не так... ты печатные формы накодить не можешь без указаний сверху?". Да вот в том то и дело, что я могу все. А вот пользователям от такого механизма пользы 0, если из всех доступных изменений остаются только шрифты, да текст произвольный накинуть. А ведь можно больше, надо только соблюдать несколько правил при подготовке печатных форм...

07.03.2022    9871    vandalsvq    0    

56

Конвертируем печатную форму pdf в картинку (jpg, gif, png и прочие) на сервере

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Была поставлена интересная задача конвертировать печатную форму в файл картинку. По условию задачи клиенту на почту нужно присылать только файл картинку (jpg, gif).

22.12.2021    6364    John_d    25    

46

Несколько простых приемов для удобной работы в конфигураторе

Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Простая и удобная среда разработки 1С:Предприятия позволяет практически любому человеку начать работать под капотом 1С - в конфигураторе. Время идет, новички становятся программистами, специалистами, а об удобных приемах работы узнают годами, по ходу своего карьерного пути. А здорово было бы, если бы все знали удобные приемы в начале своего пути? Эти несколько приемов будут полезны новичкам, так как они затрагивают ту область работы, с которой приходится сталкиваться в начале карьеры.

12.11.2021    13590    acces969    95    

142

Добавление электронной подписи в документ PDF

Универсальные функции Платформа 1С v8.3 1С:Бухгалтерия 3.0 Абонемент ($m)

Как добавить подпись прямо в файл PDF, чтобы не нужно было файлы подписи передавать отдельно.

1 стартмани

26.08.2021    15804    37    fotov    19    

41

Из Word в табличный документ

Универсальные функции Платформа 1С v8.3 Платформа 1C v8.2 Бесплатно (free)

Быстро и просто: текст, списки, таблицы. Готовый код

18.08.2021    4755    Yashazz    6    

64

Префиксация объектов - полезный типовой функционал БСП

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

В данной публикации предлагаю рассмотреть основные типовые возможности библиотеки стандартных подсистем (БСП), касаемые префиксации объектов конфигураций.

21.06.2021    10923    quazare    4    

61

Модель запроса

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

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

1 стартмани

01.03.2021    5202    kalyaka    26    

47

Сохранение настроек

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

Делюсь еще одним не самым очевидным способом хранения настроек в базах на БСП без доработки конфигурации. Весь код в статье.

22.11.2020    9847    ixijixi    8    

67

Произвольные колонтитулы и повтор шапки таблицы в табличном документе (функция)

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

Пример рекурсивной функции, при помощи которой в табличный документ можно выводить верхний или нижний колонтитулы с произвольным содержимым, а также делать повтор шапки таблицы (или таблиц, если их несколько).

07.10.2020    13550    ellavs    7    

39

Лайфхаки для разработчиков 1С. Часть 1

Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Россия Бесплатно (free)

Собрали 20 лайфхаков, которые используют наши программисты при работе с 1С. Формы, контрагенты, СКД, процедуры, глюки платформы и многое другое. В этой статье публикуем первую часть.

30.09.2020    9677    Neti    47    

69

Самый простой парсинг и обработка веб-страниц в 1С

WEB-интеграция Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим самый простой парсинг веб-страниц средствами платформы 1С и еще некоторые полезные приемы работы с веб-страницами.

07.08.2020    24971    Infostart    30    

146

Полезные встроенные функции для работы с печатными формами и не только на УТ 11.4 и БП 3.0 (сравнение)

Универсальные функции Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Бесплатно (free)

В данном обзоре приведу примеры встроенных используемых функций для работы с печатными формами на примерах конфигураций Управление торговлей 11.4 и Бухгалтерия 3.0.

10.07.2020    15173    quazare    7    

93

Форма выбора (подбор) в управляемых формах

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

Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.

08.05.2020    179286    user5300    40    

290

Получаем уровень группировки ячейки табличного документа

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

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

23.03.2020    8775    maxx    16    

57

Дополнительные функции для 1С:Документооборот

Универсальные функции Платформа 1С v8.3 1С:Документооборот Управленческий учет Абонемент ($m)

В данной публикации я хочу поделиться расширением, которое содержит дополнительные функции (доработки) для 1С:Документооборот.

1 стартмани

24.01.2020    29996    215    pavelpribytkin96    47    

56

Сходство Джаро - Винклера. Нечеткое сравнение строк

Универсальные функции Платформа 1С v8.3 Россия Бесплатно (free)

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

25.12.2019    11304    brooho    21    

170

Автоматическое создание связанного объекта в базе 1С: Документооборот через бесшовную интеграцию

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

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

23.12.2019    6154    pavelpribytkin96    3    

39

Быстрое создание наполненных коллекций

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.10.2019    9143    SeiOkami    69    

68

Преобразование XML в таблицу значений или иной объект 1С методом XSL преобразования

Универсальные функции Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Сразу открою интригу, напрямую прочитать XML, не содержащий объект 1С, не удастся. Статья раскрывает способы привести XML к формату, который возможно прочитать средствами платформы.

24.10.2019    21355    kraspila    33    

58

Обертка функций Excel на русском. Ускорение процесса разработки.

Загрузка и выгрузка в Excel Универсальные функции Платформа 1С v8.3 Бесплатно (free)

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

24.10.2019    8936    DmitryKotov    6    

56

Вывод QR-кода типовыми средствами.

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

Вывод QR-кода типовыми средствами. На данный момент очень часто нужно вывести в печатную форму QR-код. Показываю как на примере типового кода из УТ11 это сделать. Можно использовать в любых конфигурациях с обычными формами.

1 стартмани

21.10.2019    66284    137    Емельянов Алексей    57    

51

Методика независимой системы "Подписки на события"

Универсальные функции Платформа 1С v8.3 1С:Управление производственным предприятием Бесплатно (free)

В этой небольшой статье я хочу вам предложить пошаговое описание разработки системы управления "Подписками на события" для документов. Цель разработки - возможность управления подписками в вашей конфигурации, не прибегая к программированию через конфигуратор. Думаю, будет полезно и интересно!

17.10.2019    18786    aximo    35    

72

Документ на документ. Автоматическое создание связанных документов

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример решения простой и распространенной задачи - автоматическое создание документа на основании другого документа.

16.09.2019    19485    Infostart    36    

75

"Хочу универсально!" [Часть 1]

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Сентябрьская серия статей про то, как начинающий разработчик Вася проходит путь от простой задачки к созданию своего механизма. На этот раз - открытие значения из текущей колонки.

02.09.2019    11644    SeiOkami    35    

76

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

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

Как запустить фоновое задание из модуля внешней обработки используя БСП. Как отключить безопасный режим и сообщения защиты от опасных действий независимо от профиля безопасности пользователя в фоновом задании во внешней обработке.

2 стартмани

24.08.2019    24672    BenGunn    29    

132