Заметки о конвертации данных

Сразу замечу, конвертация данных – не мой конек. Но вот текущий проект находится на стадии интеграции с бухгалтерией, и я столкнулся с огромным ворохом проблем, которые не мешало бы обсудить с коллегами. Я надеюсь, что эти заметки помогут не только мне.

Молочников Олег Spb. 2012.

Заметки о конвертации данных

Сразу замечу, конвертация данных – не мой конек. Но вот текущий проект находится на стадии интеграции с бухгалтерией, и я столкнулся с огромным ворохом проблем, которые не мешало бы обсудить с коллегами. Я надеюсь, что эти заметки помогут не только мне.

Начну с самых больших граблей, на которые я наступил – я скопировал исходные правила для обмена УПП->УПП, приспособил их под себя и оставил первичную синхронизацию для документов и справочников по внутреннему идентификатору (В начале поиск объекта производится по внутреннему идентификатору (ВИ) и лишь при отсутствии объекта с таким ВИ, производится поиск по указанным реквизитам синхронизации (код, это группа и т.д.).

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

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

Для этого перед обработкой табличной части товары удобно вставлять код наподобие вот этого:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВложенныйЗапрос.Номенклатура,
| ВложенныйЗапрос.Количество,
| ВложенныйЗапрос.СуммаНДС,
| ВложенныйЗапрос.Сумма,
| ВложенныйЗапрос.СтавкаНДС,
| ВложенныйЗапрос.СерияНоменклатурыНомерГТД КАК НомерГТД,
| ВложенныйЗапрос.СерияНоменклатурыСтранаПроисхождения КАК СтранаПроисхождения,
| ВЫБОР
| КОГДА ВложенныйЗапрос.Количество > 0
| ТОГДА ВложенныйЗапрос.Сумма / ВложенныйЗапрос.Количество
| ИНАЧЕ 0
| КОНЕЦ КАК Цена,
| &ЕдПоКлассификатору КАК ЕдПоКлассификатору,
| ВложенныйЗапрос.Ширина
|ИЗ
| (ВЫБРАТЬ
| РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
| СУММА(ВЫБОР
| КОГДА РеализацияТоваровУслугТовары.СерияНоменклатуры = ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА РеализацияТоваровУслугТовары.Количество
| ИНАЧЕ РеализацияТоваровУслугТовары.Количество * РеализацияТоваровУслугТовары.СерияНоменклатуры.Вес
| КОНЕЦ) КАК Количество,
| СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК СуммаНДС,
| СУММА(РеализацияТоваровУслугТовары.Сумма) КАК Сумма,
| РеализацияТоваровУслугТовары.СтавкаНДС КАК СтавкаНДС,
| РеализацияТоваровУслугТовары.СерияНоменклатуры.НомерГТД КАК СерияНоменклатурыНомерГТД,
| РеализацияТоваровУслугТовары.СерияНоменклатуры.СтранаПроисхождения КАК СерияНоменклатурыСтранаПроисхождения,
| РеализацияТоваровУслугТовары.ХарактеристикаНоменклатуры.ШиринаВтулки.Наименование КАК Ширина
| ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
| ГДЕ
| РеализацияТоваровУслугТовары.Ссылка = &Ссылка
|
| СГРУППИРОВАТЬ ПО
| РеализацияТоваровУслугТовары.Номенклатура,
| РеализацияТоваровУслугТовары.СтавкаНДС,
| РеализацияТоваровУслугТовары.СерияНоменклатуры.НомерГТД,
| РеализацияТоваровУслугТовары.СерияНоменклатуры.СтранаПроисхождения,
| РеализацияТоваровУслугТовары.ХарактеристикаНоменклатуры.ШиринаВтулки.Наименование
| ) КАК ВложенныйЗапрос";
Запрос.УстановитьПараметр("Ссылка", Источник.Ссылка);
Запрос.УстановитьПараметр("ЕдПоКлассификатору", Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("кг"));
КоллекцияОбъектов= Запрос.Выполнить().Выгрузить();

В УПП ведется учет по номенклатуре и характеристике (ширине рулона).

В бухгалтерии нет возможности использовать характеристики номенклатуры.

Для каждой комбинации номенклатуры и ширины создается отдельный элемент номенклатуры с кодом номенклатуры, состоящим из кода номенклатуры и ширины рулона. Для этого:

1.      Перед выгрузкой номенклатуры:

ИсходящиеДанные= Новый Структура;
ИсходящиеДанные.Вставить("Ширина",ОбъектКоллекции.Ширина);

Перед выгрузкой реквизита “Код” справочника Номенклатура:

ШиринаРулона = "0000";
Если ВходящиеДанные <> Неопределено и ВходящиеДанные.Свойство("Ширина") тогда
ВходящиеДанные.Свойство("Ширина",ШиринаРулона);
Если ШиринаРулона <> "" Тогда
ШиринаРулона = СтрЗаменить(СокрЛП(ШиринаРулона)," ","");
ШиринаРулона = СтрЗаменить(СокрЛП(ШиринаРулона)," ","");
ШиринаРулона = Прав(ШиринаРулона,4);
ДлинаШР      = СтрДлина(ШиринаРулона);
ШиринаРулона = Формат(0, "ЧЦ="+(4-ДлинаШР)+"; ЧН=; ЧВН=; ЧГ=")+ШиринаРулона;
КонецЕсли;
КонецЕсли;
КодРулона = Прав(СокрЛП(Источник.Код),6);
ДлинаКода = СтрДлина(КодРулона);
КодРулона = Формат(0, "ЧЦ="+(6-ДлинаКода)+"; ЧН=; ЧВН=; ЧГ=")+КодРулона;
Значение  = СокрЛП("u"+КодРулона+ШиринаРулона);

3.      При выгрузке реквизита “Наименование” справочника Номенклатура:

ШиринаРулона = "0000";
Если ВходящиеДанные <> Неопределено и ВходящиеДанные.Свойство("Ширина")  тогда
ВходящиеДанные.Свойство("Ширина",ШиринаРулона);
Если ШиринаРулона <> "" Тогда
ШиринаРулона = СтрЗаменить(СокрЛП(ШиринаРулона)," ","");
ШиринаРулона = СтрЗаменить(СокрЛП(ШиринаРулона)," ","");
ШиринаРулона = Прав(ШиринаРулона,4);
ДлинаШР      = СтрДлина(ШиринаРулона);
ШиринаРулона = Формат(0, "ЧЦ="+(4-ДлинаШР)+"; ЧН=; ЧВН=; ЧГ=")+ШиринаРулона;
КонецЕсли;
КонецЕсли;
КодРулона = Прав(СокрЛП(Источник.Код),6);
ДлинаКода = СтрДлина(КодРулона);
КодРулона = Формат(0, "ЧЦ="+(6-ДлинаКода)+"; ЧН=; ЧВН=; ЧГ=")+КодРулона;
Значение = СокрЛП("u"+КодРулона+ШиринаРулона);

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

Также, если народу будет интересно, я хотел бы написать продолжение посвященное следующим темам: организация автоматического обмена, использование планов обмена, учет давальческого сырья и выгрузка данных в бухгалтерию.

 PS: Надеюсь вам понравится эта и другие мои статьи и разработки на //infostart.ru/profile/48714/.

Очень жду ваших комментариев  и пожеланий.

Молочников Олег Spb. 2012.

32 Comments

  1. Поручик

    (0) >>> Я хотел бы создать группу, посвященную конвертации данных,

    Всё уже украдено до вас (с)

    Конвертация данных

    http://infostart.ru/community/groups/51/

    Предложение о создании раздела

    http://forum.infostart.ru/forum17/topic54364/

    Reply
  2. Abadonna

    Вопрос 1: на фига из УПП перегружать данные в БП, если в УПП и так есть бухучет?

    Сильно подозреваю, что был ничем не мотивированный ответ бухов «хотим, чтобы и там».

    Если разговор идет о «белой» базе, то

    Вопрос 2: зачем клонировать строки номенклатуры с учетом ширины рулонов? Бухгалтерия в данном случае является чисто СУММОВОЙ программой, той же налоговой глубоко фиолетово какой ШИРИНЫ продавались рулоны, им важен СУММОВОЙ результат!

    И у меня была подобная ситуация при переносе данных из УТ с очень сильно развитым учетом по характеристикам и свойствам. Быстро объяснил понятно и доходчиво бухам, что они маются фигней и вполне обойдутся в номенклатуре только наименованиями. Главное, чтобы во всех доках СУММЫ верные стояли.

    Reply
  3. milkers

    (3)1. УПП очень сильно переделан для учета рулонов. Вести бухгалтерию в УПП — это значит бесконечно обновлять не типовую программу с огромным количеством дописок. Труд адский и некому не нужный, к тому же требующий сильных программистов. А я собираюсь закончить этот проект и уйти на следующий.

    2. Что делать, если позиции с разной шириной могут иметь разные цены за кг в одном документе поступления? Они должны иметь разные цены списания, они должны быть визуально различимы в печатных формах. (Может возникнуть ситуация когда печатные формы нужно распечатать из бухгалтерии, например когда печатная форма счета-фактуры уже обновлена в бухгалтерии, а в УПП еще не успели 🙂

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

    Reply
  4. milkers

    (1) Группа есть, жизни в ней нет…

    Reply
  5. Jon2011

    У меня еще круче бухгалтеры хотят. Им не нужны в БП не только характеристики товара, но и однотипный товар и с одинаковой ценой тоже хотят видеть в документах БП в виде одной строчки.

    Я сделал обработку которая компрессирует товар по названию и цене в накладной, и записывает такой список во внутреннюю таблицу документа.

    А вот как подменить в плане обмена с бухгалтерией основную таблицу с товаром на мою внутреннюю не могу сообразить.

    Может кто подскажет или это можно как-то по другому решить? Типа вообще на лету сжимать таблицу документа?

    Reply
  6. milkers

    (6) Ты смеешься? Я же только что написал об этом. Перед обработкой табличной части товары вставляется код запроса по табличной части, который и сжимает табличную часть.Даже пример привел.

    Reply
  7. Jon2011

    Да, извини не въехал сразу то что прочитал.

    Reply
  8. Поручик

    (5) Думаешь, в твоей будет? Создавай.

    Reply
  9. iov

    (0) Главное потом эту конвертацию обновлять когда в бухне опять поменяют название перечисления или добавят вид движения… тут программист нужен не менее сильный чем на обновление типовой. Главное сразу оговори что обмен для этой КОНКРЕТНОЙ версии а то бывают прецеденты.

    Reply
  10. milkers

    (11) Ты прав,но трудоемкость обновления управленческой базы в сотни раз больше и обовлять ее всякий раз, как в бухгалтерии поменяют печаную форму…

    Reply
  11. psih12

    Хорошая статья. Хотелось бы, чтобы Вы осветили Правила регистрации объектов (ПРО) в конвертации данных и их использование совместно с планами обмена.

    Reply
  12. Lukich66

    (4) вот здесь можно с Вами согласиться,действительно оч.многие и оч. сильно «ломают» УПП и встают в тупик( хотя тож самое и про БУХ можно сказать), но сама идея «гнать» цифры из УПП в БУХ- это что-то,надеюсь моим бухам эта затея не придет в голову( или предложить?).

    Reply
  13. Rustig

    (12) плохой сайт, коллеги. это мое мнение и только мое.

    полгода назад зашел я на этот сайт, ничего нормального скачать нельзя, сплошь реклама… автор 1С-ников за кого держит? в итоге по крупицам собрал информацию с диска ИТС, со статей ИС, методичку какую-то скачал с 1С-ПРО…

    Reply
  14. Rustig

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

    Reply
  15. Rustig

    (5) и в вновь созданной группе жизни не будет… а вот иногда писать статьи по теме полезно для сообщества. и за это отдельное спасибо всем и каждому автору.

    и как идея — во вновь созданной группе можно накапливать ссылки на полезные и проверенные временем статьи и обсуждения.

    Reply
  16. Jon2011

    Подскажите, как в обмене между Бух и УТ запретить передачу определенных документов?

    Reply
  17. milkers

    (18) Операции->Справочники->Настройки обмена данными. На закладке «Обмен по правилам» выбираем сответсвующий тип документа и меняем настройку выгрузки с «выгружать» на «по ссылке». Если документ продолжает выгружаться по ссылкам из других документов, то на закладке «основные» выгружаем правила обмена, меняем их в конвертации данных, загружаем опять.

    Reply
  18. Jon2011

    (19) забыл уточнить. Обмен между Бух2.0 и УТ11. Таких настроек не нашел ни в бухе не УТ11.

    Reply
  19. Jon2011

    (19)

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

    меняем правила конвертации? А Правила регистрации не помогут в этом деле?

    Reply
  20. milkers

    (20) Уточняю Операции->Справочники->Настройки обмена данными

    Reply
  21. Jon2011

    (22) это все относится к обмену с УТ10. Потому как с УТ11 свои настройки «Обмен данными с продуктами на платформе 1С8.2» Обмен у меня уже настроен и работает. А в «Операции->Справочники->Настройки обмена данными» план обмена с УТ11 вообще не попадает.

    Reply
  22. milkers

    (23) Ты прав,извини, я забыл про особенности УТ11. Не настраивал в ней обмен еще.

    Reply
  23. Jon2011

    (24) А там в настройках и выбора никого нет кроме «Организации», но есть доступ к правилам конвертации и регистраций. Вот только не пойму как через эти правила настроить чтобы документы или справочники шли только в одну сторону. Мне допустим совсем не хочется видеть в бухгалтерии все многообразие номенклатуры из УТ. А обмен упорно пытается за синхронизировать все справочники.

    Reply
  24. AShley

    (25) Jon2011, Можно правила обмена поправить. Просто отключить правило выгрузки справочника «Номенклатура». И время от времени очищать регистрацию по номенклатуре, чтоб глаза не мозолило.

    Reply
  25. nuno21

    Занимательно. У меня в связи со статьёй вопрос. Вы пишете: «Это привело к катастрофе, которую обнаружили не сразу, что лишь усилило разрушительный результат. Оказывается ВИ не настолько уникальны, как описывает 1С….» Имеется ли тут в виду механизм уникальных идентификаторов (получаемый как СсылкаНаОбъект.УникальныйИдентификатор();) или речь о чём-то другом?

    У меня сейчас стоит задача настройки регулярного обмена данных. Я собирался привязываться как раз к этим GUID’ам..

    Reply
  26. KapasMordorov

    (27)

    GUID уникален по определению.

    А у автора одна из баз скорее всего является частичной копией другой. Вот и повторения.

    Reply
  27. milkers

    (27)(28) Нет. Обмен был между УПП и бухгалтерией. И когда через несколько недель стали появляться документы с перезаписанными контрагентами или договорами, принадлежащими другим контрагентам, для меня это был шок. Я до сих пор пытаюсь разобраться в механике произошедшего.

    Reply
  28. Jon2011

    (26)В правилах конвертации конечно можно рубануть выгрузку. А как очищать регистрацию? Может как раз в «Правилах регистрации данных» надо что-то подправить? Совершенно не врубаюсь как эти правила работают.

    Reply
  29. electronik

    Ликбез что нада

    Reply
  30. aduard

    (29)

    А механика в этом случае очень простая, сначала ищет по GUID, не находит

    далее ищет по номеру и дате, но какая гарантия, что в бухгалтерии уже не создан документ с таким

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

    GUID без каких либо реквизитов.

    Reply
  31. milkers

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

    Reply
  32. Healer

    (33) Посмотрите в регистре сведений «Соответствие объектов информационных баз»: в нём как раз и могут быть пары GUID-ов, испортивших Вам настроение. Ну и обработки обработка типа «НайтиОбъектПоUUID.epf» и метод НашОбъект.УникальныйИдентификатор() тоже пригодятся.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *