Формирование списка документов и скачивание печатной формы документа через веб-сайт с использованием HTTP-сервиса, плюс особенности авторизации

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

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

http сервис печатные формы

В статье показан пример, как реализовать формирование списка документов клиента/пользователя по коду, а затем скачать его (документа) печатную форму по ссылке

В продолжение публикации Реализация скачивания печатной формы документа через веб-сайт с использованием HTTP-сервиса , спасибо ув. ltfriend...

Задача: По запросу вида http://<адрес_базы_1с>/hs/GetDocumentsPDF/list/<PIN&Date1&Date2> передавать список документов клиента со ссылками на скачивание по его Pin коду за период Date1-Date2. Выгрузка будет происходить из программы "Бухгалтерия Предприятия 3.0" (БСП 3). Выгружаем печатные формы Актов сверки, Реализаций и Счетов-фактур.

Создадим HTTP-сервис:

Так как http-сервис создавался в Расширении конфигурации, то добавим Подсистему и в нее включим наш сервис:

 

Шаблон №1. Получение списка документов Контрагента:

В созданный шаблон добавим HTTP-метод GET:

Обработчик этого метода:

 

Функция ПолучитьСписокДокументовGET(Запрос)	
	
	Ответ = Новый HTTPСервисОтвет(200);
	ПараметрыЗапроса = Новый Массив;
	Попытка
		ПараметрыЗапроса = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Запрос.ПараметрыURL.Получить("PIN_Date1_Date2"),"&");
		Если ПараметрыЗапроса.Количество() <> 3 Тогда
			HTTPОтвет = Новый HTTPСервисОтвет(400); // 400 - Bad Request
			HTTPОтвет.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
			HTTPОтвет.УстановитьТелоИзСтроки(НСтр("ru='Переданы неверные параметры'"));
			Возврат HTTPОтвет;
		Иначе
            //По условиям даты передаются в формате "20200101". Если иначе - меняем код.
			Попытка
				ПараметрыЗапроса[1] = Дата(ПараметрыЗапроса[1]+"000000");
				ПараметрыЗапроса[2] = Дата(ПараметрыЗапроса[2]+"235959");
			Исключение
				HTTPОтвет = Новый HTTPСервисОтвет(400); // 400 - Bad Request
				HTTPОтвет.УстановитьТелоИзСтроки(НСтр("ru='Переданы неверные параметры даты'"));
				HTTPОтвет.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
				Возврат HTTPОтвет;
			КонецПопытки;	
		КонецЕсли;		
	Исключение
		HTTPОтвет = Новый HTTPСервисОтвет(400); // 400 - Bad Request
		HTTPОтвет.УстановитьТелоИзСтроки(НСтр("ru='Переданы неверные параметры'"));
		HTTPОтвет.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
		Возврат HTTPОтвет;
	КонецПопытки;
	
	ЗапросДокументов = Новый Запрос;
	ЗапросДокументов.УстановитьПараметр("Пин", ПараметрыЗапроса[0]);
	ЗапросДокументов.УстановитьПараметр("ДатаН", ПараметрыЗапроса[1]);
	ЗапросДокументов.УстановитьПараметр("ДатаК", ПараметрыЗапроса[2]);
	ЗапросДокументов.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя","БиллингИД_Договоры"));
	ЗапросДокументов.Текст = 
	               "ВЫБРАТЬ ПЕРВЫЕ 1
	               |	ДоговорыКонтрагентовДополнительныеРеквизиты.Ссылка КАК Договор
	               |ПОМЕСТИТЬ ВТДоговоры
	               |ИЗ
	               |	Справочник.ДоговорыКонтрагентов.ДополнительныеРеквизиты КАК ДоговорыКонтрагентовДополнительныеРеквизиты
	               |ГДЕ
	               |	ДоговорыКонтрагентовДополнительныеРеквизиты.Свойство = &Свойство
	               |	И ДоговорыКонтрагентовДополнительныеРеквизиты.Значение = &Пин
	               |;
	               |
	               |////////////////////////////////////////////////////////////////////////////////
	               |ВЫБРАТЬ РАЗЛИЧНЫЕ
	               |	""АктСверкиВзаиморасчетов"" КАК Type,
	               |	АктСверкиВзаиморасчетов.Ссылка КАК Ref,
	               |	АктСверкиВзаиморасчетов.Номер КАК Number,
	               |	АктСверкиВзаиморасчетов.Дата КАК Date,
	               |	АктСверкиВзаиморасчетов.Представление КАК Present
	               |ИЗ
	               |	ВТДоговоры КАК ВТДоговоры
	               |		ЛЕВОЕ СОЕДИНЕНИЕ Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
	               |		ПО ВТДоговоры.Договор = АктСверкиВзаиморасчетов.ДоговорКонтрагента
	               |ГДЕ
	               |	АктСверкиВзаиморасчетов.Дата >= &ДатаН
	               |	И АктСверкиВзаиморасчетов.Дата <= &ДатаК
	               |	И АктСверкиВзаиморасчетов.Проведен
	               |
	               |ОБЪЕДИНИТЬ ВСЕ
	               |
	               |ВЫБРАТЬ
	               |	""РеализацияТоваровУслуг"",
	               |	РеализацияТоваровУслуг.Ссылка,
	               |	РеализацияТоваровУслуг.Номер,
	               |	РеализацияТоваровУслуг.Дата,
	               |	РеализацияТоваровУслуг.Представление
	               |ИЗ
	               |	ВТДоговоры КАК ВТДоговоры
	               |		ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
	               |		ПО ВТДоговоры.Договор = РеализацияТоваровУслуг.ДоговорКонтрагента
	               |ГДЕ
	               |	РеализацияТоваровУслуг.Дата >= &ДатаН
	               |	И РеализацияТоваровУслуг.Дата <= &ДатаК
	               |	И РеализацияТоваровУслуг.Проведен
	               |
	               |ОБЪЕДИНИТЬ ВСЕ
	               |
	               |ВЫБРАТЬ
	               |	""СчетФактураВыданный"",
	               |	СчетФактураВыданный.Ссылка,
	               |	СчетФактураВыданный.Номер,
	               |	СчетФактураВыданный.Дата,
	               |	СчетФактураВыданный.Представление
	               |ИЗ
	               |	ВТДоговоры КАК ВТДоговоры
	               |		ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактураВыданный КАК СчетФактураВыданный
	               |		ПО ВТДоговоры.Договор = СчетФактураВыданный.ДоговорКонтрагента
	               |ГДЕ
	               |	СчетФактураВыданный.Дата >= &ДатаН
	               |	И СчетФактураВыданный.Дата <= &ДатаК
	               |	И СчетФактураВыданный.Проведен";
	
    //В моем случае Pin - это дополнительный реквизит справочника договоры
    //Не закидывайте камнями раздел поиска Актов сверки. Клиент сказал, что по каждому договору
    //всегда отдельный акт, поэтому поиск по шапке (ну "Баба с возу...")
	Результат = ЗапросДокументов.Выполнить().Выгрузить();
	Результат.Колонки.Добавить("Link"); //Добавим колонку ссылки на скачивание
	Для Каждого Стр из Результат Цикл		
		Стр.Date = Строка(Стр.Date); //иначе не грузится в JSON
		Стр.Link = Запрос.БазовыйURL+"/download/"+XMLСтрока(Стр.Ref);
	КонецЦикла;
	Результат.Колонки.Удалить("Ref"); // ссылка на документ уже не нужна
	
    //Конвертируем в массив структур и закидываем в JSON
	МассивСтруктур = ОбщегоНазначения.ТаблицаЗначенийВМассив(Результат);
	
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	
	ЗаписатьJSON(ЗаписьJSON, МассивСтруктур); 
	
	СтрокаДляОтвета = ЗаписьJSON.Закрыть();
		
	Ответ = Новый HTTPСервисОтвет(200);	
	Ответ.Заголовки.Вставить("Content-type", "application/json;  charset=utf-8"); //чтобы небыло ошибок с кодировкой русских букв
	
	Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
		
	Возврат Ответ;
	
КонецФункции

 

Шаблон №2. Почти ничем не отличается от приведенной выше публикации:

В созданный шаблон добавим HTTP-метод GET:

Обработчик этого метода:


Функция ПолучитьПечатнуюФормуGET(Запрос)
	
	Попытка
		// Получим переданный в HTTP-запросе идентификатор документа.
		Идентификатор = Новый УникальныйИдентификатор(Запрос.ПараметрыURL["Ident"]);
	Исключение
		// Полученный параметр не смогли преобразовать в тип "УникальныйИдентификатор".
		HTTPОтвет = Новый HTTPСервисОтвет(400); // 400 - Bad Request
		HTTPОтвет.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
		HTTPОтвет.УстановитьТелоИзСтроки(НСтр("ru='Передан неверный идентификатор'"));
		Возврат HTTPОтвет;
	КонецПопытки;
	
	// Найдём документ по полученному идентификатору.
    // Т.к. набор типов ограничен - можно использовать данную конструкцию, Если по всей базе, 
    // то на Infostart встречаются обработки поиска по GUID с перебором
	ДокументСсылка = Документы.АктСверкиВзаиморасчетов.ПолучитьСсылку(Идентификатор);
	ТипДок = "АктСверкиВзаиморасчетов";
	Если ДокументСсылка.ПолучитьОбъект() = Неопределено Тогда
		ДокументСсылка = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(Идентификатор);
		ТипДок = "РеализацияТоваровУслуг";
		Если ДокументСсылка.ПолучитьОбъект() = Неопределено Тогда
			ТипДок = "СчетФактураВыданный";
			ДокументСсылка = Документы.СчетФактураВыданный.ПолучитьСсылку(Идентификатор);
		КонецЕсли;
	КонецЕсли;	
	
    // на всякий случай, вдруг не найдено
	Если ДокументСсылка.ПолучитьОбъект() = Неопределено Тогда
		// Документ с таким уникальным идентификатором не существует.
		HTTPОтвет = Новый HTTPСервисОтвет(404); // 404 - Not Found
		HTTPОтвет.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
		HTTPОтвет.УстановитьТелоИзСтроки(НСтр("ru='Документ не найден'"));
		Возврат HTTPОтвет;
	КонецЕсли;

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

	ИначеЕсли ТипДок = "РеализацияТоваровУслуг" Тогда

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

		// Вызов типовой процедуры печати документа.
		ТабличныйДокумент = ПечатьТорговыхДокументов.ПечатьТОРГ12(ТаблицаСведенийТОРГ12, ОбъектыПечати, ПараметрыПечати)

	ИначеЕсли ТипДок = "СчетФактураВыданный" Тогда

		МассивОбъектов = Новый Массив;
		МассивОбъектов.Добавить(ДокументСсылка);		
		ОбъектыПечати = Новый СписокЗначений;
		ПараметрыПечати = Новый Структура;
		ПараметрыПечати.Вставить("ДополнитьКомплектВнешнимиПечатнымиФормами", Ложь);
		ТекстЗапросаПечатьСчетовФактур = Документы.СчетФактураВыданный.ТекстЗапросаПечатьСчетовФактур(,,Истина);

		// Вызов типовой процедуры печати документа.
		ТабличныйДокумент = УчетНДС.ПечатьСчетовФактур981(МассивОбъектов, ОбъектыПечати, ТекстЗапросаПечатьСчетовФактур, ПараметрыПечати)

	КонецЕсли;
	#КонецОбласти 
	
	// Запишем табличный документ в поток в памяти в формате PDF. Зачет автору Исходной публикации!
	Поток = Новый ПотокВПамяти;
	ТабличныйДокумент.Записать(Поток, ТипФайлаТабличногоДокумента.PDF);
	
	// Получим двоичные данные из потока для отправки клиенту
	ДвоичныеДанные = Поток.ЗакрытьИПолучитьДвоичныеДанные();
	
	
	#Область ОтправкаОтветаКлиенту
	
	// Сформируем имя файла, с которым печатная форма будет загружена у клиента.
	ИмяФайла = Строка(ДокументСсылка) + ".pdf";
	// Кодируем строку URL, чтобы избежать проблем с русскими буквами и другими символами (например, пробел).
	ИмяФайла = КодироватьСтроку(ИмяФайла, СпособКодированияСтроки.КодировкаURL);
	
	// Создадим ответ.
	HTTPОтвет = Новый HTTPСервисОтвет(200); // 200 - OK	
	
	HTTPОтвет.Заголовки.Вставить("Content-Type", "application/pdf"); // Чтобы браузер знал, что это PDF
	HTTPОтвет.Заголовки.Вставить("Content-Disposition", "attachment; filename=""" + ИмяФайла + """");
	
	HTTPОтвет.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанные);	
	
	Возврат HTTPОтвет;
		
	#КонецОбласти 
	
КонецФункции

Далее в ММ Акта сверки в расширении добавим вызов НЕэкспортной процедуры печати:


Функция HttpСервисПечатныеФормы_ПечатьАктаСверки(МассивОбъектов, ОбъектыПечати, ПараметрыПечати) Экспорт
	
	Результат = ПечатьАктаСверки(МассивОбъектов, ОбъектыПечати, ПараметрыПечати);
	Возврат Результат;
	
КонецФункции

Таким образом при отправке запроса в браузере к опубликованной на Web-сервере базе (как опубликовать - гугл в помощь, статей - море) вида http://<адрес_базы_1с>/hs/GetDocumentsPDF/list/<PIN&Date1&Date2> мы получаем JSON структуру с готовыми ссылками на скачивание PDF-документов.

 

P.S. Теперь пару слов про авторизацию в 1С при таком подключении. При отправке запроса появляется окно авторизации:

Далее инструкция для сервера Apache 2.4. Для IIS - думаю не сильно сложнее.

Публикуем базу "Второй раз": в файле C:\Apache24\conf\httpd.conf (или другой путь как у вас) добавляем:

# 1c publication Основная
Alias "/YourBase_buh" "C:/www/YourBase_buh/"
<Directory "C:/www/YourBase_buh/">
    AllowOverride All
    Options None
    Require all granted
    SetHandler 1c-application
    ManagedApplicationDescriptor "C:/www/YourBase_buh/default.vrd"
</Directory>

# 1c publication Для Http-сервиса
Alias "/YourBase_http" "C:/www/YourBase_http/"
<Directory "C:/www/YourBase_http/">
    AllowOverride All
    Options None
    Require all granted
    SetHandler 1c-application
    ManagedApplicationDescriptor "C:/www/YourBase_http/default.vrd"
</Directory>

Перезапускаем службу web-сервера.

Теперь в файле C:/www/YourBase_http/default.vrd оставляем/добавляем следующее:

Логин пароль, выключаем обычный вход через Web : enable = "false".

Оставляем только http-сервисы: стандартные выключены, из расширений - включены. Если конфа измененная, то можно один оставить по имени.

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
		xmlns:xs="http://www.w3.org/2001/XMLSchema"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		base="/YourBase_http"
		ib="Srvr=&quot;127.0.0.1&quot;;Ref=&quot;YourBase_buh&quot;;Usr=HTTPService;Pwd=password" enable="false">
	<httpServices publishExtensionsByDefault="true">
		<service name="ExternalAPI"
				rootUrl="api"
				enable="false"
				reuseSessions="dontuse"
				sessionMaxAge="20"
				poolSize="10"
				poolTimeout="5"/>
		<service name="MobileAppReceiptScanner"
				rootUrl="MobileAppReceiptScanner"
				enable="false"
				reuseSessions="autouse"
				sessionMaxAge="20"
				poolSize="10"
				poolTimeout="5"/>
		<service name="ПередачаДанных"
				rootUrl="dt"
				enable="false"
				reuseSessions="use"
				sessionMaxAge="20"
				poolSize="10"
				poolTimeout="5"/>
		<service name="ЭДО"
				rootUrl="edi"
				enable="false"
				reuseSessions="autouse"
				sessionMaxAge="20"
				poolSize="10"
				poolTimeout="5"/>
	</httpServices>
</point>

 

Все!

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. torch 115 28.11.20 08:10 Сейчас в теме
По авторизации... Я так понял, что все запросы попадают на веб-сервер (и в 1С) с предустановленным логином/паролем "HTTPService" - "password". Но это означает, что злоумышленник, прослушав запрос клиента ООО Василек, может получить его PIN, а потом самостоятельно генерировать запросы в Вашу информационную систему и она будет отдавать ему ответ, полагая, что это запрос от клиента ООО Василек.
Я в таких случаях использую проверку на основе хэш-функций (в классической литературе это называется на основе открытого и закрытого ключа). Что надо сделать:
1. Кроме PIN передать клиенту еще секретный пароль, далее по тексту "SecretKEY". Этот пароль нигде в запросах не участвует, пользователи его не видят, прослушать его невозможно.
2. модифицировать запрос: вместо "PIN&Date1&Date2" сделать "PIN&Date1&Date2&OpenKEY&HESH", где OpenKEY - открытый ключ, случайная строка (10 символов достаточно), генерируемый отправителем запроса. В каждом запросе этот параметр должен быть разным. HESH - это хеш, вычисленный от строки PIN&Date1&Date2&OpenKEY&SecretKEY по алгоритму md5 (в 1С уже есть встроенные функции вычисления хэша)
3.При приеме запроса Ваша 1С должна тоже вычислить хзш от строки PIN&Date1&Date2&OpenKEY&SecretKEY и сравнить ее с хэшем из запроса. Если они совпадают - значит запрос именно от клиента ООО Василек, если не совпадают - запрос скомпрометирован и на него отвечать не стоит. А еще лучше внести ip-адрес, с которого пришел запрос, в блэк-лист и игнорировать в дальнейшем на уровне вебсервера
2. R_o_n_n_y 59 28.11.20 14:54 Сейчас в теме
(1) Спасибо за дополнение. Я делал исходя из того, что данный запрос конечный клиент вообще видеть не будет! Этот запрос формирует сайт заказчика к 1С. У клиента в личном кабинете только кнопка "Получить документы за период", а запрос как мне сказали, будет спрятан
3. torch 115 28.11.20 15:05 Сейчас в теме
(2)Если эта задача решалась только для связки "мой сайт" - "моя 1С", то вместо того, что я писал выше, можно на веб-сервер поставить ограничение "принимать запросы только с ip сайта". Это проще, но ограничение в любом случае нужно.
Оставьте свое сообщение

См. также

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

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

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

28.12.2020    3484    comol    20    

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

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

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

27.01.2020    34382    ids79    26    

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

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

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

15.01.2020    28609    John_d    22    

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

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

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

30.12.2019    21692    kuzyara    38    

Копирование числовых ячеек из 1С в Excel Промо

Загрузка и выгрузка в Excel Администрирование данных 1С v8 1cv8.cf Бесплатно (free)

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

15.01.2019    27169    itriot11    27    

Заметки по Конвертации данных 3.0

Обмен данными 1С v8 1cv8.cf Бесплатно (free)

Написал небольшие заметки по конвертации данных 3.0.

18.11.2019    16581    John_d    17    

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

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

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

07.10.2019    32243    HostHost    40    

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

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

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

01.10.2019    38058    Yashazz    50    

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

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

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

10.12.2016    38187    unichkin    74    

Самый примитивный HTTP-сервис в мире

WEB v8 Бесплатно (free)

Пошаговый пример создания простейшего HTTP-сервиса, который генерирует HTML-страницу для поиска товара, а также реализует асинхронное получение данных из базы.

12.09.2019    22634    YPermitin    26    

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

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

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

06.09.2019    61207    rpgshnik    67    

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

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

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

05.09.2019    55497    ids79    54    

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

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

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

15.10.2018    31601    tormozit    104    

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

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

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

05.09.2019    31573    YPermitin    24    

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

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

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

03.09.2019    26730    YPermitin    80    

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

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

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

17.08.2019    34018    ids79    16    

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

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

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

20.09.2012    78937    tormozit    131    

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

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

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

08.08.2019    99374    ids79    56    

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

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

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

02.08.2019    41516    avalakh    26    

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

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

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

26.07.2019    70707    ids79    12    

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

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

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

11.07.2007    49591    tormozit    48    

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

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

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

17.07.2019    38661    ids79    27    

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

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

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

04.07.2019    20190    SeiOkami    50    

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

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

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

25.06.2019    57890    ids79    26    

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

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

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

10.09.2017    46137    tormozit    74    

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

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

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

11.06.2019    26620    dmurk    146    

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

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

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

16.05.2019    47405    YPermitin    30    

HTML-клиент у конфигурации 1С

WEB v8 Бесплатно (free)

Приветствую. В этой публикации опишу свой опыт создания html-клиента для конфигурации 1С с помощью http-сервисов. HTML-клиент в этом случае - это frontend (html + css+ js), который генерирует и выдает пользователю конфигурация + backend, который тоже реализован в этой же конфигурации.

17.04.2019    19849    Smaylukk    121    

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

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

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

25.04.2019    16325    m-rv    2    

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

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

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

16.04.2019    20807    m-rv    17    

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

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

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

07.04.2019    37111    ellavs    126    

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

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

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

28.03.2019    28239    ellavs    90    

Excel vs 1С: битва с неожиданным исходом Промо

Анализ учета Универсальные обработки Загрузка и выгрузка в Excel Финансовые Управленческие v8 1cv8.cf Россия Бесплатно (free)

Что лучше 1С или Excel? Разберемся, в казалось бы, очевидном, чтобы получить невероятное!

11.04.2019    37696    bolefirenko    120    

RabbitMQ + Конвертация Данных 3.0

Внешние источники данных Обмен через XML Интеграция Перенос данных из 1C8 в 1C8 v8 КД Бесплатно (free)

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

21.03.2019    27525    barelpro    82    

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

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

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

14.03.2019    33502    YPermitin    53    

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

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

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

03.02.2019    44143    ids79    11    

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

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

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

01.06.2018    31782    m-rv    21    

Запись одной книги Excel на нескольких листах средствами 1С (без внешних компонент)

Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

Пользователи часто просят сохранить им стопиццот отчетов в один файл Excel, чтобы отчеты были в одном файле. Ну или клиент хочет счет, накладную и счет-фактуру получить в одном документе. 1С умеет это делать без всяких там COM-объектов. Давайте разберемся, куда нажимать и что крутить.

14.01.2019    23716    starik-2005    28    

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

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

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

14.12.2018    44216    ids79    72    

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

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

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

05.12.2017    28700    itriot11    34    

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

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

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

13.11.2018    53862    Unk92    25    

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

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

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

10.11.2018    36640    ids79    40    

Создание телеграм бота с гугл авторизацией, обратными вызовами и уведомлениями об обновлении через сервер-маршрутизатор

WEB v8 1cv8.cf Бесплатно (free)

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

07.11.2018    33233    🅵🅾️🆇    60    

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

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

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

27.01.2016    77854    Serginio    110    

Планы обмена 1С

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

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

10.09.2018    66668    zhichkin    32    

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

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

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

03.09.2018    29811    zarankony    42