По автосозданию документов

1. dorofeevs 17.01.11 08:54 Сейчас в теме
Всем добрый день! Помогите решить проблему, мозгов не хватает. Есть документ, который заполняется вручную по кнопке, на основании заполненных данных, надо было сделать автоматическое создание по расписанию, я сделал обработку по созданию расписания, у меня записывается файлик, в нем несколько строк, соответственно должно создаваться несколько документов по этим строкам, в глобальный модуль я добавил, код, который периодически этот файл проверяет и если есть изменения выполняет процедуру создания документа, проблема в том, что обрабатывается только первая строка расписания, остальные не проверяются, что надо добавить, чтобы создавались документы по всем строкам?
Процедура АвтоЗапуск()
Файл=КаталогИБ()+"НастройкаАвтоматическогоСозданияЗаказовПоставщику.mxl";
Если ФС.СуществуетФайл(Файл)=0 Тогда
Возврат;
КонецЕсли;

ТекВремя=ТекущееВремя();

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


ФлагЗаписи=0;

Таб=СоздатьОбъект("Таблица");
Таб.Открыть(Файл);
Для х=1 По Таб.ВысотаТаблицы() Цикл
Обл=Таб.Область(х,7,х,7);
Пользователь=ЗначениеИзСтрокиВнутр(Обл.Текст);
Если Пользователь<>глПользователь Тогда
Продолжить;
КонецЕсли;

Обл=Таб.Область(х,3,х,3);
Время=Обл.Текст;
Разница=РазницаВремени(ТекВремя, Время);

Если Разница<0 Тогда
Продолжить;
КонецЕсли;

Если Разница>11 Тогда
Продолжить;
КонецЕсли;

Обл=Таб.Область(х,6,х,6);
Когда=Обл.Текст;
Если Когда="Выключено" Тогда
Продолжить;
ИначеЕсли Когда="Понедельник — Пятница" Тогда
Если НомерДняНедели(ТекущаяДата())=6 Тогда
Продолжить;
ИначеЕсли НомерДняНедели(ТекущаяДата())=7 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;

Обл=Таб.Область(х,8,х,8);
ПоследнийРаз=Обл.Текст;

Если ПустаяСтрока(ПоследнийРаз)=1 Тогда
Обл.Текст=Формат(ТекущаяДата(),"Д ДДММГГ")+" "+ТекВремя;
ФлагЗаписи=1;

Табл.НоваяСтрока();
Обл=Таб.Область(х,1,х,1);
Табл.Контрагент=ЗначениеИзСтрокиВнутр(Обл.Текст);
Обл=Таб.Область(х,2,х,2);
Табл.Свойство=ЗначениеИзСтрокиВнутр(Обл.Текст);
Обл=Таб.Область(х,4,х,4);
Табл.ДатаНачала=ЗначениеИзСтрокиВнутр(Обл.Текст);
// Табл.ДатаНачала=Обл.Текст;
Обл=Таб.Область(х,5,х,5);
Табл.ДатаКонца=ЗначениеИзСтрокиВнутр(Обл.Текст);
//Табл.ДатаКонца=Обл.Текст;
Иначе
Если Когда="Один раз" Тогда
Продолжить;
КонецЕсли;

Д=Дата(Лев(ПоследнийРаз,8));
Если Д>=ТекущаяДата() Тогда
Продолжить;
КонецЕсли;

Обл.Текст=Формат(ТекущаяДата(),"Д ДДММГГ")+" "+ТекВремя;
ФлагЗаписи=1;

Табл.НоваяСтрока();
Обл=Таб.Область(х,1,х,1);
Табл.Контрагент=ЗначениеИзСтрокиВнутр(Обл.Текст);
Обл=Таб.Область(х,2,х,2);
Табл.Свойство=ЗначениеИзСтрокиВнутр(Обл.Текст);
Обл=Таб.Область(х,4,х,4);
Табл.ДатаНачала=ЗначениеИзСтрокиВнутр(Обл.Текст);
// Табл.ДатаНачала=Обл.Текст;
Обл=Таб.Область(х,5,х,5);
Табл.ДатаКонца=ЗначениеИзСтрокиВнутр(Обл.Текст);
// Табл.ДатаКонца=Обл.Текст;



КонецЕсли;
КонецЦикла;

Если ФлагЗаписи=1 Тогда
Таб.Записать(Файл);
КонецЕсли;

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

ОткрытьФорму("Документ.ЗаказПоставщику",Параметры);
КонецЦикла;
КонецПроцедуры
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dorofeevs 17.01.11 15:33 Сейчас в теме
Точнее проблема в коде документа, обрабатывается первый док. заполняется и т.к. не записывается, второй не может быть создан, как правильно его записать, но чтобы форма оставалась открытой?
//-----------------------------------------------



Процедура Заполнить()

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

СпрНоменклатура.ВыбратьЭлементы();
Пока СпрНоменклатура.ПолучитьЭлемент()=1 Цикл
Если ((Выбор.Выбран()=1)и(Поставщик.Выбран()=1)) Тогда
Если ((СпрНоменклатура.Свойство = Выбор)и(СпрНоменклатура.Контрагент = Поставщик)) Тогда
НоваяСтрока();
Товар= СпрНоменклатура.ТекущийЭлемент();
Цена=глТоварПолучитьЦену(Товар,ТекущийДокумент(),,1,,);
МинОстаток= СпрНоменклатура.МинимальныйОстаток;
Склад.СводныеОстатки(Товар,);
Остаток=Склад.Количество;

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

Расход = 0;
//Склад1.УстановитьФильтр(Товар,Перечисление.ХозОперации.Продажа);
Склад1.ВыбратьДвижения(ДатаНачала,ДатаКонца,Товар);
Пока Склад1.ПолучитьДвижение()=1 Цикл
Если (Склад1.Товар = Товар) и (Склад1.Расход = 1) Тогда
Расход = Расход + Склад1.Количество;
КонецЕсли;
КонецЦикла;
//Склад1.СводныеОстатки(Товар,);
//Склад1.СводныйОстаток(Товар,Перечисление.ХозОперации.Продажа);
//Расход= Склад1.Количество;
Заказ = Расход+ МинОстаток-Остаток;
Если Заказ< 0 Тогда
Заказ=0;
КонецЕсли;

КонецЕсли;
ИначеЕсли ((Поставщик.Выбран()=1)) Тогда
Если ((СпрНоменклатура.Контрагент = Поставщик)) Тогда
НоваяСтрока();
Товар= СпрНоменклатура.ТекущийЭлемент();
Цена=глТоварПолучитьЦену(Товар,ТекущийДокумент(),,1,,);
МинОстаток= СпрНоменклатура.МинимальныйОстаток;
Склад.СводныеОстатки(Товар,);
Остаток=Склад.Количество;

Расход = 0;
//Склад1.УстановитьФильтр(Товар,Перечисление.ХозОперации.Продажа);
Склад1.ВыбратьДвижения(ДатаНачала,ДатаКонца,Товар);
Пока Склад1.ПолучитьДвижение()=1 Цикл
Если (Склад1.Товар = Товар) и (Склад1.Расход = 1) Тогда
Расход = Расход + Склад1.Количество;
КонецЕсли;
КонецЦикла;
//Склад1.СводныеОстатки(Товар,);
//Склад1.СводныйОстаток(Товар,Перечисление.ХозОперации.Продажа);
//Расход= Склад1.Количество;
Заказ = Расход+ МинОстаток-Остаток;
Если Заказ< 0 Тогда
Заказ=0;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Сумма=Цена*Заказ;

КонецЦикла;

Иначе
Сообщить("Не выбраны значения");
КонецЕсли;

Записать();
КонецПроцедуры

//-----------------------------------------------






Процедура ПриЗакрытии()
глДокументПриЗакрытии(Контекст);
КонецПроцедуры // ПриЗакрытии



Процедура ПриОткрытии()
// Типовой обработчик
Рез=глДокументПриОткрытии(Контекст);
Если Рез = 0 Тогда
Возврат;
ИначеЕсли Рез < 0 Тогда
ПриЗакрытии();
Возврат;
КонецЕсли;




Параметры=Форма.Параметр;
Если ТипЗначенияСтр(Параметры)="СписокЗначений" Тогда
Заполнить();
КонецЕсли;

КонецПроцедуры // ПриОткрытии

//-----------------------------------------------
Процедура ВводНового(Копирование,Документ)
Если глДокументПриСоздании(Контекст)=0 Тогда
Возврат;
КонецЕсли;






Параметры=Форма.Параметр;
Если ТипЗначенияСтр(Параметры)="СписокЗначений" Тогда
Поставщик=Параметры.Получить("Поставщик");
Выбор=Параметры.Получить("Выбор");
ДатаНачала=Параметры.Получить("ДатаНачала");
ДатаКонца=Параметры.Получить("ДатаКонца");

КонецЕсли;


КонецПроцедуры // ВводНового
3. dorofeevs 18.01.11 14:04 Сейчас в теме
Может кто нибудь подскажет?
4. vcv 89 18.01.11 18:41 Сейчас в теме
Примени отладчик.
Много дурно отформатированного кода, читать лень.
5. dorofeevs 18.01.11 18:59 Сейчас в теме
Применял! Код не мой, я обычно аккуратней пишу, если поставить в конце процедуры по заполнению Записать(); то при ручном создании и заполнении вторая форма открывается, а если по автозаполнению, то док записывается и зависает, не дает открыть новую форму, может можно как то заменить Записать(); на процедуру нажатия одноименной кнопки на форме после заполнения?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот