"Выполнятор" – как я породил монстра и лишился сна!

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

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

HTTP-сервис API JSON http web apache сервис Линк PAPI Pretty Безопасность Терминатор Троянский конь Выполнить Вычислить https

Реальная история о разработке, которой не горжусь…

Стал замечать подобные решения давно, но у меня не было особого желания вступать в дискуссию, да и времени особо нет. С другой стороны, вижу, как безжалостно отдают чертежи бомб и с этим что-то надо делать. Затевал написать данную статью 2-3 года назад и вот выдался свободный денек, поэтому каюсь в содеянном… Надеюсь моя история кому-то послужит уроком.

О чем пойдет речь? 

Речь пойдет о связке «Универсальных решений по обмену на http\web-сервисах» и методах «Выполнить\Вычислить». Хотя использование данных методов в файловых вариантах считаю еще большим злом (камень в огород конвертации данных).

Проблема на самом деле не только с интеграцией… Видел статью, к примеру по созданию «Универсального регламента» на доп. обработках, где из анонса было понятно, что редактирование кода выведено на форму, а код естественно хранится в реквизите ХранилищеНастроек(даже из названия реквизита понятно, что он затевался для других целей), а выполнение происходит в методе Выполнить(). Или выкладываются обработки\расширения, дающие возможность пользователям освоить программирование в клиентской части…

Сразу скажу я не против того, что эти методы есть и понимаю, что они позволяют делать. Использую сам, но...

1] Я за то, чтобы подобные решения были созданы как минимум после прочтения вот этой статьи: https://its.1c.ru/db/v8std#content:770:hdoc

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

2] Автор должен предупредить о возможных последствиях использования его решения!

Немного истории.

В начале 2017 года устроился в фирму, где очень долго экономили на IT, но поняли, что пора что-то менять, ибо движение пошло не вперед, а назад. Первым делом они решили спрыгнуть с франча(на то было масса причин) и набрать свой отдел 1С программистов и отдел администраторов. До этого момента я успел поучаствовать в двух проектах (УПП+Документооборот и ERP+Документооборот) и присоединился к команде замыкающим. Это была команда «Мечты» (я про отдел программистов имею ввиду), я рад что мне удалось поработать с такими людьми, хоть и всего полтора года. Был выполнен просто сумасшедший объем работы, был обмен опыта, в общем команда «Мечты». Потом вся команда разбежалась и в этом году удалось опять собрать часть этой команды на новый проект, я выхожу завтра, предвкушаю (Но это уже начало другой истории).

Какие были проблемы в 2017 году?

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

-От франча достались ХАОС и Разруха… Все базы были сильно перепилены, самая популярная из них была УТ 10. В УТку я добавил универсальный http-сервис (на тот момент я его считал универсальным) и периодически в специально подготовленный модуль добавлял новые методы (принцип работы изложен в статьях из цикла «HTTP Сервисы: Путь к своему сервису»). Коллеги тоже стали использовать данный транспорт.

-Популярность УТ привела к эффекту «Макдональдса».

То и дело веберу или еще кому, был нужен новый http-сервис, а конфигуратор кем-то занят.

Мне пришла в голову мысль «Спасение утопающего дело рук утопающего»…

Реализация или как я изобрел динамит.

Первый вариант «Выполнятора» был накидан минут за 5-10, и я кайфовал, через неделю был добавлен «Выполнятор» второй версии, и я был доволен как удав. Вот оно! Легкое решение, облегчающее жизнь.

Я еще не знал, что через месяц проснусь по средь ночи с мыслями: -Что же ты натворил!!!

Так же как Нобель изобрел динамит и возненавидел свое изобретение, так и я отношусь к «Выполнятору»

Принцип работы.

Собственно, все просто как автомат Калашникова…

Посылаешь код и параметры в определенной структуре JSON и на стороне базы с данной структурой работает Выполнить()…

Плюсы есть, но минусов в разы больше!

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

Шаблон http-сервиса: /{ВхДанные}

Метод: POST

 
 Код обработчика метода:
Функция HTTPServPOST(Запрос)
	//Тут получаем имя метода, в нашем случае "Completer" или "CompleterParam"
	перИмяМетода  = Запрос.ПараметрыURL["ВхДанные"];
	
	//Тут получаем код для выполнения и параметры
	ЗапросОтКлиентаJSON = Запрос.ПолучитьТелоКакСтроку();	
	
	СтруктураОтвет = HTTPСервисыPOST.ОбработкаВходящихДанныхHTTP(ЗапросОтКлиентаJSON,перИмяМетода);
	
	//Готовим ответ
	Ответ = Новый HTTPСервисОтвет(СтруктураОтвет.КодОтвета);

	Если СтруктураОтвет.Отработало Тогда 
	    Ответ.УстановитьТелоИзСтроки(СтруктураОтвет.ДанныеОтвета,КодировкаТекста.UTF8);
	Иначе
	    Ответ.УстановитьТелоИзСтроки(СтруктураОтвет.ТекстОшибки,КодировкаТекста.UTF8);
	КонецЕсли;	
		
	Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
	Возврат Ответ;
КонецФункции

 Чтение запроса и возврат ответа

 
 Код модуля HTTPСервисыPOST:
Функция ОбработкаВходящихДанныхHTTP(ЗапросОтКлиентаJSON,перИмяМетода) Экспорт
	СтруктураОтвет = Новый Структура("ДанныеОтвета,Отработало,ТекстОшибки,КодОтвета","",Истина,"",200);
	
	Если ВРег(перИмяМетода) = ВРег("Completer") Тогда	
		
		ЯВыполнятор(СтруктураОтвет,ЗапросОтКлиентаJSON);
		
	ИначеЕсли ВРег(перИмяМетода) = ВРег("CompleterParam") Тогда  
        
		ЯВыполнятор_Параметры(СтруктураОтвет,ЗапросОтКлиентаJSON);
		

//... еще методы

	Иначе
		
		СтруктураОтвет.КодОтвета 	= 404;
		СтруктураОтвет.ТекстОшибки	= "Неизвестный метод!!!";
		СтруктураОтвет.Отработало	= Ложь;
		СтруктураОтвет.ДанныеОтвета = "";
		
	КонецЕсли;	
		
	Возврат СтруктураОтвет;
	
КонецФункции	

//Сервис Выполнятор предназначен для получения данных, необходимо подавать код всего модуля.
Процедура ЯВыполнятор(СтруктураОтвет,ЗапросОтКлиентаJSON)
	Попытка
		
		//ЗапросОтКлиентаJSON = ЗапросОтКлиентаJSON + "
		//| ЗаполнитьСтруктуруОтвета(СтруктураОтвет,200,"""",Истина,СтрокаJSON);";	
		Выполнить(ЗапросОтКлиентаJSON);
		
	Исключение
		
		перТекстОшибки = "Ошибка: "+ОписаниеОшибки();
		ЗаполнитьСтруктуруОтвета(СтруктураОтвет,404,перТекстОшибки,Ложь,"X");
		
	КонецПопытки;
КонецПроцедуры	

//ЯВыполнятор_Параметры
Процедура ЯВыполнятор_Параметры(СтруктураОтвет,ЗапросОтКлиентаJSON)
    //Читаем JSON
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(ЗапросОтКлиентаJSON);
    Попытка
        ВХ_Структура = ПрочитатьJSON(ЧтениеJSON);
    Исключение
        ЗаполнитьСтруктуруОтвета(СтруктураОтвет,404,"Неудалось получить данные! Возможно не в JSON передаете!",Ложь,"X");
        Возврат;
    КонецПопытки;

    Если ТипЗнч(ВХ_Структура) = Тип("Структура") Тогда 
        Если не ВХ_Структура.Свойство("ТекстКоманды") Тогда 
            ЗаполнитьСтруктуруОтвета(СтруктураОтвет,404,"В структуре отсутствует свойство ""ТекстКоманды""!",Ложь,"X");
            Возврат;    
        КонецЕсли;    
        
        Если не ВХ_Структура.Свойство("вхПараметры") Тогда 
            вхПараметры = Новый Структура;
        Иначе
            вхПараметры = ВХ_Структура.вхПараметры;
        КонецЕсли;
    Иначе
        ЗаполнитьСтруктуруОтвета(СтруктураОтвет,404,"Передана не структура!",Ложь,"X");
        Возврат;    
    КонецЕсли;    
    
    
    Попытка
        
        Выполнить(ВХ_Структура.ТекстКоманды);
        
    Исключение
        
        перТекстОшибки = "Ошибка: "+ОписаниеОшибки();
        ЗаполнитьСтруктуруОтвета(СтруктураОтвет,404,перТекстОшибки,Ложь,"X");
        
    КонецПопытки;
КонецПроцедуры

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

 Вот так я лишился сна!

Аргументы за и против.

+ Легко встроить и использовать.

+ Можно дорабатывать, не трогая головную конфигурацию.

- Постоянно пересылаешь весь код и параметры при работе с методом.

- Меняя, добавляя код в куче мест, не трогая главную конфигурацию, создается риск замены кода не везде где нужно.

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

- Определенные сложности с оптимизацией процессов.

- Невозможность отладки такого кода
- Невозможность замера производительности такого кода
- Невозможность определять свои методы

- Вы вдруг уволитесь, переедете или не дай бог… Обслуживать будет кто-то другой. Поставьте себя на его место! Представьте, как ему потом разгребать ваш костыль.

- Есть вариант, что кто-то узнает про ваше решение и будет использовать в свое благо. Можно получать данные или передавать бомбы в виде неоптимального кода. А если у вас еще и не защищенное соединение, тогда посмотрите мультик «Трое из Простоквашино» про подмену посылки.

Можно еще нарисовать минусов, с плюсами сложнее…

Итог.

Дом нужно строить на нормальном фундаменте, а не на песке! Можно сделать универсальное решение и спать спокойно, но путь, который предполагает возить код для выполнения через транспорт – может испортить Вам сон!

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

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. YPermitin 8351 10.02.20 09:49 Сейчас в теме
(0) Весь мир борется с выполнением произвольного кода :)
Но не мы! :)))

P.S. Это шутка, конечно. Но проблема выполнения произвольного кода правда очень актуальна.
За труды спасибо.
dsdred; Natain14; +2 Ответить
2. for_sale 856 10.02.20 10:00 Сейчас в теме
- Вы вдруг уволитесь, переедете или не дай бог… Обслуживать будет кто-то другой. Поставьте себя на его место! Представьте, как ему потом разгребать ваш костыль.

Это про любой код нужно думать, не только про такой.
Sla; 3vs; dsdred; +3 Ответить
3. tormozit 5801 10.02.20 10:00 Сейчас в теме
Еще в минусы стоит добавить врожденные спутники метода Выполнить(Код)
- невозможность отладки такого кода
- невозможность замера производительности такого кода
- невозможность определять свои методы
Drivingblind; АлександрЯрославичъ; Natain14; Rustig; Evg-Lylyk; +5 Ответить
7. dsdred 1406 10.02.20 12:14 Сейчас в теме
(3) пытался эти вещи уместить -> Определенные сложности с оптимизацией процессов.

Но Вы правы. С Вашего позволения добавлю к минусам статьи.
4. AlX0id 10.02.20 10:58 Сейчас в теме
- Вы вдруг уволитесь, переедете или не дай бог… Обслуживать будет кто-то другой. Поставьте себя на его место! Представьте, как ему потом разгребать ваш костыль.

Это минус не выполнятора, а отсутствия документации к чему-либо.
lefthander; dsdred; +2 Ответить
5. pm74 167 10.02.20 11:08 Сейчас в теме
(0)
Плюсы есть, но минусов в разы больше!

не пойму я вашей рефлексии по этому поводу
по мне так все удобно
забавно но сегодня как раз залил предрелиз своего "выполнятора" на https://github.com/pm74/_37583

функционал http вовсю используется в проде ( примеры есть на скринах
в https://infostart.ru/public/728511/)
8. dsdred 1406 10.02.20 12:19 Сейчас в теме
(5)Петр к Вашему решению данная статья не относится.
На сколько я помню у Вас был отдельный справочник алгоритмов.

Я против возможности добавлять алгоритмы всеми в подряд и против того чтобы код гоняли транспортом.
10. pm74 167 10.02.20 12:29 Сейчас в теме
(8)
справочник алгоритмов

я думал у вас нечто подобное ,
разве нет ?
тогда сорри не разобрался в теме
13. dsdred 1406 10.02.20 13:06 Сейчас в теме
(10)нет нет, я про запущенные случаи ))
6. Rustig 1418 10.02.20 11:30 Сейчас в теме
для служебных целей точно пойдет, пользователям про такой механизм необязательно знать
9. dsdred 1406 10.02.20 12:20 Сейчас в теме
(6)Вот люблю я те конторы где собственники(пользователи) говорят у нас с IT все отлично.
Посмотришь и поседеешь.
11. Rustig 1418 10.02.20 12:42 Сейчас в теме
(9) раскройте смысл ответа :) не понял вас :) ...
12. dsdred 1406 10.02.20 13:05 Сейчас в теме
(11)Вот допустим я создал такой механизм. Никому не поведал и ушел.
Пользователь об этом механизме не знает, а он есть. Как суслик в ДМБ.
И все довольны. Но дыра в безопасности есть и ее можно использовать.

Был у меня случай, когда я пришел в малый бизнес где собственники говорили, что у них в плане IT все норм, их два аутсорсера обслуживали. Им нужен человек по 1С и администрированием заниматься не придется.
Я провел аудит и выяснилось, что они сидят на пороховой бочке. Они занимались скоропортом, из вне к ним зайти не может только ленивый... Времени переделать на нормально нет. В итоге взвесив все за и против я ушел даже денег не взял за то время, что отработал и рассказывать не стал. Смысла рассказывать не было, так как не поверили бы, с аутсорсом они работали дольше чем со мной. Старый друг лучше новых двух.
Пару лет назад искал данную контору ради интереса, вроде больше нет их, наверное отучались.
14. Rustig 1418 10.02.20 13:19 Сейчас в теме
(12) ясно,
я другой смысл вложил в свой комментарий - вы по своему его поняли :)
создайте константу, которую всегда можно отключить, включайте доступ по веб-серверу - когда вам нужно - для служебных целей такой подход подойдет - в любом случае занят конфигуратор разработчиками или пользователи работают в базе - конфигурацию не обновить. Поэтому я увидел в вашем решении механизм пригодный для служебных целей. Запустили ряд процессов, отключили доступ к веб-серверу, отключились сами.
Так безопасно.
SirAlexIT; dsdred; +2 Ответить
15. alexsey777 13.02.20 11:13 Сейчас в теме
Основной минус сего механизма - гонять код через сервисы. Так реально запутаешься...

Я писал специально универсальный механизм алгоритмов, чтобы была возможность более гибко расширять функционал без обновлений конфы.
Но я делал специальный справочник с алгоритмами. Который доступен только под админскими правами.
Тут главное в крайность не впадать и не использовать это всегда и везде.
16. dsdred 1406 16.02.20 19:08 Сейчас в теме
(15)
Я писал специально универсальный механизм алгоритмов, чтобы была возможность более гибко расширять функционал без обновлений конфы.
Но я делал специальный справочник с алгоритмами. Который доступен только под админскими правами.

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

См. также

3 онлайн-курса по 1С-программированию: обмен данными, расчетные задачи и бухгалтерские задачи с 12 мая по 8 июля 2020 г. Промо

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

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

22.04.2020    3223    23    infostart    2    

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

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

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

27.01.2020    15153    0    ids79    26    

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

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

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

15.01.2020    15731    0    John_d    22    

Последовательности событий. Шпаргалка

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

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

30.12.2019    10842    0    kuzyara    33    

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

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

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

10.12.2016    34196    0    unichkin    45    

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

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

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

02.12.2019    12771    0    YPermitin    72    

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

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

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

01.10.2019    25472    0    Yashazz    45    

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

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

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

06.09.2019    34923    0    rpgshnik    59    

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

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

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

15.10.2018    26195    0    tormozit    100    

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

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

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

05.09.2019    37086    0    ids79    52    

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

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

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

05.09.2019    21719    0    YPermitin    24    

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

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

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

03.09.2019    21866    0    YPermitin    80    

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

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

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

20.09.2012    73728    0    tormozit    129    

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

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

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

17.08.2019    25789    0    ids79    16    

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

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

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

08.08.2019    56322    0    ids79    37    

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

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

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

02.08.2019    26482    0    avalakh    21    

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

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

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

11.07.2007    44788    0    tormozit    38    

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

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

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

31.07.2019    17256    0    json    12    

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

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

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

26.07.2019    42724    0    ids79    11    

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

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

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

17.07.2019    28632    0    ids79    27    

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

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

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

10.09.2017    40570    0    tormozit    72    

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

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

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

09.07.2019    21513    0    YPermitin    13    

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

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

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

04.07.2019    16485    0    SeiOkami    50    

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

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

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

02.07.2019    34100    0    ids79    10    

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

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

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

25.04.2019    14179    0    m-rv    2    

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

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

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

25.06.2019    42396    0    ids79    20    

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

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

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

11.06.2019    21452    0    dmurk    144    

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

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

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

16.05.2019    35458    0    YPermitin    30    

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

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

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

16.04.2019    17812    0    m-rv    17    

Выполнение внешней обработки в фоновом задании

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

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    24294    0    Eret1k    23    

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

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

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

07.04.2019    29397    0    ellavs    126    

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

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

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

28.03.2019    23069    0    ellavs    86    

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

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

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

01.06.2018    27443    0    m-rv    21    

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

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

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

14.03.2019    26528    0    YPermitin    53    

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

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

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

01.03.2019    30970    0    Смешной 1С    27    

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

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

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

26.02.2019    18405    0    Vladimir Litvinenko    27    

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

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

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

05.12.2017    25736    0    itriot11    34    

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

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

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

03.02.2019    31528    0    ids79    9    

EnterpriseData – часть 2. Процесс выгрузки данных

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

Основные этапы выгрузки данных через ED, обработчики событий выгрузки, правила обработки данных, правила конвертации объектов, конвертация свойств первого и второго этапов, процедуры БСП, используемые при выгрузке данных, структура «КомпонентыОбмена».

26.12.2018    22889    0    ids79    31    

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

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

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

27.01.2016    71118    0    Serginio    108    

Новый подход к обмену данными EnterpriseData

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

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

14.12.2018    35171    0    ids79    72    

EnterpriseData - пример доработки правил конвертации без использования КД 3.0 в расширении конфигурации

Практика программирования Обмен через XML v8 v8::УФ БП3.0 УТ11 Россия Бесплатно (free)

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

16.11.2018    31854    0    ids79    32    

Программное заполнение пользовательских параметров и отборов СКД

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

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

13.11.2018    37607    0    Unk92    21    

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

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

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

10.11.2018    30625    0    ids79    40    

Произвольный код в фоновом режиме

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

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

03.09.2018    23987    0    nikita0832    42    

Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C

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

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

23.08.2018    34874    0    Rain88    46    

Работаем с дополнительными реквизитами на форме

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

Пара полезных процедур для работы с дополнительными реквизитами на форме. Далее в статье: 1. Как называются дополнительные реквизиты на форме и в какой момент они появляются на форме? 2. Как проверить до записи корректность заполнения пользователем дополнительного реквизита? 3. Как заполнить значение дополнительного реквизита по другому событию и обновить данные на форме? 4. Как расположить дополнительный реквизит в указанном месте на форме?

15.07.2018    29464    0    papche    37    

Тестер: частые вопросы Промо

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

Ошибкам бой - тесты норма жизни!

25.07.2018    26259    0    grumagargler    26    

HTTP Сервисы: Путь к своему сервису. Часть 1

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

Уже много было написано про http-сервисы, но то и дело всплывают «Новые» статьи по обмену между базами V8 по COM, что «Немножко» удивляет. Решил внести свои 5 копеек, поработаем с http-сервисом.

1 стартмани

15.07.2018    68946    23    dsdred    24    

Повышаем эффективность разработки правил обмена

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

Как повысить скорость и качество разработки правил обмена? Как вести групповую разработку правил обмена? Как облегчить сопровождение правил обмена после передачи в эксплуатацию? Об этом и многом другом вы можете узнать из этой статьи.

25.06.2018    26153    0    olegtymko    47    

Введение в механизм представлений в ЗУП ред. 3

Практика программирования v8 v8::СПР ЗУП3.x Бесплатно (free)

В нашей организации на первом же телефонном собеседовании на должность разработчика по ЗУП ред. 3 вас обязательно спросят о том, что такое "Представления".

04.06.2018    34167    0    xrrg    82    

Строим графы средствами 1С (без GraphViz)

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

Множество статей на Инфостарте описывают, как работать с компонентой GraphViz, чтобы построить ориентированный граф. Но практически нет материалов, как работать с такими графами средствами 1С. Сегодня я расскажу, как красиво строить графы с минимальным пересечением. Нам этот метод пригодился для отрисовки алгоритмов в БИТ.Финансе, т.к. типовой механизм не устраивал. Еще это может быть полезно для визуализации различных зависимостей: расчета себестоимости, графы аффилированности компаний и т.д. Надеюсь, эта статья поможет сделать мир 1С красивее и гармоничней:) Итак, поехали...

23.05.2018    22891    0    slozhenikin_com    20