// ===============================
Процедура ИзмКонтрагент()
Если Заказ.Выбран()=1 Тогда
глКомментарий("Контрагента нужно изменять в заказе!",1,,"!");
Контрагент = Заказ.Контрагент;
Возврат;
КонецЕсли;
Если Контрагент.Выбран() = 1 Тогда
ВидТорговли = Контрагент.ВидТорговли;
Если Контрагент.ВидВзаиморасчетов = Перечисление.ВидыВзаиморасчетов.ПоДоговорам Тогда
Заказ = Контрагент.БазДоговор;
КонецЕсли;
УстСуммаО();
Иначе
ВидТорговли = Перечисление.ВидыТорговли.Предоплата;
Заказ = 0;
КонецЕсли;
ИзмВидТорговли();
КонецПроцедуры
// ===============================
Процедура ИзмЗаказ()
глВыбратьЗаказ(Заказ,Контрагент,СчетКонтрагента,Контекст);
Если Заказ.Выбран() = 1 Тогда
Попытка
Валюта = Заказ.Валюта;
Исключение
Валюта = Гривня;
КонецПопытки;
КонецЕсли;
ИзмВалюта();
УстСуммаО();
КонецПроцедуры
// ===============================
inna.innainna84 @ Сегодня, 13:21
,
ну а что тут сложного? очевидно, нужно проверять фирму в документе, и в зависимости от фирмы искать договор, и, если нашли, проставлять его
nik389 @ Сегодня, 16:06
,
Ну я не программист, и для меня это сложно
inna.innainna84 @ Сегодня, 16:11
,
ну если вообще не программист, лучше позвать программиста
навскидку можно так:
лпДоговор =Контрагент.Договор;
Если лпДоговор.Фирма = Фирма Тогда
Договор = лпДоговор;
Иначе
ДокДоговор = СоздатьОбъект("Документ.Договор");
ДокДоговор.ВыбратьДокументы(Дата1,Дата2);
Пока ДокДоговор.ПолучитьДокумент() = 1 Цикл
//тут должны быть проверки на актуальность договора
Если ДокДоговор.Фирма = Фирма Тогда
Договор = ДокДоговор.ТекущийДокумент();
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
nik389 @ Сегодня, 16:22
,
а как это мне применить в моем примере кода. Куда нужно добавить ваш код?
inna.innainna84 @ Сегодня, 16:30
,
в форму документа, куда нужно подставлять договор
код был дан для образца. Его нужно не бездумно вставить, а с учетом нюансов вашей конфигурации
Извените пожалуйста
посмотрите верно ли я поняла
// ===============================
Процедура ИзмКонтрагент()
Если Заказ.Выбран()=1 Тогда
глКомментарий("Контрагента нужно изменять в заказе!",1,,"!");
Контрагент = Заказ.Контрагент;
Возврат;
КонецЕсли;
Если Контрагент.Выбран() = 1 Тогда
ВидТорговли = Контрагент.ВидТорговли;
Если Контрагент.ВидВзаиморасчетов = Перечисление.ВидыВзаиморасчетов.ПоДоговорам Тогда
лпЗаказ =Контрагент.БазДоговор;
Если лпЗаказ .Фирма = Фирма Тогда
Заказ =лпЗаказ;
Иначе
ДокЗаказ = СоздатьОбъект("Документ.Договор");
ДокЗаказ .ВыбратьДокументы(НачалоПериодаБИ(),ДатаДок);
Пока ДокЗаказ .ПолучитьДокумент() = 1 Цикл
//тут должны быть проверки на актуальность договора
Если ДокЗаказ .Фирма = Фирма Тогда
Договор = ДокЗаказ .ТекущийДокумент();
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
УстСуммаО();
Иначе
ВидТорговли = Перечисление.ВидыТорговли.Предоплата;
Заказ = 0;
КонецЕсли;
ИзмВидТорговли();
КонецПроцедуры
// ==============================
Перем Запрос, ТекстЗапроса;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Выборка)
|Обрабатывать НеПомеченныеНаУдаление;
|Без итогов;
|Контрагент = Документ.Договор.Контрагент;
|ДатаНачала = Документ.Договор.ДатаНачала;
|ДатаОкончания = Документ.Договор.ДатаОкончания;
|НомерДоговора = Документ.Договор.НомерДоговора;
|ВидДоговора = Документ.Договор.ВидДоговора;
|ДатаДок = Документ.Договор.ДатаДок;
|НомерДок = Документ.Договор.НомерДок;
|Группировка Контрагент упорядочить по Контрагент.Наименование;
|Условие(лпФирма = Фирма);
|Условие(Контрагент = Контрагент);
|Условие(ДатаНачала <= Дата1);
|Условие(ДатаОкончания >= Дата2);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
// ===============================
Процедура ИзмКонтрагент()
Если Заказ.Выбран()=1 Тогда
глКомментарий("Контрагента нужно изменять в заказе!",1,,"!");
Контрагент = Заказ.Контрагент;
Возврат;
КонецЕсли;
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Выборка)
|Обрабатывать НеПомеченныеНаУдаление;
|Без итогов;
|Контрагент = Документ.Договор.Контрагент;
|Договор = Документ.Договор.ТекущийДокумент;
|ДатаНачала = Документ.Договор.ДатаНачала;
|ДатаОкончания = Документ.Договор.ДатаОкончания;
|НомерДоговора = Документ.Договор.НомерДоговора;
|ВидДоговора = Документ.Договор.ВидДоговора;
|лпФирма = Документ.Договор.Фирма;
|ДатаДок = Документ.Договор.ДатаДок;
|НомерДок = Документ.Договор.НомерДок;
|Группировка Контрагент упорядочить по Контрагент.Наименование;
|Условие(лпФирма = Фирма);
|Условие(Контрагент = Контрагент);
|Условие(ДатаНачала <= ДатаДок);
|Условие(ДатаОкончания >= ДатаДок);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Пока Запрос.Группировка()=1 Цикл
Если Контрагент.Выбран() = 1 Тогда
ВидТорговли =Контрагент.ВидТорговли;
Если Контрагент.ВидВзаиморасчетов = Перечисление.ВидыВзаиморасчетов.ПоДоговорам Тогда
Заказ = Запрос.Договор;
КонецЕсли;
УстСуммаО();
Иначе
ВидТорговли = Перечисление.ВидыТорговли.Предоплата;
Заказ = 0;
КонецЕсли;
КонецЦикла;
ИзмВидТорговли();
КонецПроцедуры
// ===============================
! | http://pro1c.org.ua/index.php?act=announce&id=2: 16 |
В реквизите элемента справочника "Контрагенты" можно указать один базовый договор. И вытянуть - один. Единственный.
Если нужно каждому контрагенту задавать разные договоры для каждой фирмы - необходимо разработать способ хранения и вычисления Договора по паре "Фирма"-"Контрагент", и это далеко не так просто, как кажется. Способ реализации зависит от многих условий.
Если по каждому Контрагенту оформляется единственный договор (в каком-то интервале дат) и это единственный договор является(считается) базовым - подходит способ поиска такого документа, описанный выше (который, строго говоря, не корректен, т.к. возвращает первый попавшийся в каком-то(каком?) интервале дат договор)
Вариант универсальный и правильный - это создание Справочника "Базовые договора", подчиненного справочнику "Контрагенты" и имеющего реквизиты "Фирма" и "Базовый договор".
После создания такого справочника необходимо создать в конфигурации интерфейсы корректировки этого справочника. С помощью которых - заполнить этот справочник, указав для каждого Контрагента(владельца) базовый договор по каждой фирме.
После этого придется создать в конфигурации реализацию алгоритмов (функций/процедур) поиска в этом справочнике нужных базовых договоров. И в нужных местах - обращение к этим алгоритмам для установки нужных договоров в нужные реквизиты объектов данных (документов).
В итоге самый короткий и самый правильный совет в данном конкретном случае - вот такой: "пригласите специалиста".
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua