Как удалить движения документа программно? Потребовалось в УТ быстро удалить все движения по банку, дело вроде легкое - отменить проведение всех поступлений и списаний безналичных денежных средств, но не тут то было...
При попытке отмены проведения выполнялись проверки на условия оплаты по заказу и документ ни как не отменял проведения
Ну не может типовым способом, заставим не типовым: Через запрос делаем выбору необходимых нам документов и в обработке результата пишем:
Код 1C v 8.3 Для Каждого СтрокаРезультата Из РезультатТаблица Цикл
ДокОбъект = СтрокаРезультата. Ссылка. ПолучитьОбъект( ) ;
Для Каждого Движение ИЗ ДокОбъект. Движения Цикл
Если Движение. Количество( ) > 0 Тогда
Точка = Найти( Строка( Движение) , "." ) ;
ВидРегистра = Лев( Строка( Движение) , Точка - 13 ) ;
РегистрИмя = СокрП( Сред( Строка( Движение) , Точка + 1 ) ) ;
Если ВидРегистра = "РегистрНакопления" Тогда
НаборЗаписей = РегистрыНакопления[РегистрИмя]. СоздатьНаборЗаписей( ) ;
ИначеЕсли ВидРегистра = "РегистрБухгалтерии" Тогда
НаборЗаписей = РегистрыБухгалтерии[РегистрИмя]. СоздатьНаборЗаписей( ) ;
ИначеЕсли ВидРегистра = "РегистрСведений" Тогда
НаборЗаписей = РегистрыСведений[РегистрИмя]. СоздатьНаборЗаписей( ) ;
ИначеЕсли ВидРегистра = "РегистрРасчета" Тогда
НаборЗаписей = РегистрыРасчета[РегистрИмя]. СоздатьНаборЗаписей( ) ;
КонецЕсли ;
НаборЗаписей. Отбор. Регистратор. Установить( ДокОбъект. Ссылка) ;
Иначе
НаборЗаписей = Движение;
КонецЕсли ;
Попытка
НаборЗаписей. Записать( ) ;
Исключение
Сообщить( ОписаниеОшибки( ) ) ;
КонецПопытки ;
КонецЦикла ;
ДокОбъект. Проведен = Ложь ;
ДокОбъект. Записать( режимзаписидокумента. запись) ;
КонецЦикла ;
Готовая функция для использования в своих обработках или общем модуле:
Код 1C v 8.3 Процедура УдалитьДвиженияДокумента(Документ)
ДокОбъект = Документ. ПолучитьОбъект( ) ;
Для Каждого Движение ИЗ ДокОбъект. Движения Цикл
Если Движение. Количество( ) > 0 Тогда
Точка = Найти( Строка( Движение) , "." ) ;
ВидРегистра = Лев( Строка( Движение) , Точка - 13 ) ;
РегистрИмя = СокрП( Сред( Строка( Движение) , Точка + 1 ) ) ;
Если ВидРегистра = "РегистрНакопления" Тогда
НаборЗаписей = РегистрыНакопления[РегистрИмя]. СоздатьНаборЗаписей( ) ;
ИначеЕсли ВидРегистра = "РегистрБухгалтерии" Тогда
НаборЗаписей = РегистрыБухгалтерии[РегистрИмя]. СоздатьНаборЗаписей( ) ;
ИначеЕсли ВидРегистра = "РегистрСведений" Тогда
НаборЗаписей = РегистрыСведений[РегистрИмя]. СоздатьНаборЗаписей( ) ;
ИначеЕсли ВидРегистра = "РегистрРасчета" Тогда
НаборЗаписей = РегистрыРасчета[РегистрИмя]. СоздатьНаборЗаписей( ) ;
КонецЕсли ;
НаборЗаписей. Отбор. Регистратор. Установить( ДокОбъект. Ссылка) ;
Иначе
НаборЗаписей = Движение;
КонецЕсли ;
Попытка
НаборЗаписей. Записать( ) ;
Исключение
Сообщить( ОписаниеОшибки( ) ) ;
КонецПопытки ;
КонецЦикла ;
КонецПроцедуры
Категория:
Документы Дерево значений в таблицу значений или в табличную часть и обратно Для одной организации надо было реализовать документы, где вместо табличной части надо использовать дерево и все это на управляемых формах. Но дерево нельзя сохранить в базе в текущем виде. Пришлось использовать табличную часть документа для хранения данных дерева. И при открытии формы получать данные из ТЧ и выводить их в дерево. Далее все манипуляции производить с деревом и при сохранении документа помещать данные в обратно в ТЧ.
Поиск по интернету не дал нужного варианта, пришлось реализовавыть свой механизм, используя информацию которая была на просторах интернета.
Для реализации такого механизма в ТЧ был добавлен реквизит “КлючСвязи” (обязательный реквизит) с типом число, куда помещался “НомерСтроки” (стандартный реквизит ТЧ) родителя (верхний уровень). А самый верхний элемент дерева имеет “КлючСвязи” равный 0.
На картинке ниже видно структуру дерева и структуру ТЧ
Нагрузка на сервер осуществляется при окрытии и при сохранении документа. А с деревом работают уже на клиенте.
На рабочей базе обрабатывается около 200 строк в одном документе.
Открытие и сохранение документа происходит моментально. С большем количеством строк не тестировалось.
Чтобы алгорит правильно работал, у рекизита фомы с типом дерево значений должны быть все реквизиты табличной части, кроме “КлючСвязи” и “НомерСтроки”. Иначе платформа выдаст ошибку. В дерево можо добавлять свои реквизиты отличные от ТЧ, они будут использоваться только в дереве.
Ниже приведен код преобразования дерева в таблицу и обратно .
Код 1C v 8.2 УП &НаКлиенте
Процедура КомандаТаблицуВДерево(Команда)
КомандаТаблицуВДеревоНаСервере( ) ;
КонецПроцедуры
&НаСервере
Процедура КомандаТаблицуВДеревоНаСервере()
Дерево = ТаблицаВДерево( РеквизитФормыВЗначение( "Объект" ) , "Товары" ) ;
ЗначениеВРеквизитФормы( Дерево, "ДеревоЗначений" ) ;
Элементы. ДеревоЗначений. Обновить( ) ;
КонецПроцедуры
&НаКлиенте
Процедура КомандаДеревоВТаблицу(Команда)
КомандаДеревоВТаблицуНаСервере( ) ;
КонецПроцедуры
&НаСервере
Процедура КомандаДеревоВТаблицуНаСервере()
Объект. Товары. Очистить( ) ;
ДОбъект = РеквизитФормыВЗначение( "Объект" ) ;
ДеревоВТаблицу( ДОбъект, РеквизитФормыВЗначение( "ДеревоЗначений" ) , "Товары" ) ;
ЗначениеВРеквизитФормы( ДОбъект, "Объект" ) ;
КонецПроцедуры
Формирование дерева из таблицы значений
Код 1C v 8.2 УП
&НаСервере
Функция ТаблицаВДерево(ДокОбъект, НаименованиеТабличнойЧастиДокумента, КлючСвязи = NULL, ЭлементРодитель = NULL) Экспорт
КолонкиТаблицы = ДокОбъект. Метаданные( ) . ТабличныеЧасти[НаименованиеТабличнойЧастиДокумента]. Реквизиты;
ДеревоЗначений2 = Новый ДеревоЗначений;
Для каждого Кол из КолонкиТаблицы Цикл
Если Кол. Имя = "НомерСтроки" ИЛИ Кол. Имя = "КлючСвязи" Тогда
Продолжить;
Иначе
ДеревоЗначений2 . Колонки. Добавить( Кол. Имя, Новый ОписаниеТипов( Кол. Тип) ) ;
КонецЕсли ;
КонецЦикла ;
Если КлючСвязи = NULL И ЭлементРодитель = NULL Тогда
ИсточникВыборки = ДеревоЗначений2 . Строки;
КлючСвязи = 0 ;
Иначе
ИсточникВыборки = ЭлементРодитель. Строки;
КонецЕсли ;
Фильтр = Новый Структура( "КлючСвязи" , КлючСвязи) ;
М = ДокОбъект[НаименованиеТабличнойЧастиДокумента]. НайтиСтроки( Фильтр) ;
Если М. Количество( ) = 0 Тогда
Возврат ДеревоЗначений2 ;
КонецЕсли ;
Для каждого Стр из М Цикл
Элемент = ИсточникВыборки. Добавить( ) ;
Для каждого Кол из КолонкиТаблицы Цикл
Если Кол. Имя = "НомерСтроки" ИЛИ Кол. Имя = "КлючСвязи" Тогда
Продолжить;
Иначе
Элемент[Кол. Имя] = Стр[Кол. Имя];
КонецЕсли ;
КонецЦикла ;
ТаблицаВДерево( ДокОбъект, НаименованиеТабличнойЧастиДокумента, Стр. НомерСтроки, Элемент) ;
КонецЦикла ;
Возврат ДеревоЗначений2 ;
КонецФункции
Формирование таблицы из дерева
Код 1C v 8.2 УП
&НаСервере
Процедура ДеревоВТаблицу(ДокОбъект, ДеревоЗначений, НаименованиеТабличнойЧастиДокумента, СтрокаДерева = NULL, КлючСвязи = NULL) Экспорт
Если СтрокаДерева = NULL И КлючСвязи = NULL Тогда
ПервыйВызов = Истина ;
ДокОбъект[НаименованиеТабличнойЧастиДокумента]. Очистить( ) ;
ИсточникВыборки = ДеревоЗначений. Строки;
КлючСвязи = 0 ;
Иначе
ПервыйВызов = Ложь ;
ИсточникВыборки = СтрокаДерева. Строки;
КонецЕсли ;
Для каждого Стр из ИсточникВыборки Цикл
НС = ДокОбъект[НаименованиеТабличнойЧастиДокумента]. Добавить( ) ;
Для каждого Кол из ДокОбъект. Метаданные( ) . ТабличныеЧасти[НаименованиеТабличнойЧастиДокумента]. Реквизиты Цикл
Если Кол. Имя = "КлючСвязи" Тогда
НС. КлючСвязи = КлючСвязи
ИначеЕсли Кол. Имя = "НомерСтроки" Тогда
Продолжить;
Иначе
НС[Кол. Имя] = Стр[Кол. Имя];
КонецЕсли ;
КонецЦикла ;
Если НЕ Стр. Строки. Количество( ) = 0 Тогда
ДеревоВТаблицу( ДокОбъект, , НаименованиеТабличнойЧастиДокумента, Стр, НС. НомерСтроки) ;
КонецЕсли ;
КонецЦикла ;
КонецПроцедуры
Категория:
Работа с Деревом Значений Как программно удалить все документы в базе? Код 1C v 8.х Для НомТ = 1 По Метаданные. Документы. Количество( ) Цикл
ИмяДок = Метаданные. Документы. Получить( НомТ- 1 ) . Имя;
Запрос = НОвый Запрос;
Запрос. Текст = "ВЫБРАТЬ
|Док.Ссылка КАК Док_
|ИЗ Документ." + ИмяДок + " КАК Док" ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
ДокОБ = Выборка. Док_. ПолучитьОБъект( ) ;
ДокОБ. Удалить( ) ;
КонецЦикла ;
КонецЦикла ;
Категория:
Документы Как заполнить табличную часть формы программно? Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их.
Форма имеет вид:
Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды:
Код 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 УП &НаСервере
Процедура НайтиТопливоф()
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ
| СУММА(ПродажаТоплива.Номер) КАК Номер,
| ПродажаТоплива.ТипТоплива,
| СУММА(ПродажаТоплива.Количество) КАК Количество,
| СУММА(ПродажаТоплива.СуммаСНДС) КАК СуммаСНДС
|ИЗ
| Документ.ПродажаТоплива КАК ПродажаТоплива
|ГДЕ
| ПродажаТоплива.Цена <= &Цена
|
|СГРУППИРОВАТЬ ПО
| ПродажаТоплива.ТипТоплива" ;
Запрос. УстановитьПараметр( "Цена" , Объект. Цена) ;
Результат = Запрос. Выполнить( ) ;
ВыборкаДетальныеЗаписи = Результат. Выбрать( ) ;
Объект. ТЧ. Очистить( ) ;
Пока ВыборкаДетальныеЗаписи. Следующий( ) Цикл
НовСтр = Объект. ТЧ. Добавить( ) ;
ЗаполнитьЗначенияСвойств( НовСтр, ВыборкаДетальныеЗаписи) ;
КонецЦикла ;
КонецПроцедуры
Категория:
Управляемое приложение, Тонкий клиент РеквизитФормыВЗначение() и ДанныеФормыВзначение() - Описание и примеры использования gvk2009 подробно и доходчиво описал разницу методов, за что ему огромное спасибо:
В Синтаксис-Помощнике очень скупо написано о процедуре ДанныеФормыВЗначение (), чуть побольше - о РеквизитФормыВЗначение (). И совсем нет примеров использования. Попробуем с этим разобраться.
РеквизитФормыВЗначение() Является методом управляемой формы, компилируется только &НаСервере , контекст формы является для него необходимым, поэтому компиляция &НаСервереБезКонтекста недоступна. На клиенте не работает, поскольку в результате получаем прикладной объект.
Где и когда его нужно использовать?
Метод РеквизитФормыВЗначение () необходим, если требуется из модуля формы вызвать стандартный метод объекта или метод (процедуру, функцию) из модуля объекта, из общего модуля.
Этот метод будет отрабатывать с данными, взятыми из формы, т.е. еще не записанными в базу.
Для того, чтобы измененные данные вернуть на форму, используется метод ЗначениеВРеквизитФормы().
Вторым параметром метода РеквизитФормыВЗначение является тип значения. Это необязательный параметр. Если обрабатываемый реквизит не является составным типом, то тип будет автоматически получен из реквизита формы. Иначе генерируется исключение времени выполнения.
Примеры:
Код 1C v 8.2 УП
&НаСервере
Процедура ЗаполнитьТЧПоДаннымПоследнегоДокумента(Контрагент)
ДокОбъект = РеквизитФормыВЗначение( "Объект" ) ;
ДокОбъект. ЗаполнитьТЧПоДаннымПоследнегоДокумента( Контрагент) ;
ЗначениеВРеквизитФормы( ДокОбъект, "Объект" ) ;
КонецПроцедуры
&НаСервере
Процедура ОчиститьСтрокиСПустойЦенойНаСервере()
ДокОбъект = РеквизитФормыВЗначение( "Объект" ) ;
ДокОбъект. ОчиститьСтрокиСПустойЦеной( ) ;
ЗначениеВРеквизитФормы( ДокОбъект, "Объект" ) ;
КонецПроцедуры
&НаСервере
Функция ОбъектЗаполнен()
Возврат РеквизитФормыВЗначение( "Объект" ) . ПроверитьЗаполнение( ) ;
КонецФункции
В указанных выше случаях метод РеквизитФормыВЗначение () похож на метод ПолучитьОбъект (). Разница в том, что первый получает объект, заполненный данными формы, а второй - объект с данными из базы.
ДанныеФормыВзначение() В отличие от метода управляемой формы РеквизитФормыВЗначение(), процедура глобального контекста ДанныеФормыВЗначение() может работать без контекста формы, но именно поэтому, в частности, ей необходимо указывать тип конвертируемых данных.
Обратной процедурой является ЗначениеВДанныеФормы().
Примеры:
Код 1C v 8.2 УП
&НаСервере
НаборКонстантОбъект = ДанныеФормыВЗначение( НаборКонстант, Тип( "КонстантыНабор" ) ) ;
НаборКонстантОбъект. Прочитать( ) ;
ЗначениеВДанныеФормы( НаборКонстантОбъект, НаборКонстант) ;
&НаСервере
НаборФорма = Объект. Движения. РегистрУправленческий;
Набор = ДанныеФормыВЗначение( НаборФорма, Тип( "РегистрБухгалтерииНаборЗаписей.РегистрУправленческий" ) ) ;
Если Набор. Количество( ) = 0 Тогда
Возврат ;
КонецЕсли ;
Набор. УстановитьАктивность( НЕ Набор[0 ]. Активность) ;
ЗначениеВДанныеФормы( Набор, НаборФорма) ;
В этом примере на форме отображен набор записей регистра бухгалтерии. При отработке процедуры, активность набора меняется только на форме, в базе при этом ничего не происходит. Активность у набора записей регистра в базе поменяется только после выполнения операции Записать.
Код 1C v 8.2 УП
&НаКлиенте
Процедура Заполнить(Команда)
ОснРеквизит = Объект;
ВыполнитьНаСервереБезКонтекста( ОснРеквизит) ;
КопироватьДанныеФормы( ОснРеквизит, Объект)
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ВыполнитьНаСервереБезКонтекста(ОснРеквизит)
ОбъектЗначение = ДанныеФормыВЗначение( ОснРеквизит, Тип( "ДокументОбъект.АктСверкиВзаиморасчетов" ) ) ;
ЗначениеВДанныеФормы( ОбъектЗначение, ОснРеквизит) ;
КонецПроцедуры
В этом примере на клиент возвращается ОснРеквизит, содержащий измененные данные. Но его еще нужно "запихать" в отображаемую форму. Для этого используем процедуру глобального контекста КопироватьДанныеФормы().
В большинстве случаев процедуры ДанныеФормыВзначение() и РеквизитФормыВЗначение() взаимозаменяемы. При этом РеквизитФормыВЗначение проще в использовании. Но если требуется использование &НаСервереБезКонтекста - тогда только ДанныеФормыВЗначение.
В качестве иллюстрации взаимозаменяемости Пример 2 еще в двух вариантах:
Код 1C v 8.2 УП
&НаКлиенте
Процедура Активность(Команда)
ОснРеквизитДвижения = Объект. Движения. РегистрУправленческий;
АктивностьНаСервереБезКонтекста( ОснРеквизитДвижения) ;
КопироватьДанныеФормы( ОснРеквизитДвижения, Объект. Движения. РегистрУправленческий) ;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура АктивностьНаСервереБезКонтекста(ОснРеквизитДвижения)
Набор = ДанныеФормыВЗначение( ОснРеквизитДвижения, Тип( "РегистрБухгалтерииНаборЗаписей.РегистрУправленческий" ) ) ;
Если Набор. Количество( ) = 0 Тогда
Возврат ;
КонецЕсли ;
Набор. УстановитьАктивность( НЕ Набор[0 ]. Активность) ;
ЗначениеВДанныеФормы( Набор, ОснРеквизитДвижения) ;
КонецПроцедуры
&НаСервере
Процедура АктивностьНаСервере()
НаборФорма = РеквизитФормыВЗначение( "Объект" ) ;
Набор = НаборФорма. Движения. РегистрУправленческий;
Если Набор. Количество( ) = 0 Тогда
Возврат ;
КонецЕсли ;
Набор. УстановитьАктивность( НЕ Набор[0 ]. Активность) ;
ЗначениеВРеквизитФормы( НаборФорма, "Объект" ) ;
КонецПроцедуры
Категория:
Управляемое приложение, Тонкий клиент Универсальный отчет в прикладных решениях фирмы 1С Как настроить Универсальный отчет?
Все настройки
универсального отчета описываются в процедуре
УстановитьНачальныеНастройки :
Код 1C v 8.х Процедура УстановитьНачальныеНастройки(ДополнительныеПараметры = Неопределено) Экспорт
УниверсальныйОтчет. ВариантОформления = СтандартноеОформление. Песок;
УниверсальныйОтчет. мНазваниеОтчета = СокрЛП( ЭтотОбъект. Метаданные( ) . Синоним) ;
УниверсальныйОтчет. мВыбиратьИмяРегистра = Ложь ;
УниверсальныйОтчет. ИмяРегистра = "-" ;
УниверсальныйОтчет. ОтрицательноеКрасным = Истина ;
УниверсальныйОтчет. ВыводитьОбщиеИтоги = Истина ;
УниверсальныйОтчет. ВыводитьДетальныеЗаписи = Ложь ;
УниверсальныйОтчет. мВыбиратьИспользованиеСвойств = Истина ;
ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| CRM_ПредложенияОбороты.Номенклатура КАК Номенклатура,
| ПРЕДСТАВЛЕНИЕ(CRM_ПредложенияОбороты.Номенклатура) КАК НоменклатураПредставление,
| CRM_ПредложенияОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| ПРЕДСТАВЛЕНИЕ(CRM_ПредложенияОбороты.ХарактеристикаНоменклатуры) КАК ХарактеристикаНоменклатурыПредставление,
| CRM_ПредложенияОбороты.Контрагент КАК Контрагент,
| ПРЕДСТАВЛЕНИЕ(CRM_ПредложенияОбороты.Контрагент) КАК КонтрагентПредставление,
| CRM_ПредложенияОбороты.ДокументПредложения КАК Документ,
| ПРЕДСТАВЛЕНИЕ(CRM_ПредложенияОбороты.ДокументПредложения) КАК ДокументПредставление,
| CRM_ПредложенияОбороты.ДокументПредложения.Ответственный КАК Ответственный,
| ПРЕДСТАВЛЕНИЕ(CRM_ПредложенияОбороты.ДокументПредложения.Ответственный) КАК ОтветственныйПредставление,
| CRM_ПредложенияОбороты.КоличествоОборот КАК КоличествоОборот,
| CRM_ПредложенияОбороты.СтоимостьОборот КАК СтоимостьОборот,
| 0 КАК СкидкаОборот,
| 1 КАК Количество,
| CRM_ПредложенияОбороты.СтоимостьБезСкидокОборот КАК СтоимостьБезСкидокОборот
| //ПОЛЯ_СВОЙСТВА
| //ПОЛЯ_КАТЕГОРИИ
|{ВЫБРАТЬ
| Контрагент.*,
| Номенклатура.*,
| ХарактеристикаНоменклатуры.*,
| Ответственный.*,
| Документ.*,
| КоличествоОборот,
| СтоимостьОборот,
| СкидкаОборот,
| Количество,
| (ЕСТЬNULL(ИсточникиИнформацииПриОбращении.ИсточникИнформации,ЗНАЧЕНИЕ(Справочник.ИсточникиИнформацииПриОбращенииПокупателей.ПустаяСсылка))).* КАК ИсточникИнформации
| //ПСЕВДОНИМЫ_СВОЙСТВА
| //ПСЕВДОНИМЫ_КАТЕГОРИИ
|}
|ИЗ
| РегистрНакопления.CRM_Предложения.Обороты(&ДатаНач, &ДатаКон, , ) КАК CRM_ПредложенияОбороты
|{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсточникИнформацииПриОбращении.СрезПоследних(&ДатаКон) КАК ИсточникиИнформацииПриОбращении
|ПО CRM_ПредложенияОбороты.Контрагент = ИсточникиИнформацииПриОбращении.Контрагент}
|//СОЕДИНЕНИЯ
|{ГДЕ
| CRM_ПредложенияОбороты.Контрагент.* КАК Контрагент,
| CRM_ПредложенияОбороты.Номенклатура.* КАК Номенклатура,
| CRM_ПредложенияОбороты.ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры,
| CRM_ПредложенияОбороты.ДокументПредложения.Ответственный.* КАК Ответственный,
| CRM_ПредложенияОбороты.ДокументПредложения.* КАК Документ,
| (ЕСТЬNULL(ИсточникиИнформацииПриОбращении.ИсточникИнформации,ЗНАЧЕНИЕ(Справочник.ИсточникиИнформацииПриОбращенииПокупателей.ПустаяСсылка))).* КАК ИсточникИнформации
| //УСЛОВИЯ_СВОЙСТВА
| //УСЛОВИЯ_КАТЕГОРИИ
|}
|{УПОРЯДОЧИТЬ ПО
| Контрагент.*,
| Номенклатура.*,
| ХарактеристикаНоменклатуры.*,
| Ответственный.*,
| Документ.*,
| (ЕСТЬNULL(ИсточникиИнформацииПриОбращении.ИсточникИнформации,ЗНАЧЕНИЕ(Справочник.ИсточникиИнформацииПриОбращенииПокупателей.ПустаяСсылка))).* КАК ИсточникИнформации
| //ПСЕВДОНИМЫ_СВОЙСТВА
| //ПСЕВДОНИМЫ_КАТЕГОРИИ
|}
|
|ИТОГИ
| СУММА(КоличествоОборот),
| СУММА(СтоимостьОборот),
| СУММА(СтоимостьБезСкидокОборот - СтоимостьОборот) КАК СкидкаОборот,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ(Документ)) КАК Количество
|ПО
| ОБЩИЕ
|{ИТОГИ ПО
| Контрагент.*,
| Номенклатура.*,
| ХарактеристикаНоменклатуры.*,
| Ответственный.*,
| Документ.*,
| (ЕСТЬNULL(ИсточникиИнформацииПриОбращении.ИсточникИнформации,ЗНАЧЕНИЕ(Справочник.ИсточникиИнформацииПриОбращенииПокупателей.ПустаяСсылка))).* КАК ИсточникИнформации,
| НАЧАЛОПЕРИОДА(CRM_ПредложенияОбороты.ДокументПредложения.Дата, ДЕНЬ) КАК ПериодДень,
| НАЧАЛОПЕРИОДА(CRM_ПредложенияОбороты.ДокументПредложения.Дата, НЕДЕЛЯ) КАК ПериодНеделя,
| НАЧАЛОПЕРИОДА(CRM_ПредложенияОбороты.ДокументПредложения.Дата, МЕСЯЦ) КАК ПериодМесяц,
| НАЧАЛОПЕРИОДА(CRM_ПредложенияОбороты.ДокументПредложения.Дата, КВАРТАЛ) КАК ПериодКвартал,
| НАЧАЛОПЕРИОДА(CRM_ПредложенияОбороты.ДокументПредложения.Дата, ГОД) КАК ПериодГод
| //ПСЕВДОНИМЫ_СВОЙСТВА
| //ПСЕВДОНИМЫ_КАТЕГОРИИ
|}" ;
Если УниверсальныйОтчет. ИспользоватьСвойстваИКатегории Тогда
УниверсальныйОтчет. ДобавитьСвойстваИКатегорииДляПоля( "CRM_ПредложенияОбороты.Номенклатура" , "Номенклатура" , "Номенклатура" , ПланыВидовХарактеристик. НазначенияСвойствКатегорийОбъектов. Справочник_Номенклатура) ;
УниверсальныйОтчет. ДобавитьСвойстваИКатегорииДляПоля( "CRM_ПредложенияОбороты.ХарактеристикаНоменклатуры" , "ХарактеристикаНоменклатуры" , "Характеристика номенклатуры" , ПланыВидовХарактеристик. НазначенияСвойствКатегорийОбъектов. Справочник_Номенклатура) ;
УниверсальныйОтчет. ДобавитьСвойстваИКатегорииДляПоля( "CRM_ПредложенияОбороты.Контрагент" , "Контрагент" , "Контрагент" , ПланыВидовХарактеристик. НазначенияСвойствКатегорийОбъектов. Справочник_Номенклатура) ;
УниверсальныйОтчет. ДобавитьСвойстваИКатегорииДляПоля( "CRM_ПредложенияОбороты.ДокументПредложения" , "Документ" , "Коммерческое предложение" , ПланыВидовХарактеристик. НазначенияСвойствКатегорийОбъектов. Документ_CRM_КоммерческоеПредложение) ;
УниверсальныйОтчет. ДобавитьВТекстЗапросаСвойстваИКатегории( ТекстЗапроса) ;
КонецЕсли ;
УниверсальныйОтчет. ПостроительОтчета. Текст = ТекстЗапроса;
УниверсальныйОтчет. мСтруктураПредставлениеПолей. Вставить( "ХарактеристикаНоменклатуры" , "Характеристика номенклатуры" ) ;
УниверсальныйОтчет. мСтруктураПредставлениеПолей. Вставить( "Документ" , "Коммерческое предложение" ) ;
УниверсальныйОтчет. мСтруктураПредставлениеПолей. Вставить( "ИсточникИнформации" , "Источник информации при обращении покупателя" ) ;
УниверсальныйОтчет. ДобавитьПоказатель( "Количество" , "Количество документов" , Истина , "ЧЦ = 15 ; ЧДЦ = 3" ) ;
УниверсальныйОтчет. ДобавитьПоказатель( "КоличествоОборот" , "Количество номенклатуры" , Истина , "ЧЦ = 15 ; ЧДЦ = 3" , , ) ;
УниверсальныйОтчет. ДобавитьПоказатель( "СтоимостьОборот" , "Сумма" , Истина , "ЧЦ = 15 ; ЧДЦ = 2" ) ;
УниверсальныйОтчет. ДобавитьПоказатель( "СкидкаОборот" , "Скидка" , Истина , "ЧЦ = 15 ; ЧДЦ = 2" , , ) ;
УниверсальныйОтчет. ДобавитьИзмерениеСтроки( "Контрагент" ) ;
УниверсальныйОтчет. ДобавитьИзмерениеСтроки( "Номенклатура" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Контрагент" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Номенклатура" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Ответственный" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Документ" ) ;
УниверсальныйОтчет. УстановитьПредставленияПолей( УниверсальныйОтчет. мСтруктураПредставлениеПолей, УниверсальныйОтчет. ПостроительОтчета) ;
УниверсальныйОтчет. УстановитьТипыЗначенийСвойствДляОтбора( ) ;
УниверсальныйОтчет. УстановитьНачальныеНастройки( Ложь ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Контрагент" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Номенклатура" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Ответственный" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Документ" ) ;
УниверсальныйОтчет. мСтруктураФорматаПолей. Вставить( "ДатаВыполнения" , "ДЛФ=DDT" ) ;
УниверсальныйОтчет. мСтруктураФорматаПолей. Вставить( "ДатаФактическогоВыполнения" , "ДЛФ=DDT" ) ;
УниверсальныйОтчет. мМинимальнаяШиринаКолонкиПоказатель = 10 ;
УниверсальныйОтчет. мМаксимальнаяШиринаКолонки = 80 ;
КонецПроцедуры
Как настроить условное оформление в Универсальном отчете?
Выравнивание значений влево :
Код 1C v 8.х ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "Номенклатура" , "Номенклатура" ) ;
ЭлементОформления. Область. Добавить( "Номенклатура" , "Номенклатура" , ТипОбластиОформления. Поле) ;
ЭлементОформления. Оформление. ГоризонтальноеПоложение. Значение = ГоризонтальноеПоложение. Лево;
ЭлементОформления. Оформление. ГоризонтальноеПоложение. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "ХарактеристикаНоменклатуры" , "ХарактеристикаНоменклатуры" ) ;
ЭлементОформления. Область. Добавить( "ХарактеристикаНоменклатуры" , "ХарактеристикаНоменклатуры" , ТипОбластиОформления. Поле) ;
ЭлементОформления. Оформление. ГоризонтальноеПоложение. Значение = ГоризонтальноеПоложение. Лево;
ЭлементОформления. Оформление. ГоризонтальноеПоложение. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
УниверсальныйОтчет. мМинимальнаяШиринаКолонкиПоказатель = 7 ;
УниверсальныйОтчет. мМаксимальнаяШиринаКолонки = 50 ;
Изменение цвета текста и т.д.
Код 1C v 8.х
ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "ТребуетсяЗаказать" , "Требуется заказать" ) ;
ЭлементОформления. Область. Добавить( "Состояние" , "Состояние" , ТипОбластиОформления. Поле) ;
ЭлементОтбора = ЭлементОформления. Отбор. Добавить( "Состояние" ) ;
ЭлементОтбора. ВидСравнения = ВидСравнения. Равно;
ЭлементОтбора. Значение = 0 ;
ЭлементОтбора. Использование = Истина ;
ЭлементОформления. Оформление. ЦветТекста. Значение = WebЦвета. Красный;
ЭлементОформления. Оформление. ЦветТекста. Использование = Истина ;
ЭлементОформления. Оформление. Текст. Значение = "Требуется заказать" ;
ЭлементОформления. Оформление. Текст. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "РекомендуетсяЗаказать" , "Рекомендуется заказать" ) ;
ЭлементОформления. Область. Добавить( "Состояние" , "Состояние" , ТипОбластиОформления. Поле) ;
ЭлементОтбора = ЭлементОформления. Отбор. Добавить( "Состояние" ) ;
ЭлементОтбора. ВидСравнения = ВидСравнения. Равно;
ЭлементОтбора. Значение = 1 ;
ЭлементОтбора. Использование = Истина ;
ЭлементОформления. Оформление. ЦветТекста. Значение = WebЦвета. Коричневый;
ЭлементОформления. Оформление. ЦветТекста. Использование = Истина ;
ЭлементОформления. Оформление. Текст. Значение = "Рекомендуется заказать" ;
ЭлементОформления. Оформление. Текст. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "НеТребуетсяЗаказывать" , "Не требуется заказывать" ) ;
ЭлементОформления. Область. Добавить( "Состояние" , "Состояние" , ТипОбластиОформления. Поле) ;
ЭлементОтбора = ЭлементОформления. Отбор. Добавить( "Состояние" ) ;
ЭлементОтбора. ВидСравнения = ВидСравнения. Равно;
ЭлементОтбора. Значение = 2 ;
ЭлементОтбора. Использование = Истина ;
ЭлементОформления. Оформление. ЦветТекста. Значение = WebЦвета. Зеленый;
ЭлементОформления. Оформление. ЦветТекста. Использование = Истина ;
ЭлементОформления. Оформление. Текст. Значение = "Не требуется заказывать" ;
ЭлементОформления. Оформление. Текст. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "ЗонаПоСумме" , "Зона По Сумме" ) ;
ЭлементОформления. Область. Добавить( "ЗонаПоСумме" , "ЗонаПоСумме" , ТипОбластиОформления. Поле) ;
ЭлементОтбора = ЭлементОформления. Отбор. Добавить( "ЗонаПоСумме" ) ;
ЭлементОтбора. ВидСравнения = ВидСравнения. Равно;
ЭлементОтбора. Значение = "крас" ;
ЭлементОтбора. Использование = Истина ;
ЭлементОформления. Оформление. ЦветФона. Значение = WebЦвета. Красный;
ЭлементОформления. Оформление. ЦветФона. Использование = Истина ;
ЭлементОформления. Оформление. Текст. Значение = "" ;
ЭлементОформления. Оформление. Текст. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "ЗонаПоСумме" , "Зона По Сумме" ) ;
ЭлементОформления. Область. Добавить( "ЗонаПоСумме" , "ЗонаПоСумме" , ТипОбластиОформления. Поле) ;
ЭлементОтбора = ЭлементОформления. Отбор. Добавить( "ЗонаПоСумме" ) ;
ЭлементОтбора. ВидСравнения = ВидСравнения. Равно;
ЭлементОтбора. Значение = "зелн" ;
ЭлементОтбора. Использование = Истина ;
ЭлементОформления. Оформление. ЦветТекста. Значение = WebЦвета. Зеленый;
ЭлементОформления. Оформление. ЦветТекста. Использование = Истина ;
ЭлементОформления. Оформление. Шрифт. Значение = Новый Шрифт( , , Истина ) ;
ЭлементОформления. Оформление. Шрифт. Использование = Истина ;
ЭлементОформления. Оформление. Текст. Значение = "|||||||||||||||||" ;
ЭлементОформления. Оформление. Текст. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
Для типа «Дата»:
Код 1C v 8.х ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "ДатаЗаписи" , "Дата записи" ) ;
ЭлементОформления. Область. Добавить( "ДатаЗаписи" , "Дата записи" , ТипОбластиОформления. Поле) ;
ЭлементОформления. Оформление. Формат. Значение = "ДФ=dd.MM.yyyy" ;
ЭлементОформления. Оформление. Формат. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
Для типа «Булево»:
Код 1C v 8.х ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "Печать" , "Печать" ) ;
ЭлементОформления. Область. Добавить( "Печать" , "Печать" , ТипОбластиОформления. Поле) ;
ЭлементОформления. Оформление. ГоризонтальноеПоложение. Значение = ГоризонтальноеПоложение. Центр;
ЭлементОформления. Оформление. Формат. Значение = «БЛ= Нет; БИ= Напечатан»;
ЭлементОформления. Оформление. ГоризонтальноеПоложение. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
Категория:
Прочие вопросы Изменить значение реквизита документа Код 1C v 8.х
ДокОбъект = СсылкаНаДокумент. ПолучитьОбъект( ) ;
ДокОбъект. Ответственный = глТекущийПользователь;
ДокОбъект. Комментарий = "Исправление от " + Строка( ТекущаяДата( ) ) ;
ДокОбъект. Записать( ) ;
Категория:
Документы