Как программно сформировать отчет СКД указав параметры и на выходе получить таблице значений? В одном документе для расчета потребовалось получать данные из отчета на СКД, реализовал следующим образом:
Код 1C v 8.х
СхемаОст = Отчеты. ТоннажПоЭкспедиторам. ПолучитьМакет( "ОсновнаяСхемаКомпоновкиДанных" ) ;
КомпоновщикНастроекНастройки = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроекНастройки. Инициализировать( Новый ИсточникДоступныхНастроекКомпоновкиДанных( СхемаОст) ) ;
КомпоновщикНастроекНастройки. ЗагрузитьНастройки( СхемаОст. НастройкиПоУмолчанию) ;
КомпоновщикНастроекНастройки. Настройки. ПараметрыДанных. УстановитьЗначениеПараметра( "НачалоПериода" , НачалоМесяца( МесяцРасчета) ) ;
КомпоновщикНастроекНастройки. Настройки. ПараметрыДанных. УстановитьЗначениеПараметра( "КонецПериода" , КонецМесяца( МесяцРасчета) ) ;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета. Выполнить( СхемаОст, КомпоновщикНастроекНастройки. Настройки, , , Тип( "ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений" ) ) ;
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных. Инициализировать( МакетКомпоновкиДанных) ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ДанныеТЗ = Новый ТаблицаЗначений;
ПроцессорВывода. УстановитьОбъект( ДанныеТЗ) ;
ПроцессорВывода. Вывести( ПроцессорКомпоновкиДанных) ;
ТоннажПоЭкспедиторам. Очистить( ) ;
Для каждого СтрокаТЗ Из ДанныеТЗ Цикл
Если ЗначениеЗаполнено( СтрокаТЗ. Экспедитор) и СтрокаТЗ. Доставка= Неопределено Тогда
нСтр = ТоннажПоЭкспедиторам. Добавить( ) ;
ЗаполнитьЗначенияСвойств( нСтр, СтрокаТЗ) ;
нСтр. Сотрудник= СтрокаТЗ. Экспедитор;
Иначе
Продолжить;
КонецЕсли ;
КонецЦикла ;
Категория:
Схема Компоновки Данных Как получить количество рабочих дней в месяце по календарю? Для одного проекта потребовалось получить количество рабочих дней в месяце по календарю, без учета праздников.
В результате получилась простая функция:
Код 1C v 8.3 Функция ПолучитьКолВоРабочихДнейПоКалендарю(ДатаМесяца)
Рабочие= 0 ;
Кон= НачалоМесяца( ДатаМесяца) ; КонМес = КонецМесяца( ДатаМесяца) ;
Пока Кон< = КонМес Цикл
Если ( ДеньНедели( Кон) = 6 ) или ( ДеньНедели( Кон) = 7 ) Тогда
Иначе
Рабочие= Рабочие+ 1 ;
КонецЕсли ;
Кон= Кон+ 86400 ;
КонецЦикла ;
Возврат Рабочие;
КонецФункции
А получить количество Выходных дней в месяце можно так:
Код 1C v 8.3 Функция ПолучитьКолВоРабочихДнейПоКалендарю(ДатаМесяца)
Вых= 0 ;
Кон= НачалоМесяца( ДатаМесяца) ; КонМес = КонецМесяца( ДатаМесяца) ;
Пока Кон< = КонМес Цикл
Если ( ДеньНедели( Кон) = 6 ) или ( ДеньНедели( Кон) = 7 ) Тогда
Вых= Вых+ 1 ;
КонецЕсли ;
Кон= Кон+ 86400 ;
КонецЦикла ;
Возврат Вых;
КонецФункции
Категория:
Работа с Датами (Временем) Как заполнить табличную часть формы программно? Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их.
Форма имеет вид:
Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды:
Код 1C v 8.2 УП
&НаСервере
Процедура ЗаполнитьДокументНаСервере()
ДокОбъект = РеквизитФормыВЗначение( "Объект" ) ;
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЗаказНаПроизводствоПродукция.Ссылка КАК ЗаказНаПроизводство,
| СпецификацииОперации.Операция,
| СпецификацииОперации.W1C_КоличествоОпераций,
| СпецификацииОперации.W1C_СтоимостьОднойОперации
|ПОМЕСТИТЬ втЗаказОперацияСумма
|ИЗ
| Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Спецификации.Операции КАК СпецификацииОперации
| ПО ЗаказНаПроизводствоПродукция.Спецификация = СпецификацииОперации.Ссылка
|ГДЕ
| ЗаказНаПроизводствоПродукция.Ссылка В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| W1C_ОтчетПоВыработкеНачисления.ЗаказПроизводство
| ИЗ
| Документ.W1C_ОтчетПоВыработке.Начисления КАК W1C_ОтчетПоВыработкеНачисления
| ГДЕ
| W1C_ОтчетПоВыработкеНачисления.Ссылка.Дата МЕЖДУ &ДатаН И &ДатаК)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| W1C_ОтчетПоВыработкеНачисления.Ссылка.Организация,
| W1C_ОтчетПоВыработкеНачисления.Ссылка.Сотрудник,
| W1C_ОтчетПоВыработкеНачисления.ЗаказПроизводство,
| W1C_ОтчетПоВыработкеНачисления.Операция,
| W1C_ОтчетПоВыработкеНачисления.КоличествоПродукции КАК Количество,
| втЗаказОперацияСумма.W1C_СтоимостьОднойОперации КАК Цена,
| W1C_ОтчетПоВыработкеНачисления.Ссылка КАК ОтчетПоВыработке,
| втЗаказОперацияСумма.W1C_СтоимостьОднойОперации * W1C_ОтчетПоВыработкеНачисления.КоличествоПродукции КАК Сумма
|ИЗ
| Документ.W1C_ОтчетПоВыработке.Начисления КАК W1C_ОтчетПоВыработкеНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ втЗаказОперацияСумма КАК втЗаказОперацияСумма
| ПО W1C_ОтчетПоВыработкеНачисления.ЗаказПроизводство = втЗаказОперацияСумма.ЗаказНаПроизводство
| И W1C_ОтчетПоВыработкеНачисления.Операция = втЗаказОперацияСумма.Операция
|ГДЕ
| W1C_ОтчетПоВыработкеНачисления.Ссылка.Дата МЕЖДУ &ДатаН И &ДатаК
| И W1C_ОтчетПоВыработкеНачисления.Ссылка.Организация = &Организация" ;
Запрос. УстановитьПараметр( "ДатаК" , КонецМесяца( ДокОбъект. ПериодРегистрации) ) ;
Запрос. УстановитьПараметр( "ДатаН" , НачалоМесяца( ДокОбъект. ПериодРегистрации) ) ;
Запрос. УстановитьПараметр( "Организация" , ДокОбъект. Организация) ;
РезультатЗапроса = Запрос. Выполнить( ) ;
ДокОбъект. Рассчет. Загрузить( Запрос. Выполнить( ) . Выгрузить( ) ) ;
ОбновитьВыплату( ДокОбъект) ;
ЗначениеВРеквизитФормы( ДокОбъект, "Объект" ) ;
КонецПроцедуры
&НаСервере
Процедура ОбновитьВыплату(ДокОбъект)
врТЗ = ДокОбъект. Рассчет. Выгрузить( ) ;
врТЗ. свернуть( "Сотрудник" , "Сумма" ) ;
ДокОбъект. Начисления. Загрузить( врТЗ) ;
КонецПроцедуры
Второй вариант заполнения: Имеем ТЧ на форме, которую необходимо программно заполнить
и код в модуле документа:
Код 1C v 8.2 УП &НаСервере
Процедура НайтиТопливоф()
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ
| СУММА(ПродажаТоплива.Номер) КАК Номер,
| ПродажаТоплива.ТипТоплива,
| СУММА(ПродажаТоплива.Количество) КАК Количество,
| СУММА(ПродажаТоплива.СуммаСНДС) КАК СуммаСНДС
|ИЗ
| Документ.ПродажаТоплива КАК ПродажаТоплива
|ГДЕ
| ПродажаТоплива.Цена <= &Цена
|
|СГРУППИРОВАТЬ ПО
| ПродажаТоплива.ТипТоплива" ;
Запрос. УстановитьПараметр( "Цена" , Объект. Цена) ;
Результат = Запрос. Выполнить( ) ;
ВыборкаДетальныеЗаписи = Результат. Выбрать( ) ;
Объект. ТЧ. Очистить( ) ;
Пока ВыборкаДетальныеЗаписи. Следующий( ) Цикл
НовСтр = Объект. ТЧ. Добавить( ) ;
ЗаполнитьЗначенияСвойств( НовСтр, ВыборкаДетальныеЗаписи) ;
КонецЦикла ;
КонецПроцедуры
Категория:
Управляемое приложение, Тонкий клиент Настройка периода, интервала динамического списка Вот несколько вариантов
Программной установки периода, интервала динамического списка на управляемой форме
Код 1C v 8.2 УП Элементы. ДинамическийСписок. Период = Новый СтандартныйПериод( ВариантСтандартногоПериода. Сегодня) ;
Элементы. Список. Период = Новый СтандартныйПериод( ВариантСтандартногоПериода. ЭтотКвартал) ;
Код 1C v 8.2 УП
Элементы. Список. Период. Вариант = СтруктураПараметров. Период. Вариант;
Элементы. Список. Период. ДатаНачала = СтруктураПараметров. Период. ДатаНачала;
Элементы. Список. Период. ДатаОкончания = СтруктураПараметров. Период. ДатаОкончания;
СП = Элементы. Список. Период;
СП. ДатаНачала = НачалоМесяцы( РабочаяДата) ;
СП. ДатаОкончания = КонецМесяца( РабочаяДата) ;
Категория:
Документы Как узнать количество дней в месяце? Код 1C v 8.х Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ
| ДЕНЬ(КОНЕЦПЕРИОДА(&Дата, МЕСЯЦ)) КАК ЧислоДней" ;
Запрос. УстановитьПараметр( "Дата" , Дата) ;
Результат = Запрос. Выполнить( ) ;
ВыборкаДетальныеЗаписи = Результат. Выбрать( ) ;
Пока ВыборкаДетальныеЗаписи. Следующий( ) Цикл
КонецЦикла ;
Код 1C v 8.х КоличествоДней = Сред( КонецМесяца( ТекущаяДата( ) ) , 1 , 2 ) ;
Категория:
Работа с Датами (Временем) Вывод (печать) Запроса в Табличный Документ Код 1C v 8.х
Процедура УниверсальныйОтчетПоЗапросу(ПараметрыОтчета)
Запрос= новый Запрос;
Запрос. Текст= ПараметрыОтчета. Запрос;
Для каждого ПАРАМЕТР из ПараметрыОтчета. ПараметрыЗапроса Цикл
Запрос. УстановитьПараметр( ПАРАМЕТР. Ключ, ПАРАМЕТР. Значение) ;
КонецЦикла ;
Тз= Запрос. Выполнить( ) . Выгрузить( ) ;
Табл= Новый ТабличныйДокумент;
Макет = ЭтотОбъект. ПолучитьМакет( "Макет" ) ;
ОбластьШапкаОсновной= Макет. ПолучитьОбласть( "Шапка|Основной" ) ;
ОбластьСтрокаОсновной= Макет. ПолучитьОбласть( "Строка|Основной" ) ;
ОбластьИтогОсновной= Макет. ПолучитьОбласть( "Итог|Основной" ) ;
ОбластьШапкаДОП= Макет. ПолучитьОбласть( "Шапка|Показатели" ) ;
ОбластьСтрокаДОП= Макет. ПолучитьОбласть( "Строка|Показатели" ) ;
ОбластьИтогДОП= Макет. ПолучитьОбласть( "Итог|Показатели" ) ;
Табл. Вывести( ОбластьШапкаОсновной) ;
Для Каждого Колонка из Тз. Колонки ЦИКЛ
ОбластьШапкаДОП. Параметры. ИмяПоказателя= Колонка. Имя;
Табл. Присоединить( ОбластьШапкаДОП) ;
КонецЦикла ;
счетчик= 0 ;
Для каждого стр из Тз Цикл
счетчик= счетчик+ 1 ;
ОбластьСтрокаОсновной. Параметры. счетчик= счетчик;
Табл. Вывести( ОбластьСтрокаОсновной) ;
Для Каждого Колонка из Тз. Колонки ЦИКЛ
ОбластьСтрокаДОП. Параметры. ЗначениеКолонки= стр[Колонка. Имя];
Табл. Присоединить( ОбластьСтрокаДОП) ;
КонецЦикла ;
КонецЦикла ;
Табл. Вывести( ОбластьИтогОсновной) ;
Для Каждого Колонка из Тз. Колонки ЦИКЛ
ОбластьИтогДОП. Параметры. Итог= Тз. Итог( Колонка. Имя) ;
Табл. Присоединить( ОбластьИтогДОП) ;
КонецЦикла ;
Табл. ТолькоПросмотр= истина ;
Табл. Показать( ) ;
КонецПроцедуры
Категория:
Запросы Автоматическая выгрузка загрузка данных используя регламентное задание Для обмена данными между программами необходимо сделать следующее:
1. При помощи Конвертации Данных создать правила выгрузки данных
2. Нужно чтобы в конфигурации была обработка
УниверсальныйОбменДаннымиXML , желательно последней версии!
(При помощи ее и созданных правил будут выгрузаться и заружаться данные)
3. В 1-вой базе Добавляем Регламентное задание:
Имя - Выгрузка
Использование - !(галочка)
Расписание настройте обязательно.
Имя метода - Общий модуль в котором процедура ВыгрузимИзЗУП():
Код 1C v 8.х
Процедура ВыгрузимИзЗУП() Экспорт
Обработина = Обработки. УниверсальныйОбменДаннымиXML. Создать( ) ;
Обработина. РежимОбмена = "Выгрузка" ;
Обработина. ДатаНачала = НачалоДня( ДобавитьМесяц( ТекущаяДата( ) , - 1 ) ) ;
Обработина. ДатаОкончания = КонецМесяца( ТекущаяДата( ) ) ;
Обработина. ИмяФайлаОбмена = "D:\ZUP_BUH_EXCH\Upload.xml" ;
Обработина. ИмяФайлаПравилОбмена = "D:\ZUP_BUH_EXCH\Zup-Buh.xml" ;
Обработина. ЗагрузитьПравилаОбмена( ) ;
Обработина. ВыполнитьВыгрузку( ) ;
КонецПроцедуры
4. Во 2-ой базе Добавляем Регламентное задание:
Имя - Загрузка
Использование - !(галочка)
Расписание настройте обязательно.
Имя метода - Общий модуль в котором процедура ЗагрузкаВБУХ():
Код 1C v 8.х Процедура ЗагрузкаВБУХ() Экспорт
Обработина = Обработки. УниверсальныйОбменДаннымиXML. Создать( ) ;
Обработина. ИмяФайлаОбмена = "D:\ZUP_BUH_EXCH\Upload.xml" ;
Обработина. РежимОбмена = "Загрузка" ;
Обработина. ОптимизированнаяЗаписьОбъектов = Истина ;
Обработина. ЗаписыватьРегистрыНаборамиЗаписей = Истина ;
Обработина. ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты = Истина ;
Обработина. ЗагружатьДанныеВРежимеОбмена = Истина ;
Обработина. ВыполнитьЗагрузку( ) ;
КонецПроцедуры
Категория:
Конвертация данных, Обмен, Перенос Как получить количество ЛЕТ, МЕСЯЦЕВ, ДНЕЙ между датами? Нужно получить разницу между датами
31.12.2009 и
10.01.2005 и отобразить ее как:
4 года 11 месяцев 21 день
Код 1C v 8.х Процедура ТЕСТ_ВыполнитьНажатие(Кнопка)
ДатаНач = Дата( 2009 , 12 , 31 ) ;
ДатаКон = Дата( 2005 , 1 , 10 ) ;
Лет= 0 ; Мес= 0 ; Дн= 0 ;
РазобратьРазностьДат( ДатаНач, ДатаКон, Лет, Мес, Дн) ;
ЛетС = ФормаМножественногоЧисла( "год" , "года" , "лет" , Лет) ;
МесС = ФормаМножественногоЧисла( "месяц" , "месяца" , "месяцев" , Мес) ;
ДнС = ФормаМножественногоЧисла( "день" , "дня" , "дней" , Дн) ;
Сообщить( ? ( Лет> 0 , Строка( Лет) + " " + ЛетС, "" ) + " " + ? ( Мес> 0 , Строка( Мес) + " " + МесС, "" ) + " " + Строка( дн) + " " + ДнС) ;
КонецПроцедуры
Процедура РазобратьРазностьДат(Дата1, Дата2, Лет = 0, Месяцев = 0, Дней = 0)
Лет = 0 ;
Месяцев = 0 ;
Дней = 0 ;
Если Дата1 > Дата2 Тогда
ВременнаяДата = Дата1 ;
Если День( ВременнаяДата) < День( Дата2 ) Тогда
Дней = ( ВременнаяДата - ДобавитьМесяц( ВременнаяДата, - 1 ) ) / 86400 ;
ВременнаяДата = ДобавитьМесяц( ВременнаяДата, - 1 ) ;
КонецЕсли ;
Если Месяц( ВременнаяДата) < Месяц( Дата2 ) Тогда
ВременнаяДата = ДобавитьМесяц( ВременнаяДата, - 12 ) ;
Месяцев = 12 ;
КонецЕсли ;
Лет = Макс( Год( ВременнаяДата) - Год( Дата2 ) , 0 ) ;
Месяцев = Макс( Месяцев + Месяц( ВременнаяДата) - Месяц( Дата2 ) , 0 ) ;
Дней = Макс( Дней + День( ВременнаяДата) - День( Дата2 ) , 0 ) ;
Если Дата2 < > ( ДобавитьМесяц( Дата1 , - Лет * 12 - Месяцев) - Дней * 86400 ) Тогда
Дней = Дней + ( День( КонецМесяца( Дата2 ) ) - День( НачалоМесяца( Дата2 ) ) ) - ( День( КонецМесяца( ДобавитьМесяц( Дата1 , - 1 ) ) ) - День( НачалоМесяца( ДобавитьМесяц( Дата1 , - 1 ) ) ) ) ;
КонецЕсли ;
КонецЕсли ;
КонецПроцедуры
Функция ФормаМножественногоЧисла(Слово1, Слово2, Слово3, Знач ЦелоеЧисло)
Если ЦелоеЧисло < 0 Тогда
ЦелоеЧисло = - 1 * ЦелоеЧисло;
КонецЕсли ;
Если ЦелоеЧисло < > Цел( ЦелоеЧисло) Тогда
Возврат Слово2 ;
КонецЕсли ;
Остаток = ЦелоеЧисло%10 ;
Если ( ЦелоеЧисло > 10 ) И ( ЦелоеЧисло< 20 ) Тогда
Возврат Слово3 ;
ИначеЕсли Остаток= 1 Тогда
Возврат Слово1 ;
ИначеЕсли ( Остаток> 1 ) И ( Остаток< 5 ) Тогда
Возврат Слово2 ;
Иначе
Возврат Слово3 ;
КонецЕсли ;
КонецФункции
Категория:
Работа с Датами (Временем) Ввод записей в журнал расчетов Добавление записи в журнал расчетов:
Метод Новая может быть вызван где угодно, в глобальном модуле, модуле обработок, документов и т.д.
Данный метод проверяет корректность заполненных реквизитов журнала расчетов. При вводе новых записей журнала расчетов методами Новая и Записать обязательно должны быть заполнены следующие реквизиты записи журнала:
Объект, Документ, ВидРасч. Кроме того, проверяется корректность реквизитов
ДатаНачала и ДатаОкончания. Если реквизиты ДатаНачала и ДатаОкончания не установлены явным образом, при записи они устанавливаются как начало и окончание текущего расчетного прериода, соответственно. Реквизит ПериодРегистрации заполняется текущим значением расчетного периода, установленным для журнала расчетов (см. метод УстановитьПериодРасчета). Если реквизит
РодительскийДокумент не установлен явным образом, для него устанавливается то же значение, что и для реквизита Документ. Если реквизиты
Рассчитана, Сторно, Перерасчет, Фиксирована не установлены, то запись вводится как простая нерассчитанная, нефиксированная запись.
Внимание! При вводе новых записей в журнал расчетов методами Новая и Записать записи вводятся «как есть». Система не выполняет правила перерасчетов, а также правила взаимного вытеснения видов расчета. Ввод произвольных записей журнала расчетов очень ответственная операция. При использовании этих методов следует внимательно следить за логической целостностью журнала расчетов
Код 1C v 7.x Перем Док;
Перем Сотр;
Перем Рез;
Док = СоздатьОбъект( "Документ" ) ;
Сотр = СоздатьОбъект( "Справочник.Сотрудники" ) ;
Рез = 555 ;
ЖР = СоздатьОбъект( "ЖурналРасчетов.Зарплата" ) ;
ЖР. Новая( ) ;
ЖР. УстановитьПериод( ЖР. ПолучитьпериордПоДате( ТекДата) ) ;
ЖР. УстановитьРеквизит( "Документ" , Док. ТекущийДокумент( ) ) ;
ЖР. УстановитьРеквизит( "Объект" , Сотр. ТекущийЭлемент( ) ) ;
ЖР. УстановитьРеквизит( "ВидРасч" , Вид Расчета. ПоОкладу) ;
ЖР. УстановитьРеквизит( "Рассчитана" , 1 ) ;
ЖР. УстановитьРеквизит( "Результат" , Рез) ;
ЖР. Записать( ) ;
Добавить записи в журнал расчетов которые вводятся при проведении документов:
Методы ВвестиРасчет и ЗаписатьРасчет могут быть вызваны только в модулях документов,
вводящих расчеты. Вызвать эти методы в модулях иных объектов, например
в модуле формы списка ЖЗ или в модуле отчета (обработки), нельзя.
Код 1C v 7.x
ЖЗ = СоздатьОбъект( "ЖурналРасчетов.Зарплата" ) ;
ЖЗ. УстановитьРеквизит( "Рассчитана" , 1 ) ;
ЖЗ. ВвестиРасчет( ВыбрСотрудник, ВидРасчета. Премия, НачалоМесяца, КонецМесяца, ПремияСотруднику) ;
или
Код 1C v 7.x ЖЗ. ЗаписатьРасчет( ВыбрСотрудник, ВидРасчета. Премия, НачалоМесяца, КонецМесяца, ПремияСотруднику) ;
Отличие метода
ЗаписатьРасчет заключается в том, что ввод вытесняющих расчетов приводит к вытеснению только тех расчетов, которые имеют меньший приоритет, а не меньший либо равный, как в случае с методом
ВвестиРасчет . Это приводит, в частности, к тому, что за счет применения этого метода расчет не вытесняет «сам себя».
При записи невытесняющего расчета ввод новых записей также происходит «осмотрительно» — новые записи вводятся только в том случае, если в журнале расчетов нет точно такой же записи. Под точно такой же записью здесь подразумевается запись с таким же видом расчета, для того же объекта и с тем же периодом действия.
Вывод: Для обновления самовытесняющего расчета при его повторном вводе другим документом
вместо метода ЗаписатьРасчет используется метод ВвестиРасчет. Категория:
Журналы расчетов Как программно открыть и выбрать документ, выбор документа из списка? Открыть список документов для выбора документа:
Код 1C v 8.х ФормаСписка = Документы. НачислениеЗарплатыРаботникамОрганизаций. ПолучитьФормуСписка( ) ;
ФормаСписка. Открыть( ) ;
Открыть список документов для выбора документа и установить отбор:
Код 1C v 8.х ФормаВыбора = Документы. НачислениеЗарплатыРаботникамОрганизаций. ПолучитьФормуВыбора( ) ;
ФормаВыбора. ДокументСписок. Отбор. Дата. ВидСравнения= ВидСравнения. ИнтервалВключаяОкончание;
ФормаВыбора. ДокументСписок. Отбор. Дата. ЗначениеС = НачалоМесяца( Дата) ;
ФормаВыбора. ДокументСписок. Отбор. Дата. ЗначениеПо = КонецМесяца( Дата) ;
ФормаВыбора. ДокументСписок. Отбор. Дата. установить( ) ;
ФормаВыбора. Заголовок = "Выберите документ" ;
ВыбДокНачисл = ФормаВыбора. ОткрытьМодально( ) ;
Категория:
Документы Функция ПредставлениеПериода() аналог 7-ной функции ПериодСтр() Функция позволяет формировать описание периода, заданного датами начала и окончания на одном из языков, поддерживаемых платформой. Например, в результате выполнения следующего кода:
Код 1C v 8.2 УП ТекДата = ТекущаяДата( ) ;
НачПериода = НачалоМесяца( ТекДата) ;
КонПериода = КонецМесяца( ТекДата) ;
Сообщение = Новый СообщениеПользователю;
Сообщение. Текст = ПредставлениеПериода( НачПериода, КонПериода, "L=en_US" ) ;
Сообщение. Текст = ПредставлениеПериода( НачПериода, КонПериода, "L=ru_RU" ) ;
Сообщение. Сообщить( ) ;
будет получено представление периода на английском или русском языках!
Функция глобального контекста
ПредставлениеПериода() позволяет получить строковое представление периода, заданного датами начала и окончания.
Например:
Код 1C v 8.х ПредставлениеПериода( '20050101000000 ', '20050101235959 ')
ПредставлениеПериода( '20050101000000 ', '20050131235959 ')
ПредставлениеПериода( '20050101000000 ', '20050228235959 ')
Кроме стандартных периодов эта функция позволяет получать представления так называемых финансовых периодов: первых девяти месяцев года и первого полугодия. Для этого используется форматная строка с указанием признака ФП:
Код 1C v 8.х ПредставлениеПериода( '20050101000000 ', '20050630235959 ', "ФП = Истина" )
ПредставлениеПериода( '20050101000000 ', '20050930235959 ', "ФП = Истина" )
Кроме этого форматная строка позволяет получать представление периода на языке, отличном от используемого по-умолчанию:
Код 1C v 8.х ПредставлениеПериода( '20050101000000 ', '20050331235959 ', "L = en_US" )
ПредставлениеПериода( '20050101000000 ', '20050331235959 ', "L = bg_BG" )
ПредставлениеПериода( '20050101000000 ', '20050331235959 ', "L = de_DE" )
Категория:
Работа с Датами (Временем) Перебор дат, заполнение списка, массива дат по порядку Код 1C v 8.х
ДатаН = Дата( 2008 , 1 , 1 ) ;
ДатаК = Дата( 2009 , 12 , 31 ) ;
СписокДат = Новый СписокЗначений;
ТекДата = ДатаН;
Пока ТекДата < ДатаК Цикл
СписокДат. Добавить( ТекДата) ;
ТекДата = ТекДата + 60 * 60 * 24 ;
КонецЦикла ;
СписокДат. Добавить( ТекДата) ;
МассивДат = Новый Массив;
ТекДата = ДатаН;
Пока ТекДата < ДатаК Цикл
МассивДат. Добавить( ТекДата) ;
ТекДата = КонецМесяца( ТекДата) + 1 ;
КонецЦикла ;
Категория:
Работа с Датами (Временем) Как выбрать все записи регистра накопления за текущий месяц Код 1C v 8.х Выборка = РегистрыНакопления. ОстаткиМатериалов. Выбрать( НачалоМесяца( ТекущаяДата( ) ) , КонецМесяца( ТекущаяДата( ) ) ) ;
Категория:
Регистры накопления Функция вычисляет даты начала/конца периодов за интервал в виде таблицы значений Код 1C v 8.х
Функция обПериодыЗаИнтервал(Начало, Конец, Периодичность="День" , ВыравниваниеПоПериоду=истина)
Перем Р, Номер, ТекПериод, СледПериод;
Р= Новый ТаблицаЗначений( ) ;
Р. Колонки. Добавить( "Начало" ) ;
Р. Колонки. Добавить( "Конец" ) ;
Р. Колонки. Добавить( "Номер" ) ;
ТекПериод= Начало;
Номер= 1 ;
Пока истина Цикл
Если Периодичность= "День" Тогда
Если ВыравниваниеПоПериоду Тогда
ТекПериод= НачалоДня( ТекПериод) ;
СледПериод= КонецДня( ТекПериод) ;
Иначе
СледПериод= обДобавитьДни( ТекПериод, 1 ) ;
КонецЕсли ;
ИначеЕсли Периодичность= "Месяц" Тогда
Если ВыравниваниеПоПериоду Тогда
ТекПериод= НачалоМесяца( ТекПериод) ;
СледПериод= КонецМесяца( ТекПериод) ;
Иначе
СледПериод= обДобавитьМесяцы( ТекПериод, 1 ) ;
КонецЕсли ;
ИначеЕсли Периодичность= "Год" Тогда
Если ВыравниваниеПоПериоду Тогда
ТекПериод= НачалоГода( ТекПериод) ;
СледПериод= КонецГода( ТекПериод) ;
Иначе
СледПериод= обДобавитьМесяцы( ТекПериод, 12 ) ;
КонецЕсли ;
ИначеЕсли Периодичность= "Квартал" Тогда
Если ВыравниваниеПоПериоду Тогда
ТекПериод= НачалоКвартала( ТекПериод) ;
СледПериод= КонецКвартала( ТекПериод) ;
Иначе
СледПериод= обДобавитьМесяцы( ТекПериод, 3 ) ;
КонецЕсли ;
ИначеЕсли Периодичность= "Неделя" Тогда
Если ВыравниваниеПоПериоду Тогда
ТекПериод= НачалоНедели( ТекПериод) ;
СледПериод= КонецНедели( ТекПериод) ;
Иначе
СледПериод= обДобавитьДни( ТекПериод, 7 ) ;
КонецЕсли ;
Иначе
ВызватьИсключение "Неизвестная периодичность времени:" + Периодичность;
КонецЕсли ;
Если ТекПериод> Конец И НЕ Номер= 1 Тогда
Прервать ;
КонецЕсли ;
Стр= Р. Добавить( ) ;
Стр. Начало= ТекПериод;
Стр. Конец= СледПериод;
Стр. Номер= Номер;
ТекПериод= СледПериод+ 1 ;
Номер= Номер+ 1 ;
КонецЦикла ;
Возврат Р;
КонецФункции
Категория:
Работа с Датами (Временем) Заполним диаграмму Ганта данными Код 1C v 8.х ДГ = ЭлементыФормы. ДГ;
ДГ. ОбластьЗаголовка. Текст = "График дежурств" ;
ДГ. АвтоОпределениеПолногоИнтервала = Ложь ;
ДГ. УстановитьПолныйИнтервал( НачалоМесяца( ТекущаяДата( ) ) , КонецМесяца( ТекущаяДата( ) ) ) ;
ТочкаП = ДГ. УстановитьТочку( "Петров" ) ;
ТочкаС = ДГ. УстановитьТочку( "Сидоров" ) ;
СерияНаВахте = ДГ. УстановитьСерию( "На вахте" ) ;
СерияВЦентре = ДГ. УстановитьСерию( "В центральном офисе" ) ;
СерияНаВахте. Цвет = WebЦвета. Синий;
СерияВЦентре. Цвет = WebЦвета. СветлоЖелтый;
ПервыйДень = НачалоМесяца( ТекущаяДата( ) ) ;
Значение = ДГ. ПолучитьЗначение( ТочкаП, СерияНаВахте) ;
Интервал = Значение. Добавить( ) ;
Интервал. Текст = "Работает на вахте" ;
Интервал. Начало = ПервыйДень;
Интервал. Конец = ПервыйДень + 10 * 24 * 60 * 60 ;
Значение = ДГ. ПолучитьЗначение( ТочкаП, СерияВЦентре) ;
Интервал = Значение. Добавить( ) ;
Интервал. Текст = "Работает в центральном офисе" ;
Интервал. Начало = ПервыйДень + 14 * 24 * 60 * 60 ;
Интервал. Конец = ПервыйДень + 24 * 24 * 60 * 60 ;
Значение = ДГ. ПолучитьЗначение( ТочкаС, СерияНаВахте) ;
Интервал = Значение. Добавить( ) ;
Интервал. Текст = "Работает на вахте" ;
Интервал. Начало = ПервыйДень + 5 * 24 * 60 * 60 ;
Интервал. Конец = ПервыйДень + 15 * 24 * 60 * 60 ;
Значение = ДГ. ПолучитьЗначение( ТочкаС, СерияВЦентре) ;
Интервал = Значение. Добавить( ) ;
Интервал. Текст = "Работает в центральном офисе" ;
Интервал. Начало = ПервыйДень + 21 * 24 * 60 * 60 ;
Интервал. Конец = ПервыйДень + 25 * 24 * 60 * 60 ;
Категория:
Диаграмма