Запись текста в кодировке UTF-8 без BOM из 1с 8.2

Публикация № 137454 26.05.12

Приемы и методы разработки

Как-то хочется из 8.2 записать в кодировке "UTF-8 без BOM" любым из менее затратных способов.

Смысл такой: на WEB-сайт потребовалось выгрузить файл в кодировке UTF-8. Но проблема в том, что UTF-8 имеет 2 варианта: "с BOM" и "без BOM". Файлы, сохраненные в этих двух кодировках, получаются одинаковые за исключением того, что в первом случае в начало файла добавлены три байта EF BB BF (в 16-ричной системе счисления). Это и есть символы BOM (сигнатура Byte Order Mark). Так вот, на сайт нужно было отправить "без BOM", а 1с 8.2 сохраняет исключительно "с BOM".

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

Поэтому пошел по простому пути: что не изобретено, на том катаемся.
Придумал через "очень много" так:


это приблизительный код вызова:


текст = Новый ТекстовыйДокумент;
...
здесь в "текст" что-то пихаем
...
папкаФайла = "какая-то папка\";
папкаВОМ = папкаФайла+"temp_BOM\";
имяФайла = "как-то.почему-то";
СоздатьКаталог(папкаВОМ);
текст.Записать(папкаВОМ+имяФайла, КодировкаТекста.UTF8, Символы.ВК);
УбитьВОМ(папкаВОМ+имяФайла, папкаФайла+имяФайла, папкаВОМ);


далее непосредственно главная процедура "УбитьВОМ":


Процедура УбитьВОМ(Знач ИсходныйФайл, РезультирующийФайл, ВременнаяПапка, МассивФайлов = Неопределено)
    Если МассивФайлов = Неопределено Тогда
        МассивФайлов = Новый Массив;
    КонецЕсли;
    бин = Новый ДвоичныеДанные(ИсходныйФайл);
    размер = бин.Размер();
    новыйРазмер = Макс(Окр(размер/2,0),3);
    массив = РазделитьФайл(ИсходныйФайл,новыйРазмер);
    Если массив.Количество() = 2 Тогда
        МассивФайлов.Вставить(0,массив[1]);
    КонецЕсли;
    Если новыйРазмер = 3 Тогда
        ОбъединитьФайлы(МассивФайлов,РезультирующийФайл);
        УдалитьФайлы(ВременнаяПапка);
    Иначе
        УбитьВОМ(массив[0],РезультирующийФайл,ВременнаяПапка,МассивФайлов);
    КонецЕсли;
КонецПроцедуры


В результате получается файл в кодировке "UTF-8 без BOM".

Примечание. понимаю, что через "ж", но если кто подскажет другой вариант это будет интересно со всех сторон.

А в остальном: кому нужно - пользуйтесь и экспериментируйте.

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. andrewks 1320 26.05.12 15:35 Сейчас в теме
если в виндах, то можно заюзать ADODB.Stream

например, так:

		Попытка
			Файл=СоздатьОбъект("ADODB.Stream");
			Файл.Mode=3; // r/w
			Файл.Type=1; //1-Binary, 2-Text
			Файл.Open();
			Файл.LoadFromFile(ИмяФайлаДанных);
			Файл.Position=3;
			ТекстБезБОМ=СоздатьОбъект("ADODB.Stream");
			ТекстБезБОМ.Mode=3; // r/w
			ТекстБезБОМ.Type=1; //1-Binary, 2-Text
			ТекстБезБОМ.Open();
			Файл.CopyTo(ТекстБезБОМ);
			Файл.Close();
			ТекстБезБОМ.SaveToFile(ИмяФайлаДанных,2);
			ТекстБезБОМ.Close();
		Исключение
			ТекстОшибки=ОписаниеОшибки();
			Сообщить(ТекстОшибки,"!");
			Возврат;
		КонецПопытки;

Показать


синтаксис в примере 7-шный, но код применим для любой версии - 7.7, 8.х, главное, чтобы доступ к объекту ADODB.Stream был
Dansur; adhocprog; andrewbc; +3 Ответить
3. andrewbc 293 29.05.12 10:41 Сейчас в теме
(1) andrewks, отлично отработало в следующем виде:

Процедура УбитьВОМ(ИсходныйФайл,РезультирующийФайл)
Попытка
файл = Новый ComObject("ADODB.Stream");
файл.Mode = 3; // r/w
файл.Type = 1; //1-Binary, 2-Text
файл.Open();
файл.LoadFromFile(ИсходныйФайл);
файл.Position = 3;
текстБезБОМ = Новый ComObject("ADODB.Stream");
текстБезБОМ.Mode = 3; // r/w
текстБезБОМ.Type = 1; //1-Binary, 2-Text
текстБезБОМ.Open();
файл.CopyTo(текстБезБОМ);
файл.Close();
текстБезБОМ.SaveToFile(РезультирующийФайл,2);
текстБезБОМ.Close();
УдалитьФайлы(ИсходныйФайл);
Исключение
Сообщить(ОписаниеОшибки(),СтатусСообщения.Важное);
КонецПопытки;
КонецПроцедуры
Mixailovna; +1 Ответить
2. Serj1C 480 28.05.12 12:12 Сейчас в теме
Еще можно провернуть такой танец с бубном (без ВК, работа в памяти, без файлов):
1) получить двоичные данные из файла (как у вас)
2) преобразуем двоичные данные в строку с помощью ЗначениеИзСтрокиВнутр
3) анализируем формат, там не сложно, удаляем лишние переносы кареток (символ 10 вроде) // при желании могу описать подробнее
4) упаковываем поток обратно, получая двоичные данные
5) записываем в файл. Профит
4. andrewbc 293 29.05.12 11:09 Сейчас в теме
(2) Serj1C, не получилось сотворить такой вариант обработки:

1. при преобразовании "ЗначениеВСтрокуВнутр" 1с преобразует двоичные данные в формат base64, при этом длина строки становится больше размера иходного файла почти в полтора раза, это значит, что у нас уже текст не в кодировке UTF-8.
2. не совсем понятно: символы перевода строки (10) (возврат каретки - 13) обязательно удалять? а если это UTF-ный символ с кодом 10?
3. каким образом "упаковать поток обратно"? у объекта "ДвоичныеДанные" только 2 метода - "Размер()" и "Записать(ИмяФайла").
4. как записать в файл результат?

пробовал еще такой вариант:

бин = Новый ДвоичныеДанные(ИсходныйФайл);
бинСтрока = Base64Строка(бин);
новаяБинСтрока = Сред(бинСтрока,4);
бин = Base64Значение(новаяБинСтрока);
бин.Записать(РезультирующийФайл);

но там вообще ерунда получается.
может, примерчик рабочий есть?
5. Serj1C 480 29.05.12 12:23 Сейчас в теме
(4) оформлять как обработку не буду, функции просто положу:

Функция Текст2Base64(Текст, HEX=Ложь)  Экспорт
	// Описание: http://ru.wikipedia.org/wiki/Base64
	Множитель1 = 256;
	Множитель2 = 64;
	СловарьСтрока = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456­789+/=";
	Словарь = Новый Соответствие;
	Для Сч=0 по 64 Цикл
		Словарь.Вставить(Сч, Сред(СловарьСтрока, Сч+1, 1));
	КонецЦикла;
	
	Если HEX=Истина Тогда
		К = 6;
	Иначе
		К = 3;
	КонецЕсли;
	
	ДлинаТекста = СтрДлина(Текст);
	КоличествоЧастей = Цел(ДлинаТекста / К) + ?(ДлинаТекста%К=0, 0, 1);
	Результат = "";
	Для НомерЧасти = 1 По КоличествоЧастей Цикл
		Часть = Сред(Текст, К*(НомерЧасти-1)+1, К);
		
		Если HEX Тогда
			Часть1 = ш(Сред(Часть, 1, 1));
			Часть1 = ш(Сред(Часть, 2, 1)) + Часть1*16;
			Часть2 = ш(Сред(Часть, 3, 1));
			Часть2 = ш(Сред(Часть, 4, 1)) + Часть2*16;
			Часть3 = ш(Сред(Часть, 5, 1));
			Часть3 = ш(Сред(Часть, 6, 1)) + Часть3*16;
		Иначе
			Часть1 = КодСимвола(Сред(Часть, 1, 1));
			Часть2 = КодСимвола(Сред(Часть, 2, 1));
			Часть3 = КодСимвола(Сред(Часть, 3, 1));
		КонецЕсли;
		
		БольшоеЧисло = Часть1 * Множитель1 * Множитель1 + ?(Часть2=-1, 0, Часть2) * Множитель1 + ?(Часть3=-1, 0, Часть3);
		
		Часть4_ = БольшоеЧисло % Множитель2;
		БольшоеЧисло = (БольшоеЧисло-Часть4_) / Множитель2;
		Часть3_ = БольшоеЧисло % Множитель2;
		БольшоеЧисло = (БольшоеЧисло-Часть3_) / Множитель2;
		Часть2_ = БольшоеЧисло % Множитель2;
		БольшоеЧисло = (БольшоеЧисло-Часть2_) / Множитель2;
		Часть1_ = БольшоеЧисло;
		
		Если СтрДлина(Часть)=1*?(HEX, 2, 1)  Тогда
			Часть3_ = 64;
			Часть4_ = 64;
		ИначеЕсли СтрДлина(Часть)=2*?(HEX, 2, 1) Тогда
			Часть4_ = 64;
		КонецЕсли;
		
		Результат = Результат + Словарь.Получить(Часть1_) + Словарь.Получить(Часть2_) + Словарь.Получить(Часть3_) + Словарь.Получить(Часть4_);
	КонецЦикла;
	
	Возврат Результат;
КонецФункции

Функция Ш(С) Экспорт
	Возврат ?(С>="0" и С<="9", КодСимвола(С)-КодСимвола("0"),
		?(С>="A" и С<="F", КодСимвола(С)-КодСимвола("A")+10, -1));
КонецФункции

Процедура Text2Base64(Текст64)
	
	з = "{""#"",87126200-3e98-44e0-b931-ccb1d7edc497,
		|{1,
		|{#base64:"+Текст64+"}
		|}
		|}";
	д = ЗначениеИзСтрокиВнутр(з);
	Сообщить(д);
	д.Записать("e:\1.f");
	
КонецПроцедуры

Процедура Base642Text(Текст64)
	ф = "e:\2.txt";
	норм = "{""#"",87126200-3e98-44e0-b931-ccb1d7edc497,
		|{1,
		|{#base64:"+Текст2Base64(Текст64, Истина)+"}
		|}
		|}";
	д = ЗначениеИзСтрокиВнутр(норм);
	д.Записать(ф);
	Сообщить(д);
КонецПроцедуры
Показать
8. andrewbc 293 31.05.12 12:14 Сейчас в теме
(5) Serj1C, наворочено как-то. для записи простого файлика в формате csv слишком много телодвижений.
самый простой и подходящий вариант - (6).
хотя для общего развития полезно. спасибо.
12. Gmix 405 04.07.12 09:28 Сейчас в теме
(4) Собственно так и делаю.
Только у вас ошибка.
Вот рабочий код:
файлЛог=ПолучитьИмяВременногоФайла(".txt");
	Текст.Записать(файлЛог);
	
	// теперь нужно получить файл без BOM
	ОБ_ДД=Новый ДвоичныеДанные(файлЛог);
	Стр_Base64=Base64Строка(ОБ_ДД);
	ОБ_ДД=Base64Значение(Сред(Стр_Base64,5));
	ОБ_ДД.Записать(файлЛог);


Использовал в Визуализация журнала регистрации Gource
В 8.3 не проверял еще, но думаю должно сработать.
Innuil; seveiven; MsDjuice; +3 Ответить
15. andrewbc 293 04.07.12 15:20 Сейчас в теме
(12) Gmix, этот вариант попробовал - работает. Спасибо за пример. Я просто в цифирьке ошибся. Бывает.
6. mc2 14 30.05.12 10:37 Сейчас в теме
Тоже долго мучился пока нашел как это сделать для записи текстовых файлов средствами 1С:

УдалитьФайлы(ИмяФайла); // надо убедиться, что файл не существует, т.к. если он существует, то данные добавятся в конец файла

ЗТ = Новый ЗаписьТекста(ИмяФайла,,, Истина, Символы.ПС);
ЗТ.Записать(МояСтрока);
ЗТ.Закрыть();

И никаких извращений...
Dialog; Crazy_Max; CratosX; Dioneo; 1c_developer; andogskiy; Lapitskiy; adhocprog; davdykin; lutsiy2; leozx; New Look; ErrorEd88; 1st RUS; vlad.frost; andrewbc; +16 Ответить
7. andrewbc 293 31.05.12 12:11 Сейчас в теме
(6) mc2, шикарный вариант, именно то, что нужно. спасибо!
11. mc2 14 04.07.12 03:38 Сейчас в теме
(7) Ну вот, в 8.3.1 без режима совместимости с 8.2.16, этот вариант работать больше не будет! Разработчики вместо того, чтобы делать то,что надо, делают то что не надо! Теперь извращения принимаются.
13. mc2 14 04.07.12 14:50 Сейчас в теме
(7) нашел новый способ, который годится и для 8.3:

ЗТ = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.ANSI);
ЗТ.Закрыть();
ЗТ = Новый ЗаписьТекста(ИмяФайла,,, Истина, Символы.ПС);
ЗТ.Записать(Данные);
ЗТ.Закрыть();
kn8603; and_r; CratosX; bearman; KPAMOP; Gureev; krv2k; davdykin; dour-dead; BigB; ErrorEd88; andrewbc; +12 Ответить
14. andrewbc 293 04.07.12 15:18 Сейчас в теме
(13) mc2, долго смеялся. Действительно, извращения принимаются. Как так удается находить таких блох? За терпение и находчивость - однозначный +.
16. 1st RUS 81 07.11.12 18:25 Сейчас в теме
(6) mc2,

Попробовал твой метод, и выяснил, что за вредные символы отвечает параметр "Дописывать" в конструкторе "ЗаписьТекста"

в общем получилось так:

УдалитьФайлы(имяФайлаОтправки); это да, это обязательно
ЗаписьТекста = Новый ЗаписьТекста(имяФайлаОтправки,КодировкаТекста.UTF8,,Истина,Символы.ПС);
ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""goods.xml""");
ЗаписьТекста.ЗаписатьСтроку("Content-Type: text/xml");
ЗаписьТекста.ЗаписатьСтроку("");
и ниже пишем содержимое XML файла

СПАСИБО
ShinyButt; sergsqr; xzorkiix; Жолтокнижниг; +4 Ответить
18. mc2 14 08.11.12 00:17 Сейчас в теме
(16) 1st RUS, Посмотрите пожалуйста (13) пост этой темы, т.к. то, что было написано в (6) не работает в 8.3.
22. xzorkiix 32 04.06.14 11:41 Сейчас в теме
(16) 1st RUS, спасибо за

ЗаписьТекста = Новый ЗаписьТекста(имяФайлаОтправки,КодировкаТекста.UTF8,,Истина,Символы.ПС); 


то что надо!
27. andogskiy 10.03.17 16:47 Сейчас в теме
35. fixin 4094 08.04.21 13:21 Сейчас в теме
(6) не работает через Запись Текста, добавляет.
Заюзал вариант в (3), спасибо.
9. Serj1C 480 31.05.12 12:50 Сейчас в теме
(9) тут http://infostart.ru/public/137969/ тоже неплохо описан процесс записи произвольных данных в файл
10. andrewbc 293 31.05.12 13:44 Сейчас в теме
19. Alex1c 19 10.10.13 16:09 Сейчас в теме
Писал обработку для хеширования по ГОСТ с помощью стороннего EXE. Программка работала через командную строку. Необходимо было указать ей путь к файлу с данными на вход. Она генерила выходной файл с хешем.
Поимел проблему. У меня был тестовый файл и файл сгенеренный 1С, с виду абсолютно одинаковые. Разница в размере в 2 байта. Хеш программа выдавала разный. Оказалось что по умолчанию 1С указывается символ перевода строки и при создании файла и при добавлении строки. Указал в обоих местах в качестве символа "" и все пошло. Использовал много идей из этого поста. Возможно кому то будет полезен полный код.

Функция ПолучитьХЭШГОСТ(СтрокаНаВход)


// очистили входящий файл
УдалитьФайлы(КаталогВременныхФайлов()+"in.txt");
ТекстIn = Новый ЗаписьТекста(КаталогВременныхФайлов()+"in.txt", КодировкаТекста.UTF8,"", Ложь,);
ТекстIn.ЗаписатьСтроку(Строка(СокрЛП(ВРЕГ(ВходящиеДанные))));
ТекстIn.Закрыть();

// обрезаем ВОМ
ОБ_ДД=Новый ДвоичныеДанные(КаталогВременныхФайлов()+"in.txt");
Стр_Base64=Base64Строка(ОБ_ДД);
ОБ_ДД=Base64Значение(Сред(Стр_Base64,5));
ОБ_ДД.Записать(КаталогВременныхФайлов()+"in.txt");

// очистили выходной файл
УдалитьФайлы(КаталогВременныхФайлов()+"out.txt");
ТекстOut = Новый ЗаписьТекста(КаталогВременныхФайлов()+"out.txt", КодировкаТекста.UTF8,,Ложь,);
ТекстOut.Закрыть();

//запустили приложение хеширования
ЗапуститьПриложение(Строка(ИмяФайла)+" --gost-cryptopro "+КаталогВременныхФайлов()+"in.txt"+" "+"--output="+КаталогВременныхФайлов()+"out.txt",,Истина,);

//прочитали из выходного файла результат
Текст = Новый ЧтениеТекста(КаталогВременныхФайлов()+"out.txt", КодировкаТекста.UTF8);
Стр = Текст.ПрочитатьСтроку(""); //при создании файла перевод строки убрали,при чтении тоже убрали, то есть читаем весь файл как строку

Стр = СтрЗаменить(Стр,Строка(КаталогВременныхФайлов()+"in.txt"),"");

РезультатХеширования = Врег(Стр);

Возврат РезультатХеширования;

КонецФункции
20. ErrorEd88 52 24.01.14 22:29 Сейчас в теме
Кодировка UTF-8 без BOM называется "CESU-8". Подсказали.
user906806; user1373370; rullin; v_den_v; xvchk; lehis_S; Kazey; maxtomsk; kabanoff; Symbiat; Prad2002; tormozit; formica32; nomadon; Dioneo; Gisborn; vasiliy_b; simgo83; Suxar; Gureev; mc2; malikov_pro; Никс; h00k; rysha; stvorl; 1v7; Valet; sergsqr; AndroidK; DitriX; inhuman; Enot; krv2k; dmitryafanasyev91; DrBlack; Широкий; PolAlex2; Aleksey.Bochkov; BigB; adhocprog; deaddy64; Xephone; ilya4; +44 Ответить
21. andrewks 1320 25.01.14 07:25 Сейчас в теме
(20) ErrorEd88, да ну! и где же об этом написано в описании стандарта? http://www.unicode.org/reports/tr26/
23. Xephone 01.10.14 05:01 Сейчас в теме
24. DrBlack 21 27.08.15 12:33 Сейчас в теме
(20) ErrorEd88, Спасибо!
Информация верная!!! :)
25. dmitryafanasyev91 13.10.15 11:48 Сейчас в теме
26. loky12 10.08.16 12:17 Сейчас в теме
(20) ErrorEd88,
Спасибо помог, очень выручило при склейке csv созданных в фоновых в многопоточной обработке.
28. aaa_pol 31.01.18 23:52 Сейчас в теме
Писал выгрузку на сайт через файл .csv столкнулся с данной проблемой. Перепробовал несколько способов из указанных выше. Нашел для себя наиболее оптимальный следующий метод, который меняет кодировку в уже готовом, ранее сформированном файле .csv

////создаем сам файл
СписокЭкспорт = Новый ТекстовыйДокумент;
СписокЭкспорт.ДобавитьСтроку(ПерваяСтрокаФайла);  ////в цикле добавляем все что надо
СписокЭкспорт.Записать(ИмяФайлаЭкспортаCSV,КодировкаТекста.UTF8);  //// Где "ИмяФайлаЭкспортаCSV" полный путь к файлу

////меняем в готовом файле кодировку "с BOM" на "без BOM"
КонвертируемыйФайл = Новый ДвоичныеДанные(ИмяФайлаЭкспортаCSV);
Строка64=Base64Строка(КонвертируемыйФайл);
Строка64=Прав(Строка64,СтрДлина(Строка64)-4);
ДляЗаписиВФайл=Base64Значение(Строка64);
ДляЗаписиВФайл.Записать(ИмяФайлаЭкспортаCSV);
Показать
29. userGJ 07.05.18 12:44 Сейчас в теме
Варианты с сохранением в промежуточный файл изначально кривое решение. В 20 разумное решение с указанием другой кодировки.
30. Stas84 22.06.18 10:17 Сейчас в теме
20 -> то что нужно, пробуйте указать кодировку в наглую. Вместо КодировкаТекста.UTF8 ->"CESU-8"
Например:
Запрос.УстановитьТелоИзСтроки(ТекстPOSTЗапроса, "CESU-8");
pahich; user743891; +2 Ответить
31. sultbec 8 07.08.19 22:36 Сейчас в теме
(30) в типовой нашел такой код:
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
32. user852614 09.08.19 10:28 Сейчас в теме
Так решил проблему:
	
        ФП = Новый ФайловыйПоток(ИмяФайлаИсходного,РежимОткрытияФайла.СоздатьНовый,ДоступКФайлу.ЧтениеИЗапись);
	Текст = Новый ЗаписьТекста(ФП,,, Истина, Ложь);//Последний параметр самый важный
	Текст.Записать(СтрокаДанных);
	Текст.Закрыть();
	ФП.Закрыть();
qSergey; dock; +2 Ответить
33. user852614 12.08.19 11:26 Сейчас в теме
(32)
Текст = Новый ЗаписьТекста(ФП,КодировкаТекста.UTF8,, , Ложь);//Предпоследний параметр не нужен, надо так ;)
34. dock 44 30.05.20 04:33 Сейчас в теме
(33) Да и последний не нужен :)
<ЗаписатьBOM> (необязательный)
Тип: Булево.
Если в начало потока требуется записать метку порядка байтов (BOM) для используемой кодировки текста, то данный параметр должен иметь значение Истина.
Значение по умолчанию: Ложь.
36. burni4 77 29.06.21 14:28 Сейчас в теме
ТекстовыйДокумент = Новый ТекстовыйДокумент;
	ТекстовыйДокумент.УстановитьТекст(ТекстКомандногоФайла);
	ТекстовыйДокумент.Записать(ПолноеИмяФайла, "cp866");


установил кодировку cp866 и все взлетело без танцев с бубнами
Оставьте свое сообщение

См. также

Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо

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

В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.

12.12.2020    4611    Eugen-S    23    

Обзор полезных методов БСП 3.1.4. Часть 2

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

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

27.04.2021    16426    rayastar    7    

Обзор полезных методов БСП 3.1.4

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

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

25.03.2021    41941    rayastar    51    

Звуковое управление в 1С 8.3

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

В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.

16.03.2021    7269    velemir    33    

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

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

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

27.01.2016    85909    Serginio    116    

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

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

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

28.12.2020    9004    comol    31    

Полезные функции БСП (Часть 2)

БСП (Библиотека стандартных подсистем) v8 1cv8.cf Россия Бесплатно (free)

Список полезных функций из состава Библиотеки стандартных подсистем 3.1.

10.03.2020    21028    user5300    20    

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

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

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

27.01.2020    66518    ids79    26    

Как я начал администрировать сервер 1С: Предприятие 8.3 с телефона Промо

Инструменты администратора БД Мобильная разработка v8 Бесплатно (free)

Развитие инструментов управления кластером серверов 1С:Предприятие 8.3.

14.04.2017    67719    user700211_a.straltsou    30    

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

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

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

15.01.2020    44070    John_d    22    

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

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

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

30.12.2019    35787    kuzyara    38    

Шпаргалка (БСП). Добавление в новый документ механизма печати дополнительных печатных форм

Печатные формы БСП (Библиотека стандартных подсистем) v8 1cv8.cf Бесплатно (free)

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

10.10.2019    30776    John_d    21    

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

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

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

10.12.2016    41180    unichkin    74    

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

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

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

07.10.2019    39941    HostHost    41    

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

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

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

01.10.2019    53519    Yashazz    56    

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

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

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

06.09.2019    103873    rpgshnik    77    

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

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

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

15.10.2018    36238    tormozit    106    

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

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

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

05.09.2019    78432    ids79    56    

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

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

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

17.08.2019    45444    ids79    22    

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

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

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

08.08.2019    154021    ids79    75    

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

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

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

20.09.2012    82932    tormozit    131    

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

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

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

02.08.2019    61338    avalakh    27    

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

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

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

26.07.2019    106654    ids79    17    

Обработчики событий при записи объектов. Зачем и что за чем?

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

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта.... Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

25.07.2019    114083    AlbinaAAA    49    

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

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

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

11.07.2007    54559    tormozit    51    

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

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

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

17.07.2019    48772    ids79    27    

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

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

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

04.07.2019    22614    SeiOkami    53    

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

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

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

25.06.2019    76810    ids79    28    

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

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

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

10.09.2017    51345    tormozit    74    

Подсистема "Варианты отчетов". Используете ли Вы ее правильно?

Работа с интерфейсом БСП (Библиотека стандартных подсистем) v8 1cv8.cf Бесплатно (free)

Небольшая история про использование подсистемы "Варианты отчетов" из БСП. Используете ли Вы ее правильно?

04.06.2019    56609    YPermitin    55    

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

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

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

16.05.2019    64418    YPermitin    31    

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

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

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

25.04.2019    18065    m-rv    3    

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

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

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

01.06.2018    37123    m-rv    23    

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

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

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

16.04.2019    23395    m-rv    18    

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

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

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

07.04.2019    42847    ellavs    131    

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

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

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

28.03.2019    32136    ellavs    90    

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

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

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

14.03.2019    41393    YPermitin    53    

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

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

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

03.02.2019    66011    ids79    11    

Универсальные функции ЗУП 3.1 / ЗКГУ 3.1, которые помогут в разработке

Универсальные функции Зарплата Управление персоналом (HRM) Зарплата Кадровый учет v8 v8::СПР ЗКГУ3.0 ЗУП3.x БУ Бесплатно (free)

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

14.11.2018    148039    GeterX    135    

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

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

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

10.11.2018    45108    ids79    46    

Git + 1С. Часть 1. Как подключиться к команде разработки и начать использовать Git

Инструментарий разработчика Методология v8 1cv8.cf Бесплатно (free)

Первая статья из цикла инструкций по работе с Git в 1С-разработке. Рассмотрим, как настроить рабочее место, как получить свою "копию" проекта для разработки и приступить к полезным действиям. Все примеры будут изложены в рамках трёх практических кейсов: 1. Моя команда дорабатывает типовую конфигурацию, использует приватный репозиторий на BitBucket, в котором версионируются внешние отчеты/обработки, расширения конфигураций и правила обмена; 2. Я участвую в стартап-команде, которая разрабатывает свою конфигурацию с использованием Git и GitLab; 3. Я принимаю участие в развитии OpenSource-продукта на GitHub как заинтересованный разработчик (контрибьютор).

18.10.2018    93717    stas_ganiev    86    

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

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

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

23.08.2018    48827    Rain88    49    

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

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

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

25.07.2018    31611    grumagargler    31    

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

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

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

15.07.2018    53425    papche    59    

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

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

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

25.06.2018    30285    olegtymko    48    

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

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

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

04.06.2018    47635    xrrg    95