Создание документа установки цен номенклатуры. Получение формы на сервере.
Пришла задача регламентно создавать документ установки цен номенклатуры. Кроме основной цены, данные по которой уже есть, нужно рассчитывать все зависимые цены. Почти все процедуры для работы с этим документом используют в качестве параметра форму документа. Пример;
Создавать документ планирую через внешнюю обработку, которая вызывается по расписанию.
дублировать код для работы на сервере с удалением параметра формы не очень то хочется.
А получить форму документа на сервере, что бы потом передавать ее в качестве параметра - не получается.
Подскажите , как правильно создавать документ установки цен и возможно ли вообще получить форму какого либо объекта на сервере, без клиентского вызова.
Типовая конфигурация - Комплексная автоматизация.
Процедуры типа ПолучитьФорму не подходят: доступность не сервер ( толстый клиент максимум)
УстановкаЦенСервер.РассчитатьЦены(Форма, ПараметрыРасчета, КэшДанных = Неопределено)
Создавать документ планирую через внешнюю обработку, которая вызывается по расписанию.
дублировать код для работы на сервере с удалением параметра формы не очень то хочется.
А получить форму документа на сервере, что бы потом передавать ее в качестве параметра - не получается.
Подскажите , как правильно создавать документ установки цен и возможно ли вообще получить форму какого либо объекта на сервере, без клиентского вызова.
Типовая конфигурация - Комплексная автоматизация.
Процедуры типа ПолучитьФорму не подходят: доступность не сервер ( толстый клиент максимум)
По теме из базы знаний
- Загрузка номенклатуры в УТ11, КА 2, ERP 2, Розница 2 из Excel. Дополнительные реквизиты и сведения, характеристики, картинки, цены, остатки
- 1С:Хлебобулочное и кондитерское производство. Модуль для 1С:ERP и 1С:КА
- 1С:Управление строительной организацией. 1С:ERP Управление строительной организацией 2
- Консультация для сдачи экзамена "1С:Специалист" по конфигурированию платформы
- Интеграция с маркетплейсами МегаМаркет, Wildberries, OZON, ЯндексМаркет, VK, Avito, Леруа Мерлен, Aliexpress, КУПЕР, Dostavista
Найденные решения
4 . Остается только вариант второго комментария (2). Копировать нужные функции и процедуры из общих модулей и даже формы. Изменять их что бы они работали без параметра-формы. Получается самый правильный вариант. Но одновременно и не правильный... Потому как при обновлении если измениться логика, то может не сразу выдаться ошибка. И да получается с таким подходом, дублирование кода - это уже нормальная вещь для типовых конфигураций
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(16) Как ж нет....
Классы есть, но нет возможности создавать свои базовые классы (метаданные). По сути при помощи реквизитов, ТЧ и измерений мы формируем свои собственные классы. На основании этих классов создаем объекты. Объекты имеют конструкторы (ОбработкаЗаполнения) и деструкторы. Или Даже Новый Структура ("Ключ"). Тоже базовый класс на основании которого строится объект. ТаблицаЗначение = Новый ТаблицаЗначений и т д.
У классов есть методы - ТаблицаЗначений.Добавить() Удалить() Скопировать().
Справочники.Валюты.Создать(), НайтиПоНаименованию() ......
Инкапсуляция - Любой модуль. Все, что без слова Экспорт и непредопределенные процедуры и функции, по сути является инкапсуляцией.
Может я не прав и 1с не похожа на ООП? Больше на ассемблер или лисп?
Классы есть, но нет возможности создавать свои базовые классы (метаданные). По сути при помощи реквизитов, ТЧ и измерений мы формируем свои собственные классы. На основании этих классов создаем объекты. Объекты имеют конструкторы (ОбработкаЗаполнения) и деструкторы. Или Даже Новый Структура ("Ключ"). Тоже базовый класс на основании которого строится объект. ТаблицаЗначение = Новый ТаблицаЗначений и т д.
У классов есть методы - ТаблицаЗначений.Добавить() Удалить() Скопировать().
Справочники.Валюты.Создать(), НайтиПоНаименованию() ......
Инкапсуляция - Любой модуль. Все, что без слова Экспорт и непредопределенные процедуры и функции, по сути является инкапсуляцией.
Может я не прав и 1с не похожа на ООП? Больше на ассемблер или лисп?
(17)Вот именно только похожа на ООП. Отдаленно похожа. Вот все что вы перечислили про объекты очень хочется перенести на ООП. Но тут больше платформа написана на ООП, но практически не оставляет ничего для свободы разработчику конфигураций. Вы же не сможете создать свой класс объектов для обработки информации, со своими событиями и методами. А пользоваться типо СправочникОбъект, что бы только расчитать данные , и при этом не записывать ее в БД - тоже костыль в инвалидной коляске.
Как сама 1С говори это ПОП ))) предметно ориентированное программирование...
Тут вопрос другой, что не соблюдается некоторая модульность. Этот пример с установкой цен очень красиво все показывает.
Я хочу просто создать ДокументОбъект, Заполнить его свойства те которые могу, и пересчитать данные , которые должны пересчитываться. но не могу, потому что логика пересчета находится почему то не в объекте, а в форме этого объекта. Т.е. уже не сохраняется целостность данных объекта.
На самом деле я тут вижу проблему не в языке программирования. А в программистах его использующих. Печалька
Как сама 1С говори это ПОП ))) предметно ориентированное программирование...
Тут вопрос другой, что не соблюдается некоторая модульность. Этот пример с установкой цен очень красиво все показывает.
Я хочу просто создать ДокументОбъект, Заполнить его свойства те которые могу, и пересчитать данные , которые должны пересчитываться. но не могу, потому что логика пересчета находится почему то не в объекте, а в форме этого объекта. Т.е. уже не сохраняется целостность данных объекта.
На самом деле я тут вижу проблему не в языке программирования. А в программистах его использующих. Печалька
(2) Напротив На мой взгляд 1С-ники в ЗУП 3 обслышались про ООП до полного маразма...
Чтобы выполнить 1 строчку кода вызывается 14 модулей друг за другом (в стиле ООП) в одном найденном случае, причем в каждой процедуре всего 1 строчка - вызов другой процедуры!
Зато обфускация точно не нужна - любой садовник ногу сломит в таком ООП...
Чтобы выполнить 1 строчку кода вызывается 14 модулей друг за другом (в стиле ООП) в одном найденном случае, причем в каждой процедуре всего 1 строчка - вызов другой процедуры!
Зато обфускация точно не нужна - любой садовник ногу сломит в таком ООП...
(2) 1С - не ООП это факт... Это имеет свои плюсы и минусы. Про полиморфизм, инкапсуляцию и прочее конечно речи не идет.. Но товарищи могли бы сохранять модульность... Тупо с работой над документОбъектом.. Почему они так тупо это сделали не понятно.
Более того нашел где эти процедуры вызываются с обработки... но там тоже все с клиента и в качестве параметра передается форма обработки. Которая в свою очередь просто тупо копирует реквизиты формы документа установки цен.
Поиски пошли тремя путями. О которых напишу ниже в коментариях.
Более того нашел где эти процедуры вызываются с обработки... но там тоже все с клиента и в качестве параметра передается форма обработки. Которая в свою очередь просто тупо копирует реквизиты формы документа установки цен.
Поиски пошли тремя путями. О которых напишу ниже в коментариях.
4 . Остается только вариант второго комментария (2). Копировать нужные функции и процедуры из общих модулей и даже формы. Изменять их что бы они работали без параметра-формы. Получается самый правильный вариант. Но одновременно и не правильный... Потому как при обновлении если измениться логика, то может не сразу выдаться ошибка. И да получается с таким подходом, дублирование кода - это уже нормальная вещь для типовых конфигураций
(1) Была похожая ситуация, только без регламентного задания. Как раз в ЗУПе.
Вообщем все придется делать с клиента.
Как вариант, сделайте не регламентное задание, а под пользователем.
Запускаете пользователя и у него крутиться обработка, которая с заданным интервалом выполняет нужную процедуру.
1 минус, -1 лицензия.
Либо копайте в сторону нового функционала сервер взаимодействия, он на сколько я знаю может постучатся на клиент с сервера.
Вообщем все придется делать с клиента.
Как вариант, сделайте не регламентное задание, а под пользователем.
Запускаете пользователя и у него крутиться обработка, которая с заданным интервалом выполняет нужную процедуру.
1 минус, -1 лицензия.
Либо копайте в сторону нового функционала сервер взаимодействия, он на сколько я знаю может постучатся на клиент с сервера.
1. Решил получить форму на сервере... Сразу скажу что это не удалось...
функции Получитьформу, или Открытьформу являются интерактивными и на сервере не сработают...
Интересно то, что у объектаДокумент можно вызвать метод получить форму, и ошибки не выдаст, но вернет Неопределено. В СП через содержание вообще не указано что есть у него этот метод, хотя через поиск найти можно.
2. Так же была идея сериализовать форму, а потом из двоичных данных получать ее на сервере, тоже не получилось... Либо не знаю как правильно, либо это невозможно
функции Получитьформу, или Открытьформу являются интерактивными и на сервере не сработают...
Интересно то, что у объектаДокумент можно вызвать метод получить форму, и ошибки не выдаст, но вернет Неопределено. В СП через содержание вообще не указано что есть у него этот метод, хотя через поиск найти можно.
2. Так же была идея сериализовать форму, а потом из двоичных данных получать ее на сервере, тоже не получилось... Либо не знаю как правильно, либо это невозможно
3. Попробовал создать имитацию формы через структуру. То есть создал структуру с одноименными свойствами как реквизиты формы... Тоже идея не прошла, потому как в функциях общих модулей вызываются методы у таких типов объектов как ДанныеФормыСтруктура, данныеформыКоллекция... их симитировать не предоставляется возможным... Идея не сработала.
(9) Ну еще вариант, посмотрите какие серверные процедуры вызываются из формы. и подготовьте сами данные для вызова этих процедур.
Все что вызывается с клиента, все го лишь готовит структура для вызова сервера.
Такое делал в расширение бухгалтерии, надо было сделать автозаполнение КБК, но оно вызывалось с клиента, на клиенте только подготовка.
Все что вызывается с клиента, все го лишь готовит структура для вызова сервера.
Такое делал в расширение бухгалтерии, надо было сделать автозаполнение КБК, но оно вызывалось с клиента, на клиенте только подготовка.
(13) В топике я привел пример процедуры. Передается форма.. Именно управляемая форма...
То есть она создается на клиенте... Вызывается процедура с директивой &НаСервере , где в контексте формы, можно получить эту же форму инструкцией ЭтотОбъект. И передать ее на серверный общий модуль... Вот так в Комплексной Автоматизации и делается.
Форму на сервер передать нельзя
. Да, передавать с клиента нельзя. но ведь она ее можно передавать с серверной процедуры формы.
То есть она создается на клиенте... Вызывается процедура с директивой &НаСервере , где в контексте формы, можно получить эту же форму инструкцией ЭтотОбъект. И передать ее на серверный общий модуль... Вот так в Комплексной Автоматизации и делается.
Можно залезть в саму процедуру УстановкаЦенСервер.РассчитатьЦены(Форма, ПараметрыРасчета, КэшДанных = Неопределено) и посмотреть зачем туда форма передаётся.
Часто бывает, что может и не используется нигде параметр тогда можно передать что угодно, хоть так УстановкаЦенСервер.РассчитатьЦены("", ПараметрыРасчета, КэшДанных = Неопределено).
Если используется например Форма.КакойТоРеквизит можно подготовить допустим структуру с этим реквизитом и отдать в процедуру.
Часто бывает, что может и не используется нигде параметр тогда можно передать что угодно, хоть так УстановкаЦенСервер.РассчитатьЦены("", ПараметрыРасчета, КэшДанных = Неопределено).
Если используется например Форма.КакойТоРеквизит можно подготовить допустим структуру с этим реквизитом и отдать в процедуру.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот