Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Выбор Договора согласно выбранной фирмы , База 1с 7.7. Бухгалтерия          
inna.innainna84 Подменю пользователя
сообщение 06.10.16, 12:21
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0

// ===============================
Процедура ИзмКонтрагент()
    Если Заказ.Выбран()=1 Тогда
        глКомментарий("Контрагента нужно изменять в заказе!",1,,"!");
        Контрагент = Заказ.Контрагент;
        Возврат;
    КонецЕсли;    
    Если Контрагент.Выбран() = 1 Тогда
        ВидТорговли = Контрагент.ВидТорговли;
        Если Контрагент.ВидВзаиморасчетов = Перечисление.ВидыВзаиморасчетов.ПоДоговорам Тогда
            Заказ = Контрагент.БазДоговор;
        КонецЕсли;
        УстСуммаО();
    Иначе
        ВидТорговли = Перечисление.ВидыТорговли.Предоплата;
        Заказ = 0;
    КонецЕсли;
    ИзмВидТорговли();
КонецПроцедуры

// ===============================
Процедура ИзмЗаказ()
    глВыбратьЗаказ(Заказ,Контрагент,СчетКонтрагента,Контекст);
    Если Заказ.Выбран() = 1 Тогда
        Попытка
            Валюта = Заказ.Валюта;
        Исключение
            Валюта = Гривня;
        КонецПопытки;
    КонецЕсли;
    ИзмВалюта();
    УстСуммаО();
КонецПроцедуры
        
// ===============================



При создании нового документа - после выбора контрагента должен подтянуться нужный Договор (заказ) нужной фирмой.
Пример у контрагента есть 4 договора от разных фирм
1 -от фирмы ПП Пупкин
2 -от фирмы ПП Васечкин
3 -от фирмы ПП Иванова
4 -от фирмы ПП Филимонова
Создаю документ от фирмы ПП Иванова , а в справочнике контрагента по умолчании стоит базДоговор ПП Пункин, то подтягивается договор тот который по умолчаниию
Помогите пожалуйста дописать проверку договора по выбранной фирме.

nik389 Подменю пользователя
сообщение 06.10.16, 15:06
Сообщение #2

Завсегдатай
****
Группа: Пользователи
Сообщений: 158
Из: Украина
Спасибо сказали: 38 раз
Рейтинг: 35

inna.innainna84 @ Сегодня, 13:21 * ,
ну а что тут сложного? очевидно, нужно проверять фирму в документе, и в зависимости от фирмы искать договор, и, если нашли, проставлять его

inna.innainna84 Подменю пользователя
сообщение 06.10.16, 15:11
Сообщение #3

Завсегдатай
****
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0

nik389 @ Сегодня, 16:06 * ,
Ну я не программист, и для меня это сложно

nik389 Подменю пользователя
сообщение 06.10.16, 15:22
Сообщение #4

Завсегдатай
****
Группа: Пользователи
Сообщений: 158
Из: Украина
Спасибо сказали: 38 раз
Рейтинг: 35

inna.innainna84 @ Сегодня, 16:11 * ,

ну если вообще не программист, лучше позвать программиста
навскидку можно так:
лпДоговор  =Контрагент.Договор;
Если лпДоговор.Фирма = Фирма Тогда
Договор = лпДоговор;
Иначе
ДокДоговор = СоздатьОбъект("Документ.Договор");
ДокДоговор.ВыбратьДокументы(Дата1,Дата2);
Пока ДокДоговор.ПолучитьДокумент() = 1 Цикл
//тут должны быть проверки на актуальность договора
Если ДокДоговор.Фирма = Фирма Тогда
Договор = ДокДоговор.ТекущийДокумент();
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;


или запросом

Спасибо сказали: inna.innainna84,

inna.innainna84 Подменю пользователя
сообщение 06.10.16, 15:30
Сообщение #5

Завсегдатай
****
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0

nik389 @ Сегодня, 16:22 * ,
а как это мне применить в моем примере кода. Куда нужно добавить ваш код?

nik389 Подменю пользователя
сообщение 06.10.16, 15:36
Сообщение #6

Завсегдатай
****
Группа: Пользователи
Сообщений: 158
Из: Украина
Спасибо сказали: 38 раз
Рейтинг: 35

inna.innainna84 @ Сегодня, 16:30 * ,
в форму документа, куда нужно подставлять договор
код был дан для образца. Его нужно не бездумно вставить, а с учетом нюансов вашей конфигурации

inna.innainna84 Подменю пользователя
сообщение 06.10.16, 15:59
Сообщение #7

Завсегдатай
****
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0

Извените пожалуйста
посмотрите верно ли я поняла
// ===============================
Процедура ИзмКонтрагент()
    Если Заказ.Выбран()=1 Тогда
        глКомментарий("Контрагента нужно изменять в заказе!",1,,"!");
        Контрагент = Заказ.Контрагент;
        Возврат;
    КонецЕсли;    
    Если Контрагент.Выбран() = 1 Тогда
        ВидТорговли = Контрагент.ВидТорговли;
        Если Контрагент.ВидВзаиморасчетов = Перечисление.ВидыВзаиморасчетов.ПоДоговорам Тогда

лпЗаказ  =Контрагент.БазДоговор;
Если лпЗаказ .Фирма = Фирма Тогда
Заказ =лпЗаказ;
Иначе
ДокЗаказ  = СоздатьОбъект("Документ.Договор");
ДокЗаказ .ВыбратьДокументы(НачалоПериодаБИ(),ДатаДок);
Пока ДокЗаказ .ПолучитьДокумент() = 1 Цикл
//тут должны быть проверки на актуальность договора
Если ДокЗаказ .Фирма = Фирма Тогда
Договор = ДокЗаказ .ТекущийДокумент();
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
                    
        КонецЕсли;
        УстСуммаО();
    Иначе
        ВидТорговли = Перечисление.ВидыТорговли.Предоплата;
        Заказ = 0;
    КонецЕсли;
    ИзмВидТорговли();
КонецПроцедуры

// ==============================


Что-то не так не каждый раз срабатывает Выбирает только в том случае если договор закреплен в справочнике

лпЗаказ =Контрагент.БазДоговор;
Нужно как-то по другому У контрагента может быть 10 договоров от разных фирм , которые не закреплены в справочнике

Мичман Харитонов Подменю пользователя
сообщение 06.10.16, 17:15
Сообщение #8

Завсегдатай
****
Группа: Пользователи
Сообщений: 164
Из: м. Кам'янське
Спасибо сказали: 26 раз
Рейтинг: 0

Перем Запрос, ТекстЗапроса;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Выборка)
    
    |Обрабатывать НеПомеченныеНаУдаление;
    |Без итогов;
    |Контрагент = Документ.Договор.Контрагент;
    |ДатаНачала = Документ.Договор.ДатаНачала;
    |ДатаОкончания = Документ.Договор.ДатаОкончания;
    |НомерДоговора = Документ.Договор.НомерДоговора;
    |ВидДоговора = Документ.Договор.ВидДоговора;
    |ДатаДок = Документ.Договор.ДатаДок;
    |НомерДок = Документ.Договор.НомерДок;
    |Группировка Контрагент упорядочить по Контрагент.Наименование;
|Условие(лпФирма = Фирма);    
|Условие(Контрагент = Контрагент);
    |Условие(ДатаНачала <= Дата1);
    |Условие(ДатаОкончания >= Дата2);
    |"//}}ЗАПРОС
;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

Вот так, как вариант

inna.innainna84 Подменю пользователя
сообщение 06.10.16, 19:51
Сообщение #9

Завсегдатай
****
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0

// ===============================
Процедура ИзмКонтрагент()
    Если Заказ.Выбран()=1 Тогда
        глКомментарий("Контрагента нужно изменять в заказе!",1,,"!");
        Контрагент = Заказ.Контрагент;
        Возврат;
    КонецЕсли;    


    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Выборка)
    
    |Обрабатывать НеПомеченныеНаУдаление;
    |Без итогов;
    |Контрагент = Документ.Договор.Контрагент;
    |Договор = Документ.Договор.ТекущийДокумент;
    |ДатаНачала = Документ.Договор.ДатаНачала;
    |ДатаОкончания = Документ.Договор.ДатаОкончания;
    |НомерДоговора = Документ.Договор.НомерДоговора;
    |ВидДоговора = Документ.Договор.ВидДоговора;
    |лпФирма = Документ.Договор.Фирма;
    |ДатаДок = Документ.Договор.ДатаДок;
    |НомерДок = Документ.Договор.НомерДок;
    |Группировка Контрагент упорядочить по Контрагент.Наименование;
|Условие(лпФирма = Фирма);    
|Условие(Контрагент = Контрагент);
    |Условие(ДатаНачала <= ДатаДок);
    |Условие(ДатаОкончания >= ДатаДок);
    |"//}}ЗАПРОС
;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;        
            
    Пока Запрос.Группировка()=1 Цикл
        Если Контрагент.Выбран() = 1 Тогда
            ВидТорговли =Контрагент.ВидТорговли;    
            
            Если Контрагент.ВидВзаиморасчетов = Перечисление.ВидыВзаиморасчетов.ПоДоговорам Тогда
                Заказ = Запрос.Договор;                                
            КонецЕсли;
            УстСуммаО();  
        Иначе
            ВидТорговли = Перечисление.ВидыТорговли.Предоплата;
            Заказ = 0;
        КонецЕсли;    
    КонецЦикла;
      
          
      ИзмВидТорговли();
КонецПроцедуры



// ===============================

Что то делаю не то, если не трудно можете исправить мои каляки

oleksandr.homyak Подменю пользователя
сообщение 09.10.16, 8:30
Сообщение #10

Молчаливый
*
Группа: Пользователи
Сообщений: 7
Спасибо сказали: 0 раз
Рейтинг: 0


 ! 

Правила: 16
 


Сообщение отредактировал logist - 09.10.16, 17:56

Serg_XX Подменю пользователя
сообщение 13.10.16, 13:12
Сообщение #11

Общительный
**
Группа: Пользователи
Сообщений: 27
Спасибо сказали: 1 раз
Рейтинг: 0

inna.innainna84 @ 06.10.16, 19:51 * ,
Девушка, сами Вы это не сделаете.

Cthulhu Подменю пользователя
сообщение 14.10.16, 16:33
Сообщение #12

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 224
Из: не ту страну назвали Гондурасом
Спасибо сказали: 83 раз
Рейтинг: 0

В реквизите элемента справочника "Контрагенты" можно указать один базовый договор. И вытянуть - один. Единственный.
Если нужно каждому контрагенту задавать разные договоры для каждой фирмы - необходимо разработать способ хранения и вычисления Договора по паре "Фирма"-"Контрагент", и это далеко не так просто, как кажется. Способ реализации зависит от многих условий.
Если по каждому Контрагенту оформляется единственный договор (в каком-то интервале дат) и это единственный договор является(считается) базовым - подходит способ поиска такого документа, описанный выше (который, строго говоря, не корректен, т.к. возвращает первый попавшийся в каком-то(каком?) интервале дат договор)
Вариант универсальный и правильный - это создание Справочника "Базовые договора", подчиненного справочнику "Контрагенты" и имеющего реквизиты "Фирма" и "Базовый договор".
После создания такого справочника необходимо создать в конфигурации интерфейсы корректировки этого справочника. С помощью которых - заполнить этот справочник, указав для каждого Контрагента(владельца) базовый договор по каждой фирме.
После этого придется создать в конфигурации реализацию алгоритмов (функций/процедур) поиска в этом справочнике нужных базовых договоров. И в нужных местах - обращение к этим алгоритмам для установки нужных договоров в нужные реквизиты объектов данных (документов).

В итоге самый короткий и самый правильный совет в данном конкретном случае - вот такой: "пригласите специалиста".

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 19.04.24, 18:40
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!