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

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

Разработка - Практика программирования

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

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

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

А по теме: да, сумбур из обескураживших в момент первого знакомства кусков кода. :)
14. AlexandrSmith 75 07.10.19 21:59 Сейчас в теме
Статья полезная, хотя мне кажется нужно несколько другую тему осветить, и соответственно другие функции представить.
Alex1053669; +1 Ответить
15. buganov 173 08.10.19 06:11 Сейчас в теме
Почему всю БСП сюда не перепечатали? Там еще много полезностей.
Кстати, СтрРазделить не взлетит на 82, так что было бы полезно указывать платформу, на которой юзать тот или иной метод.
38. DarkAn 986 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 986 30.04.20 13:13 Сейчас в теме
И кроме того противоречит стандартам на 1С Совместимо
19. МимохожийОднако 130 13.10.19 07:26 Сейчас в теме
До кучки..)).
Получить массив из таблицы значений в 3 строчки
Функция МассивИзТЗ(ТЗ)
ТЗ.Колонки.Добавить("ккк");
ОтборИзТЗ= Новый Структура("ккк",Неопределено);
МассивДанных=ТЗ.НайтиСтроки(ОтборИзТЗ);
Возврать МассивДанных;
КонецФункции
user659124_s.kostina; kotov2000; +2 Ответить
23. Cyberhawk 127 30.10.19 10:38 Сейчас в теме
(19) В чем польза от такого "финта"?
25. 1c-intelligence 10914 17.02.20 22:16 Сейчас в теме
(19) многовато. Можно так:
Функция МассивИзТЗ(ТЗ)
ТЗ.Колонки.Добавить("ккк");
Возврат ТЗ.НайтиСтроки(Новый Структура("ккк",Неопределено));
КонецФункции
21. acanta 15.10.19 15:44 Сейчас в теме
Современные настоящие программисты уже пишут в кубитах с вероятностью 50 процентов что 2*2 =4 и по 20% вероятности что 3 или 5 и по 5% все остальное.
40. DarkAn 986 30.04.20 13:15 Сейчас в теме
22. AgentNiCho 18.10.19 17:46 Сейчас в теме
А я думаю полезная статья. Кое-что подсмотрел, буду использовать.
24. mm_84 14.01.20 18:42 Сейчас в теме
Оказывается, можно просто взять функции из типового отчета или документа ЗУП и выкладывать на инфостарт с заголовком "полезные функции для программиста" (ЗУП). пойду скопирую функции из БСП "Работа с файлами".
yaroslav_bondarev; Aquashop; oleganatolievich; birusik; +4 1 Ответить
26. chng 06.03.20 09:21 Сейчас в теме
(24) Ваш каммент хорошо иллюстрирует тот факт, что придумать что сделать, в разы сложнее, чем реализовать придуманное...
27. rpgshnik 2567 10.03.20 03:32 Сейчас в теме
Жалко, что картинками и без оглавления
28. DrAku1a 1420 29.04.20 04:17 Сейчас в теме
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
		Элементы,
		"ОбразованиеКвалификация",
		"Видимость",
		Объект.Учащийся);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    80655    Serginio    113    

Полезные примеры СКД, ч.2

Практика программирования v8 v8::СКД Бесплатно (free)

Еще несколько примеров решения задач в СКД.

06.04.2021    5559    Neti    7    

Неочевидные нюансы записи управляемой формы

Практика программирования v8 v8::УФ Платформа 1C v8.2 1cv8.cf Бесплатно (free)

Разберем несколько нюансов записи управляемой формы.

02.04.2021    6634    SeiOkami    52    

Обзор полезных методов БСП 3.1.4

Практика программирования БСП (Библиотека стандартных подсистем) v8 1cv8.cf Бесплатно (free)

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

25.03.2021    21741    rayastar    49    

Звуковое управление в 1С 8.3 Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.

16.03.2021    3965    velemir    31    

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions

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

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020    5877    comol    31    

Базовые вещи БСП, которые облегчат жизнь программисту 1С

Практика программирования БСП (Библиотека стандартных подсистем) v8 1cv8.cf Россия Бесплатно (free)

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

30.08.2020    14853    quazare    34    

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

Практика программирования v8 v8::УФ 1cv8.cf Россия Бесплатно (free)

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

08.05.2020    51177    user5300    18    

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    39264    unichkin    74    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

27.01.2020    49489    ids79    26    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

15.01.2020    35428    John_d    22    

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

Практика программирования v8 Россия Бесплатно (free)

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    28002    kuzyara    38    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    33498    tormozit    105    

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

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

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

25.12.2019    7940    brooho    19    

30 задач. Странных и не очень

Практика программирования v8 Бесплатно (free)

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    20648    YPermitin    61    

Как передать IP адрес, который вызвал HTTP запрос в 1C (для веб-сервера Apache)

Практика программирования v8 Бесплатно (free)

Столкнулся с задачей получения IP адреса, который вызывает http сервис 1С. Итак, решение:

22.11.2019    10986    Sibars    19    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.

20.09.2012    80496    tormozit    131    

Таблица значений. Нюансы

Практика программирования v8 Бесплатно (free)

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019    45504    Yashazz    50    

[Шпаргалка] Программное создание элементов формы

Практика программирования Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Программное создание практически всех популярных элементов формы.

06.09.2019    80184    rpgshnik    70    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    65678    ids79    55    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    51521    tormozit    51    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    38036    YPermitin    25    

Три костыля. Сказ про фокусы в коде

Практика программирования v8 Бесплатно (free)

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    28122    YPermitin    81    

Отслеживание выполнения фонового задания

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

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

17.08.2019    39879    ids79    19    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    48257    tormozit    74    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    124737    ids79    72    

Фоновое выполнение кода в 1С - это просто

Практика программирования v8 1cv8.cf Бесплатно (free)

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

02.08.2019    50719    avalakh    26    

Разбираемся с параметрами редактирования СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Связь по типу, Параметры выбора, Связи параметров выбора

31.07.2019    34243    json    15    

Выгрузка документа по условию Промо

Практика программирования Разработка v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    16850    m-rv    3    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    88436    ids79    14    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    43149    ids79    27    

Регистры сведений. За кулисами

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    30645    YPermitin    14    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

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

16.04.2019    21545    m-rv    17    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования Разработка v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    20900    SeiOkami    52    

Работа с настройками системы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

02.07.2019    69541    ids79    17    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    66710    ids79    27    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    33882    m-rv    22    

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Практика программирования Производительность и оптимизация (HighLoad) v8 v8::Запросы Бесплатно (free)

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    28373    dmurk    148    

Регистры накопления. Структура хранения в базе данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    55265    YPermitin    30    

О расширениях замолвите слово...

Практика программирования Разработка v8 Бесплатно (free)

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    39946    ellavs    130    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Вариант решения задач с проведением по типовым регистрам нетиповыми регистраторами. Зачем - чтобы при сравнении конфигурации не обращать внимание на свойства регистров и исключить вероятность допущения горькой оплошности при обновлении информационных баз, заменив типы регистраторов основной конфигурации типами конфигурации поставщика. Для программных продуктов, имеющих в своем составе метаданных документ "Корректировка регистров"("Корректировка записей регистров").

05.12.2017    29334    itriot11    34    

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

Практика программирования v8 Бесплатно (free)

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    29807    ellavs    90    

Трюки с внешними источниками данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    37190    YPermitin    53    

Ошибки при работе с хранилищем конфигурации и способы их решения

Практика программирования v8 Бесплатно (free)

В статье собраны наиболее распространенные ошибки при работе с хранилищем конфигурации и способы их обхода и решения.

01.03.2019    56112    Смешной 1С    32    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    40357    ids79    44    

Разработка и сценарное тестирование с Vanessa-ADD. Отчетность Allure. Автоматизация запуска сценариев

Практика программирования Vanessa Automation v8 Россия Бесплатно (free)

Формируем отчетность о результатах выполнения сценариев. Автоматизируем запуск.

26.02.2019    25889    Vladimir Litvinenko    28    

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

Практика программирования БСП (Библиотека стандартных подсистем) Роли и права v8 v8::Права Бесплатно (free)

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    54492    ids79    11