Переход с 1С:УПП на 1C:ERP. Переделываем интеграции, использующие SQL запросы к СУБД (на примере УПП -> QlikView -> ERP)

11.04.22

Бизнес-анализ

При переходе с УПП на ЕРП меняется структура метаданных и требуется изменять интеграции, использующие SQL запросы к СУБД. В статье представлены инструменты, которые помогут упростить переход.

Для тех, кто не читал предыдущую статью, расскажу о сути проекта. В 2020-2021 году я участвовал в роли руководителя команды разработчиков Внедренческого центра "Раздолье" в проекте Управление продажами в международной компании на базе "1С:ERP" (ссылка на сайт 1c.ru). Проект был выбран победителем международного конкурса «1С:Проекта года» в номинации «Лучший проект с использованием технологии "Дистанционное внедрение"».

Суть проекта заключалась в переводе Заказчика с 1С:УПП на 1С:ERP. На его примере кратко опишу, какой была организационная структура и какие программы мы использовали при взаимодействии в команде и с пользователями.

Практически весь проект выполнялся удалённо. Многие сотрудники Заказчика, участвующие в проекте, в условиях карантинов и локдаунов были переведены на удалённую работу. Многие сотрудники нашей компании тоже работали удалённо, с командировками в этот период были большие проблемы. Сам Заказчик работает в режиме 24х7 и является одним из крупнейших предприятий в России по производству кофе. На начало проекта в качестве основы корпоративной системы у Заказчика была программа 1С:УПП редакции 1.2 (даже не 1.3). По завершению проекта в 2021-м перешли на ERP 2.5. К слову, когда начинали работу, в 2020-м году, когда 2.5. была ещё в бета-версии, но мы решили прислушаться к рекомендациям "Фирмы 1С" запускать новые проекты на ней, а не на 1С:ERP 2.4.

Рис 1.1 Схема ИТ-архитектуры проектаC:Usersd.malishevAppDataLocalMicrosoftWindowsTemporary Internet FilesContent.Word34a71c7badaf.png

По плану проекта компания отказывалась от комплекса программ (1С:УПП + 1С:ДО + множественные интеграции с внешними решениями) и меняла его на связку 1С:ERP + ЗУП + ДО + поддержка тех же интеграций. Основные работы мы начали в августе 2020 года, а закончили - в апреле 2021 г.

Одной из задач перехода с УПП на ERP (ЕРП) был перевод интеграции между УПП и системой аналитики QlikView.

Справка

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

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

ВНИМАНИЕ:

! Инструменты перевода с языка SQL на язык 1С и обратно, а также организация процесса подойдут для перевода большинства прямых интеграций с СУБД старого продукта 1С на новый продукт 1С, т.е. технология касается не только частного случая для QlikView, представленного в этой статье, а подойдёт на других проектов с переводом других ПО.

Рис. 1 Примерный вид QlikView (к данному проекту картинка отношения не имеет, взята из сети для визуализации)

Вводная по задаче с QlikView

Интеграция QlikView была реализована ранее с УПП на уровне прямых sql-запросов к СУБД.

Данные передавались в одном направлении из УПП в QlikView:

  • Контрагенты

  • Договоры

  • Заказы

  • Продажи

  • Планы

  • и другие

Требовалось перейти в 1C:ERP (ЕРП):

  • переделать сбор данных, т.е. запросы к источникам, т.к. структура хранения данных между УПП и ERP значительно поменялась;

  • а также доработать ERP (ЕРП) под особенности, затребованные со стороны QlikView и доработанные ранее в УПП.

Интеграция QlikView с УПП проводилась давно (несколько лет назад) и успешно работала, не требуя вмешательства, поэтому всё, что касалось её создания и процесса настройки было успешно стёрто из памяти исполнителей:

  • Интеграционные запросы к УПП были описаны на языке SQL и не имели описания на языке 1С

  • Со стороны Клиента исполнители не помнили технологию реализации задачи (столько лет прошло)

  • Был контакт компании-интегратора со стороны QlikView

  • Срок реализации задачи установлен до конца 1 квартала с момента перехода с УПП на ERP (ЕРП) в начале года (для расчёта KPI и зарплаты менеджеров)

Решение задачи по переводу в ERP (ЕРП)

Шаг 1: Наладка взаимодействия

Со своего опыта: вовлечение 3-го, а именно - сторонней компании, в текущий проект 1С, всегда сопровождается перекладыванием ответственности на друг друга и риском получить проблемы с урегулированием сроков. Поэтому крайне важно сработаться.

Всё, что касалось настройки внутренностей QlikView, находилось в компетенции компании интегратора QlikView. Всё, что касалось УПП и ERP, находилось в нашей компетенции. Первым шагом надо было наладить взаимодействие между нами. После первых переговоров с участием Клиента вышли на ситуацию: интегратор QlikView может выделить ресурсы только в 3-й месяц квартала, когда по сути механизм уже должен сдаваться в эксплуатацию. Поначалу нас как интегратора 1С это не устраивало, были попытки найти другого интегратора QlikView, но в итоге договорились с первым, решили, что успеем.

Работы были поделены на два контура:

  1. Мы - со стороны 1С (понимаем SQL запросы к УПП и трансформируем их в аналоги для ERP)

  2. Они - со стороны QlikView (делают модель связи QlikView с ERP и организуют в QlikView переключение с модели источников УПП на ERP)

Шаг 2: Трансформация SQL-запросов

Составили сводный документ, содержащий список источников данных (около 20 блоков), подтягивающихся из УПП в QlikView:

  • Номенклатурные группы

  • Номенклатура

  • Менеджеры

  • Контрагенты

  • Логистические услуги

  • Заказы

  • Неотгруженные заказы

  • Сетевые скидки

  • ….

  • Продажи

  • Планы

Примечание: QlikView сам забирает данные из Источника, согласно разработанным запросам.

Каждый блок разбили части:

  1. Таблица УПП-SQL-1C – старый текст sql-команд, промаркированный номерами (присвоены краткие уникальные обозначения полям и таблицам) и дополненный описанием полей и таблиц 1С. Примечание: Запросов на языке 1С для сбора данных из УПП для QlikView у Клиента не было или не сохранилось.

  2. Таблица ERP-1C-SQL – текст запроса на языке 1С для ERP с промаркированными данными. Дополнена описанием соответствий и различий по сравнению с Таблицей УПП-SQL-1C (тексты запроса на языке SQL для ERP сопоставленные с полями 1С).

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

Таблица УПП-SQL-1C

На входе дан запрос: что это - непонятно.

SELECT
   T1._IDRRef,
   T1._Description,
   T1._Fld1261,
   T1._Fld1265,
   T1._Fld1276RRef,
   T1._Fld1272,
   T1._Fld1273,
   T1._Fld1279RRef
FROM dbo._Reference78 T1

Чтобы разобраться, надо транслировать названия таблиц и полей SQL на язык 1С. Для этого воспользуемся замечательной обработкой Крючкова Владимира по конвертации текстов SQL в представление языка 1С (ссылка ниже в приложении). Обработка имеет управляемую форму, поэтому, чтобы её запустить в старом УПП, необходимо изменить режим запуска на "Управляемый". Запустим рабочую базу УПП в режиме управляемого приложения. Для этого у администратора изменим режим запуска на «Управляемое приложение».

После этого открываем обработку конвертации из SQL в 1С через Меню-Файл-Открыть, вставляем в неё текст запроса и жмём [Преобразовать].

Получаем описание запроса в представлениях 1С, и уже понимаем, с какой таблицей имеем дело, какие поля выбираются.

Делаем описание в виде таблицы

Имя СУБД Имя 1С Маркер № таб, № поля Доп. пояснение
dbo._Reference78 Справочник.Контрагенты UPP_1  
T1._IDRRef Ссылка UPP_1_1  
T1._Description Наименование UPP_1_2  
T1._Fld1261 ИНН UPP_1_3  
T1._Fld1265 КПП UPP_1_4  
T1._Fld1276RRef ЮрФизЛицо UPP_1_5  
T1._Fld1272 Покупатель UPP_1_6  
T1._Fld1273 Поставщик UPP_1_7  
T1._Fld1279RRef Регион UPP_1_8  

После выполнения перевода текстов исходных SQL запросов на язык 1С все данные сохраняем в общий документ. Далее анализируем с консультантом: выделили используемые источники данных УПП, пытались понять получаемый результат и сконструировать аналогичные выборки уже на основе источников данных ERP.

Таблица ERP-1C-SQL

На стороне ERP нам нужно было смоделировать запрос 1С с той же структурой и логикой сбора по суммам, количеству и наборам атрибутов объектов, а затем получить его описание текстом SQL.

Для этих целей мы пользовались транслятором 1С в SQL от Пермитина Юрия (см. ссылку ниже в приложении). Транслятор запускаем в рабочей базе ERP, устанавливаем связь с СУБД и можем далее с помощью конструктора 1С собирать запрос и получать его SQL представление.

Как видно, запрос в ERP усложнился, из-за того, что требуемые атрибуты контрагентов разделены в ERP по двум справочникам: "Контрагенты" и "Партнеры".

Примечание: Важно, что все запросы SQL получать транслятором нужно именно в рабочей базе. Это нужно чтобы совпадали имена таблиц и реквизитов на уровне СУБД.

Пример:

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

Делаем описание в виде таблицы

Имя СУБД Имя 1С Маркер № таб, № поля Маркер УПП
dbo._Reference392 Справочник.Контрагенты ERP_1 UPP_1
T1._IDRRef Ссылка ERP_1_1 UPP_1_1
T1._Description Наименование ERP_1_2 UPP_1_2
T1._Fld64962 ИНН ERP_1_3 UPP_1_3
T1._Fld64967 КПП ERP_1_4 UPP_1_4
T1._Fld64971RRef ЮрФизЛицо ERP_1_5 UPP_1_5
dbo._Reference533 Справочник.Партнеры ERP_2  
T2._Fld68618 Покупатель ERP_2_1 UPP_1_6
T2._Fld68620 Поставщик ERP_2_1 UPP_1_7
T2._Fld68615RRef Регион ERP_2_1 UPP_1_8

Запросы 1С и SQL, полученные для ERP, также сохраняем в общий документ, который затем пойдет на передачу интегратору QlikView.

Новый запрос SQL для QlikView фиксируем в виде:

SELECT
    T1._IDRRef,
    T1._Description,
    T1._Fld64962,
    T1._Fld64967,
    T1._Fld64971RRef,
    T2._Fld68618,
    T2._Fld68620,
    T2._Fld68615RRef
FROM dbo._Reference392 T1
LEFT OUTER JOIN dbo._Reference533 T2
    ON (T1._Fld64970RRef = T2._IDRRef)

Шаг 3: Запуск новой модели интеграции

Интегратор QlikView на основании предоставленного описания запросов разработал модель связи образа QlikView с ERP. Далее выполнили контрольные заборы данных в QlikView за одинаковый период по старой модели (из УПП) и новой (из ERP). Выполнили сверку количественных и списочных показателей. Выявленные расхождения данных были переданы нам для анализа и пояснений, в итоге:

  • часть различий была устранена за счёт уточнения текстов и фильтров в запросах,

  • по части – были выявлены ошибки учёта как в УПП, так и в ERP, приведшие к расхождениям,

  • также важно, что по части моментов были описаны объективные различия логики систем УПП и ERP и даны пояснения, например, по различию в значениях себестоимости товаров, которые никогда не приведут к совпадению показателей в контрольных выборок данных.

После нескольких итераций, заборы данных по старой и новой модели стали приемлемо расходиться по контролируемым показателям. Новая система связи QlikView c ERP получила одобрение (клиента, наше и интегратора QlikView) и была запущена в продуктив, а связь с УПП отключена.

Приложение:

Список использованных решений

Для решения задачи использовались следующие публикации с сайта "Инфостарт":

1. Конвертер для преобразования текстов запросов и планов SQL в представления языка 1С (infostart.ru)

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

2. Транслятор запросов 1С в SQL (infostart.ru)

Инструмент для трансляции запросов платформы 1С в SQL, а также их диагностики.

Не забудьте поплюсовать, если материал оказался чем-то полезным для вас.


Автор статьи: Дмитрий Малышев (sapervodichka)

Внедрение ЕРП ERP УПП Интеграции Переход Перенос Аналитика

См. также

Переход на современные ERP-решения «1С» – дорожная карта, кейсы, рекомендации

Внедрение изменений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Статья об основных зонах внимания и часто допускаемых ошибках при внедрении современных ERP-систем – «1С:ERP Управление предприятием» и «1С:ERP.Управление холдингом».

27.04.2024    963    0    user893825    0    

9

Радио "Аналитик", 17 выпуск 2 сезона. Про модель Кеневин с Андреем Путиным

Лидерство Личная эффективность Agile Анализ потребностей и поиск решений Бесплатно (free)

В семнадцатом выпуске второго сезона подкаста Радио “Аналитик“ обсудили, что из себя представляет модель Кеневин, чем и в каких ситуациях она может быть полезна тем, кто работает в сфере ИТ и не только.

19.04.2024    406    0    Radio_Analyst    0    

5

Исследование потребностей пользователей в заказной разработке

Анализ потребностей и поиск решений Бесплатно (free)

Расскажем о Customer Development (CustDev) в заказной разработке, методиках исследования и проверке гипотез при создании MVP. Восстановим справедливость в отношении CustDev: рассмотрим, что это такое, и поделимся практикой применения.

18.04.2024    382    0    tachenkov    0    

3

Фаза пресейла: насколько глубоко нужно погружаться в бизнес-домен?

Анализ предметной области Анализ потребностей и поиск решений Бесплатно (free)

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

25.03.2024    395    0    alenkaiva    0    

4

Как реорганизовать работу проектного департамента, чтобы быть №1

Внедрение изменений Бесплатно (free)

Методики быстрореагирующего производства и QRM-ячейки применимы не только к станкам, но и к проектным командам. О том, как за счет разделения проектного офиса на многофункциональные QRM-ячейки обеспечить равномерную загрузку работу сотрудников, вырасти в два раза и существенно повысить лояльность заказчиков и коллектива, пойдет речь в статье.

14.02.2024    667    0    user1270271    2    

7

Управление ожиданиями на проекте

Работа с заинтересованными сторонами Бесплатно (free)

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

08.02.2024    592    0    izybaevda    0    

5

Как внедрить 1С:ERP за 2 года и не сойти с ума

Анализ предметной области Анализ потребностей и поиск решений Внедрение изменений Бесплатно (free)

Для руководителей подразделений новые проекты вызывают желание получить максимальный эффект от реализации идей, а также опасения, верно ли выбран ориентир нововведений. О том, как справиться с трудностями, дойти до цели и внедрить 1С:ERP на производственном предприятии, ежедневно выпускающем десятки тысяч единиц готовой продукции, расскажем в статье.

30.01.2024    7297    0    user1578851    16    

17

Свободное программное обеспечение в крупной компании – миф или реальность? Как мы переводили 2500 пользователей на Linux

Внедрение изменений Бесплатно (free)

Переход на свободное программное обеспечение – серьезное испытание и для бизнес-пользователей, и для ИТ-подразделения. Нужно учесть много факторов, найти компромиссы и поменять привычки. О «пяти стадиях принятия неизбежного» и успешном преодолении трудностей при переводе ИТ-инфраструктуры автодилерских центров на Linux расскажем в статье.

29.01.2024    2546    0    user1063453    2    

5
Отзывы
5. sapervodichka 6812 12.04.22 12:28 Сейчас в теме
(1) Вот другие статьи:
Переход с 1С:УПП на 1C:ERP: Задача переноса печатных форм в сжатые сроки. Конструктор печати (https://infostart.ru/1c/articles/1510459/)
Переход с 1С:УПП на 1C:ERP: Перенос остатков и затянувшееся начало работы в ЕРП (https://infostart.ru/1c/articles/1540097/)
Переход с 1С:УПП на 1C:ERP: Подсистема поддержки пользователей в 1С:ERP (https://infostart.ru/1c/articles/1562973/)
Переход с 1С:УПП на 1C:ERP. Переезд пользователей с сохранением прежних прав (https://infostart.ru/1c/articles/1627919/)
Переход с 1С:УПП на 1C:ERP. Переделываем интеграции на основе прямых запросов к СУБД на примере УПП -> QlikView (https://infostart.ru/1c/articles/1639249/)
Maxim_Zuev; 1СERP; +2 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ITEkb 12.04.22 06:10 Сейчас в теме
Приготовился прочитать подробную статью по переходу. Поскольку, начальные шаги были расписаны достаточно подробно.
В итоге бодрое начало и неожиданное окончание статьи.
Продолжение следует?
sapervodichka; +1 Ответить
3. quazare 3614 12.04.22 10:24 Сейчас в теме
(1) все-таки у Пермитина классные обработки
Yashazz; sapervodichka; 1СERP; +3 Ответить
7. sapervodichka 6812 12.04.22 12:37 Сейчас в теме
(3) Дмитрий, им думаю приятно, я тоже думаю, что оба парни красавцы!
Юрий Пермитин (https://infostart.ru/profile/225415/)
и
Владимир Крючков (https://infostart.ru/profile/186921/)
ivanov660; Yashazz; +2 Ответить
5. sapervodichka 6812 12.04.22 12:28 Сейчас в теме
(1) Вот другие статьи:
Переход с 1С:УПП на 1C:ERP: Задача переноса печатных форм в сжатые сроки. Конструктор печати (https://infostart.ru/1c/articles/1510459/)
Переход с 1С:УПП на 1C:ERP: Перенос остатков и затянувшееся начало работы в ЕРП (https://infostart.ru/1c/articles/1540097/)
Переход с 1С:УПП на 1C:ERP: Подсистема поддержки пользователей в 1С:ERP (https://infostart.ru/1c/articles/1562973/)
Переход с 1С:УПП на 1C:ERP. Переезд пользователей с сохранением прежних прав (https://infostart.ru/1c/articles/1627919/)
Переход с 1С:УПП на 1C:ERP. Переделываем интеграции на основе прямых запросов к СУБД на примере УПП -> QlikView (https://infostart.ru/1c/articles/1639249/)
Maxim_Zuev; 1СERP; +2 Ответить
2. Jimbo 9 12.04.22 09:58 Сейчас в теме
LEFT OUTER JOIN без ISNULL когда-то выстрелит
4. gudvin77 12.04.22 10:43 Сейчас в теме
QlikView поддержал санкции и ушел с российского рынка. Тему можно закрывать.
6. sapervodichka 6812 12.04.22 12:32 Сейчас в теме
(4) Сама тема переделки прямых запросов к СУБД при переходе из УПП в ЕРП актуальна и от наличия QlikView не зависит. В статье просто представлено на его примере какие инструменты можно использовать. Тема актуальна до 2026 года.
8. Yashazz 4728 12.04.22 13:19 Сейчас в теме
(6) А чего так, до 2026-го?

После того, как мы предложили одному крупному заказчику прямые запросы к SQL, а он ответил, что это запрещено лицензионным соглашением, и нас исключили из тендера, для меня лично вопрос действительно закрыт. Безотносительно всяких там санкций.
10. sapervodichka 6812 12.04.22 13:53 Сейчас в теме
(8) Лицензионное соглашение это важный закон, его нарушать нельзя. Вот ссылка на него https://v8.1c.ru/priobretenie-i-vnedrenie/otvety-na-tipovye-voprosy-po-litsenzirovaniyu-1s-predpriyatiya-8/?

Соглашение не запрещает, например, сделать вторую копии базы 1С на СУБД (отрубить её от 1С Сервера, база теперь только на СУБД и к 1С не имеет отношения, работоспособность не нарушает), и с неё считывать данные. Материя тонкая согласен в ней надо понимать и быть осторожным.
Прикрепленные файлы:
13. kraynev-navi 648 12.04.22 21:40 Сейчас в теме
(10)
Соглашение не запрещает, например, сделать вторую копии базы 1С на СУБД (отрубить её от 1С Сервера, база теперь только на СУБД и к 1С не имеет отношения, работоспособность не нарушает), и с неё считывать данные

Это подтвержденный хоть каким-то образом со стороны 1С вариант работы?
14. sapervodichka 6812 12.04.22 21:57 Сейчас в теме
(13) сверху ссылка на вопросы лицензирования, этот как-то там опровергается?
16. sergey279 111 13.04.22 00:11 Сейчас в теме
(14) Да в комментах к теме BI ~"успеть прочитать мильон строк" можно ознакомится
Там создатель Инфостара видать не знал что можно онлайн зеркало БД сделать и поэтому сетует на злую 1С организацию. А она добрая все разрешает.
sapervodichka; +1 Ответить
11. sergey279 111 12.04.22 14:35 Сейчас в теме
а если вьюхи делать то 2й подрядчик понадобится ?
12. sapervodichka 6812 12.04.22 20:36 Сейчас в теме
(11) если вьюхи для стороннего ПО (к которому у вас доступа или компетенций нет, а надо организовать параллельную работу с 2мя система одновременно, их сверку, и затем гладкий переход с одной системы на другую) - то да, понадобится.
15. sergey279 111 13.04.22 00:03 Сейчас в теме
Да там Сторонний подрядчик им выковыривал SQL запросы и заковыривал с тестом готовые для другой системы. Может там и к скулю доступа не было вместе с компетенциями ?

По статье выглядит как:

SEL ECT
T1._IDRRef,
FROM dbo._Reference78 T1

Создать View на УПП, Переписать в вид и проверить чтоб в левой софтине не разъехалось

SELECT
T1.Ссылка,
FR OM dbo.Справочник.Котрагенты T1

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

Такие же как я "мастера" : "скачаю транслятор с инфорстара, ибо разбираться некогда".
17. sapervodichka 6812 13.04.22 00:26 Сейчас в теме
(15) Я наверное, не точно пояснил, в чем отличие статьи от суровой реальности. Так вот в этой статье для лёгкости понимания был разобран самый-самый простой запрос. А вот держи например, один из реальных запрос по неотгруженным заказам, который нам передали для переделки из УПП в ЕРП (и таких запросов куча). Понимаешь ли ты, что в нём вообще написано? Смоделируешь ли ты с учетом смены метаданных и логики это на 1С:ЕРП и как проверишь тот же результат получился или нет в QlikView? (при этом QlikView должна оставаться в рабочем состоянии (это не игрушка в ней владельцы сидят), и это не локальное ПО, а за пределами сети клиента)?.
Прикрепленные файлы:
ТекстЗапроса_НеотгруженыеЗаказыУПП.txt
18. sertak 314 13.04.22 08:53 Сейчас в теме
(17) Интересные задачи у вас, ребята )
1СERP; sapervodichka; +2 Ответить
19. sergey279 111 13.04.22 10:11 Сейчас в теме
(17)
самый-самый простой запрос. А вот держи например, один из реальных запрос по неотгруженным заказам, который нам передали для переделки из УПП в ЕРП (и таких запросов куча). Понимаешь ли ты, что в нём вообще написано? Смоделируешь ли ты с учетом смены метаданных и логики это на 1С:ЕРП и как проверишь тот же результат получился или нет в QlikView? (при этом QlikView должна оставать


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

вот неидеальный кусок SQL-щиков:
Но и по нему мне понятно что ребята к 1с справочнику цепляют свои таблички с валютами + еще служебную табличку по сделкам

	|DW.dbo.Справочник_Сделки t
	|left join DW.dbo.Справочник_Сделки_ТоварыУслугиПоСтадиям ttt on t.Ссылка = ttt.Ссылка and t.ТекущаяСтадия = ttt.Стадия 
	|left join DW.dbo.ref_Currency l3 on l3.Ссылка = ttt.Валюта
	|left join DW.dbo.ref_Sdelka q on q.Ссылка = t.Ссылка 
	|where  nullif(ttt.Выход,0) is not null
	|and t.Код = @sdlk 
	|group by 
20. sapervodichka 6812 13.04.22 15:08 Сейчас в теме
(19)
корпоративная статья "мы молодцы"
смешно ))) хотя мы и правда молодцы. Хотя суть статьи была поделиться информацией какие инструменты использовать.

Ты кстати указал, что какие-то таблички, что-то там делают. Смелее, продолжи, пожалуйста, и перепиши эту "легкотьню" в запрос 1С для УПП и затем в запрос 1С для ЕРП....
21. sergey279 111 13.04.22 16:29 Сейчас в теме
(20) Суть корпоративных статей продвинуть контору.
Контора как видно из статьи умеет 2мя обработка пользоваться и сторонними компетенциями. Молодец продвинул.
Смейся дальше.
22. sapervodichka 6812 13.04.22 19:17 Сейчас в теме
(21) Сергей, спасибо, действительно смешно )))

Статей конкретно по этому проекту по крайней мере 5 тут, они достаточно большие и разделены по темам, чтобы не городить огород в одной публикации. См. комментарий выше, можешь их почитать http://forum.infostart.ru/forum24/topic279852/message2812019/#message2812019
В статьях описаны какие-то вещи, которыми хотели поделиться. Клиенты на будущие внедрения по ним уже связывались с компанией.
Инфостарт их в своем блоке по внедрению снизу вставил как полезные ссылки
https://infostart.ru/project/past_upp/?utm_source=yandex&utm_medium=cpc&utm_campaign=perehodsupp_re­target&yclid=1888707772139497890
Сам проект получил премию лучший удаленный проект https://eawards.1c.ru/projects/upravlenie-prodazhami-v-mezhdunarodnoy-kompanii-na-baze-1s-erp--108330/
23. sergey279 111 14.04.22 10:27 Сейчас в теме
(22)
статьях описаны какие-то вещи, которыми хотели поделиться. Клиенты на будущие внедрения по ним уже связывались с компанией.


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


Но они написаны одним человеком. И я теряюсь в догадках как написавший достойные инструменты, может гордится данным решением.

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

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

Я далее само сливаюсь т.к. форум срачи увлекают/развлекают, но не приносят пользы. Можете продолжать гордится этим ноу-хау.
24. sapervodichka 6812 14.04.22 10:55 Сейчас в теме
(23) Сергей, клиент прекрасно перешел на самостоятельную поддержку через пару месяцев после внедрения, и самостоятельно обновляет функционал (который дорабатывался с динамическим выводом реквизитов). Расширения разработаны автономно и не завязаны на изменения релизов. Ты какую-то пургу несешь. Да. Давай до свиданья.
25. sergey279 111 14.04.22 11:51 Сейчас в теме
(24) Вы правы при добавления поля в расширении название таблицы не изменится и клик продолжит работать

или эксперт теперь продается как права на автомобиль.
26. sapervodichka 6812 14.04.22 12:28 Сейчас в теме
(25) если остались какие-то непонятные моменты, то напиши, пожалуйста, что нужно ещё прокомментировать.
27. sergey279 111 14.04.22 12:51 Сейчас в теме
(26) Да мне технические моменты все понятны. непонятно только почему комментарии в статьях сразу не отключаете.

Ведь издревле известно что наша народность плюрализмом мнений не одобряет.



"Вы внесены автором в черный список"
28. sapervodichka 6812 14.04.22 18:41 Сейчас в теме
(27) Сергей, если вопросов по делу - нет, давайте закончим это обсуждение. Далее если хотите проявить себя в роли компетентного специалиста, то заявитесь на круглый стол аналитиков экспертов и там газуйте по полной
https://infostart.ru/journal/news/news/kruglyy-stol-soobshchestva-1s-analitikov-rasskazyvaem-kto-vystupit-v-roli-eksperta_1641570/
29. BomjBandit 18.04.22 11:38 Сейчас в теме
(24) Добрый день, а есть какой-то пример/расширение для динамического вывода реквизитов. Например, в пользовательском режиме накидал новых элементов, задал родителей, свойства, и они начали выводиться на форму. Хотел что-то подобное написать, но мб уже готовое есть?
30. sapervodichka 6812 18.04.22 13:44 Сейчас в теме
(29) хорошая идея, расширения не видел пока такого, сам использую общие модули в самой конфе с библиотеками динамического вывода (на инфостарте много можно скачать) и перехват методов версионирования и управления свойствами, вызываемые ПриСозданииНаСервере в формах
42. fatman78 17 12.09.22 20:43 Сейчас в теме
(29) Лови: Генерация кода управляемой формы (декомпиляция элементов) В комментариях есть свежие версии.
Видел альтернативный проект на github, но он еще в зачаточном состоянии.
31. TimurD 6 11.05.22 14:06 Сейчас в теме
Лень читать все комментарии. Зачем эти преобразования с именами полей (реквизитов), таблиц и пр.? Есть проверенное средство (ПолучитьСтруктуруХраненияБазыДанных). В код не заглядывал (конкретного решение на прошлой работе), но видел результат. Т.е. делаем вьюхи (View) с именами таблиц, как они указаны в проекте (конфигураторе), или кому удобней, с именами классов. Не важно, как это поле или таблица называется в конкретной БД, есть вьюха, которую максимум нужно актуализировать и работаем с понятными таблицами и полями, делаем запросы и пр. Профит.
32. sapervodichka 6812 04.08.22 20:12 Сейчас в теме
(31) почитай комменты, а ПолучитьСтруктуруХраненияБазыДанных пока отложи в сторону она тут не помошница
33. TimurD 6 05.08.22 09:52 Сейчас в теме
(32) И чем же не устраивает использование метода ПолучитьСтруктуруХраненияБазыДанных? Банальный пример - базу развернули в новом филиале, хотят пока сами развиваться, но вот BI тоже нужен, такой же, как в головном офисе. И что теперь? Переделывать все запросы? Т.к. с большей доли вероятности имена таблиц, полей изменяться.
С другой стороны, рядом делаем вьюхи, в которых мы оперируем понятными именами таблиц и полей, как задали в конфигураторе. Их изменение (имени) мы можем контролировать, оперативно внося изменения в SQL запросы.
Вьюхи обновляются на уровне СУБД (или другой способ), через хттп сервис 1Са.
Профит: На уровне запросов СУБД мы манипулируем именами самих объектов, а не именами объектов СУБД, которые могут неожиданно измениться.
34. sapervodichka 6812 05.08.22 10:03 Сейчас в теме
(33) ты так и не прочитал =( что очень жаль. Есть запросы уже готовые и большие в текстовых файлах (около 100 ни), написанные под 1С:УПП на языке sql, надо понять что они делают с объектами 1С на языке 1С, затем надо их переделать по аналогии на языке 1С под другую программу 1С:ERP, затем с языка 1С перевести в язык sql.

Как ты будешь это делать с ПолучитьСтруктуруХраненияБазыДанных.......... наверное напишешь обработки трансляции с языка sql в 1С и обратно. Так вот об этих обработках и их примении и речь. И да они основаны на ПолучитьСтруктуруХраненияБазыДанных(), и этот метод является 1 % от всего остального кода который еще требуется написать. Поэтому ПолучитьСтруктуруХраненияБазыДанных() это капля в море.
35. TimurD 6 05.08.22 11:15 Сейчас в теме
(34) Кейс о котором я писал предполагает, что все запросы формируются в СУБД. источником для запросов являются View, в которых по сути простой запрос выборки. Допустим некий документ Заказ (основная таблица). Также называем View:
sel ect 
t1.idref as Ссылка,
t1.fld333 as Организация,
<другие поля>
fr om dbo.document333 as t1


После спокойно пишем
select 
t1.Ссылка as Ссылка,
<другие поля>
fr om dbo.Заказы as t1
wh ere t1.Организация = @p


При таком подходе нам без разницы как фактически называются таблица\поля на уровне СУБД. Если что-то поменялось - обновили View's и все.
36. sapervodichka 6812 05.08.22 15:54 Сейчас в теме
(35) ты понимаешь что 100 запросов на языке квази sql нам просто дали (взяли и дали) без описания без пояснений, они были для 1C:УПП, а надо переделать под 1С:ЕРП (это как бы разные программы, сильно). Ты это понял?
если нет, то давай расходиться, т.к. профита от того что ты будешь писать как надо делать при других начальных условиях, а я буду объяснять свои начальные установки... ну не будет
37. sapervodichka 6812 05.08.22 16:00 Сейчас в теме
(36) Вот 1 обычный запрос на псевдо языке для 1С:УПП без описания только название, как ты поймешь, что он делает в УПП и сделаешь такой же только для 1С:ERP (ориентировочно у тебя 4-8 часов времени: понять что делает в УПП, предложить аналог в 1С:ERP и примерно подумать какие доработки в 1С:ERP нужно еще сделать, чтобы сохранить информацию как в 1С:УПП):
Неотгруженные заказы:
offset:
LOAD offset;
SQL SEL ECT offset
FR OM "S".dbo."_YearOffset";
LET vShift=peek('offset',0,'offset');
DR OP Table offset;

tmp_nomen:
SEL ECT
nom."_IDRRef" as Спр_Номенклатура,
nom."_Fld1714RRef" as ЕдиницаДляОтчетов
FR OM "S".dbo."_Reference104" nom;

tmpEd:
SQL SEL ECT
"_IDRRef",
"_Fld1403",
"_Fld1405"
FROM "S".dbo."_Reference64";

Left Join(tmp_nomen)
LOAD
"_IDRRef" as ЕдиницаДляОтчетов,
"_Fld1403" as ЕИ_Отчет.Вес
Resident tmpEd;

Left Join(tmp_nomen)
LOAD
"_IDRRef" as ЕдиницаХраненияОстатков,
"_Fld1405" as ЕИ_ЕдиницаХраненияОстатков.Коэффициент
Resident tmpEd;

РН_НеотгруженныеЗаказы:
LOAD
Date(Floor(num(if($(vShift)=0, _Period, addYears(_Period, -2000)))), 'DD.MM.YYYY') as ДатаДокумента,
"_Fld17028RRef" as Спр_Номенклатура,
_OwnerIDRRef as Спр_Контрагенты,
_Fld1347RRef as Спр_Организации,
_Fld19058RRef as Спр_Пользователи,
"_Fld17030" as Цена,
"_Fld17036RRef" as Спр_СтавкаНДС,
"_Fld17037" as Количество,
"_Fld17038" as СуммаВзаиморасчетов,
"_Fld17039" as СуммаУпр,
"_Fld19053" as СуммаСкидки,
Date(Floor(num(if($(vShift)=0, _Fld4776, addYears(_Fld4776, -2000)))), 'DD.MM.YYYY') as Период,//ДатаОтгрузки,
kontr_ParentIDRRef as КонтрагентРодитель,
chann_usr_ParentIDRRef as КаналПродажКод,
chann_Description as КаналПродажНазвание,
Project as Project,
Спр_Регионы,
//_RecordKind,
OrdersNumber,
"Registr" as Регистр
Wh ere _Fld4776 >= $(vFromDate)
AND _Fld4776 < $(vLastDateYear);

SQL SEL ECT
"_Period",
"_Fld17028RRef",
dogkont."_Fld19058RRef",-- as Пользователь
dogkont."_OwnerIDRRef",-- as Контрагент
dogkont._Fld1347RRef,-- as Организация
"_Fld17030",
"_Fld17036RRef",
"_Fld17037",
"_Fld17038",
"_Fld17039",
"_Fld19053",
CASE WHEN (docOrd._Fld29028=0 OR docOrd._Fld29028 is null) //Если не заполнена дата реализации в заказе
THEN docOrd._Fld4776 //проверяем реалиную дату реализации
ELSE CASE WHEN (docRealiz._Date_Time is null OR docRealiz._Date_Time=0) THEN docOrd._Fld29028 ELSE docRealiz._Date_Time END
END as _Fld4776,
kontr._ParentIDRRef as kontr_ParentIDRRef,
chann_usr._ParentIDRRef as chann_usr_ParentIDRRef,
chann._Description as chann_Description,
dogkont._Fld1362_RRRef as Project,
Region._IDRRef /*CASE WHEN (RegionParents._Description='TT' OR RegionParents._Description='MT' OR RegionParents._Description='AFH' OR Region._ParentIDRRef = 0) THEN Region._IDRRef ELSE Region._ParentIDRRef END*/ as Спр_Регионы,
docOrd._Number as OrdersNumber,
'Orders' as "Registr"
FROM "S".dbo."_AccumRgT17042" as ord
LEFT JOIN "S".dbo."_Document270" as docOrd ON ord._Fld17026_RRRef = docOrd._IDRRef //Заказы покупателей
LEFT JOIN "S".dbo."_Document443" as docRealiz ON ord._Fld17026_RRRef = docRealiz._Fld11628_RRRef //Реализация покупателей
LEFT JOIN "S".dbo."_Reference55" dogkont ON ord._Fld17025RRef = dogkont._IDRRef
LEFT JOIN "S".dbo."_Reference87" kontr ON dogkont._OwnerIDRRef = kontr._IDRRef //Контрагенты для NOT Компании Группы, Партнеры
LEFT JOIN "S".dbo."_Reference131" chann_usr ON dogkont.TT = chann_usr._IDRRef //Пользователи для отбора по каналам
LEFT JOIN (sel ect
_IDRRef,
_Description
from "S".dbo."_Reference131"
wh ere _Description in ('TT', 'MT', 'EXPORT', 'AFH channel')
) chann
ON chann_usr._ParentIDRRef = chann._IDRRef
LEFT JOIN "S".dbo."_Reference148" Region ON kontr._Fld1547RRef = Region._IDRRef //
LEFT JOIN "S".dbo."_Reference148" RegionParents ON Region._ParentIDRRef = RegionParents._IDRRef
LEFT JOIN "S".dbo."_Reference131" UserRetail ON Region._Fld28392RRef<>0 AND Region._Fld28392RRef = UserRetail._Fld1914RRef //Пользователи
LEFT JOIN "S".dbo."_Reference131" ParentsUserRetail ON RegionParents._Fld28392RRef<>0 AND RegionParents._Fld28392RRef = ParentsUserRetail._Fld1914RRef //Пользователи
LEFT JOIN "S".dbo."_Reference131" ParentsUserAFH ON RegionParents._Fld28393RRef<>0 AND RegionParents._Fld28393RRef = ParentsUserAFH._Fld1914RRef //Пользователи
LEFT JOIN "S".dbo."_Reference138" Project ON dogkont._Fld1362_RRRef = Project._IDRRef //
;

Left Join(РН_НеотгруженныеЗаказы)
LOAD
Спр_Номенклатура,
ЕИ_Отчет.Вес,
ЕИ_ЕдиницаХраненияОстатков.Коэффициент
Resident tmp_nomen;

DR OP Table tmp_nomen;

Перечисление_СтавкиНДС:
LOAD
"_IDRRef" as Ссылка,
"_EnumOrder" as Порядок;
SQL SELECT
"_IDRRef",
"_EnumOrder"
FR OM "S".dbo."_Enum840";

//Доп_Перечисление_СтавкиНДС:
left join(Перечисление_СтавкиНДС)
LOAD * INLINE [
Порядок, Значение_СтавкиНДС
0, 18%
1, 18%
2, 10%
3, 10%
4, 0%
5, Без НДС
6, 20%
7, 20%
];


left join(РН_НеотгруженныеЗаказы)
load
Ссылка as Спр_СтавкаНДС,
Значение_СтавкиНДС
Resident Перечисление_СтавкиНДС;
Проценты сетевых скидок+
QlikView
offset:
LOAD offset;
SQL SELECT offset
FR OM "S".dbo."_YearOffset";
LET vShift=peek('offset',0,'offset');
DR OP Table offset;

tmpРН_ПроцентыСетевыхСкидок: LOAD
Date(Floor(if($(vShift)=0, _Period, addYears(_Period, -2000))), 'DD-MM-YYYY') as Период, //1
"_Fld23421RRef" as Спр_ДоговорыКонтрагентов, //2
"_Fld23422RRef" as Спр_Бренд, //3
"_Fld23423RRef" as Спр_ВидСетевогоБонуса, //4
"_Fld23424" as Процент; //5
SQL SELECT
"_Period",
"_Fld23421RRef",
"_Fld23422RRef",
"_Fld23423RRef",
"_Fld23424"
FR OM "S".dbo."_InfoRg23420"; //6

left join(tmpРН_ПроцентыСетевыхСкидок)
LOAD
"_IDRRef" as Спр_Бренд,
"_Code" as Бренд_Код, //7
"_Description" as Бренд_Наименование; //8
SQL SELECT
"_IDRRef", "_Code",
"_Description"
FR OM "S".dbo."_Reference68"; //9

Перечисление_ВидыСетевыхБонусов:
LOAD
"_IDRRef" as Спр_ВидСетевогоБонуса,
"_EnumOrder" as Порядок;
SQL SELECT
"_IDRRef", //11
"_EnumOrder" //12
FR OM "S".dbo."_Enum23217"; //10

left join(Перечисление_ВидыСетевыхБонусов)
LOAD * INLINE [
Порядок, Значение
0, Логистика
1, Маркетинг
2, Ретро бонусы услуги
3, Ретро бонусы премии
4, Логистика сторонних организаций (по сумме)
5, Транспортные расходы
6, Листинг (разовая оплата)
7, Логистика сторонних организаций (по весу)
];

left join(tmpРН_ПроцентыСетевыхСкидок)
load
Спр_ВидСетевогоБонуса,
Порядок,
Значение as ВидСетевогоБонуса
Resident Перечисление_ВидыСетевыхБонусов;
38. TimurD 6 05.08.22 16:32 Сейчас в теме
(37) Не думал что так бомбанет. Не нравиться мой кейс - ок. Надеюсь по работе пересекаться не будем.
39. sapervodichka 6812 05.08.22 16:47 Сейчас в теме
(38) Нравиться/не нравиться тут не причем. Ты пишешь какие-то свои соображения не подходящие для решения этой конкретной задачи (для другой подходит, для этой нет). Я тебе даю пояснения, что это не подходит и ты их не слышишь.
Короче ладно, расходимся. (претензий у меня нет - ты свои предложения изложил толково, просто мы друг друга не поняли).
Я бы наоборот если бы пересеклись, с радостью поработал с человеком, который свои мысли излагает правильно.
40. TimurD 6 09.08.22 16:53 Сейчас в теме
(39) Эт про меня "мысли правильно излагает"? Сарказм?
41. sapervodichka 6812 09.08.22 17:09 Сейчас в теме
(40) альтернативное мнение всегда полезно, ты не тихоня, и не отсиживаешься - это правильное поведение в команде.
Оставьте свое сообщение