Создание документа установки цен номенклатуры. Получение формы на сервере.

1. Arxxximed 34 11.12.18 22:09 Сейчас в теме
Пришла задача регламентно создавать документ установки цен номенклатуры. Кроме основной цены, данные по которой уже есть, нужно рассчитывать все зависимые цены. Почти все процедуры для работы с этим документом используют в качестве параметра форму документа. Пример;
УстановкаЦенСервер.РассчитатьЦены(Форма, ПараметрыРасчета, КэшДанных = Неопределено)


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

дублировать код для работы на сервере с удалением параметра формы не очень то хочется.

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


Типовая конфигурация - Комплексная автоматизация.

Процедуры типа ПолучитьФорму не подходят: доступность не сервер ( толстый клиент максимум)
По теме из базы знаний
Найденные решения
2. starjevschik 12.12.18 07:57 Сейчас в теме
(1) переписать все эти процедуры в свою обработку.
В 1с не слышали про объектно-ориентированное программирование, поэтому вот так. Обычное дело.
10. Arxxximed 34 12.12.18 10:44 Сейчас в теме
4 . Остается только вариант второго комментария (2). Копировать нужные функции и процедуры из общих модулей и даже формы. Изменять их что бы они работали без параметра-формы. Получается самый правильный вариант. Но одновременно и не правильный... Потому как при обновлении если измениться логика, то может не сразу выдаться ошибка. И да получается с таким подходом, дублирование кода - это уже нормальная вещь для типовых конфигураций
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starjevschik 12.12.18 07:57 Сейчас в теме
(1) переписать все эти процедуры в свою обработку.
В 1с не слышали про объектно-ориентированное программирование, поэтому вот так. Обычное дело.
3. dandykry 10 12.12.18 08:07 Сейчас в теме
(2) Если 1с это не ООП, то что это такое - 1с?

Нет классов? объектов? Методов? инкапсуляции?
16. starjevschik 12.12.18 12:02 Сейчас в теме
(3) ничего перечисленного там нет, а три четверти кода в общих модулях.
А вот эти вот обработки заполнения всегда с формой - это просто идиотизм, простите уж мой французский. Бессмысленный и беспощадный идиотизм.
17. dandykry 10 12.12.18 12:47 Сейчас в теме
(16) Как ж нет....
Классы есть, но нет возможности создавать свои базовые классы (метаданные). По сути при помощи реквизитов, ТЧ и измерений мы формируем свои собственные классы. На основании этих классов создаем объекты. Объекты имеют конструкторы (ОбработкаЗаполнения) и деструкторы. Или Даже Новый Структура ("Ключ"). Тоже базовый класс на основании которого строится объект. ТаблицаЗначение = Новый ТаблицаЗначений и т д.
У классов есть методы - ТаблицаЗначений.Добавить() Удалить() Скопировать().
Справочники.Валюты.Создать(), НайтиПоНаименованию() ......

Инкапсуляция - Любой модуль. Все, что без слова Экспорт и непредопределенные процедуры и функции, по сути является инкапсуляцией.

Может я не прав и 1с не похожа на ООП? Больше на ассемблер или лисп?
20. Arxxximed 34 14.12.18 00:45 Сейчас в теме
(17)Вот именно только похожа на ООП. Отдаленно похожа. Вот все что вы перечислили про объекты очень хочется перенести на ООП. Но тут больше платформа написана на ООП, но практически не оставляет ничего для свободы разработчику конфигураций. Вы же не сможете создать свой класс объектов для обработки информации, со своими событиями и методами. А пользоваться типо СправочникОбъект, что бы только расчитать данные , и при этом не записывать ее в БД - тоже костыль в инвалидной коляске.
Как сама 1С говори это ПОП ))) предметно ориентированное программирование...

Тут вопрос другой, что не соблюдается некоторая модульность. Этот пример с установкой цен очень красиво все показывает.
Я хочу просто создать ДокументОбъект, Заполнить его свойства те которые могу, и пересчитать данные , которые должны пересчитываться. но не могу, потому что логика пересчета находится почему то не в объекте, а в форме этого объекта. Т.е. уже не сохраняется целостность данных объекта.
На самом деле я тут вижу проблему не в языке программирования. А в программистах его использующих. Печалька
starjevschik; +1 Ответить
21. dandykry 10 14.12.18 07:33 Сейчас в теме
(20)
На самом деле я тут вижу проблему не в языке программирования. А в программистах его использующих. Печалька


Если бы не написали это предложение, я продолжил бы спорить))
4. YannikAlx 43 12.12.18 09:04 Сейчас в теме
(2) Напротив На мой взгляд 1С-ники в ЗУП 3 обслышались про ООП до полного маразма...
Чтобы выполнить 1 строчку кода вызывается 14 модулей друг за другом (в стиле ООП) в одном найденном случае, причем в каждой процедуре всего 1 строчка - вызов другой процедуры!
Зато обфускация точно не нужна - любой садовник ногу сломит в таком ООП...
7. Arxxximed 34 12.12.18 10:31 Сейчас в теме
(2) 1С - не ООП это факт... Это имеет свои плюсы и минусы. Про полиморфизм, инкапсуляцию и прочее конечно речи не идет.. Но товарищи могли бы сохранять модульность... Тупо с работой над документОбъектом.. Почему они так тупо это сделали не понятно.
Более того нашел где эти процедуры вызываются с обработки... но там тоже все с клиента и в качестве параметра передается форма обработки. Которая в свою очередь просто тупо копирует реквизиты формы документа установки цен.

