Версия для печати темы (https://pro1c.org.ua/index.php?s=540a87f9f6a55e35f2e29683b7b5f965&showtopic=67055)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Програмное создание документа установки цен

Автор: ZenBi 12.08.22, 11:30

Здрасте.

Имею вопрос (хотя скорее это он меня имеет).

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

И вот проблема. Документ установка цен номенклатуры я могу вполне нормально заполнить, вот только как вызвать типовые функции по расчету цен, если они все не в общих модулях а в ФОРМЕ документа.

НУЖНО: вызвать функции формы, без её открытия из не созданного документа установки цен (нет ссылки).

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




Автор: Vofka 12.08.22, 12:02

Цитата(ZenBi @ 12.08.22, 12:30) *
И вот проблема. Документ установка цен номенклатуры я могу вполне нормально заполнить, вот только как вызвать типовые функции по расчету цен, если они все не в общих модулях а в ФОРМЕ документа.

Мне кажется, что это проблема всех конфигураций 1С, в т.ч. современных. Не знаю почему, но почему-то разработчики не беспокоятся о возможности создания документов полностью программно. Либо на это есть какие-то причины. Вам придется поколупаться в вызовах с клиента, посмотреть что там вызывается при изменении разных полей и повставлять все эти вызовы в свою обработку, где-то покопировать серверные процедуры из формы.

Автор: ZenBi 12.08.22, 13:08

Vofka @ Сегодня, 13:02 * ,

Таки да. Уже занят этим. Пожалуй ничего лучше я уже и не придумаю.

Vofka @ Сегодня, 13:02 * ,

Хотя можно ещё попробовать записать документ (без проведения дабы получить ссылку), открыть его форму, выполнить функцию "НачатьПересчетЦенЦеновыхГруп" и сразу же за этим записать установку цен и закрыть форму. Но даже в лучшем случае у пользователя на екране моргнёт форма установки цен, что вызовет у него ненужные вопросы.

Автор: Gorus 16.08.22, 10:39

ZenBi @ 12.08.22, 14:08 * ,
Так можна ж і не відкривати форму.
Наведу приклад як я заповнював форму з викликом методів форми. Завдання було - заповнити і відкрити форму нового документа без збереження в базі. Думаю щось з того можна буде використати і вам:

ПарамФормы = Новый Структура;
Форма = ПолучитьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаОбщая", ПарамФормы);
ДанныеФормы = Форма.Объект;
массивТоваров = Новый Массив(); // масив структур, для заповнення ТЧ
ДанныеФормы.Организация = Объект.Организация;
ДанныеФормы.Контрагент = Контрагент;
ДанныеФормы.Товары.Очистить();
ЗаполнитьРННаСервере(ДанныеФормы, массивТоваров);
    
КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); // копіюємо дані форми в об'єкт форми і далі відкриваємо її
Форма.ПриИзмененииЦеныИВалюты(ДанныеФормы.ВалютаДокумента, ДанныеФормы.КурсВзаиморасчетов, ДанныеФормы.КратностьВзаиморасчетов); // Щоб викликалось "УправлениеФормой" і перерахувались підсумки
Форма.Открыть();

Суть в тому, що дані форми можна заповнити потрібними нам значеннями (в тому числі і на сервері) і передати назад у форму, де вони опрацюються вбудованими методами. У моєму випадку - я далі показую форму користувачу і він вирішує чи зберігати ці дані чи ні, а у вашому - можна не відкриваючи форму просто забрати назад перераховані дані. Мало б спрацювати.

Доповню ще: найгірший випадок у мене був при заповнені табеля, там метод перерахунку - не експортний, і викликати його зовні було неможливо ніяк. Тому прийшлось через розширення додати у форму ще два метода, ось так:
&НаКлиенте
// Для можливості оновленя (перезаповнення) табличної частини при завантажені табеля з файлу
Процедура ОбновитьДанные() Экспорт
    ОбновитьДанныеНаСервере();
КонецПроцедуры //ОбновитьДанные()

&НаСервере
Процедура ОбновитьДанныеНаСервере()
    УчетРабочегоВремениФормы.ТабельПослеЗаписиНаСервере(ЭтаФорма, Неопределено, Неопределено);
КонецПроцедуры //ОбновитьДанныеНаСервере()


Автор: ZenBi 16.08.22, 10:39

Gorus @ Сегодня, 11:33 * ,
О! Нехай це і не пряма відповідь проте наштовхує на роздуми.
Дякую!

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua