Как сделать csv-файл согласно RFC4180

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

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

31
На днях потребовалось выгрузить данные из таблицы значений в CSV-файл. Спросил у гугла готовый код и... поставил его в тупик. Тогда отправился в закрома и нарыл универсальную процедуру на Delphi, которую когда-то (много-много лет тому назад) написал. Перевел ее на 1С-овременный язык. И вот что получилось...

Увы! Статья не может состоять только из кода. После некоторых раздумий я решился осквернить этот скрижаль мысли в рамках RFC4180, квинтэссенцию материализации файла с разделителями на накопителях и прочее и прочее своим косноязычным описанием сего таинства.
Пролью свет и приоткрою глаза начинающего программиста Архипа на это чудо. Итак, слушай, о достопочтенный начинающий программист Архип.

... 
имяФайлаCSV = КаталогВременныхФайлов()+"anycsvfile.txt"; 
Кодировка = КодировкаТекста.ANSI; разделитель = ","; 
текст = СоздатьДанныеCSV(ТаблицаЗначенийПолученнаяИзЗапроса, разделитель); 
ЗаписатьCSV(текст, имяФайлаCSV, Кодировка); 
... 

Прежде всего должен ты получить таблицу значений. Самый простой способ - написать запрос и выгрузить результат в упомянутую мной сущность бытия данных. Затем надо определиться с именем файла. После этого дозволь обратить твой взор, о начинающий программист Архип, на функцию СоздатьДанныеCSV(таблицаЗначений, разделитель = ",", выводитьЗаголовок = ЛОЖЬ). В эту функцию передается та самая таблица значений, полученная из запроса. А кроме нее разделитель полей. А потом принять ответственное решение на заполнение первой строки названиями колонок этой самой, выше упомянутой таблицы значений (см. функцию СоздатьЗаголовкиCSV).

А дальше таблица значений будет читаться построчно, и каждая строка ее будет превращаться в сроковое значение в соответствии с заклинанием манускрипта СоздатьСтрокуCSV(запись,разделитель).

// Создаем строку загоовков для CSV-файла
Функция СоздатьЗаголовкиCSV(таблицаЗначений, разделитель)
	
    колонкиТЗ = ТаблицаЗначений.колонки;
	
    Для каждого колонка Из колонкиТЗ Цикл
		
		Если СтрДлина(стрКолонки)>0 Тогда
			стрКолонки = стрКолонки + разделитель;
		КонецЕсли;	
		
		стрКолонки = стрКолонки + колонка.Имя;
		
	КонецЦикла; 
	
    Возврат стрКолонки;
	
КонецФункции

// Создаем строку записи ТаблицыЗначений для CSV-файла
Функция СоздатьСтрокуCSV(записьТаблицаЗначений, разделитель)    
	
	стрЗапись = "";    
	
	Для каждого поле Из записьТаблицаЗначений Цикл
		
		Если СтрДлина(стрЗапись)>0 Тогда
			стрЗапись = стрЗапись + разделитель;
		КонецЕсли;	
		
		Если ТипЗнч(поле) = Тип("Число") Тогда
			стрПоле = ?(ЗначениеЗаполнено(поле),Формат(поле,"ЧРД=."),"0");
		
		ИначеЕсли ТипЗнч(поле) = Тип("Дата") Тогда 
			стрПоле = Формат(поле,"ДФ=dd.MM.yyyy");
			
		Иначе //Если ТипЗнч(поле) = Тип("Строка") Тогда
			
			стрПоле = СтрЗаменить(Строка(поле),"""","""""");
			
			Если 
				( СтрНайти(стрПоле," ")>0  ) ИЛИ
          		( СтрНайти(стрПоле,"""")>0 ) ИЛИ
          		( СтрНайти(стрПоле,",")>0  ) ИЛИ
          		( СтрНайти(стрПоле,";")>0  ) ИЛИ
          		( СтрНайти(стрПоле,Символы.Таб)>0 )  ИЛИ
          		( СтрНайти(стрПоле,Символы.ВК)>0 )   ИЛИ
          		( СтрНайти(стрПоле,Символы.ПФ)>0 )   ИЛИ
          		( СтрНайти(стрПоле,Символы.ВТаб)>0 ) ИЛИ
          		( СтрНайти(стрПоле,Символы.НПП)>0 )  ИЛИ
          		( СтрНайти(стрПоле,Символы.ПС)>0 ) 
			Тогда 
				стрПоле = """"+стрПоле+"""";
			КонецЕсли;	
			
		КонецЕсли; 	
		
        стрЗапись = стрЗапись + Строка(стрПоле);
		
	КонецЦикла; 
	
    Возврат стрЗапись;
	
КонецФункции

// 
Функция СоздатьДанныеCSV(таблицаЗначений, разделитель = ",", выводитьЗаголовок = ЛОЖЬ)
	
	текстЗапись="";
	
	Если выводитьЗаголовок Тогда
	    текстЗапись=СоздатьЗаголовкиCSV(ТаблицаЗначений, разделитель);    
	КонецЕсли;
	
	Для Каждого запись Из таблицаЗначений Цикл
		
        стрЗапись = СоздатьСтрокуCSV(запись,разделитель);            
		Если СтрДлина(стрЗапись)>0 Тогда
			текстЗапись = текстЗапись +	Символы.ПС;
		КонецЕсли;	
        текстЗапись = текстЗапись + стрЗапись;
		
    КонецЦикла;        

    Возврат текстЗапись;

КонецФункции // СоздатьДанныеCSV()

// Запишем данные в файл
Процедура ЗаписатьCSV(текст, имяФайла, кодировка)              

    ТекстовыйФайлЗапись = Новый ЗаписьТекста(имяФайла, кодировка);            
    ТекстовыйФайлЗапись.Записать(Текст); 
    ТекстовыйФайлЗапись.Закрыть();    
	
КонецПроцедуры // ЗаписатьCSV()
31

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

Комментарии
Избранное Подписка Сортировка: Древо
1. kuzyara 813 02.03.16 08:31 Сейчас в теме
Хоть бы RFC привели, интересно же
Evil Beaver; +1 Ответить
3. pit201201 69 02.03.16 11:05 Сейчас в теме
(1) kuzyara,
привел, RFC4180, гугл знает где взять и даже переводит сносно
2. Nati4ka 02.03.16 09:59 Сейчас в теме
И можно еще чуть модифицировать и получится универcальный код для создания .csv и .tsv =)
4. pit201201 69 02.03.16 11:07 Сейчас в теме
(2) Nati4ka,
вроде ничего не надо там модифицировать, только поменять на разделитель = Символ.Таб
5. it-on 02.03.16 11:14 Сейчас в теме
Боюсь ошибку выдаст программа сия, о достопочтенный учитель, в случае когда надо вывести заголовки.
В функции СоздатьЗаголовкиCSV нет начального описания переменной стрКолонки.
6. pit201201 69 02.03.16 11:19 Сейчас в теме
(5) it-on,
Ну зачем так сразу-то, на весь класс. Решил - поднял руку, получил пять.
7. it-on 02.03.16 11:30 Сейчас в теме
(6) Прости учитель. С первого класса у меня так - сначала скажу, потом подумаю, а часто и не подумаю - скажу. Из-за чего часто выгоняли в коридор...
8. speshuric 1124 03.03.16 13:06 Сейчас в теме
На длинных таблицах код будет быстро деградировать по производительности. И только эта деградация спасёт от переполнения памяти. Тут либо уж сразу в файл писать, либо использовать ЗаписьXML как StringBuilder.

Вот пример. Учтите только, что этому коду уже 6 лет.
Evil Beaver; pit201201; kuzyara; ildarovich; +4 Ответить
12. pit201201 69 04.03.16 13:38 Сейчас в теме
(8) speshuric,
Все так. Нужно будет выгрузить большие объемы - деградируем. Хотя csv и большие объемы - сомнительный союз.
13. speshuric 1124 04.03.16 14:03 Сейчас в теме
(12)
Не соглашусь. Именно CSV нереально рулит на больших объёмах. Какие другие варианты в родном 1С-коде? XML - это вообще нецензурно. DBF - ограничение в сколько-то гигов (то ли 2 то ли 4 то ли еще что-то подобное). JSON - слишком молодо и оверхэд всё равно заметный. Табличный документ (в MXL или XLSX) сдохнут в районе миллиона строк. Остаются только внешние источники данных (или сразу ADO), там можно по частям запихивать, но не все получатели могут через ODBC/ADO. Все остальные средства - неродные вроде бы. И вот - единственный финалист CSV - благо во всех языках, в том числе 1С, его прочитать можно последовательно. Но и CSV в памяти тогда весь держать не следует, конечно же.
pit201201; Evil Beaver; +2 Ответить
16. pit201201 69 04.03.16 18:52 Сейчас в теме
(13) speshuric,
Ok, прозвучало убедительно, после праздников выпущу в свет второй комплект процедур и функций для больших массивов.
14. starik-2005 1973 04.03.16 14:03 Сейчас в теме
(12) скажите это тем, кто выгружает файл о недействительных паспортах - там 1 гиг в CSV.
17. pit201201 69 04.03.16 19:10 Сейчас в теме
(14) starik-2005,
про паспорта мне комментировать сложно, не тот профиль. Но есть предположение что, что-то не то в регламенте обмена. У меня получается на 1 недействительный паспорт 4+6+6 символов, плюсом 3 запятых. Итого 20(21) символ на запись с учетом ПС. 1073741824 /21=51130563 паспортов. Каждый третий в стране поменял паспорт. Интересно за какой период эта выборка?
18. starik-2005 1973 04.03.16 21:53 Сейчас в теме
(17) за все периоды, как я понял. Это официальная открытая информация в целях соблюдения закона 115-ФЗ. Вот еще ссылка интересная. В 1 ГиБ данных 96 млн с лишним паспортов. На каждый паспорт 4+","+6+#13#10 = 13 символов. Откуда Вы насчитали три запятых - я ума не приложу.
19. pit201201 69 09.03.16 10:27 Сейчас в теме
(18) starik-2005,
добавил еще код подразделения, выдававшего паспорт, но видимо лишнее
9. Xershi 739 03.03.16 22:12 Сейчас в теме
За сказку 5, а за повествование 2! Ну кто в такой манере статью пишет...
10. starik-2005 1973 03.03.16 22:30 Сейчас в теме
А так-то. батенька, зачем:
стрПоле = ?(ЗначениеЗаполнено(поле),Формат(поле,"ЧРД=."),"0");

Ну есть же в формате вариант для описания нулевого значения!

Дальше если в поле есть символ ( " ), то вы такое поле помещаете в кавычки:
стрПоле = """"+стрПоле+"""";


Если на входе будет такая строка, то что получится:
"Вася","Петя"","""Саша"""",""""Миша"""""


В итоге все преобразуется в строку:
""Вася","Петя"","""Саша"""",""""Миша""""""


Как это распарсится при чтении? Хреново. В действительности, надо все символы ( " ) заменить на символы ( "" ), т.е. так:
стрПоле = """"+СтрЗаменить(СтрПоле,"""","""""")+""""


Что, я один это увидел?
kostik_love; kuzyara; +2 1 Ответить
11. pit201201 69 04.03.16 13:25 Сейчас в теме
(10) starik-2005,
чуть выше проверки на кавычку в строке есть строка, предлагаемый Вами вариантом с заменой кавычки на пару кавычек
стрПоле = СтрЗаменить(Строка(поле),"""","""""");

так-что вроде все справедливо.

А насчет 0 у числового значения: у 1С трудно понять в числовом значении где 0, а где NULL.Поэтому и проверяю если тип = ЧИСЛО и пусто, то пусть будет 0, а не пустое значение. Хотя вопрос интересный. Или имелось ввиду
Формат(поле,"ЧРД=.; ЧН=0")
?
15. kuzyara 813 04.03.16 17:36 Сейчас в теме
кг/ам, но все-таки взял на себя смелость перевести этот rfc4180:
Общий формат и MIME-тип для значений, разделенных запятыми (CSV файлов)


1. Введение
----------------------------

Формат CSV (от англ. Comma-Separated Values — значения, разделённые запятыми)
используется для обмена и конвертации данных между различными электронными
таблицами, и уже достаточно давно. Удивительно, но несмотря на большую
распространённость этого формата, он так и не был официально задокументирован.
Кроме того, в то время как список MIME-типов включает в себя тип
"text/tab-separated-values" никакой MIME-тип не был зарегистрирован для CSV.

В то же время, различные программы и операционные системы с низапямятных времен используют различные MIME-типы для этого формата. Этот RFC документ официально регистрирует "text/csv" MIME-тип для CSV в соответствии с RFC 2048 [1].


2. Описание CSV формата
----------------------------

В то время как существуют различные реализации и спецификации для CSV формата
(напр. [4], [5], [6] и [7]), не существует ни одной официальной спецификации
в настоящее время, что позволяет существовать множеству разнообразных
интерпретации CSV файлов. Этот раздел описывает формат, которому, похоже,
следуют большинство реализаций:

1. Записи расположены на отдельных строках, разделенных символом разрыва
строки (CRLF). Например:

ааа, bbb, ссс CRLF
zzz, ууу, ххх CRLF

2. Последняя запись в файле может иметь или не иметь перенос строки.
Например:

ааа, bbb, ссс CRLF
zzz, ууу, ххх

3. Опционально и совсем необязательно в первой строке файла может быть
расположен заголовокв том же формате, как и для обычных записей строк.
Этот заголовок будет являться именами соответствующих полей в файле и
должн содержать такое же количество полей, как записи в остальной части
файла (наличие или отсутствие строки заголовка должно быть указано с
помощью дополнительного параметра этого MIME-типа). Например:

field_name, field_name, field_name CRLF
ааа, bbb, ссс CRLF
zzz, ууу, ххх CRLF

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

ааа, bbb, ссс

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

"ааа", "bbb", "ccc" CRLF
zzz, ууу, ххх

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

"ааа", "b CRLF
bb ","ccc" CRLF
zzz, ууу, ххх

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

"aaa","b""bb","ccc"

ABNF грамматика (англ. augmented Backus-Naur form — расширенная форма
Бэкуса — Наура) [2] выглядит следующим образом:

file = [header CRLF] record *(CRLF record) [CRLF]

header = name *(COMMA name)

record = field *(COMMA field)

name = field

field = (escaped / non-escaped)

escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE

non-escaped = *TEXTDATA

COMMA = %x2C

CR = %x0D ;как указано в разделе 6.1 RFC 2234 [2]

DQUOTE = %x22 ;как указано в разделе 6.1 of RFC 2234 [2]

LF = %x0A ;как указано в разделе 6.1 of RFC 2234 [2]

CRLF = CR LF ;как указано в разделе 6.1 of RFC 2234 [2]

TEXTDATA = %x20-21 / %x23-2B / %x2D-7E


3. MIME-тип text/csv
----------------------------

Этот раздел содержит media-type описание приложений (в соответствии
с RFC 2048 [1]).

Кому: ietf-types@iana.org
Тема: Описание MIME-типа text/csv
Имя MIME-типа: text
Имя MIME подтипа: CSV
Обязательные параметры: нет
Дополнительные параметры: charset, header

Повсеместно использование CSV в US-ASCII, но и другие кодировки могут
быть использованы в сочетании с параметром "Charset" .

Параметр "header" указывает на наличие или отсутствие строки заголовка.
Допустимые значения "present" или "absent". Разработчики могут не
использовать этот параметр должен самостоятельно принимать решение
относительно того, присутствует или отсутствует строка заголовка.

Декодирование записей:

Как указано в разделе 4.1.1 RFC 2046 [3], этот media-тип использует CRLF
для обозначения разрыва строки, однако, разработчики должны знать, что
некоторые реализации могут использовать другие значения.

Соображения безопасности:

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

Соображения совместимости:

Из-за отсутствия единой спецификации, существуют значительные
различия между реализациями. Разработчики, вы должны "быть
консервативными в том, что вы делаете, и быть либеральным в том,
что вы принимаете от других"(RFC 793 [8]), когда делаете обработку
файлов CSV. Попытка создать общее определение можно найти в разделе 2.

Разработчик, решенив не использовать параметр "header" должен принимать
самостоятельно решение относительно того, присутствует ли заголовок
или отсутствует.

Опубликованная спецификация:

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

Приложения, использующие этот media-тип:

Электронные таблицы и различные утилиты преобразования данных.

Дополнительная информация:

Магическое число: нет

Расширение файла: CSV

Macintosh тип файла: TEXT

Email для получения дополнительной информации:

Yakov Shafranovich <ietf@shaftek.org>

Назначение использования: ОБЩЕЕ

Автор / Контроллер: IESG

4. Соображения IANA

IANA зарегистрировал MIME-тип "text/csv" с помощью
приложения, предусмотреного в разделе 3 настоящего документа.

5. Вопросы безопасности

См обсуждение выше в разделе 3.

6. Выражаю признательностт

Автор хотел бы поблагодарить Dave Crocker, Martin Duerst, Joel M.
Halpern, Clyde Ingram, Graham Klyne, Bruce Lilly, Chris Lilley, и
членов IESG за их полезные предложения. Особое слово
благодарности Дэйву за помощь с грамматикой ABNF.

Автор хотел бы также поблагодарить Henrik Lefkowetz, Marshall Rose,
и сообщество xml.resource.org за предоставление многих инструментов
для приготовления RFC и интернет-проектов.

Особая благодарность L.T.S.

7. Ссылки

7.1. Нормативные ссылки

[1] Freed, Н., Кленсин, J., и J. Постел, "Интернет Многоцелевой
Mail Extensions (MIME) Часть четвертая: Процедуры регистрации ", BCP
13, RFC 2048, ноябрь 1996 года.

[2] Крокер, Д. и П. Overell, "Augmented BNF для синтаксиса
Технические характеристики: ABNF ", RFC 2234, ноябрь 1997 года.

[3] Freed, Н. и Н. Borenstein, "Многоцелевой Internet Mail
Расширения (MIME) Часть вторая: Типы носителей ", RFC 2046, ноябрь
1996.

7.2. Информативные ссылки

[4] Repici, J., "How-To: запятая Separated Value (CSV) файла
Формат ", 2004,
<Http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm>.

[5] Edoceo, Inc., "Формат CSV файла Стандартный", 2004,
<Http://www.edoceo.com/utilis/csv-file-format.php>.

[6] Rodger, Р. и О. Шанахай, "Документация для Ricebridge CSV
Менеджер ", февраль 2005 г.,
<Http://www.ricebridge.com/products/csvman/reference.htm>.

[7] Раймонд Е., "Искусство программирования Unix, Глава 5", сентябрь
2003,
<Http://www.catb.org/~esr/writings/taoup/html/ch05s02.html>.

[8] Постел, J., "Протокол управления передачей", STD 7, RFC 793,
Сентябрь 1981.

Адрес автора:

Yakov Shafranovich
SolidMatrix Technologies, Inc.

EMail: ietf@shaftek.org
URI: http://www.shaftek.org
Показать


Собственно самая интересная часть:
ABNF грамматика:

file = [header CRLF] record *(CRLF record) [CRLF]
header = name *(COMMA name)
record = field *(COMMA field)
name = field
field = (escaped / non-escaped)
escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE
non-escaped = *TEXTDATA
TEXTDATA = %x20-21 / %x23-2B / %x2D-7E
20. kuzyara 813 22.08.16 15:34 Сейчас в теме
21. ZLENKO 381 08.11.17 15:32 Сейчас в теме
Реализовано в версии 8.3.6.1977 функции: СтрРазделить(), СтрСоединить()
Читаем тут: https://infostart.ru/public/366865/
Оставьте свое сообщение

См. также

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

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

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

07.10.2019    9088    HostHost    23       

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

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

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

05.09.2019    13176    ids79    44       

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

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

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

03.09.2019    9309    YPermitin    68       

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

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

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

17.08.2019    10650    ids79    16       

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

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

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

08.08.2019    14293    ids79    30       

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

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

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

02.08.2019    11483    avalakh    21       

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

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

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

26.07.2019    12920    ids79    6       

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

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

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

17.07.2019    11325    ids79    27       

Регистры сведений. За кулисами 129

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

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    8873    YPermitin    12       

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

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

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

04.07.2019    8122    SeiOkami    49       

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

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

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

25.06.2019    21188    ids79    17       

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

Статья Программист Нет файла v8 v8::Запросы Бесплатно (free) Практика программирования Разработка

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

11.06.2019    12768    dmurk    134       

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

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

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

16.05.2019    19181    YPermitin    27       

Выполнение внешней обработки в фоновом задании 149

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

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    11397    Eret1k    23       

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

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

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

25.04.2019    6221    m-rv    2       

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

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

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

16.04.2019    8851    m-rv    16       

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

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

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

07.04.2019    17902    ellavs    122       

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

Статья Программист Стажер Нет файла v8 Windows Бесплатно (free) Практика программирования Разработка

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

28.03.2019    14059    ellavs    83       

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

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

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

14.03.2019    14391    YPermitin    52       

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

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

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

03.02.2019    17424    ids79    9       

EnterpriseData – часть 2. Процесс выгрузки данных 127

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

Основные этапы выгрузки данных через ED, обработчики событий выгрузки, правила обработки данных, правила конвертации объектов, конвертация свойств первого и второго этапов, процедуры БСП, используемые при выгрузке данных, структура «КомпонентыОбмена».

26.12.2018    13881    ids79    27       

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

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

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

14.12.2018    23267    ids79    72       

EnterpriseData - пример доработки правил конвертации без использования КД 3.0 в расширении конфигурации 119

Статья Программист Нет файла v8 v8::УФ БП3.0 УТ11 Россия Windows Бесплатно (free) Практика программирования Обмен через XML

В статье подробно описан реальный пример доработки обмена данными через EnterpriseData (универсальный формат обмена) между конфигурациями УТ 11.4 и Бухгалтерия 3.0

16.11.2018    20455    ids79    20       

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

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

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

13.11.2018    22271    Unk92    19       

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

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

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

10.11.2018    22361    ids79    40       

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

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

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

15.10.2018    21570    tormozit    100       

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

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

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

03.09.2018    15821    nikita0832    42       

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

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

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

23.08.2018    22998    Rain88    42       

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

Статья Программист Нет файла v8 КД ОС Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8

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

25.06.2018    20314    olegtymko    47       

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

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

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

04.06.2018    25690    xrrg    82       

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

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

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

01.06.2018    22244    m-rv    21       

Строим графы средствами 1С (без GraphViz) 43

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

Множество статей на Инфостарте описывают, как работать с компонентой GraphViz, чтобы построить ориентированный граф. Но практически нет материалов, как работать с такими графами средствами 1С. Сегодня я расскажу, как красиво строить графы с минимальным пересечением. Нам этот метод пригодился для отрисовки алгоритмов в БИТ.Финансе, т.к. типовой механизм не устраивал. Еще это может быть полезно для визуализации различных зависимостей: расчета себестоимости, графы аффилированности компаний и т.д. Надеюсь, эта статья поможет сделать мир 1С красивее и гармоничней:) Итак, поехали...

23.05.2018    18046    slozhenikin_com    19       

Распределение расходов пропорционально продажам 9

Статья Программист Пользователь Нет файла v8 v8::ОУ УТ10 УУ Финансовый учет и бюджетирование (FRP) Учет доходов и расходов Бесплатно (free) Практика программирования

Финансовая модель. Распределение административных расходов по подразделениям пропорционально продажам за месяц. Дополнительные реквизиты против бизнес-процессов!

13.05.2018    12119    Rustig    9       

Просмотр временных таблиц запроса в отладчике без изменения кода 129

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

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

24.04.2018    26633    avfed@rambler.ru    19       

Минимализмы 3 356

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

Очередная серия "минимализмов" [http://infostart.ru/public/306536/, https://infostart.ru/public/460935/]. Также, как и в предыдущих статьях, здесь приведена подборка коротких оригинальных авторских решений некоторых задач. Ранее эти решения были разбросаны по моим комментариям к чужим публикациям.

19.02.2018    37213    ildarovich    44       

Этюды по программированию. Взаимодействие с Microsoft Word 109

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

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

11.12.2017    26615    milkers    23       

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

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

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

05.12.2017    22035    itriot11    34       

1С: Конвертация данных 3. Инструкции и примеры. EnterpriseData (универсальный формат обмена) 737

Статья Программист Нет файла v8 КД Бесплатно (free) Перенос данных из 1C8 в 1C8 Практика программирования Обмен через XML

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

19.11.2017    142956    MaxS    251       

Заполнение данных по ИНН контрагента с помощью альтернативного сервиса огрн.онлайн 131

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

Код для заполнения данных по ИНН контрагента из ЕГРЮЛ с сайта огрн.онлайн.

01.11.2017    23817    slava_1c    49       

Программные перечисления, ч.2: приемы кэширования при разработке 67

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

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

30.10.2017    22130    unichkin    18       

Разбираемся с настройками компоновки данных 161

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

Краткая шпаргалка по программной работе с настройками СКД

29.10.2017    25206    json    9       

Работа с Excel 298

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Загрузка и выгрузка в Excel

Собрал различные полезности для работы с Excel из 1С. Иногда приходится форматировать документ Excel программно из 1С. Так вот, чтобы не искать постоянно на просторах интернета как сделать левое выравнивание в ячейке Excel из 1С и т.п. решил опубликовать это...

23.10.2017    27217    arakelyan    39