Имя: Пароль:
1C
1C 7.7
v7: Поставить договор программно
,
0 mnimo
 
01.08.11
09:20
Нужно поставить договор в документе. Выбрав договоры по контрагенту. Ну и подставить в поле выбора. В документе при выборе договоры выскакивает меню с выбором вида договора(договоры с контрагентами и основные договоры).

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

       //как выбрать и подставить созданный договор?????
           Параметр=СоздатьОбъект("СписокЗначений");
           Параметр.ДобавитьЗначение(ВыбраннаяФирма);
           Параметр.ДобавитьЗначение(Док.Контрагент);
       
       Иначе
           
   КонецЦикла;
КонецПроцедуры
1 zak555
 
01.08.11
09:21
бухия 77 ?
2 ДенисЧ
 
01.08.11
09:21
Док.Договор = дог.ТекущийЭлемент();
док.Записать();
3 mnimo
 
01.08.11
09:25
(1)Бхия только Бюджетная
4 Chum
 
01.08.11
09:25
за создание объекта в цикле, где этого не требуется - пожизненный эцих с гвоздями.
5 miki
 
01.08.11
09:27
>>
Если Док.ОснованиеРасчетов.Выбран()=0 Тогда
           Сообщить("Нет договора у "+ док.Контрагент.Наименование);

Весьма спорное утверждение...
6 mnimo
 
01.08.11
09:31
(4)как перебрать тогда???
7 Guk
 
01.08.11
09:33
(6) согласно правилам хорошего тона, договор перед созданием неплохо бы поискать. если договор не выбран в документе, это еще не значит, что его нет...
8 mnimo
 
01.08.11
09:38
(6)Это ясно. Вопрос как поставить его???
9 Злопчинский
 
01.08.11
09:38
дог.родитель - хня! наверное дог.владелец
10 mnimo
 
01.08.11
10:57
(5)не могу понять как проверить на пустое значение???
11 TeddySlaf
 
01.08.11
11:27
Как-то так

   Док=СоздатьОбъект("Документ.ХХХ");
   Док.ВыбратьДокументы(НачДата,КонДата);
   Пока Док.ПолучитьДокумент() = 1 Цикл
       Если Док.ОснованиеРасчетов.Выбран()=0 Тогда
           Сообщить("Скорее всего Нет договора у "+ док.Контрагент.Наименование);
           Дог=СоздатьОбъект("Справочник.Договоры");
           //* проверим это
           Дог.ИспользоватьВладельца(док.Контрагент);
           ЕстьДог = 0;
           
           //* Вариант 1 - когда тупо надо наличие хоть какого-то договора
           ЕстьДог = Дог.ВыбратьЭлементы();
               
           //* Вариант 2 - когда надо наличие договора с определенными параметрами,
           Дог.ВыбратьЭлементы();
           Пока Дог.ПолучитьЭлемент() = 1 Цикл
               Если Дог.ПометкаУдаления() = 0
               Тогда
                   Продолжить;
               КонецЕсли;
               
               //* тут проверка на существование нужных значений у полей договора
               //* например договоры с датой больше, чем у документа - не интересны
               Если Дог.ДатаДоговора > Док.ДатаДок
               Тогда
                   Продолжить;
               КонецЕсли;
               ЕстьДог = 1;
           КонецЦикла;
           
           Если ЕстьДог = 0
           Тогда
               Дог.Новый();
               Дог.Наименование= "Дог с " + Док.Контрагент.Наименование;
               Дог.Записать();
               
               Если ПустоеЗначение(Док.Контагент.ОсновнойДоговор) = 0 // или как у тебя в кофе называется поле для основного договора у Контра?
               Тогда
                   спрКонтр = СоздатьОбъект("Справочник.Контрагенты");
                   спрКонтр.НайтиЭлемент(Док.Контрагент);
                   спрКонтр.ОсновнойДоговор = Дог.ТекущийЭлемент();
                   спрКонтр.Записать();
               КонецЕсли;
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;

12 TeddySlaf
 
01.08.11
11:41
в коде из (11) есть несколько ошибок в условиях:

...
//Если Дог.ПометкаУдаления() = 0
Если Дог.ПометкаУдаления() = 1
...
//Если ПустоеЗначение(Док.Контагент.ОсновнойДоговор) = 0 // или как у тебя
Если ПустоеЗначение(Док.Контагент.ОсновнойДоговор) = 1 // или как у тебя
...
13 mnimo
 
01.08.11
12:02
Если Док.ОснованиеРасчетов.Выбран()=0 Тогда


не проверяет(это при выборе наверно), как правильно проверить на наличие поставленного договора???
14 TeddySlaf
 
01.08.11
12:07
Если ПустоеЗначение(Док.ОснованиеРасчетов) = 0
15 TeddySlaf
 
01.08.11
12:09
Если ПустоеЗначение(Док.ОснованиеРасчетов) = 1
16 mnimo
 
01.08.11
20:16
- значение неопределенного типа - всегда пустое;
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.