Поиски пошли тремя путями. О которых напишу ниже в коментариях.
10. Arxxximed 34 12.12.18 10:44 Сейчас в теме
4 . Остается только вариант второго комментария (2). Копировать нужные функции и процедуры из общих модулей и даже формы. Изменять их что бы они работали без параметра-формы. Получается самый правильный вариант. Но одновременно и не правильный... Потому как при обновлении если измениться логика, то может не сразу выдаться ошибка. И да получается с таким подходом, дублирование кода - это уже нормальная вещь для типовых конфигураций
5. oleg-x 26 12.12.18 10:12 Сейчас в теме
(1) Была похожая ситуация, только без регламентного задания. Как раз в ЗУПе.
Вообщем все придется делать с клиента.
Как вариант, сделайте не регламентное задание, а под пользователем.
Запускаете пользователя и у него крутиться обработка, которая с заданным интервалом выполняет нужную процедуру.
1 минус, -1 лицензия.
Либо копайте в сторону нового функционала сервер взаимодействия, он на сколько я знаю может постучатся на клиент с сервера.
6. Arxxximed 34 12.12.18 10:27 Сейчас в теме
(5)Как решение , но по моему сложно-костыльное )). Под пользователем- не вариант. Обработка запускается поздно ночью.. Конечно можно писать скрипт под операционку.... Но уже в таком случае (2) выигрывает.
8. Arxxximed 34 12.12.18 10:38 Сейчас в теме
1. Решил получить форму на сервере... Сразу скажу что это не удалось...
функции Получитьформу, или Открытьформу являются интерактивными и на сервере не сработают...
Интересно то, что у объектаДокумент можно вызвать метод получить форму, и ошибки не выдаст, но вернет Неопределено. В СП через содержание вообще не указано что есть у него этот метод, хотя через поиск найти можно.
2. Так же была идея сериализовать форму, а потом из двоичных данных получать ее на сервере, тоже не получилось... Либо не знаю как правильно, либо это невозможно
9. Arxxximed 34 12.12.18 10:40 Сейчас в теме
3. Попробовал создать имитацию формы через структуру. То есть создал структуру с одноименными свойствами как реквизиты формы... Тоже идея не прошла, потому как в функциях общих модулей вызываются методы у таких типов объектов как ДанныеФормыСтруктура, данныеформыКоллекция... их симитировать не предоставляется возможным... Идея не сработала.
11. oleg-x 26 12.12.18 10:46 Сейчас в теме
(9) Ну еще вариант, посмотрите какие серверные процедуры вызываются из формы. и подготовьте сами данные для вызова этих процедур.
Все что вызывается с клиента, все го лишь готовит структура для вызова сервера.
Такое делал в расширение бухгалтерии, надо было сделать автозаполнение КБК, но оно вызывалось с клиента, на клиенте только подготовка.
12. Arxxximed 34 12.12.18 10:50 Сейчас в теме
(11) По моему уже написал, данные у меня есть. Но что бы вызвать хотя бы процедуру пересчета цен, мне нужно передавать в качестве параметра форму. А форму получить или создать на сервере по крайней мере я не знаю как.
13. oleg-x 26 12.12.18 10:53 Сейчас в теме
(12) Откройте эту процедуру, там наверняка вызываются серверные процедуры. Форму на сервер передать нельзя, по этому у 1С такого быть тоже не может.
14. Arxxximed 34 12.12.18 11:07 Сейчас в теме
(13) В топике я привел пример процедуры. Передается форма.. Именно управляемая форма...
Форму на сервер передать нельзя
. Да, передавать с клиента нельзя. но ведь она ее можно передавать с серверной процедуры формы.
То есть она создается на клиенте... Вызывается процедура с директивой &НаСервере , где в контексте формы, можно получить эту же форму инструкцией ЭтотОбъект. И передать ее на серверный общий модуль... Вот так в Комплексной Автоматизации и делается.
15. oleg-x 26 12.12.18 11:25 Сейчас в теме
(14) Действительно, сейчас посмотрел это в УТ 11.4 (все одно БСП)... Понапридумывают всякой *****
18. Xatori111 18 13.12.18 16:19 Сейчас в теме
Можно залезть в саму процедуру УстановкаЦенСервер.РассчитатьЦены(Форма, ПараметрыРасчета, КэшДанных = Неопределено) и посмотреть зачем туда форма передаётся.
Часто бывает, что может и не используется нигде параметр тогда можно передать что угодно, хоть так УстановкаЦенСервер.РассчитатьЦены("", ПараметрыРасчета, КэшДанных = Неопределено).
Если используется например Форма.КакойТоРеквизит можно подготовить допустим структуру с этим реквизитом и отдать в процедуру.
19. oleg-x 26 13.12.18 17:58 Сейчас в теме
(18) Не, там все печально. Можете сами глянуть в любой конфигурации на БСП УФ
Идет куча процедур и везде используется форма, а потом еще возвращает данные для пересчета на клиенте.
22. Obertone 74 25.03.22 09:37 Сейчас в теме
Если дело касается вызова процедур в обработке некоей сторонней формы из конфигурации, а они не экспортные, то кроме как копирования сторонней формы из конфигурации в обработку и её адаптирования для запуска и вызова сделать чего-то другого нельзя.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот