Расшифровка СКД. Фильтр отчета по диапазону чисел. Переопределение обработки расшифровки. Не модальный режим

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

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

РасшифровкаСКД КомпоновщикНастроек ОбработкаРасшифровкиСКД ОбработкаРасшифровки Отборы Расшифровка СКД Компоновщик Настроек

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

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

1 Программное добавление дополнительного пункта меню расшифровки

Для добавления дополнительного пункта меню нужно создать форму отчета и переопределить процедуры обработчики табличного документа Результат:

РезультатОбработкаРасшифровки() - нажатие на ячейке отчета правой кнопкой мыши

РезультатОбработкаДополнительнойРасшифровки() - нажатие на ячейке левой кнопкой мыши

Если база создана на основании БСП можно не создавать форму отчета, выполнить доработки через общим модуль ОтчетыКлиентПереопределяемый (не реализовано у меня): 

ОтчетыКлиентПереопределяемый.ОбработкаРасшифровки()

ОтчетыКлиентПереопределяемый.ОбработкаДополнительнойРасшифровки().

 

Код процедур:

&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)    
    //вызываем процедуру которая для числа переопределяем обработку расшифровку
    ОбработкаРасшифровкиНачало(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры);    
КонецПроцедуры

&НаКлиенте
Процедура РезультатОбработкаДополнительнойРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)    
    //вызываем процедуру которая для числа переопределяем обработку расшифровку
    ОбработкаРасшифровкиНачало(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры);    
КонецПроцедуры

В процедуре ОбработкаРасшифровкиНачало получаем объект расшифровки (значение в ячейке табличного документа) с дополнительными проверкам на пустое значение и на тип Число. После проверки данных объекта расшифровки для Числа переопределяем расшифровку (для других типов нет смысла задавать диапазон, хотя можно и для типа "Дата" реализовать)

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


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


&НаКлиенте
Функция ПолучитьИмяДопПунктМеню_ОтфильтроватьДиапазон() Экспорт
    Возврат НСтр("ru = 'Отфильтровать диапазон от ... до ...'; uk = 'Відфільтрувати діапазон від ... до ...'");
КонецФункции

 

2 Программная обработка расшифровки

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

- созданный программно пункт меню выбора диапазона - нужно вызвать форму выбора двух чисел;

- пункт Отфильтровать - нужно открыть новый отчет с параметрами фильтра (так реализован стандартный механизм);

- для прочих пунктов меню необходимо вызвать ОтработатьРасшифровку (функционал с сайта ИТС).

&НаКлиенте
Функция ОбработкаРасшифровкиЗавершение(ВыполненноеДействие, ПараметрВыполненногоДействия, ДополнительныеПараметры) Экспорт

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


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

3 Программное добавление отборов НастройкиКомпоновкиДанных. Добавление отборов пользовательских насроек. Перерисовка пользовательских настроек

После получения чисел диапазона нужно программно добавить отбор в НастройкиКомпоновкиДанных и ПользовательскиеНастройки, а также перерисовать пользовательськие настройки.


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

            //для наших новых отборов устанавливаем видимость "Быстрый доступ" и отображаем их на форме
            
            //есть конфигурация создана на основании БСП, тогда можно использовать функцию общего модуля ОтчетыКлиентСервер            
            //ПользовательскаяНастройкаЗначениеОт = ОтчетыКлиентСервер.НайтиПользовательскуюНастройку(ПользовательскиеНастройки, ДобавленныйЭлементЗначениеОт.ИдентификаторПользовательскойНастройки);
            //ПользовательскаяНастройкаЗначениеДо = ОтчетыКлиентСервер.НайтиПользовательскуюНастройку(ПользовательскиеНастройки, ДобавленныйЭлементЗначениеДо.ИдентификаторПользовательскойНастройки);
            
            ПользовательскаяНастройкаЗначениеОт = НайтиПользовательскуюНастройку(ПользовательскиеНастройки, ДобавленныйЭлементЗначениеОт.ИдентификаторПользовательскойНастройки);
            ПользовательскаяНастройкаЗначениеДо = НайтиПользовательскуюНастройку(ПользовательскиеНастройки, ДобавленныйЭлементЗначениеДо.ИдентификаторПользовательскойНастройки);
            
            Если  ПользовательскаяНастройкаЗначениеОт <> Неопределено Тогда
                ПользовательскаяНастройкаЗначениеОт.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;
            КонецЕсли;
            
            Если  ПользовательскаяНастройкаЗначениеДо <> Неопределено Тогда
                ПользовательскаяНастройкаЗначениеДо.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;
            КонецЕсли;            
            
            СкомпоноватьРезультат();                                        
                        
            //вызываем создание елементов формы пользовательских настроек
            ОбновитьЭлементыПользовательскихНастроек();
            
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры


// Функция возвращает копию настроек компоновки данных.
// 
// Возвращаемое значение:
//   - НастройкиКомпоновкиДанных - настройки компоновки данных
//
&НаСервере
Функция ПолучитьТекущиеНастройки()
    
     Возврат Отчет.КомпоновщикНастроек.ПолучитьНастройки();
     
КонецФункции


// Процедура пересоздает элементы формы для редактирования пользовательских настроек отчета
//
&НаСервере
Процедура ОбновитьЭлементыПользовательскихНастроек()
        
    СоздатьЭлементыФормыПользовательскихНастроек(,РежимОтображенияНастроекКомпоновкиДанных.БыстрыйДоступ);     
    
КонецПроцедуры

 

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

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

Для меня основными проблемами при создании этого механизма были:

- передача НастроекКомпоновкиДанных в новую форму отчета (решилась через использование параметра формы "Вариант")

- добавление отбора в пользовательские настройки (решилась через временный компоновщик данных)

- перерисовка элементов пользовательских настроек на сервере (ну не знал я что нужно использовать СоздатьЭлементыФормыПользовательскихНастроек и с трудом нашел на форумах, хотя возможно что я просто плохо искал))

 

В статье использовались материалы из:

https://its.1c.ru/db/metod8dev/content/3728/hdoc

//infostart.ru/1c/articles/542677/

//infostart.ru/public/165599/

 

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

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

Скачать файлы

Наименование Файл Версия Размер
Расшифровка СКД

.erf 15,51Kb
1
.erf 1.1.0 15,51Kb 1 Скачать

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

Оставьте свое сообщение

См. также

FormCodeGenerator Программная доработка форм. Часть 2 (Режим работы "Режим сравнения форм") на примере ERP 2.5 Промо

Практика программирования Адаптация типовых решений Прочие инструменты разработчика v8 1cv8.cf Абонемент ($m)

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

5 стартмани

21.12.2020    3908    19    huxuxuya    11    

Отчет с настройкой роли поля СКД со свойством период

Практика программирования Работа с интерфейсом v8 v8::СКД Платформа 1C v8.2 1cv8.cf УУ Абонемент ($m)

Отчёт демонстрирует правильную настройку роли СКД со свойством «Период», по которой рассчитывается остаток. Этот отчет тестировался на конфигурации Управление торговым предприятием для Казахстана, редакции 2.0.19.2. Может работать на любой конфигурации, если имеется регистр накопления «ТоварыНаСкладах».

1 стартмани

01.04.2021    544    0    softmaker    0    

Приводим в порядок запуск бизнес-процессов в Документообороте 2.1

Документоборот 2 Практика программирования Работа с интерфейсом 8.3.14 ДО Россия УУ Абонемент ($m)

Наводим порядок в отображении списка выбора при запуске бизнес-процессов.

1 стартмани

18.03.2021    664    0    sergey279    0    

Алгоритм и обработка для проведения розыгрыша среди анкет

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

Описанный алгоритм (и приложенная обработка) позволяют организовать проведение розыгрыша среди анкет практически на любой управляемой конфигурации и платформе 1С 8.

1 стартмани

12.03.2021    556    0    delta    2    

Вам нравятся запросы в 1С? Промо

Практика программирования Разработка v8 v8::Запросы 1cv8.cf Абонемент ($m)

Речь не только о том, что простейший запрос с "легальным" оформлением растянется на пол-экрана, речь еще обо всем, что нужно написать "в нагрузку" к тексту запроса. Все эти "Новый Запрос", "УстановитьПараметр" и последующие пляски с обработкой результата... Пора с этим заканчивать!

1 стартмани

03.07.2019    23595    6    m-rv    90    

Перетаскивание файлов в поле HTML (JavaScript)

Практика программирования Работа с интерфейсом v8 v8::УФ 1cv8.cf Абонемент ($m)

Может возникнуть необходимость добавлять файлы в систему под управлением 1С:Предприятие через достаточно распространенный и удобный механизм - перетаскивание (Drag & Drop). В данной публикации этот механизм реализован через поле HTML, с небольшим усовершенствованием на Java Script.

1 стартмани

04.03.2021    796    1    Andreyyy    3    

Форма выбора по произвольному запросу в управляемых формах

Практика программирования Работа с интерфейсом v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

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

1 стартмани

16.02.2021    914    0    blockcode    1    

Поиск строки XML-файла, содержащей значение, не соответствующее типу свойства XDTO пакета

Обмен через XML Обработки Практика программирования v8 8.3.14 1cv8.cf Россия Абонемент ($m)

Ведется обмен со сторонней системой через XML-файлы. XML-файлы содержат данные, соответствующие ПакетуXDTO, и загружаются с использованием ФабрикиXDTO. Сторонняя система не всегда корректно формирует XML-файл и при загрузке файла метод ПрочитатьXML() ФабрикиXDTO выбрасывает исключение. По описанию ошибки не всегда можно понять, какая именно секция содержит некорректное значение.

1 стартмани

25.01.2021    858    1    kasper076    0    

ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование) ЗНАЧЕНИЯ ("001", "Новый товар") Промо

Практика программирования v8 v8::Запросы 1cv8.cf Абонемент ($m)

Вас не обманывают ваши глаза, это запрос на изменение данных! И это работает без прямого доступа к БД, регистрации и смс.

1 стартмани

01.06.2018    32840    88    m-rv    58    

Тестовое задание на вакансию "Программист 1С" №4

Практика программирования v8 v8::УФ Абонемент ($m)

Достаточно сложное тестовое задание. Решение тестировалось на платформе 8.3.13.1513 (управляемые формы).

1 стартмани

13.01.2021    1392    1    Sungang    7    

Тестовое задание на вакансию "Программист 1С" №2

Практика программирования v8 v8::УФ Абонемент ($m)

Очередное решенное тестовое задание. Достаточно популярное - мне уже попадалось 3 раза. Тестировалось на платформе 8.3.13.1513. Управляемые формы.

1 стартмани

05.01.2021    2011    2    Sungang    9    

Прототип игры Морской бой

Практика программирования Игры v8 v8::УФ 1cv8.cf Абонемент ($m)

Решенное тестовое задание при приеме на работу в крупный франч. Всё сделано строго по ТЗ. Обработка включена в конфигурацию, и может запускаться как внутри, так и как внешняя. Для правильной работы потребуется опубликовать веб-сервис. Использованы механизмы веб-сервисов, XDTO, запросов, управляемых форм.

1 стартмани

28.12.2020    1199    1    Sungang    0    

Заполняем по шаблону (по умолчанию) Промо

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

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

1 стартмани

08.02.2018    30840    20    mvxyz    17    

QR код с основными "шаблонами"

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

Внешний отчет. Управляемая форма. Компонента 1С - внедрена в отчет. "Шаблоны" - для создания: адрес сайта, закладка браузера, визитная карточка, контактная информация, SMS / MMS / FaceTime, Wi-Fi подключение и прочие...

1 стартмани

27.12.2020    997    1    AnryMc    0    

Пример использования графиков на управляемых формах

Практика программирования Работа с интерфейсом v8 v8::УФ 1cv8.cf Абонемент ($m)

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

1 стартмани

25.12.2020    1222    1    sv_baranov    0    

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

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

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

1 стартмани

20.12.2020    1671    9    sashs1980    8    

Нечеткий поиск одним запросом Промо

Практика программирования v8 1cv8.cf Абонемент ($m)

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

1 стартмани

28.12.2015    30454    72    vasvl123    9    

Примеры синтеза речи и воспроизведения WAV файлов с помощью библиотеки Microsoft Speech Application Programming Interface (Speech API, SAPI)

Практика программирования 8.3.14 1cv8.cf Абонемент ($m)

Примеры синтеза речи и воспроизведения WAV файлов с помощью библиотеки  программ для Windows, позволяющей распознавать и(или) синтезировать голос. Может использоваться как учебный пример.

1 стартмани

20.11.2020    986    0    Hitcher    1    

Простой пример отчета на СКД. Программное формирование, расшифровка, работа с параметрами и отборами

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

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

1 стартмани

15.10.2020    3015    6    Stivens    10    

Шаблон заполнения чертежа размерами и характеристиками

Практика программирования v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Шаблон заполнения чертежа размерами и характеристиками на примере внешней обработки.

1 стартмани

08.10.2020    1471    1    Дон Кихот    2    

Работа с публикациями "Инфостарт" Промо

Практика программирования О сообществе WEB v8 УУ Абонемент ($m)

Работа с рублевыми публикациями на сайте "Инфостарт": ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.

1 стартмани

13.09.2018    24281    13    RocKeR_13    16    

Интерактивная справка по объектам 1С (подключаемое расширение)

Практика программирования Работа с интерфейсом v8 ERP2 Абонемент ($m)

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

3 стартмани

29.09.2020    9790    60    sapervodichka    43    

Предварительный просмотр PDF с помощью PDF.js на WebKit

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

Один из вариантов отображение pdf файла в поле формы вида "ПолеHTMLДокумента".

1 стартмани

25.09.2020    4038    15    samvani    15    

Генерация кода для автоматизированного тестирования

Инструментарий разработчика Практика программирования Сценарное тестирование v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Генератор кода - дополнение к оригиналу. Генерация данных на основе существующих экземпляров объектов системы. Генерация данных на основе метаданных конфигурации.

1 стартмани

28.07.2020    2681    8    rsamt    0    

Позиционирование в помещении с помощью нейросети по сигналу Wi-Fi. Интерактивная карта склада в 1С с показом позиции Промо

Инструментарий разработчика Практика программирования v8 Абонемент ($m)

Данная публикация содержит в себе редактор и интерактивную карту склада или иного помещения, на которой в реальном времени отображается позиция устройства, координаты которого вычисляются по уровням сигнала нескольких роутеров Wi-Fi. В статье и приложенным к ней разработкам предлагаются инструменты и методика для реализации вычисления точной геопозиции внутри помещений с помощью нейронной сети. Конфигурация написана на релизе 1С:Предприятие 8.3.12.1412, клиентское приложение имеет минимальный уровень совместимости SDK -16.

5 стартмани

09.08.2018    31281    28    informa1555    26    

Быстрое формирование наборов данных Объект схемы СКД

Практика программирования v8::СКД 1cv8.cf Абонемент ($m)

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

1 стартмани

05.07.2020    5375    5    Алексей Воробьев    16    

Пример программирования методом Конечных автоматов на базе написания парсера CSV

Практика программирования v8::УФ 1cv8.cf Россия Абонемент ($m)

Способ реализации программирования методом Конечного автомата на примере написания парсера CSV-файла с обработкой двойных кавычек и многострочным текстом в ячейках.

1 стартмани

17.06.2020    2084    0    Salimbek    3    

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

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

График изменений каких-либо величин во всем диапазоне и в области изменения, без точек.

1 стартмани

30.05.2020    2256    2    yc_2011    4    

1С: Предприятие + корпоративный чат, как наладить оперативные уведомления за 10 минут Промо

Практика программирования v8 Абонемент ($m)

Как сделать автоматические уведомления о разных событиях из 1С в корпоративный чат MyChat для сотрудников компании

1 стартмани

14.08.2016    50862    36    Demanoidos    60    

Метод восстановления битых ссылок в настройках СКД при консольно-конфигураторной разработке отчетов

Практика программирования Прочие инструменты разработчика v8 v8::СКД 1cv8.cf Абонемент ($m)

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

1 стартмани

30.04.2020    5444    0    zaxarovsky    4    

Жизнь в стиле RPG

Практика программирования v8::УФ Абонемент ($m)

Работа выполнялась на платформе 8.3.16.1148. Пока мой город на карантине, появилось чуть больше свободного времени (процентов на 15) - решил попробовать сделать для себя в 1С то, что давно хотел. У меня на телефоне есть приложение "RPG in real life", оно мне помогает в мотивации важных дел, но кажется немного неудобным. Решил сделать что-то похожее в 1С, с моими основными "хотелками". Данная разработка позволяет получать миссии, за выполнение которых начисляются баллы, влияющие на повышение уровней своих навыков.

