Имя: Пароль:
1C
1С v8
Ребята помогите с обработкой(((
0 fanatic1
 
31.01.14
08:50
Есть обработка, которая автоматом закрывает все заказы клиентов 1с УТ11.
Так вот у меня с ней маленькая проблема, перед тем как ставить статус ЗАКРЫТ, мне необходима записать документы, т.к. при закрытии идет проверка,строки должны быть отменены и документ записан(проверка дописывалась)
Вот код....Напоминаю, суть в том что просто нужно записать документ..


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ДатаНачала = Дата(НачалоМесяца(ТекущаяДата()));
    ДатаОкончания = Дата(КонецМесяца(ТекущаяДата()));
КонецПроцедуры



&НаКлиенте
Процедура ОповеститьПользователяОбУстановкеСтатуса(СписокДокументов, КоличествоОбработанных, КоличествоВсего, Статус)
    
    Если КоличествоОбработанных > 0 Тогда
        
        //СписокДокументов.Обновить();
        
        ТекстСообщения = НСтр("ru='Для %КоличествоОбработанных% из %КоличествоВсего% выделенных в списке заказов клиентов установлен статус ""%Статус%""'");
        ТекстСообщения = СтрЗаменить(ТекстСообщения, "%КоличествоОбработанных%", КоличествоОбработанных);
        ТекстСообщения = СтрЗаменить(ТекстСообщения, "%КоличествоВсего%",        КоличествоВсего);
        ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Статус%",                 Статус);
        ТекстЗаголовка = НСтр("ru='Статус ""%Статус%"" установлен'");
        ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, "%Статус%", Статус);
        ПоказатьОповещениеПользователя(ТекстЗаголовка,, ТекстСообщения, БиблиотекаКартинок.Информация32);
        
    Иначе
        
        ТекстСообщения = НСтр("ru='Статус ""%Статус%"" не установлен ни для одного заказа клиента.'");
        ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Статус%", Статус);
        ТекстЗаголовка = НСтр("ru='Статус ""%Статус%"" не установлен'");
        ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, "%Статус%", Статус);
        ПоказатьОповещениеПользователя(ТекстЗаголовка,, ТекстСообщения, БиблиотекаКартинок.Информация32);
        
    КонецЕсли;
    
КонецПроцедуры

&НаСервере
Функция ВыполнитьНаСервере()
    
    
    
    //  Выборка = Документы.ЗаказКлиента.Выбрать(НачалоГода(ТекущаяДата()),КонецГода(ТекущаяДата()));

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаказКлиента.Ссылка
        |ИЗ
        |    Документ.ЗаказКлиента КАК ЗаказКлиента
        |ГДЕ
        |    ЗаказКлиента.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
        |    И ЗаказКлиента.Проведен = ИСТИНА
        |    И ЗаказКлиента.ПометкаУдаления = ЛОЖЬ
        |    И ЗаказКлиента.Статус = &КОтгрузке
        |
        |СГРУППИРОВАТЬ ПО
        |    ЗаказКлиента.Ссылка
        |
        |УПОРЯДОЧИТЬ ПО
        |    ЗаказКлиента.Дата
        |АВТОУПОРЯДОЧИВАНИЕ";

    Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
    Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончания));
    Запрос.УстановитьПараметр("КОтгрузке", Объект.Статус);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    мДокументы = Новый Массив;
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        мДокументы.Добавить(ВыборкаДетальныеЗаписи.ССылка);    
    КонецЦикла;

    Возврат мДокументы;
    
КонецФункции

&НаСервере
Процедура  ЗаписатьНАСервере(Знач ВыделенныеСсылки)

    Таблица= Новый ТаблицаЗначений;
    Таблица.Колонки.Добавить("Документ");
    
    Для Каждого текСтрока из ВыделенныеСсылки цикл
        новСтрока = Таблица.Добавить();
        новСтрока.Документ = текСтрока;
    КонецЦикла;
    
    Для Каждого текСтрока из Таблица цикл
        Сообщить(Объект);
        Объект =  текСтрока.Документ.ПолучитьОбъект();    
        Объект.Записать(режимЗаписиДокумента.Запись);
    КонецЦикла;
    
    
    КонецПроцедуры
    
    &НаКлиенте
Процедура ЗакрытьСчета(Команда)
        
    ВыделенныеСсылки = ВыполнитьНаСервере();
    Если ВыделенныеСсылки.Количество() = 0 Тогда
        Возврат;
    КонецЕсли;
    
    ТекстВопроса = НСтр("ru='У выделенных в списке заказов будет установлен статус ""Закрыт"". Все неотработанные строки будут отменены. Продолжить?'");
    Ответ = Вопрос(ТекстВопроса,РежимДиалогаВопрос.ДаНет);
    
    Если Ответ = КодВозвратаДиалога.Нет Тогда
        Возврат;
    КонецЕсли;
    
    ПричинаОтменыЗаказовКлиентов = ПредопределенноеЗначение("Справочник.ПричиныОтменыЗаказовКлиентов.ПустаяСсылка");
    
        ПричинаОтменыЗаказовКлиентов = ОткрытьФормуМодально("Справочник.ПричиныОтменыЗаказовКлиентов.ФормаВыбора",
            Новый Структура("ТекущаяСтрока",ПричинаОтменыЗаказовКлиентов));
        Если Не ЗначениеЗаполнено(ПричинаОтменыЗаказовКлиентов) Тогда
            Возврат;
        КонецЕсли;
    
    
        ОчиститьСообщения();
        
        //*******************************************
        //КоличествоОбработанных = ОбщегоНазначенияУТВызовСервера.УстановитьСтатусДокументов(ВыделенныеСсылки, "КОтгрузке", Новый Структура("ОтменаНеотработанныхСтрок", ПричинаОтменыЗаказовКлиентов));
                      //ДанныеФормыВЗначение
                      //РеквизитФормыВЗначение
        // ЗаписатьНАСервере(ВыделенныеСсылки);
    //    Для Каждого Документ из ВыделенныеСсылки цикл
    //        
    //    Объект =  Документ.ПолучитьОбъект();
    //Сообщить(Объект);
    //Объект.Записать(режимЗаписиДокумента.Запись);
        
//КонецЦикла;
    //*****************************************
    
    КоличествоОбработанных = ОбщегоНазначенияУТВызовСервера.УстановитьСтатусДокументов(ВыделенныеСсылки, "Закрыт", Новый Структура("ОтменаНеотработанныхСтрок", ПричинаОтменыЗаказовКлиентов));
    ОповеститьПользователяОбУстановкеСтатуса(ВыделенныеСсылки, КоличествоОбработанных, ВыделенныеСсылки.Количество(), "Закрыт");

    
    
    
    
    
    //ВыполнитьНаСервере();
КонецПроцедуры
1 Мимохожий Однако
 
31.01.14
08:55
Какую ошибку выбрасывает?
2 fanatic1
 
31.01.14
09:01
(1)  никакую, это обработка работает.... но работает не правильно.......
Она закрывает лишь те заказы которые отгрузились в 100%.
А если отгрузили в менее 100%  то он не закрывает счет, говорит что нельзя закрыть счет, есть не отгруженные позиции...
Точно знаю что нужно сначала записать документ, а потом ставить статус ЗАКРЫТ...Тогда будет работать..
3 Wobland
 
31.01.14
09:02
звучит как предложение о подработке
4 fanatic1
 
31.01.14
09:06
(3) Подсказать как прописать в этой обработке, сохранение документа, это звучит как подработка???)))
5 Wobland
 
31.01.14
09:11
помогите с обработкой, вот код - это звучит как подработка
6 Torquader
 
31.01.14
11:31
Нет, ну а что вы хотите - если заказ не отгружен - как он может быть закрыт ?
Или вы просто хотите закрыть всё, не обращая внимания на то, что происходит.