Всем добрый день! Помогите решить проблему, мозгов не хватает. Есть документ, который заполняется вручную по кнопке, на основании заполненных данных, надо было сделать автоматическое создание по расписанию, я сделал обработку по созданию расписания, у меня записывается файлик, в нем несколько строк, соответственно должно создаваться несколько документов по этим строкам, в глобальный модуль я добавил, код, который периодически этот файл проверяет и если есть изменения выполняет процедуру создания документа, проблема в том, что обрабатывается только первая строка расписания, остальные не проверяются, что надо добавить, чтобы создавались документы по всем строкам?
Процедура АвтоЗапуск()
Файл=КаталогИБ()+"НастройкаАвтоматическогоСозданияЗаказовПоставщику.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 Цикл
Параметры.Установить("Поставщик",Табл.Контрагент);
Параметры.Установить("Выбор",Табл.Свойство);
Параметры.Установить("ДатаНачала",Табл.ДатаНачала);
Параметры.Установить("ДатаКонца",Табл.ДатаКонца);
ОткрытьФорму("Документ.ЗаказПоставщику",Параметры);
КонецЦикла;
КонецПроцедуры
Процедура АвтоЗапуск()
Файл=КаталогИБ()+"НастройкаАвтоматическогоСозданияЗаказовПоставщику.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 Цикл
Параметры.Установить("Поставщик",Табл.Контрагент);
Параметры.Установить("Выбор",Табл.Свойство);
Параметры.Установить("ДатаНачала",Табл.ДатаНачала);
Параметры.Установить("ДатаКонца",Табл.ДатаКонца);
ОткрытьФорму("Документ.ЗаказПоставщику",Параметры);
КонецЦикла;
КонецПроцедуры
По теме из базы знаний
- Автосоздание документов "Поступления" по документам "Реализации" в базе "Бухгалтерия"
- Автосоздание документов по взаимозачетам
- Документ на документ. Автоматическое создание связанных документов
- Загрузка документов из товароучетного ПО: 1С Розница 2.2/2.3 в 1С Бухгалтерия 3.0 в файловом формате XML
- Автосоздание документов расчетов для ввода остатков
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Точнее проблема в коде документа, обрабатывается первый док. заполняется и т.к. не записывается, второй не может быть создан, как правильно его записать, но чтобы форма оставалась открытой?
//-----------------------------------------------
Процедура Заполнить()
Если ((ПустоеЗначение(Выбор)=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 Тогда
Возврат;
КонецЕсли;
Параметры=Форма.Параметр;
Если ТипЗначенияСтр(Параметры)="СписокЗначений" Тогда
Поставщик=Параметры.Получить("Поставщик");
Выбор=Параметры.Получить("Выбор");
ДатаНачала=Параметры.Получить("ДатаНачала");
ДатаКонца=Параметры.Получить("ДатаКонца");
КонецЕсли;
КонецПроцедуры // ВводНового
//-----------------------------------------------
Процедура Заполнить()
Если ((ПустоеЗначение(Выбор)=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 Тогда
Возврат;
КонецЕсли;
Параметры=Форма.Параметр;
Если ТипЗначенияСтр(Параметры)="СписокЗначений" Тогда
Поставщик=Параметры.Получить("Поставщик");
Выбор=Параметры.Получить("Выбор");
ДатаНачала=Параметры.Получить("ДатаНачала");
ДатаКонца=Параметры.Получить("ДатаКонца");
КонецЕсли;
КонецПроцедуры // ВводНового
Применял! Код не мой, я обычно аккуратней пишу, если поставить в конце процедуры по заполнению Записать(); то при ручном создании и заполнении вторая форма открывается, а если по автозаполнению, то док записывается и зависает, не дает открыть новую форму, может можно как то заменить Записать(); на процедуру нажатия одноименной кнопки на форме после заполнения?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот