Пауза на платформе 1С, очень нативная и очень бережная к ресурсам

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

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

Пауза Pause Способы программирования механизмы

Иногда необходимо установить паузу при выполнении программных алгоритмов. К сожалению, платформа 1С не имеет решения на уровне глобального контекста, поэтому приходится разработчику придумывать "костыли и велосипеды". Решения, которые "общеприняты": либо используют внешние библиотеки (VBS, WS, ping и пр.), либо нещадно используют ресурсы (бесконечный цикл и т.п.). Хочу предложить еще одно решение, основанное на механизме управляемых блокировок платформы 1С. Итак, приступим:

Для реализации будем использовать:

1. Механизм управляемых блокировок

2. Механизм фоновых заданий и их метод: "ОжидатьЗавершенияВыполнения"

Смысл данной реализации схематично можно представить следующим образом:

Теперь к реализации:

1. Решение состоит из общего модуля и регистра сведений. (+ тестовая обработка для демонстрации работы паузы)

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

3. Процедуры и функции

Процедура ВыполнитьПаузу_вСекундах(ВремяПуаузыСек,Причина="")

Параметры: 

     ВремяПаузыСек - Число - Количество секунд, на которое необходимо установить паузу

     Причина - Строка - произвольный текст, будут установлен в запись регистра сведений

Текст с пояснениями:

Процедура ВыполнитьПаузу_ВСекундах(ВремяПаузыСек,Причина="") Экспорт

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

Процедура сис_Пауза(НомерСеанса,ВремяОкончанияПаузы)

Параметры: 

     НомерСеанса - Число - Номер сеанса, который ставится на паузу

     ВремяОкончанияПаузы- Дата в UTC- Когда должна закончится пауза (когда пауза больше времени ожидания на снятие блокировки)

Текст с пояснениями:

Процедура сис_Пауза(НомерСеанса,ВремяОкончанияПаузы) Экспорт
	МЗ = РегистрыСведений.apПауза.СоздатьМенеджерЗаписи();
	МЗ.НомерСеанса = НомерСеанса;
	
	Пока ТекущаяУниверсальнаяДата() < ВремяОкончанияПаузы Цикл // Для пуаз больше 20 сек (Таймаута ожидания запроса по умолчанию)
		Попытка;
			МЗ.Прочитать(); // попытка чтения заблокированной запись - здесь и возникает ожидание паузы
		Исключение;
		КонецПопытки;
	КонецЦикла;
	
КонецПроцедуры

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

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

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

Функция РежимСовместимости_8_13_ИВыше() Экспорт
	ТекРежим = Метаданные.РежимСовместимости;
	
	Если ТекРежим = Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать тогда
	 	пСис = Новый СистемнаяИнформация;
		пВерсия = пСис.ВерсияПриложения;
		пВерсия = СтрЗаменить(пВерсия,".",Символы.ПС);
		пПерваяВерсия = Число(СтрПолучитьСтроку(пВерсия,1));
		пВтораяВерсия = Число(СтрПолучитьСтроку(пВерсия,2));
		пТретьяВерсия = Число(СтрПолучитьСтроку(пВерсия,3));
	Иначе
		пВерсия	= СтрЗаменить(СтрЗаменить(Строка(ТекРежим),"Версия",""),"_",Символы.ПС);
		пПерваяВерсия = Число(СтрПолучитьСтроку(пВерсия,1));
		пВтораяВерсия = Число(СтрПолучитьСтроку(пВерсия,2));
		пТретьяВерсия = Число(СтрПолучитьСтроку(пВерсия,3));
		
	КонецЕсли;	
		
	Если пТретьяВерсия <= 12 И пВтораяВерсия <= 3 И пПерваяВерсия = 8 Тогда
		Возврат Ложь;
	Иначе
		Возврат Истина;
	КонецЕсли;
КонецФункции

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

Эти 30 мил.сек. как раз затраты на реализацию и обслуживание выполнения паузы.

Текст модуля формы обработки Теста паузы

&НаСервере
Процедура ВстатьНаПаузуНаСервере()
	пТекДата = ТекущаяДата();
	мНачало = ТекущаяУниверсальнаяДатаВМиллисекундах();
		apПауза.ВыполнитьПаузу_ВСекундах(ПаузавСекундах,"Тестовая пауза");
	Результаты.ДобавитьСтроку(Формат(пТекДата,"ДФ='dd.MM.yy HH:mm:ss'") + " пауза на " + Строка(ПаузавСекундах) +" сек. выполнена за " + Формат(ТекущаяУниверсальнаяДатаВМиллисекундах()-мНачало,"ЧГ=0") + " мил.сек.");
	
КонецПроцедуры

&НаКлиенте
Процедура ВстатьНаПаузу(Команда)
	ВстатьНаПаузуНаСервере();
КонецПроцедуры

Теперь в любом месте конфигурации можно написать "apПауза.ВыполнитьПаузу_ВСекундах(5);"

 

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

На картинке видно ожидание на управляемой блокировке, что фоновое задание, ждет, когда Тонкий клиент "отпустит" ресурс.

... Протестировано на нагрузке в 50 и более сеансов.

тестировалось на платформах 8.3.12, 8.3.15 без режима совместимости и в режиме совместимости 8.3.12

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

Дано: система расчета показателей Apdex в режиме условно реального времени. По алгоритму для расчета индекса APDEX, необходимо знать время выполнения последних 100 таких же ключевых операций. Одна и та же ключевая операция может быть выполнена одновременно несколькими пользователями.

Решение: 

1. Есть API, которая регистрирует выполнение ключевой операции в регистре сведений,

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

3. Анализ по ключевой операции заключается в следующем:

   Получение последних 100 записей из регистра сведений по данной ключевой операции

   Создание таблицы значений с этими операциями

   замещение новыми операциями, если есть (получение новых операций)

   Подсчет итога по таблице

   Установка паузы в 3 секунды и далее получение новых операций, без запроса к старым

   Если нового замера по ключевой операции не поступало в течении 30 минут, то фоновое задание завершается

 

Такая реализация позволила убрать постоянный запрос к регистру с историей операций (более 10 млн. записей)

...

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

...

А зачем вам нужна пауза в 1С?

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

Наименование Файл Версия Размер
Конфигурация (cf):
.cf 13,91Kb
25.11.19
0
.cf 1.0.0.4 13,91Kb Скачать
Расширение конфигурации (cfe)
.cfe 11,49Kb
25.11.19
0
.cfe 1.0.0.4 11,49Kb Скачать

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

Комментарии
Избранное Подписка Сортировка: Древо
1. json 2552 25.11.19 09:21 Сейчас в теме
Как-то очень уж сложно.
Я использовал вот такой вариант

Без регистров, сборщиков пауз и т.д.

Процедура Пауза(Секунд) Экспорт
    
    ТекущийСеансИнформационнойБазы = ПолучитьТекущийСеансИнформационнойБазы();
    ФоновоеЗадание = ТекущийСеансИнформационнойБазы.ПолучитьФоновоеЗадание();
    
    Если ФоновоеЗадание = Неопределено Тогда
        Параметры = Новый Массив;
        Параметры.Добавить(Секунд);
        ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбщегоНазначенияСервер.Пауза", Параметры); // Тут указываем имя общего модуля, в котором лежит данная процедура
    КонецЕсли;
        
    Попытка
        ФоновоеЗадание.ОжидатьЗавершения(Секунд);
    Исключение
        Возврат;
    КонецПопытки;
    
КонецПроцедуры
Показать
MaZaHacKa_13; DrAku1a; tormozit; chebser; awk; mickey.1cx; Sibars; herfis; Xershi; +9 Ответить
2. Xershi 799 25.11.19 09:26 Сейчас в теме
(1) единсвенный минус бсп. В самописке надо этот модуль перенести.
3. json 2552 25.11.19 09:27 Сейчас в теме
(2) создай свой модуль, добавь в него единственную процедуру из поста выше.
Это все что требуется.
Зачем БСП?
4. Xershi 799 25.11.19 09:30 Сейчас в теме
(3) ну не модуль, а процедуру.
20. PLAstic 224 25.11.19 11:28 Сейчас в теме
(4) Я открою тайну, что любая самописка должна строиться на базе избранных подсистем БСП. Т.е. по инструкции отмечаете галками те подсистемы, что нужны, и переносите их в чистую конфу.
Иначе, если вы пишете с нуля, это изобретение целого велосипедного парка.
23. Xershi 799 25.11.19 12:00 Сейчас в теме
(20) если конфа узкоспециализированная и БСП там не нужен, то зачем его тащить? Максимум 1-5 функций нужны.
28. PLAstic 224 25.11.19 12:29 Сейчас в теме
(23) В узкоспециализированной конфе наверняка есть пользователи ИБ, есть отчёты и прочее другое, что есть среди подсистем БСП. Не вижу смысла с нуля писать то же самое и более низкого качества.
30. Xershi 799 25.11.19 12:50 Сейчас в теме
(28) ничего подобного там нет, т.к. не нужно.
vsesam80; +1 Ответить
37. vsesam80 26.11.19 07:38 Сейчас в теме
(28)Подтверждаю. Если писать к примеру конфу для учета продаж сетевиков или там учет для автомойки, БСП там на фиг не нужен.
Отчет на СКД 5 минут делается, всего их пара нужна. К чему слона тащить в багажник?
38. PLAstic 224 26.11.19 09:37 Сейчас в теме
(37) Отлично, наконец-то есть примеры задач. Итак, если в конфе хоть один отчёт есть - ВариантыОтчетов. Они позволят управлять пользовательскими вариантами и шарить им их для других пользователей. Опять же, авторизация и разделение прав - УправлениеДоступом. Контроль заполнения документов, получение реквизита объекта на клиенте - БазоваяФункциональность. Выгружать данные в другие системы - ОбменДанными. Печатные формы документов - ПодключаемыеКоманды, Печать. Что-то переделали, надо массово изменить объекты - ГрупповоеИзменениеОбъектов. Какие движения делает документ - ОтчетОДвиженияхДокумента. Структура подчинённости - СтруктураПодчиненности. Накосячили при загрузке данных, задвоили элементы справочника - ПоискИУдалениеДублей. Отправить отчёт боссу на почту - РаботаСПочтовымиСообщениями.

Вы врядли сможете привести пример конфы, где не нужна БСП. Скорее всего, вы просто плохо её знаете, поэтому не понимаете, как она облегчает разработку и поддержку. И разработка с ней - это, конечно, быстрее, чем с нуля колхозить.
40. herfis 290 26.11.19 10:51 Сейчас в теме
(37) Плохой пример. Для любой учетной конфы уже имеет смысл ставить ряд подсистем БСП. Тут я с (38) полностью согласен.
С (23) я готов согласиться только в случае чего-то слишком уж специализированного. Типа микросервиса на 1С который выполняет очень узкую сервисную задачу.
41. json 2552 26.11.19 11:20 Сейчас в теме
(37) любую конфу, если она не одноразовая, потребуется дорабатывать.
Сегодня у тебя пара отчетов, через год - уже пара десятков.

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

Но подобный подход свойственен для новичков, а также для тех, кто не дружит с БСП.
62. gaglo 27.11.19 18:37 Сейчас в теме
(41) А главное, что это "больше кода" написал не ты, а некий автор самописки и два-три его последователя, а твоих предшественника; и ты смотришь на ЭТО и думаешь: "И теперь мне ещё всё на БСП переводить?" И не то чтобы БСП тут не нужна, но... неподъёмно как-то...
5. SlavaKron 25.11.19 10:00 Сейчас в теме
(1) Возможно ли это сделать асинхронно с вызовом процедуры текущего сеанса по окончании таймаута?
8. Sibars 278 25.11.19 10:32 Сейчас в теме
(5)
Не совсем понял вопроса. В описанном случае, после ожидания паузы, процедура дальше начнет выполнять следующую строчку кода
32. SlavaKron 25.11.19 13:23 Сейчас в теме
(8) (11) В приведенном коде ожидание происходит в текущем сеансе, а не в сеансе фонового задания. Потому ожидание вешает систему на время паузы. Если делать асинхронно, ожидание следует делать в сеансе фонового задания и тогда код должен быть таким:
Процедура Пауза(Секунд) Экспорт
    
    ТекущийСеансИнформационнойБазы = ПолучитьТекущийСеансИнформационнойБазы();
    ФоновоеЗадание = ТекущийСеансИнформационнойБазы.ПолучитьФоновоеЗадание();
    
    Если ФоновоеЗадание = Неопределено Тогда
        Параметры = Новый Массив;
        Параметры.Добавить(Секунд);
        ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбщегоНазначенияСервер.Пауза", Параметры); // Тут указываем имя общего модуля, в котором лежит данная процедура
	Иначе
		Попытка
			ФоновоеЗадание.ОжидатьЗавершения(Секунд);
		Исключение
		КонецПопытки;
	КонецЕсли;
	
КонецПроцедуры
Показать
Но в таком случае мы не сможем передать управление на сервер текущего сеанса после ожидания. Проще говоря, интересно бы видеть решение типа ПодключитьОбработчикОжидания для сервера.
35. herfis 290 25.11.19 13:36 Сейчас в теме
(32)
В приведенном коде ожидание происходит в текущем сеансе, а не в сеансе фонового задания. Потому ожидание вешает систему на время паузы.

Эта задача и решалась. Пауза в текущем потоке, но которая не грузит проц. Стандартная пауза.
36. Sibars 278 25.11.19 14:34 Сейчас в теме
(32)я понял мысль. К сожалению, пока такой реализации нет, так как с сервера вызвать клиент не получится(
9. Sibars 278 25.11.19 10:39 Сейчас в теме
(1)
ОбщегоНазначенияСервер


Коммент удалил, что б не вводить людей в заблуждение.
....
Все верно, можно и так!
11. herfis 290 25.11.19 10:40 Сейчас в теме
(9) Ты не понял. Это и есть текст этой процедуры :) Ее необходимо разместить в общем модуле.
Хитрость в ожидании фоновым заданием завершения выполнения самого себя.
13. Sibars 278 25.11.19 10:44 Сейчас в теме
(11)
понял. Это и есть текст этой процедуры :) Ее необходимо разместить в общем модуле.
Хитрость в ожидани

Я понял. Но пока идет ожидание. фоновое задание молотит бесконечный цикл. вот этим кодом:

Процедура Пауза(Время) Экспорт

	ВремяЗавершения = ТекущаяДата() + Время;
	Пока ТекущаяДата() < ВремяЗавершения Цикл
	КонецЦикла;

КонецПроцедуры
15. herfis 290 25.11.19 10:48 Сейчас в теме
(13) И где ты в (1) увидел такой код? Ты таки не понял.
В (1) как раз та самая Пауза() которую надо разместить в "ОбщегоНазначенияСервер"
Там же прямо в комментарии написано: "Тут указываем имя общего модуля, в котором лежит данная процедура"
17. Sibars 278 25.11.19 11:01 Сейчас в теме
(15)
Разобрался. Ты прав.
Мой коммент (9) - чушь. Там клиентская пауза бестолковая.
Единственное, что заметил, чуть утекает память у rphost метров на 5 для каждой паузы.
Проц не грузит.
Решение элегантно)
39. tormozit 5667 26.11.19 10:41 Сейчас в теме
6. savostin.alex 66 25.11.19 10:02 Сейчас в теме
Пауза в 3 секунды:

Попытка
	Для Счетчик = 1 По 3 Цикл
	ПолучитьCOMОбъект("winmgmts:").ExecNotificationQuery("Sel ect * fr om __instancemodificationevent where TargetInstance isa 'Win32_UTCTime'").NextEvent();
	КонецЦикла;
Исключение
КонецПопытки;
7. Sibars 278 25.11.19 10:31 Сейчас в теме
(6)
Эта функция использует Com объект, будет работать, но не везде (Например в linux не "взлетит")
10. herfis 290 25.11.19 10:39 Сейчас в теме
Кстати, хороший вопрос. Кому и зачем какие паузы нужны? Мне нужны были только в пределах полусекунды, при работе с торговым оборудованием. Обходился бесконечным циклом. А три секунды и выше зачем могут понадобиться?
12. Sibars 278 25.11.19 10:42 Сейчас в теме
(10)
Такая пауза нужна, когда необходимо "подождать" событие, при этом "не потерять" значения собранных переменных. В описанном случае, что б заново не вытаскивать значения из БД.
14. herfis 290 25.11.19 10:47 Сейчас в теме
(12) Подождать какое событие?
16. Sibars 278 25.11.19 10:56 Сейчас в теме
(14)
Когда "прилетит" новый замер по api, например
18. herfis 290 25.11.19 11:04 Сейчас в теме
(16) Когда надо с какой-то периодичностью получать данные, но при этом накапливать в памяти порции? Ну, такое... Достаточно узкий случай, как по мне.
(17) Странно. Т.е. ты говоришь о том, что после двухсот пауз будет "съеден" лишний гиг?
19. Sibars 278 25.11.19 11:06 Сейчас в теме
(18)
Странно. Т.е. ты говоришь о том, что после двухсот пауз будет "съеден" лишний гиг?

Глубоко не тестировал, накинул обработку, посмотрел состояние rphost. увидел увеличение памяти, после выполнения память освободилась.
21. json 2552 25.11.19 11:35 Сейчас в теме
(10) у меня был такой случай:
есть сторонний сервис, который работает по схеме, что по первому запросу, он тебе возвращает ответ, что твой запрос взят в разработку.
а потом ты к нему обращаешься и запрашиваешь результат выполнения своего запроса.

вот тогда ты делаешь первый запрос.
потом ставишь паузу.
потом обращаешься повторно, чтобы получить результат обработки первого запроса
если пришел ответ, что запрос еще обрабатывается, то ставишь паузу и еще раз обращаешься.
herfis; user774630; Sibars; +3 1 Ответить
22. ImHunter 165 25.11.19 11:56 Сейчас в теме
(21) Мда, рецепт из категории "вредных советов".
Сервис потормозит дольше обычного - и что, потеряем данные? Ну или, в лучшем случае, затормозим обработку других тикетов.
24. Sibars 278 25.11.19 12:06 Сейчас в теме
(22)
Реализуется программно. Все что не получили ответа в течении n-времени, заново инициируем подключение и проверку.
25. ImHunter 165 25.11.19 12:12 Сейчас в теме
(24) Нафиг, я в такие игры не играю. Пишу в регистр тикеты/статусы, потом обрабатываю регистр другим потоком.
В итоге, имеем хорошо разделенную логику, имеем хорошую масштабируемость.
mivari; acanta; +2 Ответить
26. acanta 72 25.11.19 12:15 Сейчас в теме
(25) вы изменяете ранее записанные строки в регистре сведений (статус, время выполнения)? Или удаляете после обработки?
27. ImHunter 165 25.11.19 12:21 Сейчас в теме
(26) На последнем решении - было сразу и то, и другое. Менял статусы - это сразу.
И работало задание очистки, которое совсем старую историю вычищало.

Но это уже совсем другая история;) То бишь, оффтоп.
29. json 2552 25.11.19 12:32 Сейчас в теме
(22) задача понята неправильно - вывод сделан неверный.

Сервис не тормозит, а обрабатывает запросы асинхронно.

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

Сервис государственный, если что

И в чем вредность, давай-ка разъясни
31. ImHunter 165 25.11.19 12:58 Сейчас в теме
(29) Вот сервис работает асинхронно. Пусть он даже "государственный, если что".
Ты-то почему тогда синхронно с ним работаешь?

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

Вообще, твое решение с паузами все же имеет место. Но только в одном случае - если этого ждет пользователь, вот прямо здесь и сейчас.
Для пакетной работы - лучше сразу писать по-нормальному.
mivari; PLAstic; nomad_irk; +3 Ответить
33. json 2552 25.11.19 13:28 Сейчас в теме
(31)
Ты-то почему тогда синхронно с ним работаешь?


Да потому что если ты будешь с ним работать асинхронно, то тебе придется еще написать вызов процедуры по обработке ответа через какое-то время, передать туда параметры. При этом тебе еще нужно позаботиться о том, чтобы та процедура по обработке ответа выполнилась не раньше, чем закончит выполняться процедура по отправке тикета.
И тут у тебя начинают нарастать детали.

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

Если тикеты отправляем массово, то такой способ может не подойти, согласен.
Но для штучных отправок - метод подходящий
42. PLAstic 224 26.11.19 13:55 Сейчас в теме
(33) Для любого количества нужно делать без тормозов в интерфейсе. Собственно, как формирование отчётов в БСП - пока крутится кругляш, ты продолжаешь работать, а как сформировался отчёт - вывелся на экран в фоне. Когда будет время, тогда и глянешь на него.
Похоже, проблема только в незнании, насколько этот процесс прост. Кстати, формирование первичного запроса, его отправка и старт фонового задания - это выполняется в один поток, т.ч. "чтобы та процедура по обработке ответа выполнилась не раньше, чем закончит выполняться процедура по отправке тикета" не актуально.
50. json 2552 26.11.19 14:46 Сейчас в теме
(42) тут же никто тебя не заставляет крутить бесконечно.

В таких случаях можно использовать другую схему:
Ты отправляешь тикет.
Один-два-три-десять раз его проверяешь - в зависимости от конкретной задачи.
Если ответ не получил - то отваливаешься.
Значит ответ на запрос придет через асинхронный поток.

Такой подход позволит тебе в некоторых частных случаях обрабатывать запрос значительно быстрее.

Если у тебя, например, стоит два асинхронных потока, из которых один отправляет тикеты, а второй загружает по ним ответы, то тебе придется дольше ждать.
А если еще в общем потоке много тикетов висят, то тебе нужно подождать пока вся очередь прогрузится.
А при синхронном варианте ты можешь быстро обработать нужный тебе тикет.
34. herfis 290 25.11.19 13:30 Сейчас в теме
(31) Ты так говоришь, как будто синхронность это что-то плохое. Асинхронность не бесплатна. Не стоит ее тащить туда, где можно без нее обойтись.
Нафига нам прорва масштабируемости, если мы точно знаем, что она не потребуется? Ну вот нафига? Очередь, воркеры, промежуточные этапы, машина состояний? Backpressure? Ради несколько раз в день дернуть "ручку"?
43. PLAstic 224 26.11.19 13:56 Сейчас в теме
(34) Ты вообще про 1С или жаву? В 1С достаточно запустить фоновое задание. Всё.
Нет тормозов в интерфейсе, пользователь продолжает работать, а не ждёт, пока "программа отвиснет".
Рекомендую почитать "стандарты и методику разработки".
https://its.1c.ru/db/metod8dev#content:1528:hdoc
https://its.1c.ru/db/edtdoc#content:10047:1
https://its.1c.ru/db/v8315doc#bookmark:dev:TI000002036
44. herfis 290 26.11.19 14:09 Сейчас в теме
(43) Я про что угодно. А здесь речь вообще не про интерфейс.
45. PLAstic 224 26.11.19 14:12 Сейчас в теме
(44) Тогда почитай ссылки, там подробнее описаны несколько строк кода, которые тебе понадобятся вместо всей этой мишуры.
46. herfis 290 26.11.19 14:18 Сейчас в теме
(45) Ты просто немного не понял, о чем речь. Проехали.
47. PLAstic 224 26.11.19 14:27 Сейчас в теме
(46) Я спросил жену (QA lead). :) Все эти термины тут не уместны.
48. herfis 290 26.11.19 14:33 Сейчас в теме
(47) Backpressure в контексте обсуждения было лишним :) Остальное в тему.
Речь про задачу (21). С чего ты вообще взял, что инициатор события пользователь/клиент?
Нафига тут асинхронность, если можно спокойно это обработать в одном потоке?
63. savostin.alex 66 24.12.19 13:19 Сейчас в теме
(10)Я делал ЭДО (Контур), одна организация продает второй, КЭП обеих организаций у сотрудника есть, нужно отправить и подписать УПД с двух сторон - продавца и покупателя. Часто подписание от покупателя не срабатывает, т.к. УПД до него дойти не успел (загруженность серверов Контур?), вставил паузу - стало значительно лучше, но все равно изредка, да "стреляет".
49. herfis 290 26.11.19 14:35 Сейчас в теме
ImHunter ведь дальше начал про регистры сведений (очереди) и обработку этой очереди отдельным потоком (воркером).
51. ImHunter 165 26.11.19 15:57 Сейчас в теме
(49) Даже если говорить не про обработку очереди, а про обработку тычков пользователя, то асинхронность тоже без особых наворотов делается.
ПодключитьОбработчикОжидания(...) + ОписаниеОповещения([для хранения каких-то переменных и задания метода обработки]) + ВыполнитьОбработкуОповещения(...) - ну и вот, этим получаем асинхронное поведение.
52. herfis 290 27.11.19 10:13 Сейчас в теме
(51) Сабж изначально про классическую паузу в текущем потоке. Иногда это самый адекватный вариант решения проблемы. Вообще не понимаю, почему вдруг про пользовательский интерфейс начали говорить. Ясен пень, пользовательский интерфейс должен быть отзывчив по максимуму.
Меня просто покоробила подача, что мол "асинхронность - наше все и всегда". Нет, не все и не всегда. Вечно народ из крайности в крайности кидает.
В частности для задачи (21), если по регламенту опрашивается какой-то сервис с асинхронным протоколом и коротким предсказуемым временем отклика, то гораздо проще использовать паузу, чем городить очередь. Если нет особых требований по пропускной способности и масштабируемости ессно.
А если и после паузы не срослось - то можно кидать эксепшн, настроив для регламента количество повторов при ошибках.
lmnlmn; json; tormozit; +3 Ответить
53. ImHunter 165 27.11.19 10:58 Сейчас в теме
(52) Синхронность в виде Пауз не приветствуется разработчиками платформы (я бы сказал, категорически не приветствуется). Это мы видим и по отсутствию некой штатной процедуры Пауза(...), и по развитию асинхронных методов.
Поэтому крайностей тут и нет. Есть либо использование методологически правильных решений, либо разные самопальные реализации Пауз.
54. json 2552 27.11.19 11:54 Сейчас в теме
(53) ну так ты приведи ссылку, где сказано, что не приветствуется.

Ты же не разработчик платформы, чтобы так заявлять.

Это просто твои предположения и не более того.
55. ImHunter 165 27.11.19 12:00 Сейчас в теме
(54) Я ведь привел свои соображения. Или ты ожидаешь, что в ИТС будет написано - не используйте решение Пауза на платформе 1С, очень нативная и очень бережная к ресурсам ?;)
56. lmnlmn 58 27.11.19 12:01 Сейчас в теме
(53) Дело не только в синхронности/асинхронности. Код превращается в дикую слабопонятную размазню при реализации асинхронности "методологически верно". Вот это больше всего парит, а не отзывчивость интерфейса и прочее.
57. ImHunter 165 27.11.19 12:08 Сейчас в теме
(56) Да, на самом деле - дело не только в синхронности/асинхронности. Еще дело в (не)умении написать методологически верно.
59. lmnlmn 58 27.11.19 12:20 Сейчас в теме
(57) На самом деле дело еще в умении применять критическое мышление, в том числе и к рекомендациям 1С а не воспринимать их как истину в последней инстанции. Еще полезно высовывать нос за рамки конфигуратора для расширения кругозора.
60. ImHunter 165 27.11.19 12:24 Сейчас в теме
(59) Высовывание носа за рамки конфигуратора - это явно не про эту тему. Она лишь в рамках конфигуратора и осуществлена.
61. lmnlmn 58 27.11.19 12:33 Сейчас в теме
(60)Как раз про эту. Чтоб понять что все может быть проще и лучше, но не в 1С, к сожалению. То что приходится вытворять, в том числе и в этой теме - дичь полная, но выбора нет. Хотя в силах разработчиков платформы его предоставить.
58. herfis 290 27.11.19 12:15 Сейчас в теме
(53) Ссылки на "авторитетов" без аргументации даже при наличии официальной позиции по этому поводу - слабый довод. А свои аргументы я привел.
(57) Писать асинхронно я умею. И даже других учил :) И было бы хорошо, чтобы разработчики платформы настолько категорически приветствовали асинхронность, что реализовали побольше "сахара" в языке на эту тему (как в других языках/фреймворках).
Оставьте свое сообщение

См. также

Краткое руководство по внесению изменений в конфигурацию

Статья Программист Нет файла v8 1cv8.cf Абонемент ($m) Практика программирования

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

1 стартмани

13.01.2020    5157    12    sapervodichka    34       

Перенос данных УПП 1.3 => ERP 2 (ЕРП) / УТ 11 / КА 2.х (обработка переноса документов, остатков и справочников из "1С:Управление производственным предприятием, ред. 1.3" в ERP / УТ 11 / КА 2). Обновлен до УПП 1.3.130.х, КА 2.4.11.х и ERP 2.4.11.х! Промо

Обработка позволяет переносить из УПП 1.3 в ERP 2 документы за выбранный период и остатки. Типовая обработка от фирмы 1С документы не переносит. Также исправлены ошибки типовой обработки. При выходе новых релизов обновление высылается бесплатно в течение года. Разработка будет полезна фирмам-франчайзи, которые периодически выполняют такой перенос данных для заказчиков. Вы можете один раз приобрести обработку переноса, и потом бесплатно получать обновления при выходе новых релизов конфигураций 1С.

29700 руб.

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

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

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

1 стартмани

07.10.2019    15218    4    HostHost    24       

Описание формата внутреннего представления данных 1С в контексте обмена данными

Статья Программист Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Абонемент ($m) Практика программирования Внешние источники данных Разработка

Фирма 1С не рекомендует использовать внутреннее представление данных для любых целей, которые отличны от обмена с 1С:Предприятием 7.7. Но сама возможность заглянуть на "внутреннюю кухню" платформы с помощью функций ЗначениеВСтрокуВнутр(), ЗначениеВФайл(), ЗначениеИзСтрокиВнутр() и ЗначениеИзФайла(), дала возможность сообществу программистов 1С разработать новые приемы разработки и анализа. Так, именно на использовании внутреннего представления был построен алгоритм "быстрого массива", который позволяет практически мгновенно создать массив в памяти на основании строки с разделителями. С помощью разбора внутреннего представления можно "на лету" программным кодом выполнить анализ обычной формы и даже сделать редактор графической схемы. Во внутреннем формате сохраняют свои данные между сеансами различные популярные внешние обработки. А еще это возможность сделать быстрый обмен с внешними системами.

1 стартмани

06.09.2019    8319    7    Dementor    27       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

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

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

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

3 стартмани

04.09.2019    9680    16    Stepa86    37       

INFOSTART MEETUP Krasnodar. 14 февраля 2020 г. Промо

Краснодар станет первым в 2020 году местом, где пройдет региональная встреча IT-специалистов сообщества Инфостарт. Тема мероприятия - управление и технологии автоматизации учета на платформе "1С: Предприятие". Стоимость участия - 5000 рублей. Цена действительна до 26.12.2019.

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

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

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

1 стартмани

03.07.2019    12703    1    m-rv    79       

1С:Ассемблер. Немного летнего веселья!

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Практика программирования Разработка

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

1 стартмани

21.06.2019    17951    55    Evil Beaver    116       

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Простые примеры сложных отчетов на СКД

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

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

1 стартмани

12.06.2019    17938    16    Hatson    22       

Безопасная работа с транзакциями во встроенном языке

Статья Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования

Разбираемся с опасностями использования транзакций во встроенном языке 1С. Познаем ошибку "В данной транзакции уже происходили ошибки". Учимся защищаться от них.

1 стартмани

25.03.2019    19759    8    tormozit    44       

Управление ИТ-проектами. Модуль 2: продвинутый онлайн-курс по классическим методам управления проектами. Вебинары проходят с 12 марта по 11 июня 2020 года. Промо

Продвинутый онлайн-курс по классическому управлению ИТ-проектами позволит слушателям освоить инструменты из PMBoK® и 1С:Технологии корпоративного внедрения и научиться их применять для проектов любого масштаба. Курс включает в себя 12 вебинаров и 12 видеолекции, разбор кейсов и рекомендации экспертов по проектам слушателей. Ведущая курса - Мария Темчина.

от 13000 рублей

HTML в новой версии 8.3.14 на примере 3-х JavaScript библиотек: AmCharts, HighCharts, DHTMLX

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Универсальные обработки Практика программирования Разработка

Тестируем возможности HTML в новой версии 8.3.14 платформы на примере 3-х JavaScript библиотек: AmCharts, HighCharts, DHTMLX.

1 стартмани

29.01.2019    17831    70    Synoecium    40       

Сдача регламентированной отчетности из программ 1С Промо

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

от 1500 руб.

Отладка сложных отчетов на СКД

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

Расширение для отладки сложных отчетов на СКД (в т.ч. для собираемых программно "на лету") и быстрого перехода к отладке таких отчетов в консоли запросов и отчетов на СКД.

1 стартмани

28.12.2018    17320    63    maxx    58       

Реализация простого http-сервиса "Просмотр карточки номенклатуры(товара) в браузере"

Статья Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования

Практический пример реализации простого http-сервиса средствами 1С Предприятие 8.3. Обеспечивает просмотр списка товаров и просмотр данных товара в браузере.

1 стартмани

07.12.2018    15912    12    dmitry1975    31       

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Использование подсистемы БСП "Заполнение объектов"

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

Применение механизмов БСП для добавления новых команд заполнения к формам различных объектов. Использование расширений конфигурации для доработки. Шаблоны для реализации собственных команд заполнения.

1 стартмани

23.11.2018    16748    10    ids79    23       

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

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

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

1 стартмани

13.09.2018    11807    12    RocKeR_13    16       

Открыто голосование за доклады на INFOSTART MEETUP Krasnodar Промо

Выбирайте и голосуйте за самые интересные доклады, лучшие из них попадут в окончательную программу митапа. Голосование продлится до 30 января 2020 года.

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

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

Продолжение статьи «HTTP Сервисы: Путь к своему сервису. Часть 2». В предыдущих частях мы использовали только Get, в этой части поговорим о других методах и длительных операциях.

1 стартмани

27.08.2018    20491    32    dsdred    13       

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

Инструменты и обработки Программист Бизнес-аналитик Приложение (apk) v8 Windows Абонемент ($m) Инструментарий разработчика Практика программирования

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

5 стартмани

09.08.2018    18562    23    informa1555    26       

Базовый курс по разработке мобильных 1C-приложений для Android-устройств. Третий поток. Онлайн-интенсив с 11 февраля по 05 марта 2020 г. Промо

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

7500 рублей

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

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

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

1 стартмани

17.07.2018    27089    16    kalyaka    16       

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

Статья Системный администратор Программист Расширение (cfe) v8 1cv8.cf Абонемент ($m) Практика программирования WEB

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

1 стартмани

15.07.2018    48249    19    dsdred    24       

Базовый курс по управлению ИТ-проектами. Курс проходит с 26 февраля по 22 апреля 2020 года. Промо

Отличительная черта курса - органичное сочетание трех вещей: 1.Теория проектного управления (PMI®+Agile Alliance+Российские ГОСТ+Методологии от 1С); 2. Опыт внедрения продуктов 1С (опыт франчайзи и успешных компаний + тренды Infostart Event и Agile Days); 3. Разбор реальных проблем и рекомендации экспертов по проектам слушателей. Мы будем фиксироваться на тех инструментах, которые реально оказываются полезными в практике руководителей проектов внедрения. Ведущая курса - Мария Темчина.

от 11000 рублей

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

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

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

1 стартмани

01.06.2018    21920    86    m-rv    57       

Онлайн-курс "Подготовка к экзамену 1С:Эксперт и 1С:Профессионал по технологическим вопросам" с 7 по 24 апреля 2020 г. Промо

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

16450 рублей

БСП: Дополнительная обработка (Регламенты), примеры от простого к сложному

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Практика программирования БСП (Библиотека стандартных подсистем)

Очень много попадается странных решений, которые можно решить через БСП:Дополнительные отчеты и обработки. Я бы вообще БСП из-за этой подсистемы переименовал в «Большое Спасибо Программистам». Поработаем с подсистемой в части написания регламентных заданий.

1 стартмани

10.05.2018    31912    30    dsdred    36       

Как выполнить отчет на СКД через COM и получить данные отчета?

Статья Программист Архив с данными v8 УПП1 Россия Windows Абонемент ($m) Практика программирования

Для чего это нужно. Например, нужно в одной базе получить какой-либо показатель из другой базы. Этот показатель вычисляется в каком-либо сложном отчете, который написан на СКД. Можно, конечно, "скопипастить" текст запроса из другой базы, немного подправить его и выполнять в том же COM подключении. Но с этим теряется гибкость: если отчет изменился, то нужно помнить о том, что где-то есть его "немного модифицированная" копия. В статье будет рассмотрен пример получения данных из базы ЗУП.

2 стартмани

08.05.2018    20037    10    wowik    3       

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Работа со схемой запроса

Статья Программист Конфигурация (md, cf) v8 v8::Запросы Абонемент ($m) Инструментарий разработчика Практика программирования

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

1 стартмани

24.04.2018    32078    77    kalyaka    34       

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

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

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

1 стартмани

08.02.2018    19730    20    mvxyz    17