Имя: Пароль:
1C
1С v8
Кто контролирует корректность данных?
0 fjay69
 
02.03.21
14:44
Вопрос не совсем по 1С, а по программированию в целом. Я уверен, это есть где-то в стандартах разработки, но найти не смог. Есть две базы (не обязательно 1С-ные), которые обмениваются между собой данными. Вопрос: кто должен контролировать корректность данных: отправитель или получатель? Немного конкретики. Однажды от получателя пришла жалоба, что передаваемый мной данные не парсятся. Данные передаю текстовым документом в формате CSV. Причина в том, что 1С при сохранении текстового документа в кодировке UTF-8 добавляет в начало файла несколько байт (так называемые Bite Order Mark), которые получатель считывает не задумываясь. Меня попросили пересохранять данные без BOM. Но есть другой процесс, когда уже я являюсь получателем. И я тоже получаю текстовый файл с BOM. При этом на мою жалобу мне ответили, чтобы Я отсекал BOM со своей стороны. Или, например, передаются данные, а некоторые поля с пробелами в начале или конце.

Можете смеятся надо мной. Мол, это базовые вещи, об этом знают все. Ну... Мне никто не рассказал.
1 Cthulhu
 
02.03.21
14:46
Постулаты Трумэна по программированию.
1. Самая грубая ошибка будет выявлена,
лишь когда программа пробудет в производстве, по крайней мере, полгода.
2. Контрольные перфокарты,
которые не могут стоять в неправильном порядке, будут перепутаны.
3. Если назначен специальный человек для контроля
за чистотой исходной информации, то найдется изобретательный идиот,
который придумает способ, чтобы неправильная информация
прошла через этот контроль.
4. Непечатный жаргон - это тот язык, которым решительно все
программисты владеют в совершенстве.
2 ДедМорроз
 
02.03.21
14:48
Формат данных оговаривается в протоколе.
Если сказано просто utf-8,то наличие BOM как бы предполагается.
С другой стороны, csv проверяется через Excel,если она читает без ошибок,то файл правильный.
3 ДедМорроз
 
02.03.21
14:50
А пробелы бывают разные,например emSpace или enSpace, их тоже отсекать?
4 Lama12
 
02.03.21
15:00
(0) У кого наглости меньше тот и подстраивается. Даже при согласованных протоколах.
5 Сергиус
 
02.03.21
15:11
(0)Как договоритесь, так и будет. Стандартов такого рода нет, да и наивно их ожидать. Может вам еще памятку о кто первым должен обмен запускать?)
6 mikecool
 
02.03.21
15:18
шина данных должна решать такие вопросы )
7 mistеr
 
02.03.21
15:35
(0) Вопрос не смешной, решения могут быть разные. Если данными обмениваются компоненты одной системы, разработка которых координируется, валидация каждого байта будет излишней. Достаточно нормальных тестов.

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

В твоем случае нужно поскорее утвердить кодировку, и если это UTF-8, то BOM это ее часть и должен корректно обрабатываться. "пересохранять данные без BOM" и "отсекать BOM со своей стороны" этот попытка переложить на тебя свою работу.
8 Aleksey
 
02.03.21
15:36
(6) вообще никак не решит
9 ДенисЧ
 
02.03.21
15:51
(6) Запихнёшь ты в шину кривые данные. И как она решит?
10 d4rkmesa
 
02.03.21
15:54
(0) Вы можете сослаться на стандарт. С другой стороны, какой-нибудь тупой бэкенд на PHP может оказаться не уметь с BOM. Можно проявить эмпатию, если технически это вам ничего не стоит.
11 mikecool
 
02.03.21
15:55
(8)(9) может и не решит, но в моем понимании - она должна быть регулятором и нести в себе схемы обмена, иначе - просто как очередь использовать?