Black Friday: Cashback 35% при покупке 1С лицензий на счет INFOSTART.RU

Хранение файлов во внешней базе данных MSSQL.

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

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

Двоичные данные Base64 MSSQL

35
1С Двоичные Данные <=> Base64 <=> SQL.
Как с помощью ADODB и MSSQL решить проблему хранения дополнительных файлов данных используемых в 1С.

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

Похожие статьи:

Вот эта хорошая, спасибо.

А вот тут результат поиска, можно посмотреть.


Пример и разработка велись на платформе 1С:Предприятие 8.3 (8.3.4.365)

Сервер 1С крутится на MS Windows 2012

Внешняя база на MSSQL 2012 Standart

Подразумевается, что вы знаете:

- что такое 1С и ADODB

- что такое MSSQL и умеете с ним работать/админить (или сможете, если захотите)

- что такое Сериализация

- у вас прямые руки

Интро:

В нашей организации ведется собственная разработка на базе 1С Предприятие 83 (было сначала 82, потом перешли на 83... на месте не стоим...)

Это CRM система для работы с обращениями пользователей продуктов нашей компании.

Таки компания растет, развивается и всё такое и безусловно все пользователи как любые пользователи "косячат" или чего-то не понимают и естественно что сам продукт не без изъянов (каимся), и приходится им обращатся в техподдержку различными способами.

Один из таких способов - писать письмо e-mail.

Письма мы эти обрабатываем с помощью COM объекта OUTLOOK'a и складываем в нашу базу , а вложения писем кладём рядышком в "общую папку" расшареную для пользователя сервера 1С (типа секьюрно)... почему так - "так исторически сложилось"... 

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

Предыдущий наш вариант - это так называемый SMB. Оно всё работало, у нас многоранговая сеть и всё секьюрно и круто и вообще бы никто не начал чесаться, пока не заметили что объём вложений уже больше 300гигов. И задумались мы, наверное там много мусора, давай сразу удалим всякие медиа и исполняемые файлы и ещё что-нибудь.

Ну классно, давай, получилось всякого хлама гигов на 10.  Написали обработку и запустили... и Всё.

Смотрю я на наши папочки и они медленно исчезают... Все без разбору. Холодный пот побежал по моей спине.

Я резко начал завершать процессы, но это не помогло. Ведь я написал хитрую обработку, оно запустилось фоном на сервере и методично всё уничтожало, в итоге довел до того что в панике остановил службу. Но это тоже не помогло, уж я не знаю почему, но оно всё равно всё удаляло, как будто в памяти запустился процесс и висел. В итоге - reboot сервера.

Фу... Осматриваем пепелище... из 4 лет архивов уцелел только последний... 

Всё, надо с этим что-то дешлать! Тем более мысли уже были, но как всегда не было времени.. или лень.

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

Рассматривая эти варианты, немного идеализируем среду. Пусть будет что у нас надежные raid ы , хорошая и быстрая сеть.

Варианты решения:

  SMB (файловый вариант)

FTP

(не пробовал)

Хранить внутри Базы

(не пробовал)

Внешняя БД(Наш вариант)
+ - быстро
- просто
- возможно быстро
- чуть более безопаснее
- возможно надежнее (смотря как организовано хранилище)
- надежно
- безопасно
- доступ рулится самой 1С
- проще
- безопасно (доступ на уровне SQL)
- надежно (можно делать быстрый бэкап всех вложений, или быстро перенести на другой сервер)
- - не безопасно
- не надежно (опять же это может быть сетевое хранилище)
- чуть по сложнее -"раздувает" базу, как следствие база начинает работать (для файлового варианта, для серверного возможно нет разницы) - сложно

p.s.

Потери восстановили с помощью обычных утилилит восстановления удаленных файлов, но не всё...

Решение:

И так, выбираем хранить файлы в MSSQL.

Основное отличие этой статьи и решения от похожей которую я привел выше - мы не будем использовать временные temp файлы. Наверное и всё. Ну еще может быть мы не пользуем ADODB.Command... 

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

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

Структура в :

Документ "Письмо"

  • Номер - Тип Строка(9)

РегистрСведений "Вложения"

  • Измерения: 
    • Письмо - Тип ДокументСсылка.Письмо
    • FileUID - Тип УникальныйИдентификатор
  • Ресурсы:
    • ИмяФайла - Тип Строка
    • Размер (в байтах) - Тип Число
    • Расширение - Тип Строка

Методом проб и ошибок пришел к определенной схеме таблицы в которой буду хранить данные на MSSQL сервере

//Table Name: Attachs
//FileUID uniqueidentifier
//MailUID uniqueidentifier
//MailNumber VarChar(9)
//MailDate DateTime
//FileName VarChar(255)
//FileSize int //bites не более 20 Мб 20971520 байт
//FileDATA VarBinary(MAX)

Почему тип = uniqueidentifier. Сначала был типа char(36), в целом так и есть, Уникальный Идентификатор полученый методом Новый УникальныйИдентификатор(), при приведении к строке имеет длину 36 символов. Но, мы будем пользовать специальный тип и приводить к нему передаваемые значения наших UIDов, потому что мы будем индексировать нашу таблицу по этип двум полям. Но можно не индексировать, смотря какое количество записей планируется хранить. У нас это >2 000 000 записей, поэтому нам это даже нужно. 

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

use %YOUR_dBASE_NAME%
go

create table Attachs 
	(FileUID uniqueidentifier
	,MailUID uniqueidentifier
	,MailNumber VarChar(9)
	,MailDate DateTime
	,FileName VarChar(255)
	,FileSize int
	,FileDATA VarBinary(MAX))

Самый интерес для нас представляет поле FileDATA с типом VARBINARY(MAX). Это тип именно Двоичные Данные, как в 1С. Почему так - потому что я подумал, мало ли что нам понадобиться или вдруг мы захотим читать данные из других приложений, а этот тип универсальный. По идее можно хранить VARCHAR(MAX) и передавать туда строку типа Base64 полученную методом Base64Строка(Значение). Но это не универсальное решение(я так думаю, убедите меня в обратном!), потому что эта ерунда будет получена в 1С... а я привык, что придумано в 1С - то подходит только для 1С (возможно я опять заблуждаюсь... Но тогда какого хрена нельзя через ADODB.RecordSet получить двоичные данные, а только через временные temp файлы и другие костыли...)

И так, новая задача. Как передавать двоичные данные в MSSQL да еще и через COM объект?

Ладно, запросы мы умеем выполнять, и даже что-то инсертить. Круто, но нам надо инсертить Двоичные Данные а не Число или Строку. 

В общем становится понятно, что надо передавать что-то сериализууемое... как раз это и будет Base64 строка, полученная методом Base64Строка(Значение). Только осталось найти способ, как в MSSQL запросе всё это переварить и заинсертить то что нужно и потом еще и получить.

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

base64-encoding-in-sql-server 

-- Encode the string "TestData" in Base64 to get "VGVzdERhdGE="
SELECT
    CAST(N'' AS XML).value(
          'xs:base64Binary(xs:hexBinary(sql:column("bin")))'
        , 'VARCHAR(MAX)'
    )   Base64Encoding
FROM (
    SELECT CAST('TestData' AS VARBINARY(MAX)) AS bin
) AS bin_sql_server_temp;
-- Decode the Base64-encoded string "VGVzdERhdGE=" to get back "TestData"
SELECT 
    CAST(
        CAST(N'' AS XML).value(
            'xs:base64Binary("VGVzdERhdGE=")'
          , 'VARBINARY(MAX)'
        ) 
        AS VARCHAR(MAX)
    )   ASCIIEncoding
;

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

Справочник по XQuery

Типы данных xquery

Метод sql:variable() 

Метод Value() типа данных XML t-sql

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

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

Для insert'а данных всё оказалось немного проще.

  • Запись данных (insert):

Пример SQL запроса для помещения данных в БД

INSERT INTO %tableName% 
	(FileUID,MailUID,MailDate,MailNumber,FileName,FileSize,FileData) 
VALUES 
	(CAST('%FileUID%' AS uniqueidentifier)
	,CAST('%MailUID%' AS uniqueidentifier)
	,CAST('%MailDate%' AS datetime)
	,'%MailNumber%'
	,'%FileName%'
	,%FileSize%
	,CAST(N'' AS XML).value(
						'xs:base64Binary(""%FileData%"")'
						, 'VARBINARY(MAX)'
						)
	)
  • Чтение данных (select):

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

declare @_bin varbinary(max), @_xml xml, @MailUID char(36), @FileUID char(36)
set @_xml =''
set @MailUID = '%MailUID%'
set @FileUID = '%FileUID%'

set @_bin = 
 (SELECT top 1
	FileDATA AS bin
FROM Attachs 
where MailUID = CAST(@MailUID AS uniqueidentifier)
	AND FileUID = CAST(@FileUID AS uniqueidentifier))

IF (@_bin is null) 
	BEGIN
		SELECT 0 AS FileData
	END
ELSE
	BEGIN
		SELECT @_xml.value('xs:base64Binary(xs:hexBinary(sql:variable("@_bin")))'
						, 'VARCHAR(MAX)'
						)   FileData
	END


Итого. Имея эти штуки в руках, можем применить их в деле.

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

В этот реквизит мы помещаем полезный HTML код, которые в зависимости от типа вложения отобразит либо PDF либо Изображение.

АдресВременногоХранилища - это переменная, в которая в себе реально хранит адрес временного хранилища, полученный методом ПоместитьВоВременноеХранилище(ДвоичныеДанные,Новый УникальныйИдентификатор)

Где ДвоичныеДанные - Это переменная с типом ДвоичныеДанные, которые получены с помощью функции глобального контекста Base64Значение(Результат)

Где в свою очередь Результат - это данные полученные с помощью ADODB

Выглядит примерно так: 

//Расширение = .pdf
//Расширение = .jpg

htmlТекст = "
|< !DOCTYPE HTML > 
|< html > 
|< head >
|< meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"" >
|< style type=""text/css"" >
|html, body {
|margin: 0px;
|padding: 0px;
|width: 100%;
|height: 100%;
|}
|#footer {
|width: 100%;
|height: 100%;
|}
|#pdfEMBED {
|width: 100%;
|height: 100%;
|}
|< /style >
|< /head > 
|< body >
|< div id=""footer"" >%previewTAG%< /div > 
|< /body > 
|< /html >"; 

Если Расширение = ".pdf" Тогда
    previewTAG = "< EMBED id=""pdfEMBED"" type=""application/pdf"" src=""%ПутьКФайлу%"" >< /EMBED >";
ИначеЕсли Расширение = ".jpg" Тогда
    previewTAG = "< img  src='%ПутьКФайлу%' class='turn'/ >";
Иначе
    previewTAG = "< img  src='%ПутьКФайлу%' class='turn'/ >";
КонецЕсли;

previewTAG = СтрЗаменить(previewTAG,"%ПутьКФайлу%",АдресВременногоХранилища);
htmlТекст = СтрЗаменить(htmlТекст,"%previewTAG%",previewTAG);

Превью = htmlТекст;

*Обращаю внимание, что здесь тэги с лишними пробелами, для красивого отображения, иначе всё "едет"

Основные процедуры, где ADOconnect - COMОбъект, полученые функцией ПолучитьКоннектКБД()

//Возвращает COMОбъект коннекта
//В случае ОТКАЗ = Истина, возвращается строка с описанием ошибки
Функция ПолучитьКоннектКБД(Отказ = Ложь) Экспорт
	
	DatabaseName		 = Константы.Вложения_ИмяБазыДанных.Получить();
	ServerName		 = Константы.Вложения_ИмяСервера.Получить();
	IntegratedSecurity	 = Константы.Вложения_IntegratedSecurity.Получить();
	UserID		 = Константы.Вложения_ИмяПользователя.Получить();
	Password	 = Константы.Вложения_ПарольПользователя.Получить();
	
	Попытка
		//http://technet.microsoft.com/en-us/library/aa905872(v=sql.80).aspx
		
		cn = Новый COMОбъект("ADODB.Connection");
		cn.Provider = "sqloledb";
		cn.Properties("Data Source").Value		 = ServerName;
		cn.Properties("Initial Catalog").Value	 = DatabaseName;
		
		Если НЕ ПустаяСтрока(IntegratedSecurity) Тогда 
		//Если параметр пустой, то будет использоваться обычная аутентификация по логину паролю
			//' Windows NT authentication.
			cn.Properties("Integrated Security").Value = IntegratedSecurity; //
		Иначе
		//Обычная мсскл аутентификация по логину паролю
			cn.Properties("User ID").Value	 = UserID;
			cn.Properties("Password").Value	 = Password;
		КонецЕсли;
		cn.Open();
		Возврат cn;
	Исключение
		//Ошибка
		ОписаниеОшибки = ОписаниеОшибки();
		Отказ = Истина;
		Возврат ОписаниеОшибки;
	КонецПопытки;
КонецФункции
//Возвращает Base64 строку
//Параметры:
//		ПараметрыДанных - Структура - 
//		ADOconnect - COMОбъект
//		Отказ - Булево - 
Функция ПолучитьДанныеИзБД(ПараметрыДанных,ADOconnect,Отказ = Ложь) Экспорт
	
	tableName = "Attachs";
	
	selectString = 
	"declare @_bin varbinary(max), @_xml xml, @MailUID char(36), @FileUID char(36)
	|set @_xml =''
	|set @MailUID = '%MailUID%'
	|set @FileUID = '%FileUID%'
	|
	|set @_bin = 
	| (SELECT top 1
	|	FileDATA AS bin
	|FROM Attachs 
	|where MailUID = CAST(@MailUID AS uniqueidentifier)
	|	AND FileUID = CAST(@FileUID AS uniqueidentifier))
	|
	|IF (@_bin is null) 
	|	BEGIN
	|		SELECT 0 AS FileData
	|	END
	|ELSE
	|	BEGIN
	|		SELECT @_xml.value(
	|			'xs:base64Binary(xs:hexBinary(sql:variable(""@_bin"")))'
	|			, 'VARCHAR(MAX)'
	|			)   FileData
	|	END";

	selectString = СтрЗаменить(selectString,"%tableName%"		,tableName);
	selectString = СтрЗаменить(selectString,"%FileUID%"			,ПараметрыДанных.FileUID);
	selectString = СтрЗаменить(selectString,"%MailUID%"			,ПараметрыДанных.MailUID);
		
	rs = Новый COMОбъект("ADODB.Recordset");
	Попытка
		rs.Open(selectString, ADOconnect);
	Исключение
		ОписаниеОшибки = ОписаниеОшибки();
		Отказ = Истина;
		Возврат ОписаниеОшибки
	КонецПопытки;
	
	Пока rs.EOF = 0 Цикл //Ложь
		Base64String = rs.Fields("FileData").Value;
		Если Base64String = 0 Тогда
			Отказ = Истина;
			Возврат "Ошибка получения данных: Данные не найдены";
		КонецЕсли;
		rs.MoveNext();
	КонецЦикла;
	Возврат Base64String;
КонецФункции
//Поместить данные в БД
//Параметры:
//		ПараметрыДанных - Структура - Структура содержащая парамтеры с ключами идентичными именам колонок в тиблице Attachs БД
//		ADOconnect - COMОбъект
//		Отказ - Булево
Процедура ПоместитьДанныеВБД(ПараметрыДанных,ADOconnect,Отказ = Ложь) Экспорт
	
	tableName = "Attachs";
	
	insertString = "INSERT INTO %tableName% 
	|(FileUID,MailUID,MailDate,MailNumber,FileName,FileSize,FileData) 
	|VALUES 
	//base64String to VARBINARY
	|(CAST('%FileUID%' AS uniqueidentifier),CAST('%MailUID%' AS uniqueidentifier),CAST('%MailDate%' AS datetime),'%MailNumber%','%FileName%',%FileSize%,CAST(N'' AS XML).value('xs:base64Binary(""%FileData%"")', 'VARBINARY(MAX)'))";
	
	insertString = СтрЗаменить(insertString,"%tableName%"		,tableName);
	insertString = СтрЗаменить(insertString,"%FileUID%"		,ПараметрыДанных.FileUID);
	insertString = СтрЗаменить(insertString,"%MailUID%"		,ПараметрыДанных.MailUID);
	insertString = СтрЗаменить(insertString,"%MailDate%"		,Формат(ПараметрыДанных.MailDate,"ДФ=yyyy-MM-ddTЧЧ:мм:сс.000"));
	insertString = СтрЗаменить(insertString,"%MailNumber%"		,ФорматированиеСтроки(ПараметрыДанных.MailNumber));
	insertString = СтрЗаменить(insertString,"%FileName%"		,ФорматированиеСтроки(ПараметрыДанных.FileName));
	insertString = СтрЗаменить(insertString,"%FileSize%"		,Формат(ПараметрыДанных.FileSize,"ЧГ="));
	insertString = СтрЗаменить(insertString,"%FileData%"		,ПараметрыДанных.FileData);
	
	//Сразу выполняем INSERT запрос
	cd = Новый COMObject("ADODB.Command");
	cd.ActiveConnection = ADOconnect;
	cd.CommandText = insertString;
	cd.CommandType = 1;
	Попытка
		cd.Execute();
	Исключение
		ОписаниеОшибки = ОписаниеОшибки();
		Отказ = Истина;
		
		Сообщить(ОписаниеОшибки);
	КонецПопытки;
КонецПроцедуры

Вот и всё, остальное можно увидеть внутри мини конфигурации, лепил специально для статьи.

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

 

Прошу критику и предложения в комменты или личку. 

35

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

Наименование Файл Версия Размер
Конфигурация: Хранение файлов во внешней MSSQL БД
.cf 93,50Kb
09.06.14
63
.cf 93,50Kb 63 Скачать

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

Комментарии
Избранное Подписка Сортировка: Древо
1. Smaylukk 794 11.06.14 12:20 Сейчас в теме
Собственно, а почему не сделали аналогичную конфигурацию 1С на базе MSSQL, а с рабочей базой настроить обмен через COM, веб-сервисы, обмен через файлы. Это все же свое, родное.
Ну а в целом за публикацию плюс
2. kiruha 380 11.06.14 13:07 Сейчас в теме
(1) Smaylukk,
Таскать большие файлы из 1С не гуд
Com это тормоз при инициации и нужна лицензия
веб сервис - дополнительная трансформация большого файла - не гуд
+ Поддерживать простую скульную базу проще, чему кучу таблиц 1С
+ Оптимизировать проще
+ Может быть очень большой архив (Тбайты)

Также склоняюсь к внешнему хранению. Но интересны и альтернативы
3. Smaylukk 794 11.06.14 17:47 Сейчас в теме
(2) kiruha, спасибо, я вас понял.
4. aspirator23 407 12.06.14 15:24 Сейчас в теме
Возможно для этого решения неактуально. А какая скорость записи/чтения больших файлов?
Рассматривался вариант FileStream в MSSQL для хранения файлов?
5. нормальный такой 90 12.06.14 22:07 Сейчас в теме
(4) aspirator23, Да, рассматривался.
Но я про него мало что знаю, якобы он позволяет получать доступ как к обычным файлам в папке, но при этом всё это хранится в БД...
Но вот я решил, что пусть будет такой вариант... обычный varbinary.

Скорость чуть снизилась, при сравнении с обычным чтением файлов по сети. Всё же эта конвертация в base64 влияет.
На скорость тут уже будет влиять несколько факторов... как быстры ваши диски, сеть да и сами сервера.
6. begemotoff35 10.12.14 10:33 Сейчас в теме
Очень медленно читаются файлы из внешней базы.
Сохранил картинку 6Мб. Читается секунды три. (((
Из внутреннего хранилища гораздо быстрее
7. нормальный такой 90 10.12.14 11:19 Сейчас в теме
(6) begemotoff35, ну да, есть такое. об этом предупреждал :)
сильно зависит от быстродействия скуль сервера и сети.
8. Megis 19 02.02.15 13:38 Сейчас в теме
Понравилось. Внедрил у себя. Только немного переписал функцию получения из БД. Сейчас получаю все файлы разом, и уже потом обрабатываю выборку.
Оставьте свое сообщение

См. также

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

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

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

1 стартмани

06.09.2019    6446    6    Dementor    27       

1С:Предприятие через Интернет. 1С:Fresh Промо

Ведение бухгалтерского и налогового учет, сдача отчетности, управление бизнесом из любой точки мира. Привычные программы «1С» через Интернет без приобретения коробочных программ.

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

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

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

1 стартмани

03.07.2019    11182    1    m-rv    79       

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

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

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

1 стартмани

21.06.2019    15713    48    Evil Beaver    116       

Вакансия Программист, аналитик, эксперт 1С Промо

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

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

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

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

1 стартмани

12.06.2019    15299    11    Hatson    22       

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

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

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

1 стартмани

25.03.2019    17071    8    tormozit    44       

Cashback 35% при покупке 1С лицензий на счет INFOSTART.RU с 27.11 по 04.12 Промо

Оформляете заказ на 1С лицензии или конфигурации. Получаете 35% от стоимости на счет в профиле INFOSTART.RU. Выбираете сервисы и продукты на сумму кэшбэка.

Баг или фича? Неожиданное поведение платформы 170

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

Рассмотрим несколько случаев неожиданного поведения платформы 1С, а также что с этим можно cделать.

18.02.2019    13597    31    YPermitin    88       

Коннектор: удобный HTTP-клиент для 1С:Предприятие 8 559

Инструменты и обработки Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования Внешние источники данных WEB Универсальные функции Инструментарий разработчика Универсальные обработки

Коннектор - библиотека для работы с HTTP запросами. Библиотека берет на себя всю рутину работы с HTTP запросами. Буквально в одну строку можно получать данные, отправлять, не заботясь о необходимости конструирования URL, кодирования данных и т.п.

1 стартмани

31.01.2019    30630    273    bonv    116       

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

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

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

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

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

1 стартмани

29.01.2019    15525    66    Synoecium    37       

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

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

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

1 стартмани

28.12.2018    15449    61    maxx    56       

Перенос данных КА 1.1 / УПП 1.3 => БП 3.0 (перенос остатков, документов и справочников из "1С:Комплексная автоматизация 1.1" / УПП 1.3 в "1С:Бухгалтерия 3.0"). Обновлен до версий КА 1.1.115.х, УПП 1.3.127.х! Промо

Разработка позволяет перенести остатки по всем счетам бух.учета в программу "1С:Бухгалтерия предприятия 8", ред. 3.0 на выбранную дату начала ведения учета. Также переносятся документы за период и вся необходимая справочная информация. Правила оперативно обновляю при выходе новых релизов. Рассылка обновлений правил бесплатно в течение 12 месяцев. Есть видеодемонстрация проведения переноса данных. Конфигурации при использовании обмена остаются полностью типовыми. Перенос данных возможен в Бухгалтерию 3.0 версии ПРОФ, КОРП или базовую.

24700 руб.

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

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

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

1 стартмани

07.12.2018    14629    10    dmitry1975    31       

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

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

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

1 стартмани

23.11.2018    14870    8    ids79    22       

Перенос данных КА 1.1 => ERP 2 (ЕРП) (обработка переноса документов, остатков и справочной информации из "1С:Комплексная автоматизация, ред. 1.1" в "1С:ERP Управление предприятием, ред 2"). Обновлен до КА 1.1.115.х и ERP 2.4.10.х Промо

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

29700 руб.

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

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

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

1 стартмани

13.09.2018    10511    10    RocKeR_13    16       

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

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

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

1 стартмани

27.08.2018    18012    32    dsdred    13       

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

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

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

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

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

5 стартмани

09.08.2018    16982    23    informa1555    26       

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

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

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

1 стартмани

17.07.2018    23786    13    kalyaka    15       

Перенос документов и справочников ERP 2 / КА 2 / УТ 11 => БП 3.0 Промо

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

19700 руб.

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

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

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

1 стартмани

15.07.2018    42200    17    dsdred    22       

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

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

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

1 стартмани

01.06.2018    20807    86    m-rv    57       

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

Уже более 100 компаний приобрели перенос и выполнили переход на УТ 11 / КА 2 / ERP 2 с помощью нашей разработки! Обработка перехода с УТ 10.3 на УТ 11 / КА 2 / ERP 2 позволяет перенести не только остатки на указанную дату (как типовой перенос), но и все возможные документы за выбранный период. При выходе новых релизов этих программ оперативно выпускаем обновление обработки. Предоставляем техническую поддержку. Можем сделать бесплатный тестовый перенос!

29700 руб.

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

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

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

1 стартмани

10.05.2018    29090    28    dsdred    34       

Перенос документов, остатков и справочников КА 1.1 => КА 2 / УТ 11. Обновлено до КА 2.4.10.х и УТ 11.4.10.х! Промо

Более 130 компаний выполнили переход на КА 2 или УТ 11 с помощью нашей разработки! Позволяет перенести не только остатки и справочники (как типовая обработка), но и документы за нужный период времени. Предоставляем техподдержку, оперативно исправляем замечания, выпускаем обновления при выходе новых релизов программ 1С. Вы можете проверить разработку до покупки: сделаем бесплатный тестовый перенос из вашей базы КА 1.1 и предоставим доступ к базе-результату через веб-клиент!

29700 руб.

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

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

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

2 стартмани

08.05.2018    18906    10    wowik    3       

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

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

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

1 стартмани

24.04.2018    30027    75    kalyaka    34       

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

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

Асинхронная запись и чтение файла без использования модальных методов и временных файлов 134

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

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

1 стартмани

10.04.2018    19881    18    Alxby    23       

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

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

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

1 стартмани

08.02.2018    18657    20    mvxyz    17       

С 2020 года сервис «Продление поддержки конфигурации 1С:УПП» подорожает вдвое Промо

Успейте продлить поддержку УПП до повышения цен! Фирма «1С» предупредила об изменении цен на сервис «Продление поддержки конфигурации "1С:Управление производственным предприятием"». С 1 января 2020 года сервис подорожает в два раза.

Бесплатная проверка контрагентов в ФНС (общий модуль с алгоритмом). На примере выводим статус в список справочника контрагентов 124

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

Если вам интересно проверить контрагенте в ФНС, вам поможет данная публикация. Весь алгоритм работы строится на основе данных, полученных с сервиса http://npchk.nalog.ru совершенно бесплатно.

1 стартмани

01.02.2018    26392    62    rpgshnik    46       

Расширение возможностей печати: Вывод произвольного нижнего и верхнего колонтитула 8

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

Расширяем функционал вывода нижнего / верхнего колонтитула. Стандартно 1С имеет достаточно ограничений по выводу и наполнению колонтитулов содержимым, взять хотя бы такие, как вывод только текста и отсутствие ограничения на номер конечной страницы. А при разработке кода сталкиваешься с тем, что свой блок с нижним колонтитулом нужно прижимать к низу страницы. Казалось бы быстро решаемый вопрос, но и в нем есть нюансы. Сейчас я расскажу о том, как решалась эта задача. UPD 15.02.2018. Добавлен вывод верхнего колонтитула; Вывод колонтитулов на первой и последней странице управляется параметрами; Научился считать страницы: Добавлено заполнение переменных аналогичных стандартным из колонтитулов; Задаются форматы даты и времени. Ограничения прежние: 1. Повторно сформировать табличный документ после смены параметров страницы интерактивно.; 2. Передавать данные для более плотной печати как можно более мелко нарезанными кусками.

1 стартмани

29.12.2017    24486    21    agent00mouse    0