1 стартмани

08.04.2020    3161    0    ErrorEd88    5    

Задачка: Список всех документов за заданный период, используя СКД

Практика программирования v8 v8::СКД 1cv8.cf Абонемент ($m)

Вывести все документы за заданный период, используя СКД.

2 стартмани

11.03.2020    3355    5    MaxxiMiliSan    9    

Работа с данными выбора Промо

Практика программирования Работа с интерфейсом v8 Россия Абонемент ($m)

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

1 стартмани

17.07.2018    56334    21    kalyaka    16    

Получение курса валюты за период с помощью СКД

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

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

1 стартмани

04.02.2020    3431    1    KawaNoNeko    2    

Маршрутизация Яндекс-карт в 1С (обычные и управляемые формы)

Практика программирования WEB v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка показывает пример построения маршрута между двумя точками.

3 стартмани

03.02.2020    3911    6    Denr83    0    

Программное создание письма EML с вложениями

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

Внешняя обработка, которая создает письмо EML с вложениями и сохраняет на диск.

1 стартмани

10.01.2020    3376    2    info1i    0    

Быстрое определение интервалов в запросе Промо

Практика программирования v8 Абонемент ($m)

В статье описывается новый метод определения интервалов между данными различных записей в запросе. В отличие от общеизвестного метода, время работы предлагаемого метода зависит от объема данных ЛИНЕЙНО. Это обеспечивает ему значительный выигрыш по быстродействию на больших объемах данных. В качестве иллюстрации возможностей метода приведен отчет, показывающий гистограмму распределения времени между продажами.

1 стартмани

01.10.2015    55568    35    ildarovich    41    

Обмен данными с Android через USB

Практика программирования Мобильная разработка v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка с примером обмена данными конфигурации 1С через USB. Без установки Web сервера и настройки WiFi.

1 стартмани

23.12.2019    5220    4    asdfgcom    2    

Преобразование объекта Отбор компоновки данных в Запрос

Практика программирования Прочие инструменты разработчика v8::УФ v8::Запросы v8::СКД 1cv8.cf Абонемент ($m)

Преобразует объект Отбор компоновки данных в объект Запрос (с заполнением текста и параметров).

1 стартмани

20.12.2019    4705    6    okon-teh    2    

Многоуровневые списки выбора с оформлением элементов

Практика программирования Работа с интерфейсом v8 v8::УФ 1cv8.cf Абонемент ($m)

Данная статья - попытка решить один маленький кусочек большой проблемы платформы 1С, а именно - бедные и невыразительные пользовательские интерфейсы. Поскольку 1С в режиме управляемого приложения позволяет задействовать веб-клиент, то хочется реализовывать интерфейсы как у взрослых веб-приложений - красивые, дружелюбные для пользователя и, желательно, с положительным UX. Возможно, кто-то со мной не согласится и скажет, что учетные системы должны быть строгие и линейные. Но мы все знаем, что 1С - это уже не только про бухгалтерию. Небольшое отступление для разработчиков, работающих с типовыми конфигурациями. Я не знаю, использует ли фирма 1С что-то похожее в своих разработках. Если да, то данная статья навряд ли будет вам полезна.

1 стартмани

17.12.2019    10175    2    azhilichev    5    

Хранение файлов в томах на диске (для УПП 1.3) Промо

Практика программирования v8 УПП1 Абонемент ($m)

Доработка типовой УПП 1.3 в плане хранения присоединенных файлов вне базы данных

2 стартмани

05.06.2016    61756    11    wowik    32    

Пример сохранения печатной формы в WORD (обычные и управляемые формы)

Печатные формы документов Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

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

1 стартмани

03.12.2019    4274    6    Denr83    0    

Конвейер проверки качества кода

Инструментарий разработчика Практика программирования Математика и алгоритмы v8 1cv8.cf Абонемент ($m)

Jenkinsfile для выполнения проверки качества кода. Собирает информацию с АПК, EDT и BSL-LS. Сопоставляет ошибки с гит-репозиторием, выгруженным ГитКонвертором. Отправляет в Сонар.

3 стартмани

04.09.2019    29911    26    Stepa86    46    

Обновление данных в ячейках таблицы формы на управляемых формах

Практика программирования Работа с интерфейсом Разработка v8 v8::УФ 1cv8.cf Абонемент ($m)

На очередном проекте решал задачу по расчету значений колонок в табличных полях формы. Задача казалась достаточно простой. Однако возникла необходимость работать не только с реквизитами формы типа «ТаблицаЗначений», но и с типом «ДеревоЗначений». Релиз платформы 8.3.13.1644

1 стартмани

15.08.2019    5687    0    BraunAlex    2    

СКД. Использование встроенного макета, разделителя страниц Промо

Практика программирования v8::СКД 1cv8.cf Абонемент ($m)

Пример работы с макетом СКД для начинающих программистов. За основу взят справочник подразделений, который есть в большинстве конфигураций. Показано, как вывести заголовок, детальные записи, подвал группировки и общий подвал. Приведен пример вставки разделителя страниц. Отчет можно использовать в любой конфигурации 1С: 8.

1 стартмани

31.03.2017    16734    18    Vin_Tik    0    

Удобный выбор из таблицы/дерева в УФ

Практика программирования Работа с интерфейсом Разработка v8 v8::УФ 1cv8.cf Абонемент ($m)

Выбор из таблицы значений или дерева значений в выпадающем списке рядом с полем ввода - УФ, быстро и просто!

1 стартмани

12.08.2019    15410    8    Yashazz    18    

Отбор на управляемой форме из списка значений

Практика программирования Работа с интерфейсом Разработка v8 v8::УФ 1cv8.cf Абонемент ($m)

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

1 стартмани

09.08.2019    24033    25    nagaitseff    6    

Запрет запуска более одного сеанса на рабочем месте (Розница 2.2)

Практика программирования Разработка v8 v8::УФ Розница Россия Абонемент ($m)

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

2 стартмани

04.08.2019    5809    3    aximo    6    

Печатная форма, сделанная как расширение конфигурации для БП 3.0. Новые возможности БСП Промо

Практика программирования Универсальные печатные формы v8 БП3.0 Абонемент ($m)

Печатные формы на внешних обработках скоро канут в лету. На смену им приходят ПФ, реализованные в виде расширений конфигурации. Не нашел на сайте примеров таких расширений. Привожу пример подобного расширения для БП 3.0.

1 стартмани

06.12.2017    29355    56    kwazi    6    

Универсальная печать штрихкодов Windows, Linux, x86, x64. Управляемые формы. Веб-клиент. Пример

Разработка внешних компонент Практика программирования v8::УФ 1cv8.cf Абонемент ($m)

Универсальная печать штрихкодов Windows, Linux, x86, x64. Управляемые формы. Веб-клиент. Сделана на основе компонент печати штрихкодов фирмы 1с под платформу 1с windows32, windowsx64, linux32, linux64. Типы штрихкодов для генерации - EAN8, EAN13, EAN128, Code39, Code128, Code16k, PDF417, Standart (Industrial) 2 of 5, Interleaved 2 of 5, Расширение Code39, Code93, ITF14, RSS14, CodaBar, EAN13 AddOn 2, EAN13 AddOn 5. Сделана как пример для внедрения. Наиболее оптимальный вариант для веб-клиента. Пример сделан в виде cf файла. Работоспособность проверялась на ERP 2.4.8.84, ЗУП 3.1.9.187, Розница 2.2.11.30, УНФ 1.6.17.128, БГУ 2.0.61.28, ЗКГУ 3.1.9.187, КА 2.4.7.127, УТ 11.4.7.128, БП 3.0.69.35, Документооборот КОРП ПРОФ 2.1.13.28.

4 стартмани

17.07.2019    7057    29    ivanchai    7    

Генерация QR кодов через API Google (обычные и управляемые формы)

Инструментарий разработчика Практика программирования WEB Разработка v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка абсолютно автономна, не привязана ни к версии БСП, ни к виду конфигурации. Может работать как для типовых, так и для самописных конфигураций. Содержит обычную и управляемую формы, поэтому запустится в любом режиме. Единственное, что нужно для ее работы - это подключение к интернету, так как для генерации QR кодов используется сервис Google.

1 стартмани

22.06.2019    6689    7    lisrws    5