Перебор документов, обработка и запись В данном примере показано как в 7-ке выбрать документы поступления товаров за определенный период и обработать их, установив дату и номер счета-фактуры.
Код 1C v 7.x Процедура Сформировать()
ДокПрием = СоздатьОбъект("Документ.ПоступлениеТоваров");
ДокПрием.ВыбратьДокументы(НачДата, КонДата);
Пока ДокПрием.ПолучитьДокумент()=1 Цикл
текдлина = СтрДлина(СокрЛП(ДокПрием.НомерСчетаФактуры));
если текдлина>1 Тогда
Сообщить("Уже заполнено - "+строка(текдлина)+" * "+ДокПрием.НомерСчетаФактуры);
Иначе
ДатаСчФ = лев(ДокПрием.ДатаНомерСчетаФактуры,10);
ДатаСчетаФактуры = Дата(Сред(ДатаСчФ,7,4),Сред(ДатаСчФ,4,2),Лев(ДатаСчФ,2)); //31.03.2015
НомерСчетаФактуры = СокрЛП(Сред(ДокПрием.ДатаНомерСчетаФактуры, 11, 50));
ДокПрием.ДатаСчетаФактуры = ДатаСчетаФактуры;
ДокПрием.НомерСчетаФактуры = НомерСчетаФактуры;
ДокПрием.ДатаНомерСчетаФактуры = СокрЛП(НомерСчетаФактуры) + ";" + Формат(ДатаСчетаФактуры,"Д ДДММГГГГ");
Сообщить(" - " +НомерСчетаФактуры+" / "+строка(ДатаСчетаФактуры));
ДокПрием.Записать();
Конецесли;
КонецЦикла;
КонецПроцедуры
Категория:
Документы Удаление документа Код 1C v 8.2 УП &НаКлиенте
Процедура УдалитьДокумент(Команда)
// Вставить содержимое обработчика.
УдалитьДокументНаСервере(0);
КонецПроцедуры
&НаСервере
Процедура УдалитьДокументНаСервере(ПометкаУдаления)
// Вставить содержимое обработчика.
Перем УдаляемыйДокумент;
УдаляемыйДокумент =Документы.РасходнаяНакладная.НайтиПоНомеру("000000004");
Если ПометкаУдаления = 1 Тогда
УдаляемыйДокумент.ПолучитьОбъект().УстановитьПометкуУдаления(Истина);
Иначе
УдаляемыйДокумент.ПолучитьОбъект().Удалить();
КонецЕсли;
КонецПроцедуры
Код 1C v 8.х //Установить пометку удаления документа
ТС=ЭлементыФормы.Список.ТекущиеДанные;
ТД=Документы.РеализацияТоваровУслуг.НайтиПоНомеру(ТС.Номер, ТС.Дата);
Если ТД.Пустая() Тогда
Сообщить("Документ по номеру <такому то> не найден");
возврат;
КонецЕсли;
ТД.ПолучитьОбъект().УстановитьПометкуУдаления(Истина);
Код 1C v 8.х // Непосредственное удаление документов
Запрос = Новый Запрос("ВЫБРАТЬ
| Заказы.Ссылка
|ИЗ
| Документ.Заказы КАК Заказы
|ГДЕ
| Заказы.ПометкаУдаления = ИСТИНА");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ОбъектДокумент = Выборка.Ссылка.ПолучитьОбъект();
ОбъектДокумент.Удалить();
КонецЦикла;
Код 1C v 7.x Д = СоздатьОбъект("Документ");
Д.ВыбратьДокументы(НачДата,КонДата);
Пока Д.ПолучитьДокумент() = 1 Цикл
Сообщить(Д.ТекущийДокумент());
Состояние(Д.ДатаДок);
Д.Удалить();
КонецЦикла;
Категория:
Документы Как сделать, задать паузу при выполнении кода? Если это какая-нибудь обработка и запускается на клиенте(у пользователя) то можно использовать обработчик ожиданий у встроенных функций:
Код 1C v 8.х //Самый простой и доступный способ - использовать диалог "Предупреждение"
// с заданным в качестве параметра необходимым таймаутом:
Предупреждение("Пауза!",60);
// или
Если Вопрос("Перепроведение?", РежимДиалогаВопрос.ОКОтмена, 60) = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
Код 1C v 8.х // А если мы не хотим выводить пользователю ни каких сообщений
// Установим паузу в 5 минут, т.е. 300 секунд
сек = 300;
КонДата = ТекущаяДата() + сек;
Пока ТекущаяДата() < КонДата Цикл
// ждемссс....
КонецЦикла;
Для паузы можно использовать следующие примеры:
Код 1C v 8.х Процедура глПауза(Сек)
scr = Новый COMОбъект("WScript.Shell");
scr.Run("sleep "+СокрЛП(Число(Сек)),0,1);
КонецПроцедуры;
Код 1C v 7.x Процедура глПауза(Сек)
scr = СоздатьОбъект("WScript.Shell");
scr.Run("sleep "+СокрЛП(Число(Сек)),0,1);
КонецПроцедуры;
Категория:
COM-объекты, WMI, WSH Выгрузка используемых видов расчетов в таблицу значений Код 1C v 7.x ТЗВидыРасчётов = Новый ТаблицаЗначений;
ТЗВидыРасчётов.Колонки.Добавить("ВидРасчёта");
ЖРЗарплата = v7.CreateObject("ЖурналРасчетов.Зарплата");
ЖРЗарплата.ВыбратьЗаписи(НачДата,КонДата);
Пока ЖРЗарплата.ПолучитьЗапись() = 1 Цикл
СтрВидыРасчётов = ТЗВидыРасчётов.Добавить();
СтрВидыРасчётов.ВидРасчёта = ЖРЗарплата.ВидРасч.Наименование;
КонецЦикла;
ЖРДополнительный = v7.CreateObject("ЖурналРасчетов.Дополнительный");
ЖРДополнительный.ВыбратьЗаписи(НачДата,КонДата);
Пока ЖРДополнительный.ПолучитьЗапись() = 1 Цикл
СтрВидыРасчётов = ТЗВидыРасчётов.Добавить();
СтрВидыРасчётов.ВидРасчёта = ЖРДополнительный.ВидРасч.Наименование;
КонецЦикла;
ЖРНалогиСФОТ = v7.CreateObject("ЖурналРасчетов.НалогиСФОТ");
ЖРНалогиСФОТ.ВыбратьЗаписи(НачДата,КонДата);
Пока ЖРНалогиСФОТ.ПолучитьЗапись() = 1 Цикл
СтрВидыРасчётов = ТЗВидыРасчётов.Добавить();
СтрВидыРасчётов.ВидРасчёта = ЖРНалогиСФОТ.ВидРасч.Наименование;
КонецЦикла;
ЖРСтраховыеВзносы = v7.CreateObject("ЖурналРасчетов.СтраховыеВзносы");
ЖРСтраховыеВзносы.ВыбратьЗаписи(НачДата,КонДата);
Пока ЖРСтраховыеВзносы.ПолучитьЗапись() = 1 Цикл
СтрВидыРасчётов = ТЗВидыРасчётов.Добавить();
СтрВидыРасчётов.ВидРасчёта = ЖРСтраховыеВзносы.ВидРасч.Наименование;
КонецЦикла;
Написал
IKSparrow Категория:
Виды расчетов Пример выгрузки списка документов в XML файл Код 1C v 8.х Процедура ДействияФормыВыгрузить(Кнопка)
Запись=Новый ЗаписьXML;
Запись.ОткрытьФайл("c:\document.xml");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Корневой");
Запись.ЗаписатьАтрибут("Доумент", "ПринятиеКУчтетуОС");
Запись.ЗаписатьКомментарий("Краткая информация о принятых к учету ОС");
//Выборка=Документы.ПринятиеКУчетуОС.Выбрать(); //это выгрузка всех документов в базе
// а нам нужно за определенный период:
Выборка=Документы.ПринятиеКУчетуОС.Выбрать(НачДата,КонДата);
Пока Выборка.Следующий()Цикл
Запись.ЗаписатьНачалоЭлемента("Элемент");
Запись.ЗаписатьАтрибут("Номер", Строка(Выборка.Номер));
Запись.ЗаписатьАтрибут("Дата", Строка(Выборка.Дата));
Запись.ЗаписатьАтрибут("Организация", Строка(Выборка.Организация));
Запись.ЗаписатьАтрибут("Склад", Строка(Выборка.Склад));
Запись.ЗаписатьАтрибут("ПодразделениеОрганизации", Строка(Выборка.ПодразделениеОрганизации));
Запись.ЗаписатьАтрибут("МОЛ", Строка(Выборка.МОЛБУ));
Запись.ЗаписатьАтрибут("Оборудование", Строка(Выборка.Номенклатура));
Запись.ЗаписатьАтрибут("ОбъектСтроительства", Строка(Выборка.ОбъектСтроительства));
Запись.ЗаписатьАтрибут("ПервоначальнаяСтоимость", Строка(Выборка.ПервоначальнаяСтоимостьНУ));
Запись.ЗаписатьКонецЭлемента();
КонецЦикла;
Запись.ЗаписатьКонецЭлемента();
Запись.Закрыть();
КонецПроцедуры
Категория:
XML, DBF, TXT, CSV Функции для работы с датами через запрос (Разность, Добавление, Граница) Код 1C v 8.х // Получает разность календарных дат указанного вида. В случае ошибки возвращает -1
Функция ПолучитьРазностьДат(рНачДата,рКонДата,рВидРазности="ДЕНЬ") Экспорт
Если не ЗначениеЗаполнено(рНачДата) или не ЗначениеЗаполнено(рКонДата) Тогда Возврат -1 КонецЕсли;
Если рНачДата=рКонДата Тогда Возврат 0 КонецЕсли;
строСтандПер="СЕКУНДА МИНУТА ЧАС ДЕНЬ НЕДЕЛЯ ДЕКАДА МЕСЯЦ КВАРТАЛ ГОД";
Если Найти(строСтандПер,рВидРазности)=0 Тогда рВидРазности="ДЕНЬ" КонецЕсли;
тз="ВЫБРАТЬ РАЗНОСТЬДАТ(&НачДата,&КонДата,"+СокрЛП(рВидРазности)+")+1 КАК ПериодовВремени";
з=Новый Запрос(тз);
Если рВидРазности="СЕКУНДА" или рВидРазности="МИНУТА" или рВидРазности="ЧАС" Тогда
// ставим, как есть, с учётом времени
Если рНачДата>рКонДата Тогда // всё наоборот
рПервая=рКонДата; рВторая=рНачДата; коэф=-1;
Иначе
рПервая=рНачДата; рВторая=рКонДата; коэф=1;
КонецЕсли;
Иначе
// ставим от начала дня
Если рНачДата>рКонДата Тогда // всё наоборот
рПервая=НачалоДня(рКонДата); рВторая=НачалоДня(рНачДата); коэф=-1;
Иначе
рПервая=НачалоДня(рНачДата); рВторая=НачалоДня(рКонДата); коэф=1;
КонецЕсли;
КонецЕсли;
Попытка
з.УстановитьПараметр("НачДата",рПервая);
з.УстановитьПараметр("КонДата",рВторая);
рРезультат=з.Выполнить().Выгрузить(ОбходРезультатаЗапроса.Прямой).Получить(0).ПериодовВремени;
Если ТипЗнч(рРезультат)<>Тип("Число") Тогда Возврат -1 Иначе Возврат коэф*рРезультат КонецЕсли;
Исключение
Возврат -1
КонецПопытки;
КонецФункции
Функция ДобавитьКДате(рДата,рРазность,рВидРазности="ДЕНЬ") Экспорт
Если рРазность=0 Тогда Возврат рДата КонецЕсли;
строСтандПер="СЕКУНДА МИНУТА ЧАС ДЕНЬ НЕДЕЛЯ ДЕКАДА МЕСЯЦ КВАРТАЛ ГОД";
Если Найти(строСтандПер,рВидРазности)=0 Тогда рВидРазности="ДЕНЬ" КонецЕсли;
тз="ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&УслДата,"+СокрЛП(рВидРазности)+",&УслРазность) КАК РезДата";
з=Новый Запрос(тз);
з.УстановитьПараметр("УслДата",рДата);
з.УстановитьПараметр("УслРазность",рРазность);
рРезультат=з.Выполнить().Выгрузить(ОбходРезультатаЗапроса.Прямой).Получить(0).РезДата;
Если ТипЗнч(рРезультат)<>Тип("Дата") Тогда Возврат Дата(1,1,1) Иначе Возврат рРезультат КонецЕсли;
КонецФункции
Функция ГраницаПериода(рДата,рВидПериода="ДЕНЬ",рВидГраницы) Экспорт
строСтандПер="СЕКУНДА МИНУТА ЧАС ДЕНЬ НЕДЕЛЯ ДЕКАДА МЕСЯЦ КВАРТАЛ ГОД";
Если Найти(строСтандПер,рВидПериода)=0 Тогда рВидПериода="ДЕНЬ" КонецЕсли;
Если Найти(ВРег(рВидГраницы),"НАЧ")<>0 Тогда
рГраница="НАЧАЛОПЕРИОДА";
ИначеЕсли Найти(ВРег(рВидГраницы),"КОН")<>0 Тогда
рГраница="КОНЕЦПЕРИОДА";
Иначе
Возврат рДата;
КонецЕсли;
тз="ВЫБРАТЬ "+рГраница+"(&УслДата,"+СокрЛП(рВидПериода)+") КАК РезДата";
з=Новый Запрос(тз);
з.УстановитьПараметр("УслДата",рДата);
рРезультат=з.Выполнить().Выгрузить(ОбходРезультатаЗапроса.Прямой).Получить(0).РезДата;
Если ТипЗнч(рРезультат)<>Тип("Дата") Тогда Возврат Дата(1,1,1) Иначе Возврат рРезультат КонецЕсли;
КонецФункции
Категория:
Работа с Датами (Временем) Выбрать движения, получить выборку записей регистра накопления Пример 1 :
Код 1C v 8.х
//Взаиморасчеты за период, хотя, это лучше выбирать запросом , он в примере 3
Отбор = Новый Структура("Организация", Организация);
НаборЗаписей = РегистрыНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Выбрать(ПериодРегистрации, КонецМесяца(ПериодРегистрации), Отбор);
Пока Выборка.Следующий() Цикл
// код обработки например:
Сум=Сум+Выборка.СуммаВзаиморасчетов;
КонецЦикла;
Пример 2 :
Код 1C v 8.х
// Посчитаем, сколько отгружено с начала года
УчетНоменклатуры = РегистрыНакопления.УчетНоменклатуры;
ОтборПоТовару = Новый Структура("Номенклатура");
ОтборПоТовару.Номенклатура = ВыбТовар;
НачДата = НачалоГода(ТекущаяДата());
КонДата = ТекущаяДата();
Выборка = УчетНоменклатуры.Выбрать(НачДата,КонДата,ОтборПоТовару);
Расход =0;
Пока Выборка.Следующий() Цикл
Если Выборка.ВидДвижения = ВидДвиженияНакопления.Расход Тогда
Расход = Расход + Выборка.Количество;
КонецЕсли;
КонецЦикла;
Предупреждение("Отгружено с начала года """ + СокрЛП(ВыбТовар) + """ = "+ Расход + " шт.");
Пример 3 :
Код 1C v 8.х
Запрос=новый Запрос;
Запрос.Текст="
|ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизаций.СуммаВзаиморасчетов,
| ВзаиморасчетыСРаботникамиОрганизаций.СуммаВUSD,
| ВзаиморасчетыСРаботникамиОрганизаций.Физлицо
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций КАК ВзаиморасчетыСРаботникамиОрганизаций
|ГДЕ
| ВзаиморасчетыСРаботникамиОрганизаций.Физлицо = &Физлицо
| И ВзаиморасчетыСРаботникамиОрганизаций.ПериодВзаиморасчетов = &ПериодВзаиморасчетов
| И ВзаиморасчетыСРаботникамиОрганизаций.Организация = &Организация
| И ВзаиморасчетыСРаботникамиОрганизаций.ХарактерВыплаты = &ХарактерВыплаты
|";
Запрос.УстановитьПараметр("Организация",Организация);
Запрос.УстановитьПараметр("ПериодВзаиморасчетов",ПериодРегистрации);
Запрос.УстановитьПараметр("Физлицо",ТекущаяСтрока.Физлицо);
Запрос.УстановитьПараметр("ХарактерВыплаты",Перечисления.ХарактерВыплатыЗарплаты.ПлановыйАванс);
Результат = Запрос.Выполнить();
Результат = Результат.Выбрать();
Пока Результат.Следующий() Цикл
// код обработки например:
СумАванс=СумАванс+Результат.СуммаВзаиморасчетов;
КонецЦикла;
Категория:
Регистры накопления