0. herfis 282 17.10.17 13:27 Сейчас в теме

Основные концепции Конвертации данных (КД) для новичков

В КД очень важно понять основные принципы работы. Вроде и самой КД сто лет в обед, и понаписано уже не счесть, но все как-то не так, как мне бы хотелось. Постепенно крепло желание написать эдакое послание самому себе, начинающему изучать КД, да никак руки не доходили. Последней каплей стала очередная попавшаяся на глаза "неправильная" статья, и я решил - ничего страшного, пусть будет еще одна статья, зато гештальт закрою :) Даже если я излишне самонадеян, авось кому-то она все же поможет. Скриншотов не будет, будет только унылый текст. Но я бы в свое время за него многое отдал.
Чтобы не перегружать статью, в ней не освещаются особенности вроде правил регистрации, особенностей КД 3.0 и т.п.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. leosoft 138 17.10.17 19:31 Сейчас в теме
Супер!
Когда же разработчики научатся так качественно доносить
заложенные ими алгоритмы и идеи?
2. ekaruk 4610 18.10.17 07:38 Сейчас в теме
Отлично описано.
Кратко и сама суть.
3. babys 83 18.10.17 09:03 Сейчас в теме
Как то однобоко. Такое впечатление, что автор совсем забыл про ПКО: Перед загрузкой, При загрузке и После загрузки. Оченно нужОннеы и полезные финтифлюшки.
ИМХО, конфликты загрузки в рамках написанной статьи не решите никогда.
4. progr-2008 118 18.10.17 09:34 Сейчас в теме
5. JaneP 10 18.10.17 10:45 Сейчас в теме
Плюсанула. Читала внимательно, поэтому простите, есть "ньюанс" :)
smaximaa; +1 Ответить
6. pm74 124 18.10.17 10:58 Сейчас в теме
что в 99% случаев обработчики на стороне приемника не нужны. Но новички часто ими злоупотребляют по банальной причине - они еще не знают, как настроить правила конвертации правильно, а обработчики в приемнике как-то проще для понимания. Код - он и в Африке код :) Но такой стиль ущербен по многим причинам, так как идет в разрез с неявной идеологией КД

да ну? ну а например заполнение счетов по регистрам в БП , деление документов 1 в 2 итд итп . Есть целый класс задач , которые просто невозможно выполнить на стороне источника
7. herfis 282 18.10.17 11:01 Сейчас в теме
(6) Единственный класс задач конвертации, которые невозможно выполнить на стороне источника, я в статье упомянул - если информацию для принятия решения невозможно получить в источнике. Все остальное - РЕШАЕТСЯ.
8. pm74 124 18.10.17 11:02 Сейчас в теме
(7) ну так это очень частое явление
9. herfis 282 18.10.17 11:08 Сейчас в теме
(8) Из моей практики - вовсе нечастое. Относительно часто требуются лишь некоторые предопределенные данные приемника. А это решается либо конвертацией значений, либо хардкодингом при выгрузке, либо таблицами соответствий.
Пример (к месту или не к месту) - если нужно выгружать ссылки на бухгалтерские счета, а в источнике тупо нет плана счетов (но коды счетов мы знаем, т.е. информации для принятия решений достаточно), то делается просто ПКО для плана счетов с признаками только поиска нужных объектов в приемнике (без создания и изменения), добавляется ПКС для кода счета (с галкой, что оно является полем поиска) и ему на вход программно подается код счета. Все. При загрузке по коду счета будет найден нужный счет и проставлена нужная ссылка.
Выгрузить два документа из одного тоже не вижу никакой проблемы. Если подробнее опишите ситуацию, приведу пример конкретного решения.
10. pm74 124 18.10.17 11:11 Сейчас в теме
(9) просто задела некоторая категоричность утверждения . мне кажется данные можно приводить к общему знаменателю на той стороне где это сделать проще (читай надежнее)
11. herfis 282 18.10.17 11:22 Сейчас в теме
(10) Эта категоричность появилась не с бухты-барахты. У меня многолетний опыт работы с КД и обмена между принципиально разными конфигурациями и самыми головоломными схемами. И количество раз, когда понадобились обработчики на стороне приемника, можно пересчитать на пальцах.
26. Terve!R 17.05.18 09:54 Сейчас в теме
(11) зачем мне что-то изобретать на стороне источника, если я на стороне приемника могу просто написать ЗаполнитьСчетаУчета(). то есть вызвать уже готовую типовую процедуру, и все? Можно категорично все решать на стороне источника, но бессмысленная и глупая трата времени и сил.
smaximaa; +1 Ответить
12. 1Concept 296 18.10.17 16:49 Сейчас в теме
Спасибо за статью, очень хорошо подано.
Уважаемый Сан Саныч, выскажите экспертное мнение, относится ли одна задача к тем самым 99%, о которых вы пишите:
Есть табличная часть, и в ней один реквизит никогда не заполняется в Источнике. После первой загрузки в Приемник этот реквизит заполняется руками, но после следующих обменов Источник-Приемник реквизит очищается, флаг "Отключить" в ПКС для реквизитов ТЧ не работает.
Я решил эту задачу в обработчике ПослеЗагрузки ПКО данного документа: ищу объект и из него беру постоянно очищаемый реквизит ТЧ:
Если ОбъектНайден = Истина Тогда
    //подставляем карточку анализа
    Если Объект.Ссылка.Товары.Количество() > 0 И Объект.Товары.Количество() > 0 Тогда
        КарточкаАнализаСсылка = Объект.Ссылка.Товары[0].КарточкаАнализа;
        Если ЗначениеЗаполнено(КарточкаАнализаСсылка) Тогда
            Объект.Товары[0].КарточкаАнализа = КарточкаАнализаСсылка;
        КонецЕсли;
        Попытка
            Объект.Записать(РежимЗаписиДокумента.Запись);
        Исключение
        КонецПопытки;
    КонецЕсли;
КонецЕсли;
Показать


Относится ли моя задача к оставшемуся 1% или её тоже можно как-то решить на стороне приемника?
p.s. в моем случае в ТЧ всегда будет одна строка, поэтому не критикуйте мой неуниверсальный подход.
13. herfis 282 18.10.17 17:02 Сейчас в теме
(12) Авторитетно заявляю - фиг его знает! Всегда как-то удавалось избегать частичного обновления объектов в приемнике. Так что увы - навскидку ничего путного не присоветую. Надо бы исследовать вопрос, но руки не стоят. Пару раз на заре КД и возникновении подобных затыков, которые касались явных недоработок КД в части редко используемой функциональности, мне было проще пропатчить КД :)
16. Vladimir_Konyrev 217 18.10.17 21:14 Сейчас в теме
(13) (14) (15) Коллеги, премного благодраен.
14. pm74 124 18.10.17 17:08 Сейчас в теме
(12) вобще у пкс есть галка - не замещать значение в приемнике, на обычных реквизитах срабатывает, но в случае ТЧ не факт , надежнее ручками вписать как вы делаете
15. herfis 282 18.10.17 17:18 Сейчас в теме
(12) Немного подумав... Изначально в КД вообще было плохо с частичным обновлением объектов. Потом вроде допилили. Но боюсь, что с обновлением табличных частей там вообще не заморачивались. Ведь мало того, что для этого нужно приложить значительные усилия - непонятно как решать вопрос с однозначной идентификацией строк табличной части. Поэтому при такой постановке задачи особых вариантов я не вижу.
В идеале - заполнять в источнике. При невозможности - как раз попадаем на вариант, когда в источнике нет необходимых данных :(
17. OgelO 1 20.10.17 09:28 Сейчас в теме
Толковый материал, спасибо!
18. Zoomby 20.10.17 09:47 Сейчас в теме
19. nvv1970 22.10.17 00:15 Сейчас в теме
Плюс использование обработчиков при загрузке часто сильно замедляет эту самую загрузку
Дельное замечание.
Стоило бы пояснить читателям, что сама по себе нагрузка здесь погоды не делает. Как бы тратим процессорное время в любом случае: или при загрузке или при выгрузке - в общем случае одинаково, но зависит от алгоритмов.
А вот наиболее болезненным моментом загрузки может быть наличие транзакции и следовательно блокировок. Дольше выполняем - дольше блокируем.
20. herfis 282 23.10.17 09:11 Сейчас в теме
(19)
А вот наиболее болезненным моментом загрузки может быть наличие транзакции и следовательно блокировок. Дольше выполняем - дольше блокируем

Все верно. В обработчиках мало кто заморачивается специальным кэшированием и типичный код сплошь и рядом полон явных и неявных обращений к БД, по факту выполняемых в цикле и никак не оптимизированных. При выгрузке подобное редко становится критичным. Загрузка же гораздо более чувствительна, так как выполняет запись в БД и даже чистая запись в БД может занимать значительное время сама по себе. Про накладные расходы на "Выполнить" я уже не упоминаю. Если же удается всю конвертацию выполнить в источнике - то при загрузке выполняются только оптимизированные алгоритмы КД по записи конвертированных образов.
21. gucci76 341 26.10.17 12:24 Сейчас в теме
Было бы здорово выложить самый примитивный пример правил конвертации.
Теория, которую можно пощупать на практике усваиваются намного лучше!!!!
22. herfis 282 26.10.17 13:06 Сейчас в теме
(21) Такие статьи уже есть, цель моей статьи была другая.
Вот, например, хорошее подробное практическое руководство для новичков, куда тыкать на практике.
Должно отлично зайти в качестве практической части :)
ЗЫ. Добавил ссылку на нее в мою статью, чтобы новичкам было проще переходить от теории к практике :)
23. Eriksson 23.12.17 02:16 Сейчас в теме
Теперь повторю важный момент с другого ракурса - в нормальной ситуации ВСЯ КОНВЕРТАЦИЯ ВЫПОЛНЯЕТСЯ В ИСТОЧНИКЕ. То есть и все правила конвертации с их взаимосвязями анализируются в источнике и почти все самые важные с точки зрения конвертации программные обработчики - также выполняются в источнике. Этот момент нужно держать в голове, когда вы пишите код программных обработчиков в КД.


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

Я, к примеру, не занимаюсь постоянно конвертацией, из памяти некоторые вещи улетают. Время, которое я могу потратить на рытье в старых правилах или чтении статей по конвертации для сложных случаев обмена заменяю на время обработки компьютером во время загрузки. Это характерно только для задач разовой выгрузки-загрузки данных.
24. herfis 282 27.12.17 13:52 Сейчас в теме
(23)
Следует отметить, что существует два основных варианта применения конвертации

Лично мне кажется, что достаточно один раз разобраться с принципами, чтобы больше не иметь особых проблем с КД. Поэтому и сподвигся на написание статьи. Я ведь тоже нечасто с ней работаю и на память жалуюсь. Но спорить над цена/качество не готов. Всем приходилось что-то писать на скорую руку. Это дело такое. Но объявлять это прям отдельным направлением программирования я бы не стал :)
25. mitia.mackarevich 26 26.01.18 18:11 Сейчас в теме
"Вот для таких редких случаев на выручку и приходят обработчики на стороне приемника (при загрузке)." М да....они настолько редкие что встречаются почти в каждом нормально обмене (объектов так на 150),а не поделках. Разумнее применять обработчики там где это необходимо (да КЭП где то близко), с точки зрения производительности, логики, архитектуры самого решения. Не стоит забывать что блокировки возникают не только при загрузке, но и при выгрузке.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Руководитель проекта, аналитик, консультант
Санкт-Петербург
По совместительству

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Бизнес-аналитик 1С
Санкт-Петербург
зарплата от 120 000 руб.
Полный день

Программист 1С
Москва
Полный день

Консультант-аналитик 1С
Москва
Полный день