Асинхронное программирование в 1с77 без внешних компонент. Обратные вызовы.

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

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

Обратные вызовы call back 1с77 асинхронность асинхронные вызовы

Пример построения программного кода для достижения функционала обратных вызовов (call back) во внешних обработках исключительно штатными средствами. Тестировалось на платформе 1с77 релиз 027. Конфигурация значения не имеет.

Принято считать, что асинхронные вызовы в программном коде – это что-то новое, модное, молодежное. Ряд публикаций на этом ресурсе освещает новый подход к программированию: как правильно открывать форму и получать от нее ответ, как правильно взаимодействовать с пользователем, будь то вопрос или форма выбора файла. Специально для этого в платформу 8х были добавлены новые методы и объекты. А что же с 1с77? Есть ли там эта асинхронность? А если и есть, то в каких задачах она используется?

На самом деле асинхронные вызовы были и в платформе 1с77. Тривиальные задачи: обработка подбора, обработка выбора значения, обработка внешнего события, обработка ожидания. Это все асинхронные вызовы. Основным отличием этих методов является то, что после совершения асинхронного вызова функции выполнение программного кода не останавливается. А результат работы этой функции нужно отлавливать в другой процедуре (как правило предопределенной), которая в свою очередь вызывается тем объектом, к которому мы обратились асинхронным вызовом.

Зачем это все надо? Давайте рассмотрим обработку подбора. Из формы документа мы запускаем форму подбора. Когда на форме подбора мы совершаем выбор элемента, то в форме документа выполняется процедура ОбработкаПодбора. То есть мы смогли вызвать процедуру другой формы, хотя у 1с версии 77 есть ограничение, что из других модулей можно вызывать только экспортные процедуры глобального модуля. При помощи обратного вызова ОбработкаПодбора мы смогли обойти это органичение. А что если мы хотим описать свои процедуры обратного вызова? Что если у нас есть основная форма обработки, в которой собран ключевой функционал бэкэнда нашей разработки. А для взаимодействия с пользователем мы хотим написать отдельные формы плагины, по одной на каждую задачу. Каким образом использовать функционал основной обработки находясь в контексте дополнительной формы? 1с77 не позволяет в обработку добавить дополнительные формы и модуля объекта у внешней обработки тоже нет. Мы хотим обойти и это ограничение. Разделить функциональность нашего проекта на отдельные обработки. По 1-й на каждую задачу. И здесь нам поможет принцип обратного вызова.

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

  1. Установить 1С++, написать классы и не морочить уважаемым людям голову)
  2. Написать внешнюю компоненту, которая генерирует ВнешнееСобытие() и ловить результат Обработчиком внешнего события.
  3. Использовать обработку предопределенного события формы, путем воздействия на эту форму.

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

Использовать мы будем событие закрытия формы и предопределенную процедуру ПриЗакрытии(). Чтобы форма не закрывалась при этом, мы установим СтатусВозврата(0). Для обмена информацией между вызовами будем использовать переменную модуля формы основной обработки кэш. В этой переменной хранится общая для всего проекта структура-список значений, наподобие глРасшифровка, которая используется при работе с отчетами в типовых конфигурациях. Прелесть объекта «СписокЗначений» в том, что через переменную всегда передается ссылка на единожды созданный объект, где бы мы не обратились к ней, а также в том, что можно устанавливать и получать значения по текстовому ключу, как в структуре.

Для обращения к переменной кэш на основной форме напишем функцию:

Функция кэш()
	Если ТипЗначенияСтр(кэш) = "" Тогда
		кэш = СоздатьОбъект("СписокЗначений");
	КонецЕсли;
	Возврат кэш;
КонецФункции

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

Процедура для открытия дополнительной формы:

Функция ОткрытьДополнительнуюФорму(имяФормы)
	имяФайлаФормы = имяФормы+".ert";
	путьКФорме = РасположениеОбработки()+"\"+имяФайлаФормы;
	Если ФС.СуществуетФайл(путьКФорме) = 0 Тогда
		Сообщить("Отсутствует файл: """+имяФайлаФормы+""" в каталоге поставки обработки","!");
		Возврат 0;
	КонецЕсли; 
	кэш().Установить("КонтекстОсновной",Контекст);
	пар = СоздатьОбъект("СписокЗначений");
	пар.Установить("КэшОсновной",кэш());	
	Возврат ОткрытьФорму("Отчет",пар,путьКФорме);	
КонецФункции

Функция РасположениеОбработки() возвращает путь к папке где лежит текущая форма. Вот ее код:

Функция РасположениеОбработки()
	расположение = кэш().Получить("РасположениеОбработки");
	Если ТипЗначенияСтр(расположение) = "" Тогда
		РасположениеФайла(расположение);
		кэш().Установить("РасположениеОбработки",расположение);
	КонецЕсли;
	Возврат расположение;
КонецФункции

Для обращения к кэшу в дополнительной форме используется функция

Функция кэш()
	Возврат Форма.Параметр.Получить("КэшОсновной");
КонецФункции

Для корректного описания запроса от одной формы к другой нам нужен список-структура. Я его называю «ПараметрЗакрытия». В нем указывается имя функции которую мы хотим запустить, контекст текущей формы, куда мы хотим передать ответ, данные которые должна обрабатывать эта функция.

Код функции которая возвращает параметр закрытия (в основной и в дополнительной форме):

Функция ПараметрЗакрытия(устПараметр = "")
	парамЗакрытия = кэш().Получить("ПараметрЗакрытия");
	Если ПустоеЗначение(устПараметр) = 0 Тогда
		парамЗакрытия = устПараметр;
		парамЗакрытия.Установить("Обработан",0);
		кэш().Установить("ПараметрЗакрытия",парамЗакрытия);
	КонецЕсли;
	Возврат парамЗакрытия;
КонецФункции

Через параметр «устПараметр» передается списокзначений. При создании параметра закрытия в нем устанавливается признак «Обработан» = 0, который по факту срабатывания процедуры «ПриЗакрытии()» устанавливается сразу в 1. Это предотвращает ситуацию, когда из-за ошибки форму обработки невозможно закрыть.

Обработка параметра закрытия выполняется в предопределенной процедуре «ПриЗакрытии()». Ниже приведен код этой процедуры (одинаковый для любой формы)

Процедура ПриЗакрытии()
	Если ТипЗначенияСтр(ПараметрЗакрытия()) = "СписокЗначений" Тогда
		Если Число(ПараметрЗакрытия().Получить("Обработан")) = 1 Тогда
			//Для случая когда из-за ошибки параметр закрытия не удален из кэша 
			Возврат;
		КонецЕсли;		
		СтатусВозврата(0);
		имяФункции = ПараметрЗакрытия().Получить("Функция");
		ПараметрЗакрытия().Установить("Обработан",1);
		результатКолБэк = Число(Шаблон("["+имяФункции+"]"));       
		Если Лев(имяФункции,13) = "КБ_Результат(" Тогда
			Возврат;
		КонецЕсли;		
		контВызывающего = ПараметрЗакрытия().Получить("КонтФормы");		
		Если ТипЗначенияСтр(контВызывающего) = "ГрупповойКонтекст" Тогда
			//Вызов колбэка вызывающей формы для передачи результата
			ПараметрЗакрытия().Установить("Обработан",0);
			ПараметрЗакрытия().Установить("Функция","КБ_Результат("+результатКолБэк+")");
			ПараметрЗакрытия().Установить("Операция",имяФункции);
			ПараметрЗакрытия().Установить("КонтФормы","");
			контВызывающего.Форма.Закрыть(0);
		КонецЕсли;			
	КонецЕсли;
КонецПроцедуры

Здесь проверяется, существует ли параметр закрытия в кэше и не обработан ли он уже. Затем получаем имя функции которую надо выполнить и через конструкцию Шаблон() выполняем её. Важно – функция может вернуть только примитивный тип, да и тот через Шаблон() будет преобразован в строку. Если надо передать что-то посложнее, добавьте эти данные в параметр закрытия. Если в параметре закрытия по ключу «КонтФормы» передан контекст формы, то вызываем процедуру ПриЗакрытии() уже этой формы и отправляем команду выполнить процедуру «КБ_Результат()». Естественно, если мы хотим отловить результат обратного вызова на той форме эта процедура должна быть описана. Для определения, по какой функции был получен результат мы копируем имя функции в ключ «Операция». До выполнения обратного вызова обязательно проверяем или до этого мы не отрабатывали результат от другой формы (функцию «КБ_Результат()»).

Код для вызова функции через параметр закрытия:

Процедура ДобавитьЗапись()
	парамЗакрытия = СоздатьОбъект("СписокЗначений");
	парамЗакрытия.Установить("Функция","КБ_ДобавитьЗапись()");
	парамЗакрытия.Установить("КонтФормы",Контекст);
	парамЗакрытия.Установить("КБ_Код",Код);
	парамЗакрытия.Установить("КБ_Наим",СокрЛП(Наименование));
	ПараметрЗакрытия(парамЗакрытия);
	контОсновной().Форма.Закрыть(0);
КонецПроцедуры

КонтОсновной() возвращает контекст основной формы, где расположена фукнция «КБ_ДобавитьЗапись()», которую мы хотим выполнить. Он также получается из кэш(), а устанавливается туда при открытии дополнительной формы (см. выше).

Функция контОсновной()
	Возврат кэш().Получить("КонтекстОсновной");
КонецФункции

Код функции «КБ_ДобавитьЗапись()» из основной формы

Функция КБ_ДобавитьЗапись()
	код = ПараметрЗакрытия().Получить("КБ_Код");
	найСтр = 0;
	Если тбРезультат.НайтиЗначение(код,найСтр,"Код") = 1 Тогда
		ПараметрЗакрытия().Установить("ОписаниеОшибки","Запись с кодом: "+код+" уже добавлена!");
		Возврат 0;
	КонецЕсли;
	тбРезультат.НоваяСтрока();
	тбРезультат.Код = код;
	тбРезультат.Наименование = ПараметрЗакрытия().Получить("КБ_Наим");
	Возврат 1;
КонецФункции

тбРезультат – это таблица на основной форме с колонками «Код» и «Наименование». При выполнении этой функции туда будут добавляться записи. Для примера ситуация, когда мы пытаемся добавить существующий код, считается ошибочной и возвращается 0. Чтобы передать вызывающей форме описание ошибки это описание устанавливается в параметре закрытия по ключу «ОписаниеОшибки».

Код функции «КБ_Результат()» на дополнительной форме.

Функция КБ_Результат(результат)
	//Перехват колбэка по результату вызова колбэка основной
	операция = ПараметрЗакрытия().Получить("Операция");
	Если результат = 1 Тогда
		Если операция = "КБ_ДобавитьЗапись()" Тогда
		    Форма.тРезультат.Заголовок("Запись добавлена успешно");
		КонецЕсли;
	Иначе
		Форма.тРезультат.Заголовок("ОШИБКА: "+РазделительСтрок+ПараметрЗакрытия().Получить("ОписаниеОшибки"));
	КонецЕсли;			
КонецФункции

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

Отдельно стоит остановиться на понятии асинхронности. Когда мы вызываем «контФормы.Форма.Закрыть(0)» код не ожидает завершения выполнения предопределенной процедуры «ПриЗакрытии()» в форме из «контФормы». Эти операции выполняются параллельно. Поэтому, например, нельзя запихнуть такой вызов в цикл. Чтобы выполнить такой вызов в несколько итераций стоит вспомнить, что то, что решается через цикл, можно решить рекурсивно и наоборот. Поэтому используем рекурсию. Данные для отправки загоним в объект который поддерживает интерфейс итератора, т.е. конструкцию Выбрать() и Следующий(). Это может быть таблица значений, база данных дбф, справочник, документ. В процедуре которая совершает асинхронный вызов позиционируемся на следующую запись. Если дошли до конца, то выходим, если нет – совершаем асинхронный вызов. В процедуре обработки результата вызываем описанную выше процедуру.

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

Процедура ДобавитьСледующуюЗапись()
	Если НаборЗаписей().ПолучитьСтроку() = 0 Тогда
		Возврат;
	КонецЕсли;
	парамЗакрытия = СоздатьОбъект("СписокЗначений");
	парамЗакрытия.Установить("Функция","КБ_ДобавитьЗаписьЦикл()");
	парамЗакрытия.Установить("КонтФормы",Контекст);
	парамЗакрытия.Установить("КБ_Код",НаборЗаписей().Код);
	парамЗакрытия.Установить("КБ_Наим",СокрЛП(НаборЗаписей().Наименование));
	ПараметрЗакрытия(парамЗакрытия);
	контОсновной().Форма.Закрыть(0);
КонецПроцедуры

Процедура ДобавитьЗаписиВЦикле()
    НаборЗаписей(квоЗаписей).ВыбратьСтроки();
	ДобавитьСледующуюЗапись();	
КонецПроцедуры

Функция КБ_Результат(результат)
	//Перехват колбэка по результату вызова колбэка основной
	операция = ПараметрЗакрытия().Получить("Операция");
	Если результат = 1 Тогда
		Если операция = "КБ_ДобавитьЗаписьЦикл()" Тогда
			ДобавитьСледующуюЗапись();	
		КонецЕсли;
	Иначе
		Форма.тРезультат.Заголовок("ОШИБКА: "+РазделительСтрок+ПараметрЗакрытия().Получить("ОписаниеОшибки"));
	КонецЕсли;			
КонецФункции

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

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

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

Наименование Файл Версия Размер
Асинхронное программирование в 1с77 без внешних компонент. Обратные вызовы.:
.zip 6,72Kb
06.10.18
2
.zip 6,72Kb 2 Скачать

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

Комментарии
Избранное Подписка Сортировка: Древо
1. dmarenin 245 06.10.18 20:46 Сейчас в теме
за труд +, но все таки это псевдоасинхронные вызовы ибо в вм 1с (7.7) исполняется один поток на контекст исполнения(те делит контекст исполнения между вызовами), автор сделал интерпретацию евент лупа например как в js, и py(тут есть и гил для распределения выполнения потоков) или я не правильно понял?
2. Vortigaunt 74 08.10.18 09:56 Сейчас в теме
(1) Благодаря вашему комментарию узнал новый термин) Поверхностно ознакомился с понятием event loop, и да - это похоже на то, что я реализовал. Для каждого вызова получается свой контекст, поскольку вызовы обрабатываются в разных обработках.
Не смог расшифровать вот это:
(тут есть и гил для распределения выполнения потоков)

Объясните пожалуйста.
3. BigClock 08.10.18 14:27 Сейчас в теме
(2) Насколько я понимаю, гил - это Global Interpreter Lock: https://ru.wikipedia.org/wiki/Global_Interpreter_Lock
4. bulpi 163 09.10.18 12:38 Сейчас в теме
Красиво. Изящно. Но поддерживать это сможете только Вы. Я с ужасом представляю, как меня подрядят на разбор чего-то такого :)
5. sttt 113 16.10.18 22:20 Сейчас в теме
Далеко не асинхронное, v77 не умеет в типовом исполнении.
1cpp может выполнять асинхронный код, с помощью поддерживающих
технологию компонент, но тоже какие-то проблемы вроде были.
Не все умеют нормально работать

А пример, как куча мала, лучше реальный пример запостить, в виде обработки с замерами
Оставьте свое сообщение

См. также

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

Установка принтера по умолчанию для 1С 7.7

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Абонемент ($m) Практика программирования Разработка

Установка принтера по умолчанию в 1С 7.7. Обработка может быть полезна в том случае, когда нужно установить принтер по умолчанию, а доступа к рабочему столу нет (например, терминальный режим без рабочего стола или remoteApp)

1 стартмани

13.02.2019    3293    2    alsen    2       

Голосование за доклады на INFOSTART MEETUP Kazan - до 25 февраля. Промо

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

Формирование строки json в 1С: 7.7

Статья Программист Внешняя обработка (ert,epf) v7.7 1cv7.md 1С7:Комплекс Windows Абонемент ($m) Практика программирования

Предлагается набор функций 1с 7.7 для формирования строки json стандартными средствами.

1 стартмани

10.12.2018    4612    22    malovandrey    0       

Несколько табличных частей в 1С:7.7 - это просто

Инструменты и обработки Программист Архив с данными v7.7 1cv7.md Абонемент ($m) Практика программирования

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

1 стартмани

01.05.2018    8402    10    Gkmy    6       

​​​​​​​CorelDRAW Graphics Suite 2019 Промо

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

Суммирование выделенных ячеек в столбце для 1С:Предприятие 7.7

Инструменты и обработки Программист Архив с данными v7.7 Windows Абонемент ($m) Практика программирования

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

1 стартмани

09.03.2016    8888    4    электра    9       

Как получить номер и дату договора из наименования справочника договоров?

Инструменты и обработки Программист Внешний отчет (ert,erf) v7.7 1cv7.md Windows Абонемент ($m) Практика программирования Обработка справочников

В типовых конфигурациях платформы "1С:Предприятие 7.7" часто номер и дата договора указаны в самом наименовании договора. Что создает сложности в тех случаях, когда эти реквизиты надо знать, например, при конвертации данных в конфигурации платформы "1С:Предприятие 8", где номер и дата договора - отдельные реквизиты.

1 стартмани

24.09.2015    17816    2    SiAl    7       

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

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

от 13000 рублей

1С: 7.7. Функции-обертки, функторы, отложенный вызов, карринг параметров на примере функции чтения табличных данных

Инструменты и обработки Программист Архив с данными v7.7 1cv7.md Windows Абонемент ($m) Практика программирования

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

1 стартмани

17.09.2015    7542    4    rozhkovdmitriy    21       

Технологическая проверка кода конфигурации (7.7)

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Абонемент ($m) Инструментарий разработчика Практика программирования

1С 7.7 не имеет практически никаких средств, предназначенных для контроля правильности кода. В синтаксически правильном, с точки зрения 1С, коде можно, например, определить переменную НомерДок в модуле документа. Эта обработка может помочь найти некоторые "плохие решения" в коде.

1 стартмани

03.09.2015    7788    6    vcv    6       

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Методы для группировки данных по полю,полям в Таблице Значений на примере универсального метода списания по партиям, а также отбора строк в ТЗ по произвольному условию. Для 8.x и 7.7

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 v8 1cv8.cf 1cv7.md Windows Абонемент ($m) Практика программирования Универсальные функции

Я очень часто использую группировку данных по полю и полям, как в восьмерке, так и в семерке. Это аналог запроса Итоги, но там строится дерево, а в большинстве случаев нужны "плоские данные". Да и делать запрос в большинстве случаев более накладный процесс, чем работа с ТЗ. Все достоинства такого подхода приведены на примере метода универсального списания по париям, а так же отбора строк в ТЗ по произвольному условию. Для 7.7 еще отчеты сравнения двух ТЗ. Работая с различными базами для упрощения сравнения номенклатуры, или как аналог джойнов(join), сделал сравнение двух таблиц значений по нескольким полям. Пока группировки полей должны быть уникальны. Часто приходится искать дубли, для универсального поиска есть ДублиВТзПоПолю и пример в Тест.ert.

1 стартмани

25.06.2015    23647    4    Serginio    1       

Оптимизация количества журналов документов в 1С:7.7

Инструменты и обработки Программист Архив с данными v7.7 1cv7.md Windows Абонемент ($m) Практика программирования

Один из вариантов оптимизации количества журналов документов в 1С:7.7 без использования внешних компонент

1 стартмани

24.02.2015    6810    2    voha    8       

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

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

Все про картинки в 1С 7.7, ну или почти все...

Инструменты и обработки Программист Внешний отчет (ert,erf) v7.7 1cv7.md Windows Абонемент ($m) Практика программирования

В 1С 8 наличие картинок товаров предусмотрено изначально, а в 7.7 такого нет. Проблема существует и ее исправляют, но это, как правило, частные случаи, касающиеся, например, печати прайса http://infostart.ru/public/289876/ , показу картинок в справочнике номенклатура http://infostart.ru/public/17125/, файловый менеджер картинок товара http://infostart.ru/public/15239/ или просто конфигурации работы с картинками http://infostart.ru/public/21142/ (не стремился дать полный обзор, поэтому не попавшие не обижайтесь :). Что не устроило – информация разбросана по статьям, необходимость дополнительно напрягаться, чтобы это заработало. Здесь я попытался собрать все «до кучи», а так же дать необходимые ссылки для желающих «копнуть вглубь».

1 стартмани

18.11.2014    29562    74    kitminsk    9       

Печать прайс-листа с картинками для 1С Предприятие 7.7 Торговля и Склад 9.2 - пример реализации

Отчеты и формы Программист Внешний отчет (ert,erf) v7.7 1С7:ТиС Windows Оптовая торговля Абонемент ($m) Ценообразование, прайсы Практика программирования

Задача: требуется вывести в прайс фотографии товаров. Фотографии не хранятся в БД, ссылки на файлы генерируются в момент формирования прайса.

1 стартмани

29.06.2014    21442    49    Chaotic    18       

INFOSTART MEETUP Kazan. 13 марта 2020 г. Промо

Инфостарт продолжает путешествие по России. Следующая остановка - Казань. Тема мероприятия - управление и технологии автоматизации учета на платформе "1С: Предприятие". Ждем всех: докладчиков и участников! Стоимость участия - 5 500 рублей. Цена действительна до 30.01.2020

5 500

Перевод десятичного числа в HEX, BIN, OCT, _IdToStr и другие системы

Инструменты и обработки Программист Внешний отчет (ert,erf) v7.7 1cv7.md Абонемент ($m) Инструментарий разработчика Практика программирования Универсальные функции

Два алгоритма перевода десятичного числа в другую систему исчисления от 2 до 36 только средствами 1С (без ВК)

1 стартмани

05.06.2014    11427    10    kos    3       

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

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

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

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

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Абонемент ($m) Практика программирования

Пример получения остатков по складу по запросу по почте из программы 1С 7.7. Для получения остатков необходимо пользователю с любого почтовика (с любого "мыла") отправить текст сообщения GiveMyStockBalance_ForAnalize на почтовый адрес определенный в Константа.СерверПолучения. Программа выдаст остатки (можно переписать функцию для выдачи любых данных) в формате xls на почту указанную в константе Константа.СерверОтправки. Программа может быть полезна в тех организациях где трудно или невозможно осуществить прямой доступ к 1С сотрудников для просмотра необходимых данных. Также можно организовать некий почтамт - запрос для клиентов - при посылке определенного логина клиентом на его почту будет автоматически выслана информация, например, акт сверки с клиентов, или процент выполнения его заказа и т.д.

3 стартмани

25.03.2014    16053    5    protexprotex    3       

Новые сказки о старом или как поймать событие «При активизации строки» в 1С: 7.7

Инструменты и обработки Программист Конфигурация (md, cf) v7.7 1cv7.md Windows Абонемент ($m) Практика программирования

Давным-давно, в 1344152635 секунде по времени Unix, жил был один добрый, сильный и очень умный программист… Осилим царь-батюшка! — воскликнул наш добрый молодец и открыл пофигуратор однаэски 8.2… Там можно только прописать процедуры для реквизитов табличной части и реализовать событие ПриИзменении…

1 стартмани

29.01.2014    16741    8    majmyl    6       

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

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

от 11000 рублей

Поворот картинки

Инструменты и обработки no Приложение (exe) v7.7 v8 Windows Абонемент ($m) Практика программирования Работа с интерфейсом

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

1 стартмани

16.12.2013    14497    32    bborisko    14       

Изменение структуры баз 1С 7.7 без долгой реструктуризации. Часть 1. Справочники

Статья Программист Нет файла v7.7 1cv7.md Windows Абонемент ($m) Практика программирования

На днях встретил вопрос на форуме про возможность внесения изменений в конфигурацию без долгого сохранения в рабочей базе большого объема. Вот решил поделиться опытом, как это делал я. База у нас была объемом порядка 120 Гб. К базе обращался сайт в режиме 24/7, поэтому важно было быстро сохранять изменения и желательно без последующего монопольного запуска для восстановления индексов и процедур и без отключения пользователей от базы. Это первая часть статьи и посвящена она справочникам. С одной стороны - это самый простой объект, с другой стороны, именно про справочник спрашивалось на форуме. Если статья будет востребована, то я напишу аналогичные про документы, регистры и может еще что.

1 стартмани

13.08.2013    17547    4    Reptile    5       

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

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

1Cv77. Исправление поведения множественного фильтра (МФ) типовых отчетов в части сохранения/восстановления настроек.

Инструменты и обработки Программист Внешний отчет (ert,erf) v7.7 1cv7.md Россия Windows Абонемент ($m) Практика программирования Работа с интерфейсом

В большинстве российских типовых конфигураций для 1Сv7.7 (ТиС, ПУБ, Комплекс и др.) в отчетах используется множественный фильтр (МФ). Впервые он появился, более 10 лет назад, еще в ТиС 8.7, придя на смену МФ ТиС 8.6. С тех пор, аж до сего дня (24.03.2013) типовой механизм МФ содержит глюк связанный с восстановлением сохраненных настроек, хотя разработчики поют нам об обратном.

1 стартмани

26.03.2013    8858    6    piloturs    8       

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

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

Задача про сгибание листка

Инструменты и обработки Программист Внешний отчет (ert,erf) v7.7 1cv7.md Windows Абонемент ($m) Практика программирования

Часто при приеме на работу встречается задача про сгибание листка

1 стартмани

26.02.2013    13308    11    Sbelyi78    37       

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

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

[Разработчику] Любая таблица значений в OLAP

Инструменты и обработки Программист Архив с данными v7.7 1cv7.md Windows Абонемент ($m) Инструментарий разработчика Практика программирования Универсальные обработки

Анализируем различные данные в 1С, используя OLAP-технологии со всеми прелестями. Т.е. наглядное отображение данных, быстрые расчеты, горизонтальные и вертикальные группировки любой вложенности, удобная фильтрация, Drag'n'Drop и ещё много приятных вещей от MS. Обработка на входе принимает практически любую таблицу значений (ТЗ в которой колонкам указаны типы значений, строка, число и т.п.), на выходе имеем на форме 1С сводную таблицу и график по этой ТЗ, с которой работаем, как и в Excel со сводной таблицей и диаграммой. Взял за основу разработку «OLAP Анализ счёта» ( http://infostart.ru/public/14964/ ) от JohnyDeath и переделал под любую ТЗ. Опционально используется «Прогресс бар для 1С 77» (http://infostart.ru/public/14061/ ) от Gmix.

1 стартмани

21.12.2012    25437    49    venger    7       

FTP отправка из 7.7

Инструменты и обработки Программист Конфигурация (md, cf) v7.7 1cv7.md Windows Абонемент ($m) Практика программирования

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

3 стартмани

07.12.2012    37107    114    Yury1001    25