gifts2017

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

Опубликовал Олег Молочников (milkers) в раздел Обмен - Обмен через XML

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Подписаться Добавить вознаграждение
Комментарии
0. Олег Молочников (milkers) 25.02.12 20:21
Сразу замечу, конвертация данных – не мой конек. Но вот текущий проект находится на стадии интеграции с бухгалтерией, и я столкнулся с огромным ворохом проблем, которые не мешало бы обсудить с коллегами. Я надеюсь, что эти заметки помогут не только мне.

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

1. Сергей Ожерельев (Поручик) 25.02.12 20:21
(0) >>> Я хотел бы создать группу, посвященную конвертации данных,
Всё уже украдено до вас (с)

Конвертация данных
http://infostart.ru/community/groups/51/

Предложение о создании раздела
http://forum.infostart.ru/forum17/topic54364/
3. Аркадий Кучер (Abadonna) 26.02.12 06:06
Вопрос 1: на фига из УПП перегружать данные в БП, если в УПП и так есть бухучет?
Сильно подозреваю, что был ничем не мотивированный ответ бухов "хотим, чтобы и там".
Если разговор идет о "белой" базе, то
Вопрос 2: зачем клонировать строки номенклатуры с учетом ширины рулонов? Бухгалтерия в данном случае является чисто СУММОВОЙ программой, той же налоговой глубоко фиолетово какой ШИРИНЫ продавались рулоны, им важен СУММОВОЙ результат!
И у меня была подобная ситуация при переносе данных из УТ с очень сильно развитым учетом по характеристикам и свойствам. Быстро объяснил понятно и доходчиво бухам, что они маются фигней и вполне обойдутся в номенклатуре только наименованиями. Главное, чтобы во всех доках СУММЫ верные стояли.
4. Олег Молочников (milkers) 26.02.12 09:56
(3)1. УПП очень сильно переделан для учета рулонов. Вести бухгалтерию в УПП - это значит бесконечно обновлять не типовую программу с огромным количеством дописок. Труд адский и некому не нужный, к тому же требующий сильных программистов. А я собираюсь закончить этот проект и уйти на следующий.
2. Что делать, если позиции с разной шириной могут иметь разные цены за кг в одном документе поступления? Они должны иметь разные цены списания, они должны быть визуально различимы в печатных формах. (Может возникнуть ситуация когда печатные формы нужно распечатать из бухгалтерии, например когда печатная форма счета-фактуры уже обновлена в бухгалтерии, а в УПП еще не успели :)
3.Есть некоторая специфика учета, которую легко реализовать именно в выгрузке, например автоматически формируя пакеты документов из одного.
5. Олег Молочников (milkers) 26.02.12 09:57
(1) Группа есть, жизни в ней нет...
6. Евгений Палагин (Jon2011) 26.02.12 13:06
У меня еще круче бухгалтеры хотят. Им не нужны в БП не только характеристики товара, но и однотипный товар и с одинаковой ценой тоже хотят видеть в документах БП в виде одной строчки.
Я сделал обработку которая компрессирует товар по названию и цене в накладной, и записывает такой список во внутреннюю таблицу документа.
А вот как подменить в плане обмена с бухгалтерией основную таблицу с товаром на мою внутреннюю не могу сообразить.
Может кто подскажет или это можно как-то по другому решить? Типа вообще на лету сжимать таблицу документа?
7. Олег Молочников (milkers) 26.02.12 13:24
(6) Ты смеешься? Я же только что написал об этом. Перед обработкой табличной части товары вставляется код запроса по табличной части, который и сжимает табличную часть.Даже пример привел.
8. Евгений Палагин (Jon2011) 26.02.12 13:29
Да, извини не въехал сразу то что прочитал.
9. Сергей Ожерельев (Поручик) 26.02.12 17:39
(5) Думаешь, в твоей будет? Создавай.
10. Александр Зубцов (iov) 26.02.12 22:59
(0) Главное потом эту конвертацию обновлять когда в бухне опять поменяют название перечисления или добавят вид движения... тут программист нужен не менее сильный чем на обновление типовой. Главное сразу оговори что обмен для этой КОНКРЕТНОЙ версии а то бывают прецеденты.
11. Олег Молочников (milkers) 27.02.12 11:34
(11) Ты прав,но трудоемкость обновления управленческой базы в сотни раз больше и обовлять ее всякий раз, как в бухгалтерии поменяют печаную форму...
12. psih12 01.03.12 22:23
Хорошая статья. Хотелось бы, чтобы Вы осветили Правила регистрации объектов (ПРО) в конвертации данных и их использование совместно с планами обмена.
14. Владимир Лагутин (Lukich66) 03.03.12 06:06
(4) milkers,вот здесь можно с Вами согласиться,действительно оч.многие и оч. сильно "ломают" УПП и встают в тупик( хотя тож самое и про БУХ можно сказать), но сама идея "гнать" цифры из УПП в БУХ- это что-то,надеюсь моим бухам эта затея не придет в голову( или предложить?).
15. г. Казань Рустем Гумеров (Rustig) 03.03.12 15:36
(12) плохой сайт, коллеги. это мое мнение и только мое.
полгода назад зашел я на этот сайт, ничего нормального скачать нельзя, сплошь реклама... автор 1С-ников за кого держит? в итоге по крупицам собрал информацию с диска ИТС, со статей ИС, методичку какую-то скачал с 1С-ПРО...
16. г. Казань Рустем Гумеров (Rustig) 03.03.12 15:38
(14) да уж, засада... чего только не приходится выдумывать...
17. г. Казань Рустем Гумеров (Rustig) 03.03.12 15:43
(5) и в вновь созданной группе жизни не будет... а вот иногда писать статьи по теме полезно для сообщества. и за это отдельное спасибо всем и каждому автору.
и как идея - во вновь созданной группе можно накапливать ссылки на полезные и проверенные временем статьи и обсуждения.
18. Евгений Палагин (Jon2011) 03.03.12 19:25
Подскажите, как в обмене между Бух и УТ запретить передачу определенных документов?
19. Олег Молочников (milkers) 03.03.12 19:42
(18) Операции->Справочники->Настройки обмена данными. На закладке "Обмен по правилам" выбираем сответсвующий тип документа и меняем настройку выгрузки с "выгружать" на "по ссылке". Если документ продолжает выгружаться по ссылкам из других документов, то на закладке "основные" выгружаем правила обмена, меняем их в конвертации данных, загружаем опять.
20. Евгений Палагин (Jon2011) 03.03.12 19:53
(19) milkers, забыл уточнить. Обмен между Бух2.0 и УТ11. Таких настроек не нашел ни в бухе не УТ11.
21. Евгений Палагин (Jon2011) 03.03.12 19:55
(19) milkers,
выгружаем правила обмена, меняем их в конвертации данных, загружаем опять.
меняем правила конвертации? А Правила регистрации не помогут в этом деле?
22. Олег Молочников (milkers) 03.03.12 20:04
(20) Уточняю Операции->Справочники->Настройки обмена данными
23. Евгений Палагин (Jon2011) 03.03.12 20:34
(22) milkers, это все относится к обмену с УТ10. Потому как с УТ11 свои настройки "Обмен данными с продуктами на платформе 1С8.2" Обмен у меня уже настроен и работает. А в "Операции->Справочники->Настройки обмена данными" план обмена с УТ11 вообще не попадает.
24. Олег Молочников (milkers) 03.03.12 20:37
(23) Ты прав,извини, я забыл про особенности УТ11. Не настраивал в ней обмен еще.
25. Евгений Палагин (Jon2011) 03.03.12 20:45
(24) А там в настройках и выбора никого нет кроме "Организации", но есть доступ к правилам конвертации и регистраций. Вот только не пойму как через эти правила настроить чтобы документы или справочники шли только в одну сторону. Мне допустим совсем не хочется видеть в бухгалтерии все многообразие номенклатуры из УТ. А обмен упорно пытается за синхронизировать все справочники.
26. A AShley (AShley) 06.03.12 13:02
(25) Jon2011, Можно правила обмена поправить. Просто отключить правило выгрузки справочника "Номенклатура". И время от времени очищать регистрацию по номенклатуре, чтоб глаза не мозолило.
27. AMK TEST (nuno21) 06.03.12 13:54
Занимательно. У меня в связи со статьёй вопрос. Вы пишете: "Это привело к катастрофе, которую обнаружили не сразу, что лишь усилило разрушительный результат. Оказывается ВИ не настолько уникальны, как описывает 1С...." Имеется ли тут в виду механизм уникальных идентификаторов (получаемый как СсылкаНаОбъект.УникальныйИдентификатор();) или речь о чём-то другом?
У меня сейчас стоит задача настройки регулярного обмена данных. Я собирался привязываться как раз к этим GUID'ам..
28. Anatolii Karasev (KapasMordorov) 06.03.12 14:18
(27)
GUID уникален по определению.
А у автора одна из баз скорее всего является частичной копией другой. Вот и повторения.
29. Олег Молочников (milkers) 06.03.12 15:13
(27)(28) Нет. Обмен был между УПП и бухгалтерией. И когда через несколько недель стали появляться документы с перезаписанными контрагентами или договорами, принадлежащими другим контрагентам, для меня это был шок. Я до сих пор пытаюсь разобраться в механике произошедшего.
30. Евгений Палагин (Jon2011) 06.03.12 20:31
(26)В правилах конвертации конечно можно рубануть выгрузку. А как очищать регистрацию? Может как раз в "Правилах регистрации данных" надо что-то подправить? Совершенно не врубаюсь как эти правила работают.
31. Andrey Dyak (electronik) 26.03.12 18:32
32. Эдуард (aduard) 21.06.12 11:47
(29) milkers,
А механика в этом случае очень простая, сначала ищет по GUID, не находит
далее ищет по номеру и дате, но какая гарантия, что в бухгалтерии уже не создан документ с таким
номером и датой (ручками бухгалтером), вот и затирает такие документы. В вашем случае поиск только по
GUID без каких либо реквизитов.
33. Олег Молочников (milkers) 21.06.12 11:54
Вы не правы. Здесь что-то более сложное. Менялся номер контрагента, который был в базе под другим номером. Полное впечатление, что совпали именно уникальные идентификаторы, чего вроде тоже не может быть.