Синтаксический анализ JSON - выражения средствами 1С 7.7 Код 1C v 7.x
Перем Л_Лев_Фиг_Скобка, Л_Прав_Фиг_Скобка, Л_Лев_Кв_Скобка, Л_Прав_Кв_Скобка, Л_Кавычка, Л_Экран, Л_Двоеточие, Л_Запятая, Л_Число, Л_Строка, Л_Константа, Л_Финиш;
Перем Цифры1 _9, Цифры0 _9, ПервыеСимволыКонстант, ОдносимвольныеЛексемы;
Перем НомЛексемы, ТекЛексема;
Перем JSON_Error;
Перем В_Массив, В_Объект, В_Значение;
Перем НомерСимвола;
Перем ФлагОшибки;
Перем СписокСтроковыхКонстант;
Перем СтекЛексем;
Перем АнализируемаяСтрока;
Перем ТекКаталог, ТекФайл;
Функция ПолучитьОбъект_ТЗ() Далее
Функция ПолучитьМассив_ТЗ() Далее
Функция ТекущиеСимволы(Сколько)
Возврат Сред( АнализируемаяСтрока, НомерСимвола, Сколько) ;
КонецФункции
Функция ПрошлыйСимвол(Сдвиг)
Возврат Сред( АнализируемаяСтрока, НомерСимвола - Сдвиг, 1 ) ;
КонецФункции
Процедура ДобавитьЛексему(Лексема, Значение, Сдвиг)
СтекЛексем. НоваяСтрока( ) ;
СтекЛексем. Лексема = Лексема;
СтекЛексем. Значение = Значение;
НомерСимвола = НомерСимвола + Сдвиг;
КонецПроцедуры
Процедура ОбвестиОбласть(Обл)
Обл. РамкаСнизу( 1 ) ;
Обл. РамкаСверху( 1 ) ;
Обл. РамкаСлева( 1 ) ;
Обл. РамкаСправа( 1 ) ;
КонецПроцедуры
Процедура НапечататьТЗ(Таб, ТЗ, НомС, НомК)
Перем Тип, Обл1 , НС, КС, Ключ, Зн, Обл2 ;
Тип = ТЗ. ПолучитьЗначение( 1 , 1 ) ;
НомС = НомС + 1 ;
Обл1 = Таб. Область( НомС, НомК) ;
ОбвестиОбласть( Обл1 ) ;
Если Тип = В_Значение Тогда
ТипЗн = ТЗ. ПолучитьЗначение( 2 , 1 ) ;
Обл1 . Текст = ТЗ. ПолучитьЗначение( 2 , 2 ) ;
Обл1 . ГоризонтальноеПоложение( 1 ) ;
Если ТипЗн = Л_Число Тогда
Обл1 . ГоризонтальноеПоложение( 2 ) ;
ИначеЕсли ТипЗн = Л_Константа Тогда
Обл1 . Полужирный( 1 ) ;
ИначеЕсли ТипЗн = Л_Строка Тогда
Обл1 . Контроль( 4 ) ;
КонецЕсли ;
Возврат ;
ИначеЕсли ( Тип = В_Объект) Или ( Тип = В_Массив) Тогда
Обл1 . Текст = Тип;
Обл1 . Полужирный( 1 ) ;
Обл1 . ЦветФона( 12648447 ) ;
Обл1 . РамкаСнизу( 5 ) ;
КС = ТЗ. КоличествоСтрок( ) ;
Для НС = 2 По КС Цикл
НомС = НомС + 1 ;
Обл2 = Таб. Область( НомС, НомК) ;
Обл2 . Текст = ТЗ. ПолучитьЗначение( НС, 1 ) ;
Если Тип = В_Массив Тогда
Обл2 . ГоризонтальноеПоложение( 2 ) ;
КонецЕсли ;
ОбвестиОбласть( Обл2 ) ;
НомС = НомС - 1 ;
НапечататьТЗ( Таб, ТЗ. ПолучитьЗначение( НС, 2 ) , НомС, НомК + 1 ) ;
КонецЦикла ;
Иначе
Сообщить( "Фигня " + Тип, "!" ) ;
КонецЕсли ;
КонецПроцедуры
Процедура ВыравнятьТЗ(Таб, ОграничениеШирины)
Перем НомерКол, НомерСтр, МаксШирина, Обл, ТекШирина, ТекДлина;
Для НомерКол = 1 По Таб. ШиринаТаблицы( ) Цикл
МаксШирина = 0 ;
Для НомерСтр = 1 По Таб. ВысотаТаблицы( ) Цикл
Обл = Таб. Область( НомерСтр, НомерКол) ;
ТекШирина = Обл. ШиринаСтолбца( ) ;
ТекДлина = СтрДлина( СокрЛП( Обл. Текст) ) ;
МаксШирина = Макс( МаксШирина, ТекШирина, ТекДлина) ;
КонецЦикла ;
Таб. Область( , НомерКол) . ШиринаСтолбца( Мин( МаксШирина, ОграничениеШирины) ) ;
КонецЦикла ;
КонецПроцедуры
Процедура Напечатать_ТЗ(ТЗ)
Перем Таб, НС, НК, МаксШирина, ТекДлина, Обл;
Таб = СоздатьОбъект( "Таблица" ) ;
МаксНК = 1 ;
НС = 0 ;
НК = 1 ;
НапечататьТЗ( Таб, ТЗ, НС, НК) ;
ВыравнятьТЗ( Таб, 30 ) ;
Таб. Область( 1 , 1 , Таб. ВысотаТаблицы( ) , Таб. ШиринаТаблицы( ) ) . ВертикальноеПоложение( 2 ) ;
Таб. Опции( 0 , 0 ) ;
Таб. Показать( "JSON" ) ;
КонецПроцедуры
Функция Ошибка()
ФлагОшибки = 1 ;
Возврат 0 ;
КонецФункции
Функция ЧитатьКонстанту(ПервСимвол)
Перем КонстантаСтр, ДлинаКонстанты;
КонстантаСтр = СписокСтроковыхКонстант. Получить( ПервСимвол) ;
ДлинаКонстанты = СтрДлина( КонстантаСтр) ;
Если ТекущиеСимволы( ДлинаКонстанты) = КонстантаСтр Тогда
ДобавитьЛексему( Л_Константа, КонстантаСтр, ДлинаКонстанты) ;
Возврат 1 ;
Иначе
Возврат Ошибка( ) ;
КонецЕсли ;
КонецФункции
Процедура ДописатьСимвол(Стр)
Стр = Стр + ТекущиеСимволы( 1 ) ;
НомерСимвола = НомерСимвола + 1 ;
КонецПроцедуры
Функция ЧитатьЧисло()
Перем ЧислоСтр;
ЧислоСтр = "" ;
Если ТекущиеСимволы( 1 ) = "-" Тогда
ДописатьСимвол( ЧислоСтр) ;
КонецЕсли ;
Если Найти( Цифры1 _9, ТекущиеСимволы( 1 ) ) > 0 Тогда
ДописатьСимвол( ЧислоСтр) ;
Пока Найти( Цифры0 _9, ТекущиеСимволы( 1 ) ) > 0 Цикл
ДописатьСимвол( ЧислоСтр) ;
КонецЦикла ;
ИначеЕсли ТекущиеСимволы( 1 ) = "0" Тогда
ДописатьСимвол( ЧислоСтр) ;
Иначе
Возврат Ошибка( ) ;
КонецЕсли ;
Если ТекущиеСимволы( 1 ) = "." Тогда
ДописатьСимвол( ЧислоСтр) ;
Пока Найти( Цифры0 _9, ТекущиеСимволы( 1 ) ) > 0 Цикл
ДописатьСимвол( ЧислоСтр) ;
КонецЦикла ;
КонецЕсли ;
Если ВРег( ТекущиеСимволы( 1 ) ) = "E" Тогда
ДописатьСимвол( ЧислоСтр) ;
Если Найти( "+-" , ТекущиеСимволы( 1 ) ) > 0 Тогда
ДописатьСимвол( ЧислоСтр) ;
КонецЕсли ;
Пока Найти( Цифры0 _9, ТекущиеСимволы( 1 ) ) > 0 Цикл
ДописатьСимвол( ЧислоСтр) ;
КонецЦикла ;
КонецЕсли ;
ДобавитьЛексему( Л_Число, ЧислоСтр, 0 ) ;
Возврат 1 ;
КонецФункции
Функция ЧитатьСтроку()
Перем СтрокаСтр;
СтрокаСтр = "" ;
НомерСимвола = НомерСимвола + 1 ;
Пока ( ТекущиеСимволы( 1 ) < > Л_Кавычка) Или ( ( ТекущиеСимволы( 1 ) = Л_Кавычка) И ( ПрошлыйСимвол( 1 ) = Л_Экран) И ( ПрошлыйСимвол( 2 ) < > Л_Экран) ) Цикл
ДописатьСимвол( СтрокаСтр) ;
КонецЦикла ;
ДобавитьЛексему( Л_Строка, СтрокаСтр, 1 ) ;
Возврат 1 ;
КонецФункции
Функция ПрочитатьФайл(ИмяФайла)
Перем Т, НомерСтрокиФайла, СтрокаРез;
Т = СоздатьОбъект( "Текст" ) ;
Т. Открыть( ИмяФайла) ;
СтрокаРез = "" ;
Для НомерСтрокиФайла = 1 По Т. КоличествоСтрок( ) Цикл
СтрокаРез = СтрокаРез + Т. ПолучитьСтроку( НомерСтрокиФайла) ;
КонецЦикла ;
Возврат СтрокаРез;
КонецФункции
Функция СледующаяЛексема()
НомЛексемы = НомЛексемы + 1 ;
СтекЛексем. ПолучитьСтрокуПоНомеру( НомЛексемы) ;
ТекЛексема = СтекЛексем. Лексема;
Возврат 1 ;
КонецФункции
Функция ОшибкаЛексемы()
Перем РезСтр, НомСтр, ТЛ, ТС;
Сообщить( "Ошибочная лексема № " + НомЛексемы + " : <" + ТекЛексема + ">" , "!" ) ;
РезСтр = "" ;
Для НомСтр = НомЛексемы + 1 По СтекЛексем. КоличествоСтрок( ) Цикл
СтекЛексем. ПолучитьСтрокуПоНомеру( НомСтр) ;
ТЛ = СтекЛексем. Лексема;
Если ТЛ = Л_Строка Тогда
ТС = "<" + ТЛ + "(" + СтекЛексем. Значение + ")>" ;
ИначеЕсли ТЛ = Л_Константа Тогда
ТС = "<" + ТЛ + "(" + СтекЛексем. Значение + ")>" ;
Иначе
ТС = "<" + ТЛ + ">" ;
КонецЕсли ;
РезСтр = РезСтр + ТС + "," ;
КонецЦикла ;
Сообщить( Лев( РезСтр, 400 ) , "!" ) ;
Возврат 0 ;
КонецФункции
Процедура ДобавитьПару(ТЗ, Ключ, Значение)
ТЗ. НоваяСтрока( ) ;
ТЗ. Ключ = Ключ;
ТЗ. Значение = Значение;
КонецПроцедуры
Функция НоваяТЗ(Тип)
Перем _ТЗ;
_ТЗ = СоздатьОбъект( "ТаблицаЗначений" ) ;
_ТЗ. НоваяКолонка( "Ключ" ) ;
_ТЗ. НоваяКолонка( "Значение" ) ;
ДобавитьПару( _ТЗ, Тип, "" ) ;
Возврат _ТЗ;
КонецФункции
Функция ПолучитьПроизвольноеЗначение_ТЗ()
Перем ТЗ;
Если ( ТекЛексема = Л_Строка) Или ( ТекЛексема = Л_Число) Или ( ТекЛексема = Л_Константа) Тогда
ТЗ = НоваяТЗ( В_Значение) ;
ДобавитьПару( ТЗ, ТекЛексема, СтекЛексем. Значение) ;
СледующаяЛексема( ) ;
Возврат ТЗ;
ИначеЕсли ТекЛексема = Л_Лев_Фиг_Скобка Тогда
Возврат ПолучитьОбъект_ТЗ( ) ;
ИначеЕсли ТекЛексема = Л_Лев_Кв_Скобка Тогда
Возврат ПолучитьМассив_ТЗ( ) ;
КонецЕсли ;
Возврат ОшибкаЛексемы( ) ;
КонецФункции
Функция ДобавитьКлючЗначение(ТЗ)
Перем НовКлюч, НовЗначение;
Если ТекЛексема < > Л_Строка Тогда
Возврат 0 ;
КонецЕсли ;
НовКлюч = СтекЛексем. Значение;
СледующаяЛексема( ) ;
Если ТекЛексема < > Л_Двоеточие Тогда
Возврат ОшибкаЛексемы( ) ;
КонецЕсли ;
СледующаяЛексема( ) ;
НовЗначение = ПолучитьПроизвольноеЗначение_ТЗ( ) ;
Если НовЗначение = 0 Тогда
Возврат 0 ;
КонецЕсли ;
ДобавитьПару( ТЗ, НовКлюч, НовЗначение) ;
Возврат 1 ;
КонецФункции
Функция ПолучитьОбъект_ТЗ()
Перем ТЗ;
ТЗ = НоваяТЗ( В_Объект) ;
СледующаяЛексема( ) ;
Если ТекЛексема = Л_Прав_Фиг_Скобка Тогда
СледующаяЛексема( ) ;
Возврат ТЗ;
КонецЕсли ;
Если ДобавитьКлючЗначение( ТЗ) = 0 Тогда
Возврат 0 ;
КонецЕсли ;
Пока ТекЛексема = Л_Запятая Цикл
СледующаяЛексема( ) ;
Если ДобавитьКлючЗначение( ТЗ) = 0 Тогда
Возврат 0 ;
КонецЕсли ;
КонецЦикла ;
Если ТекЛексема = Л_Прав_Фиг_Скобка Тогда
СледующаяЛексема( ) ;
Возврат ТЗ;
КонецЕсли ;
Возврат 0 ;
КонецФункции
Функция ПолучитьМассив_ТЗ()
Перем ТЗ, _Ключ, _Значение;
ТЗ = НоваяТЗ( В_Массив) ;
СледующаяЛексема( ) ;
Если ТекЛексема = Л_Прав_Кв_Скобка Тогда
СледующаяЛексема( ) ;
Возврат ТЗ;
КонецЕсли ;
_Значение = ПолучитьПроизвольноеЗначение_ТЗ( ) ;
Если _Значение = 0 Тогда
Возврат 0 ;
КонецЕсли ;
_Ключ = 0 ;
ДобавитьПару( ТЗ, _Ключ, _Значение) ;
Пока ТекЛексема = Л_Запятая Цикл
СледующаяЛексема( ) ;
_Значение = ПолучитьПроизвольноеЗначение_ТЗ( ) ;
Если _Значение = 0 Тогда
Возврат 0 ;
КонецЕсли ;
_Ключ = _Ключ + 1 ;
ДобавитьПару( ТЗ, _Ключ, _Значение) ;
КонецЦикла ;
Если ТекЛексема = Л_Прав_Кв_Скобка Тогда
СледующаяЛексема( ) ;
Возврат ТЗ;
КонецЕсли ;
Возврат 0 ;
КонецФункции
Функция ПрочитатьОбъект_ТЗ()
Перем Рез;
НомЛексемы = 0 ;
СледующаяЛексема( ) ;
Если ТекЛексема = Л_Лев_Фиг_Скобка Тогда
Рез = ПолучитьОбъект_ТЗ( ) ;
ИначеЕсли ТекЛексема = Л_Лев_Кв_Скобка Тогда
Рез = ПолучитьМассив_ТЗ( ) ;
Иначе
Рез = ПолучитьПроизвольноеЗначение_ТЗ( ) ;
КонецЕсли ;
Если ( Рез = 0 ) Или ( ТекЛексема < > Л_Финиш) Тогда
ОшибкаЛексемы( ) ;
Возврат 0 ;
КонецЕсли ;
Возврат Рез;
КонецФункции
Функция СгенерироватьТЗ(НачАнализируемаяСтрока)
Перем НачальныйСимвол, Рез;
АнализируемаяСтрока = НачАнализируемаяСтрока;
СтекЛексем = СоздатьОбъект( "ТаблицаЗначений" ) ;
СтекЛексем. НоваяКолонка( "Лексема" , "Строка" ) ;
СтекЛексем. НоваяКолонка( "Значение" , "Строка" ) ;
ФлагОшибки = 0 ;
НомерСимвола = 1 ;
Пока НомерСимвола < = СтрДлина( АнализируемаяСтрока) Цикл
НачальныйСимвол = ТекущиеСимволы( 1 ) ;
Если Найти( " " + Симв( 9 ) , НачальныйСимвол) > 0 Тогда
НомерСимвола = НомерСимвола + 1 ;
ИначеЕсли НачальныйСимвол = Л_Кавычка Тогда
ЧитатьСтроку( ) ;
ИначеЕсли Найти( ОдносимвольныеЛексемы, НачальныйСимвол) > 0 Тогда
ДобавитьЛексему( НачальныйСимвол, "" , 1 ) ;
ИначеЕсли Найти( ПервыеСимволыКонстант, НачальныйСимвол) > 0 Тогда
Если ЧитатьКонстанту( НачальныйСимвол) = 0 Тогда
Прервать;
КонецЕсли ;
ИначеЕсли Найти( "-" + Цифры0 _9, НачальныйСимвол) > 0 Тогда
Если ЧитатьЧисло( ) = 0 Тогда
Прервать;
КонецЕсли ;
Иначе
Сообщить( "========= " + НомерСимвола, "!" ) ;
Сообщить( НачальныйСимвол, "!" ) ;
Сообщить( "<" + НачальныйСимвол + "> " + КодСимв( НачальныйСимвол) , "!" ) ;
Сообщить( ТекущиеСимволы( 100 ) , "!" ) ;
Возврат 0 ;
КонецЕсли ;
КонецЦикла ;
Если ФлагОшибки < > 0 Тогда
Сообщить( "Ошибка парсинга JSON - выражения" , "!" ) ;
Возврат 0 ;
ИначеЕсли СтекЛексем. КоличествоСтрок( ) = 0 Тогда
Сообщить( "Пустой стек" , "!" ) ;
Возврат 0 ;
КонецЕсли ;
ДобавитьЛексему( Л_Финиш, "" , 0 ) ;
Возврат ПрочитатьОбъект_ТЗ( ) ;
КонецФункции
Функция JSON_Error(Стр = "" )
Если Стр < > "" Тогда
Сообщить( "JSON-ОШИБКА: " + Стр, "!" ) ;
КонецЕсли ;
Возврат JSON_Error;
КонецФункции
Функция JSON_Type(Парам)
Если ТипЗначенияСтр( Парам) < > "ТаблицаЗначений" Тогда
Возврат JSON_Error( ) ;
ИначеЕсли Парам. КоличествоКолонок( ) < > 2 Тогда
Возврат JSON_Error( ) ;
ИначеЕсли Парам. КоличествоСтрок( ) < 2 Тогда
Возврат JSON_Error( ) ;
КонецЕсли ;
Возврат Парам. ПолучитьЗначение( 1 , 1 ) ;
КонецФункции
Функция JSON_GetValue(Парам, Keys)
Перем Тип, До, После, ПозЗакр, Л1 , П2 , Инд, ИндСтр, НС, КвоСтрок;
Тип = JSON_Type( Парам) ;
ПозЗакр = Найти( Keys, "]" ) ;
Если ПозЗакр = 0 Тогда
ПозЗакр = СтрДлина( Keys) + 1 ;
КонецЕсли ;
До = Лев( Keys, ПозЗакр) ;
После = Сред( Keys, ПозЗакр + 1 ) ;
Л1 = Лев( До, 1 ) ;
П2 = Найти( До, "]" ) ;
Если Тип = JSON_Error Тогда
Возврат JSON_Error( "Параметра" ) ;
КонецЕсли ;
КвоСтрок = Парам. КоличествоСтрок( ) ;
Если До = "" Тогда
Если ( Тип = В_Массив) Или ( Тип = В_Объект) Тогда
Возврат JSON_Error( ) ;
ИначеЕсли Тип = В_Значение Тогда
Возврат Парам. ПолучитьЗначение( 2 , 2 ) ;
Иначе
Возврат JSON_Error( "№ 1" ) ;
КонецЕсли ;
ИначеЕсли До = ".length" Тогда
Если ( Тип = В_Массив) Или ( Тип = В_Объект) Тогда
Возврат Парам. КоличествоСтрок( ) - 1 ;
Иначе
Возврат JSON_Error( "Длина скаляра" ) ;
КонецЕсли ;
ИначеЕсли Л1 = "[" Тогда
Если П2 = 0 Тогда
Возврат JSON_Error( "Индексация: <" + До + ">" ) ;
КонецЕсли ;
Инд = Сред( До, 2 , П2 - 2 ) ;
Если ( Найти( "'"" " , Лев( Инд, 1 ) ) > 0 ) И ( Найти( "'"" " , Прав( Инд, 1 ) ) > 0 ) Тогда
ИндСтр = Сред( Инд, 2 , СтрДлина( Инд) - 2 ) ;
Если Тип < > В_Объект Тогда
Возврат JSON_Error( "Строковый индекс <" + ИндСтр + "> только для Объекта" ) ;
КонецЕсли ;
НС = 0 ;
Если Парам. НайтиЗначение( ИндСтр, НС, 1 ) = 1 Тогда
Возврат JSON_GetValue( Парам. ПолучитьЗначение( НС, 2 ) , После) ;
КонецЕсли ;
Возврат JSON_Error( "Нет индекса <" + ИндСтр + ">" ) ;
КонецЕсли ;
ИндЧис = 0 + Инд;
Если "" + ИндЧис < > Инд Тогда
Возврат JSON_Error( "Ошибка 1 числового индекса <" + Инд + ">" ) ;
ИначеЕсли Цел( ИндЧис) < > ИндЧис Тогда
Возврат JSON_Error( "Ошибка 2 числового индекса <" + Инд + "> (нецелый)" ) ;
ИначеЕсли ИндЧис < 0 Тогда
Возврат JSON_Error( "Ошибка 3 числового индекса <" + Инд + "> (отрицательный)" ) ;
ИначеЕсли ИндЧис > ( КвоСтрок - 2 ) Тогда
Возврат JSON_Error( "Ошибка 4 числового индекса <" + Инд + "> (" + ИндЧис + ">" + ( КвоСтрок - 2 ) + ")" ) ;
КонецЕсли ;
Возврат JSON_GetValue( Парам. ПолучитьЗначение( ИндЧис + 1 , 2 ) , После) ;
Иначе
Возврат JSON_Error( "Ошибка 5 <" + До + ">" ) ;
КонецЕсли ;
КонецФункции
Процедура ПриОткрытии()
Перем Рез1 , ТипУзла1 , Зн1 , Значение;
ОчиститьОкноСообщений( ) ;
СтатусВозврата( 0 ) ;
Рез1 = СгенерироватьТЗ( ПрочитатьФайл( ТекКаталог + "j1.json" ) ) ;
Напечатать_ТЗ( Рез1 ) ;
ТипУзла1 = JSON_Type( Рез1 ) ;
Сообщить( "Тип узла: " + ТипУзла1 ) ;
Зн1 = JSON_GetValue( Рез1 , ".length" ) ; Сообщить( "1) Размер: " + Зн1 ) ;
Зн3 = JSON_GetValue( Рез1 , "['1']" ) ; Сообщить( "3) ['1']: <" + Зн3 + ">" ) ;
Зн4 = JSON_GetValue( Рез1 , "[1]" ) ; Сообщить( "4) [1]: <" + Зн4 + ">" ) ;
Зн5 = JSON_GetValue( Рез1 , "['Массив'][6]" ) ; Сообщить( "5) [*]: <" + Зн5 + ">" ) ;
Зн6 = JSON_GetValue( Рез1 , "['Соответствие']['ДопустимоеИмяСвойства']" ) ; Сообщить( "6) [*]: <" + Зн6 + ">" ) ;
КонецПроцедуры
Процедура ДобавитьСтроковуюКонстанту(КонстантаСтр)
Перем ПервыйСимвол;
ПервыйСимвол = Лев( КонстантаСтр, 1 ) ;
ПервыеСимволыКонстант = ПервыеСимволыКонстант + ПервыйСимвол;
СписокСтроковыхКонстант. Установить( ПервыйСимвол, КонстантаСтр) ;
КонецПроцедуры
РасположениеФайла( ТекКаталог, ТекФайл) ;
Л_Лев_Фиг_Скобка = "{" ;
Л_Прав_Фиг_Скобка = "}" ;
Л_Лев_Кв_Скобка = "[" ;
Л_Прав_Кв_Скобка = "]" ;
Л_Двоеточие = ":" ;
Л_Запятая = "," ;
Л_Экран = "\" ;
Л_Кавычка = """ " ;
Л_Финиш = "" ;
Л_Число = "number" ;
Л_Строка = "string" ;
Л_Константа = "const" ;
ОдносимвольныеЛексемы = Л_Лев_Фиг_Скобка + Л_Прав_Фиг_Скобка + Л_Лев_Кв_Скобка + Л_Прав_Кв_Скобка + Л_Двоеточие + Л_Запятая;
Цифры1 _9 = "123456789" ;
Цифры0 _9 = "0" + Цифры1 _9;
В_Массив = "###array" ;
В_Объект = "###object" ;
В_Значение = "###value" ;
СписокСтроковыхКонстант = СоздатьОбъект( "СписокЗначений" ) ;
ПервыеСимволыКонстант = "" ;
ДобавитьСтроковуюКонстанту( "null" ) ;
ДобавитьСтроковуюКонстанту( "false" ) ;
ДобавитьСтроковуюКонстанту( "true" ) ;
JSON_Error = "ERROR" ;
В качестве примера взят файл j1.json :
{
"999": 88,
"Null": null,
"Сэкраном": "\"",
"Ложь": false,
"ОдинСимв": "1",
"1": "11111",
"Пустышка": "",
"Истина": true,
"Число (плавающая точка)": 1.001e-2,
"Число (плавающая)": -1.001e-2,
"Число (фиксированная точка)": -1000.001,
"Дата": "2011-01-01T12:00:00Z",
"Строка (двойная кавычка)": "Двойная кавычка",
"Строка (одинарная кавычка)": "Одинарная кавычка",
"Маскируемые символы": " \\ \/ \b \t \n \f \r \" ",
"Заковыристая строка": "\\n\\",
"Проблемные символы": "Спец. символы: \u0000, \u0001, \u0002, ... , \u001e, \u001f; Юникод символы: \u0421\u0430\u0448\u0430\u0020\u003a\u0029",
"Кириллические символы": "’АБВГҐДЂЃЕ?ЁЄЖЗЅИ?ІЇЙЈКЛЉМНЊОПРСТЋЌУЎФХЦЧЏШЩЪЫЬЭЮЯ",
"Идентификатор": "a763cfbb-f94f-4c67-8e13-0e96a3a7f353",
"Пустой массив": [],
"Пустой объект": {},
"Массив": [
null,
false,
true,
1.001e-2,
-1000.001,
"2011-01-01T12:00:00Z",
"Двойная кавычка",
"Одинарная кавычка",
"a763cfbb-f94f-4c67-8e13-0e96a3a7f353",
[
"Первый элемент",
"Второй элемент"
],
{
"Имя": "Александр",
"Отчество": "Владимирович",
"Фамилия": "Переверзев"
},
{
"ДопустимоеИмяСвойства": true,
"Недопустимое Имя Свойства": false
}
],
"Структура":
{
"Имя": "Александр",
"Отчество": "Владимирович",
"Фамилия": "Переверзев"
},
"Соответствие":
{
"ДопустимоеИмяСвойства": true,
"Недопустимое Имя Свойства": false
},
"Ссылка":
{
"Ссылка": "00000000-0000-0000-0000-000000000000",
"Представление": "Неизвестная ссылка"
},
"COMSafeArray": [
0,
1,
2,
3,
4,
5
]
}
Категория:
HTML, JS, VML Универсальный отчет, построитель отчета - установить условное оформление При разработке в универсальном отчете потребовалось установить условное оформление в отчете - подсветку сумм красным при условии больше 0
В конце процедуры УстановитьНачальныеНастройки() добавить:
Код 1C v 8.х
УФ = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление;
УФ. Очистить( ) ;
ЭлемУслОформл = УФ. Добавить( "ИтогоПросрочено" ) ;
ЭлемУслОформл. Использование = Истина ;
ЭлемОбласти = ЭлемУслОформл. Область. Добавить( "ИтогоПросрочено" ) ;
ЭлемОтбора = ЭлемУслОформл. Отбор. Добавить( "ИтогоПросрочено" ) ;
ЭлемОтбора. ВидСравнения = ВидСравнения. Больше;
ЭлемОтбора. Значение = 0 ;
ЭлемОтбора. Использование = Истина ;
ЭлемУслОформл. Оформление. ЦветФона. Значение = WebЦвета. Лосось;
ЭлемУслОформл. Оформление. ЦветФона. Использование = Истина ;
Категория:
Прочие вопросы Как программно изменить текст, цвет, фон ячейки или области табличного документа? Ниже приведено несколько полезных шаблонов кода по работе с табличным документом:
Код 1C v 8.х
ПолеТабДок = ЭлементыФормы. тдПолеТабличногоДокумента;
ПолеТабДок. Область( "R1C2" ) . Текст = спрНоменклатура. Наименование;
ПолеТабДок. Область( "R2C2" ) . Текст = "Это Строка" ;
Код 1C v 8.х
Для а = 11 по ТабличныйДокумент. ВысотаТаблицы Цикл
текстЯчейка = ТабличныйДокумент. Область( "R" + а+ "C2" ) . Текст;
Если Строка( ТабличныйДокумент. Область( "R" + а+ "C2" ) . ЦветФона) = "стиль: Фон кнопки" Тогда
ТабличныйДокумент. Область( "R" + а+ "C7" ) . Текст= "" ;
ТабличныйДокумент. Область( "R" + а+ "C11" ) . Текст= "" ;
ТабличныйДокумент. Область( "R" + а+ "C8" ) . Текст= "" ;
ТабличныйДокумент. Область( "R" + а+ "C9" ) . Текст= "" ;
ТабличныйДокумент. Область( "R" + а+ "C10" ) . Текст= "" ;
КонецЕсли ;
КонецЦикла ;
Код 1C v 8.х
ТабДок = ЭлементыФормы. ПолеТабличногоДокумента;
ТабДок. Очистить( ) ;
Макет = ПолучитьМакет( "Макет" ) ;
ОбластьСтрокаТаб = Макет. ПолучитьОбласть( "СтрокаТаб" ) ;
ОбластьСтрокаТаб. Параметры. НашПараметр = 1 ;
ОбластьОформления = ТабДок. Вывести( ОбластьСтрокаТаб) ;
ТабДок. Область( ОбластьОформления. Верх, ОбластьОформления. Лево, ОбластьОформления. Низ, ОбластьОформления. Лево) . ЦветФона = WebЦвета. Красный;
Код 1C v 8.х //Пример изменения цвета текста при выводе данных в табличный документ
Таб.ВывестиСекцию("Контрагент");
// Изменим Текст ячейки, имя которой заранее задали как "ТекстОСостоянии"
Таб.Область("ТекстОСостоянии").Текст = "Хорошо ";
// В зависимости от условия изменим Цвет Текста
Если Раз<0 Тогда
Таб.Область(Таб.ВысотаТаблицы(),9,Таб.ВысотаТаблицы(),9).ЦветТекста(255,0,0);
ИначеЕсли Раз>0 Тогда
Таб.Область(Таб.ВысотаТаблицы(),9,Таб.ВысотаТаблицы(),9).ЦветТекста(0,0,255);
КонецЕсли;
Для того, чтобы появилась возможность использовать свойство "Значение", необходимо явно присвоить свойству ячейки "СодержитЗначение" значение Истина или установить флажок "Содержит значение" в палитре свойств.
Для ячейки, у которой установлен признак "СодержитЗначение", можно задать тип значения, размещаемого в ячейке.
Следующий фрагмент демонстрирует, как можно управлять этими свойствами из встроенного языка://задаем нужный тип с помощью объекта "ОписаниеТипов"
Код 1C v 8.х МассивБулево = Новый Массив;
МассивБулево. Добавить( Тип( "Булево" ) ) ;
ОписаниеТиповБулево = Новый ОписаниеТипов( МассивБулево) ;
ПолеТабДок = ЭлементыФормы. тдПолеТабличногоДокумента;
ПолеТабДок. Область( "R3C3" ) . СодержитЗначение = Истина ;
ПолеТабДок. Область( "R3C3" ) . ТипЗначения = ОписаниеТиповБулево;
ПолеТабДок. Область( "R3C3" ) . Значение = СпрНоменклатура. Услуга;
Для ячейки табличного документа можно задавать формат вывода данных. Для этого используется свойство "Формат", которое содержит форматную строку. Приемы работы с форматной строкой полностью совпадают с функцией Формат()
Код 1C v 8.х ПолеТабДок = ЭлементыФормы. тдПолеТабличногоДокумента;
ПолеТабДок. Область( "R4C3" ) . ТипЗначения = ОписаниеТиповДата;
ПолеТабДок. Область( "R4C3" ) . Значение = ТекущаяДата( ) ;
ПолеТабДок. Область( "R4C3" ) . Формат = "ДФ=[ггММдд-ЧЧмм]-" ;
Элемент управления в табличном документе
Для ячейки, у которой установлен признак "СодержитЗначение", можно также задать элемент управления, который будет использоваться для редактирования этого значения.
Элемент управления можно назначить через палитру свойств или из встроенного языка с помощью метода "УстановитьЭлементУправления()". Чтобы проверить в программе, установлен ли элемент управления для конкретной ячейки, можно использовать свойство "ЭлементУправления", которое возвращает элемент управления, назначенный для ячейки.
Элементы управления, встроенные в ячейку, отображаются только при входе в режим редактирования значения. На приведенном ниже рисунке редактируемая ячейка обведена овалом и в ней отображается флажок:
Ниже показан пример установки элемента управления типа "Флажок" из встроенного языка://задаем нужный тип с помощью объекта "ОписаниеТипов"
Код 1C v 8.х МассивБулево = Новый Массив;
МассивБулево. Добавить( Тип( "Булево" ) ) ;
ОписаниеТиповБулево = Новый ОписаниеТипов( МассивБулево) ;
. . .
ПолеТабДок = ЭлементыФормы. тдПолеТабличногоДокумента;
ПолеТабДок. Область( "R5C3" ) . СодержитЗначение = Истина ;
ПолеТабДок. Область( "R5C3" ) . ТипЗначения = ОписаниеТиповБулево;
ПолеТабДок. Область( "R5C3" ) . Значение = СпрНоменклатура. Услуга;
ПолеТабДок. Область( "R5C3" ) . УстановитьЭлементУправления( Тип( "Флажок" ) ) ;
Для элементов управления, расположенных в табличном документе, расширяется набор свойств, методов и событий:
Разберем самые важные свойства и методы:
Свойство "ВстроенВЯчейку" имеет тип "булево" и говорит о том, что элемент управления встраивается в ячейку или просто привязывается к ней, о чем было рассказано выше.
Свойство "Видимость" позволяет показать или скрыть элемент управления.
Свойство "Значение" предоставляет доступ к значению, которое редактируется в элементе управления. Оно используется только для элементов управления, поддерживающих связь с данными.
Метод "Расположить" позволяет разместить элемент управления в конкретной области ячеек табличного документа. Именно этот метод был использован в вышеприведенном примере.
Код 1C v 8.х ПолеТабДок = ЭлементыФормы. тдПолеТабличногоДокумента;
ПолеТабДок. Область( "R4C3" ) . Защита = Истина ;
Категория:
Табличный документ Как в универсальном отчете отключить вывод итогов по некоторым полям? В универсальном отчете понадобилось отключить вывод итого по некоторым полям, но в универсальном отчете, созданном через построитель, к сожалению это невозможно
Многие скажут - что давно пора использовать СКД и там все есть! - согласен на все 100% но есть клиенты у которых стоит программа УТ с 2012 года, их все устраивает и ничего не хотят менять, кроме отчетов. Вот один мой знакомы попросил отключить итоги в универсальном отчете - сделал это добавив следующий код в процедуру формирования отчета:
Код 1C v 8.х
Процедура СформироватьОтчет(ТабличныйДокумент) Экспорт
Если НЕ ЗначениеЗаполнено( УниверсальныйОтчет. ДатаКон) Тогда
УниверсальныйОтчет. ДатаКон = ТекущаяДата( ) ;
КонецЕсли ;
УниверсальныйОтчет. ПостроительОтчета. Параметры. Вставить( "ДатаОтчета" , КонецДня( УниверсальныйОтчет. ДатаКон) ) ;
УниверсальныйОтчет. ПостроительОтчета. Параметры. Вставить( "ДатаНеделяНазад" , УниверсальныйОтчет. ДатаКон- ( 86400 * 7 ) ) ;
УниверсальныйОтчет. СформироватьОтчет( ТабличныйДокумент) ;
Для а = 11 по ТабличныйДокумент. ВысотаТаблицы Цикл
текстЯчейка = ТабличныйДокумент. Область( "R" + а+ "C2" ) . Текст;
Если Строка( ТабличныйДокумент. Область( "R" + а+ "C2" ) . ЦветФона) = "стиль: Фон кнопки" Тогда
ТабличныйДокумент. Область( "R" + а+ "C7" ) . Текст= "" ;
ТабличныйДокумент. Область( "R" + а+ "C11" ) . Текст= "" ;
ТабличныйДокумент. Область( "R" + а+ "C8" ) . Текст= "" ;
ТабличныйДокумент. Область( "R" + а+ "C9" ) . Текст= "" ;
ТабличныйДокумент. Область( "R" + а+ "C10" ) . Текст= "" ;
КонецЕсли ;
КонецЦикла ;
КонецПроцедуры
Для наглядности покажу на примере:
в выделенных полях добавленным кодом были стерты итоги
Категория:
Прочие вопросы Отображение в списке статуса наличия оригиналов закрывающих документов Поступлений Этой статьей мы начинаем серию "Хотелок " - то что бухгалтера, менеджеры и т.д. просят добавить в программу 1С для удобства своей работы.
Хотелка : Необходимо для каждого документа Поступление товаров и услуг добавить выбор статуса наличия оригиналов Документов.
В компании огромный документооборот, по 50 документов в день - менеджеры затягивают или чаще забывают предоставить оригиналы документов нужен информативный статус с возможностью отбора по статусу и вывода списка на печать:
Решение: 1. В документ поступление добавлен выбор статуса наличия документов
2. В список документов поступлений добавлена информативная колонка с выделением статусов по цветам:
Для данной колонки работает стандартный механизм отборов, что позволяет быстро фильтровать документы по статусу
Как это сделали: Данная задачка до банальности проста, поэтому особо долго не думали и реализовали следующим способом:
1. Документ Поступление товаров и услуг, добавили переключатель
2. В список документов добавили колонку Статус документа:
3. В модуле списка в процедуре ДокументСписокПриПолученииДанных добавили:
Код 1C v 8.х
Для Каждого Строка Из ОформленияСтрок Цикл
Если Строка. ДанныеСтроки. Ссылка. ТипОригинал = 0 Тогда
Строка. Ячейки. СтатусДокумента. УстановитьТекст( "Нет" ) ;
Строка. Ячейки. СтатусДокумента. ЦветФона = Новый Цвет( 255 , 87 , 87 ) ;
ИначеЕсли Строка. ДанныеСтроки. Ссылка. ТипОригинал = 1 Тогда
Строка. Ячейки. СтатусДокумента. УстановитьТекст( "Скан" ) ;
Строка. Ячейки. СтатусДокумента. ЦветФона = Новый Цвет( 255 , 255 , 153 ) ;
ИначеЕсли Строка. ДанныеСтроки. Ссылка. ТипОригинал = 2 Тогда
Строка. Ячейки. СтатусДокумента. УстановитьТекст( "Оригинал" ) ;
Строка. Ячейки. СтатусДокумента. ЦветФона = Новый Цвет( 155 , 255 , 155 ) ;
КонецЕсли ;
КонецЦикла ;
Результат : Теперь бухгалтер быстро фильтрует документы по статусу и менеджеру - печатает реестр, далее менеджер занимается получением оригиналов от контрагентов.
Если Вы столкнулись с подобной проблемой!?
Хотите автоматизировать аналогичный процесс - Обращайтесь, Мы поможем Вам! - Контакты > 1С Программирование
Категория:
1С Бухгалтерия 2.0 Оформление строки в ПриПолученииДанных или ПриВыводеСтроки Событие ПриПолученииДанных использется для оформления ячеек строк данных, отображаемых табличным полем. Обработчик данного события вызывается табличным полем в тех же случаях, что и обработчик ПриВыводеСтроки , т.е. при обновлении данных, отображаемых табличным полем или при поиске по подстроке. Важно отметить, что обработчик данного события вызывается табличным полем перед вызовом обработчиков события ПриВыводеСтроки для всех видимых строк табличного поля. Основным отличием данного события от события ПриВыводеСтроки является то, что в обработчике события ПриПолученииДанных можно изменять настройки ячеек группы строк, а не одной строки как в обработчике события ПриВыводеСтроки .
Обрабатывая данное событие можно изменять шрифт, цвет фона или текста, как определенной ячейки, так и всей строки табличного поля, устанавливать высоту или видимость ячеек строки табличного поля, а также устанавливать картинку, флажок или новый текст в ячейке. Параметром данного события является объект типа ОформлениеСтрок - коллекция объектов типа ОформлениеСтроки , являющихся оформлениями строк табличного поля.
Пример кода:
Код 1C v 8.х Процедура ТППриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Попытка
ОформлениеСтроки. Ячейки. ПредоплатаОтсрочка. УстановитьТекст( ? ( ОформлениеСтроки. ДанныеСтроки. Ссылка. Счет. ДоговорКонтрагента. КонтролироватьЧислоДнейЗадолженности, "ОТСРОЧКА" , "ПРЕДОПЛАТА" ) ) ;
Исключение
КонецПопытки ;
Если ОформлениеСтроки. Ячейки. Доставка. Значение = Неопределено Тогда
возврат ;
КонецЕсли ;
Если ДанныеСтроки. Доставка. Проведен Тогда
ОформлениеСтроки. Ячейки. Картинка. ИндексКартинки = 0 ;
ИначеЕсли ДанныеСтроки. Доставка. ПометкаУдаления Тогда
ОформлениеСтроки. Ячейки. Картинка. ИндексКартинки = 1 ;
Иначе
ОформлениеСтроки. Ячейки. Картинка. ИндексКартинки = 2 ;
КонецЕсли ;
ОформлениеСтроки. Ячейки. Картинка. ОтображатьКартинку = истина ;
Если ДанныеСтроки. СтатусНов = "Нет машины" Тогда
ОформлениеСтроки. Ячейки. СтатусНов. ЦветФона = Новый Цвет( 255 , 196 , 196 ) ;
ИначеЕсли ДанныеСтроки. СтатусНов = "Нет разрешения" Тогда
текцвет = Новый Цвет( 255 , 196 , 196 ) ;
Если ДанныеСтроки. Доставка. ДатаДоставки = НачалоДня( РабочаяДата) Тогда
ТекВремя = Дата( 1 , 1 , 1 ) + ( ТекущаяДата( ) - НачалоДня( ТекущаяДата( ) ) ) ;
Попытка ПодачаМашины= ? ( ДанныеСтроки. Доставка. ВремяЗагрузкиФакт[0 ]. ПодачаМашины> ДанныеСтроки. Доставка. ВремяПриездаЭкспедитораФакт, ДанныеСтроки. Доставка. ВремяЗагрузкиФакт[0 ]. ПодачаМашины, ДанныеСтроки. Доставка. ВремяПриездаЭкспедитораФакт) ; Исключение ПодачаМашины = ДанныеСтроки. Доставка. ВремяПриездаЭкспедитораФакт; КонецПопытки ;
Если ПодачаМашины+ ( 15 * 60 ) > ТекВремя Тогда ОформлениеСтроки. Ячейки. СтатусНов. УстановитьТекст( "Получение разрешения" ) ; текцвет = Новый Цвет( 255 , 225 , 225 ) ; КонецЕсли ;
КонецЕсли ;
ОформлениеСтроки. Ячейки. СтатусНов. ЦветФона = текцвет;
ИначеЕсли ДанныеСтроки. СтатусНов = "Загрузка" Тогда
ОформлениеСтроки. Ячейки. СтатусНов. ЦветФона = Новый Цвет( 255 , 153 , 0 ) ;
ИначеЕсли ДанныеСтроки. СтатусНов = "В пути" Тогда
ОформлениеСтроки. Ячейки. СтатусНов. ЦветФона = Новый Цвет( 255 , 255 , 0 ) ;
ИначеЕсли ДанныеСтроки. СтатусНов = "На объекте" Тогда
ОформлениеСтроки. Ячейки. СтатусНов. ЦветФона = Новый Цвет( 51 , 204 , 204 ) ;
ИначеЕсли ДанныеСтроки. СтатусНов = "Завершено" Тогда
ОформлениеСтроки. Ячейки. СтатусНов. ЦветФона = Новый Цвет( 137 , 255 , 113 ) ;
КонецЕсли ;
Если ЗначениеЗаполнено( ДанныеСтроки. СтатусSMS) Тогда
Если ДанныеСтроки. СтатусSMS = "Доставлено" Тогда
ОформлениеСтроки. Ячейки. СтатусSMS. ЦветФона = Новый Цвет( 137 , 255 , 113 ) ;
ИначеЕсли ДанныеСтроки. СтатусSMS = "Поставлено в очередь" ИЛИ
ДанныеСтроки. СтатусSMS = "Отправляется" ИЛИ
ДанныеСтроки. СтатусSMS = "Отправлено" Тогда
ОформлениеСтроки. Ячейки. СтатусSMS. ЦветФона = Новый Цвет( 255 , 255 , 0 ) ;
Иначе
ОформлениеСтроки. Ячейки. СтатусSMS. ЦветФона = Новый Цвет( 255 , 0 , 0 ) ;
КонецЕсли ;
КонецЕсли ;
ОформлениеСтроки. Ячейки. колКОтгрузке. УстановитьТекст( ДанныеСтроки. колКОтгрузке) ;
Если ДанныеСтроки. колКОтгрузке = "ОК" Тогда
ОформлениеСтроки. Ячейки. колКОтгрузке. ЦветФона = Новый Цвет( 200 , 255 , 200 ) ;
Иначе
ОформлениеСтроки. Ячейки. колКОтгрузке. ЦветФона = Новый Цвет( 255 , 0 , 0 ) ;
КонецЕсли ;
ОформлениеСтроки. Ячейки. колСДоставки. УстановитьТекст( ДанныеСтроки. колСДоставки) ;
Если ДанныеСтроки. колСДоставки = "ОК" Тогда
ОформлениеСтроки. Ячейки. колСДоставки. ЦветФона = Новый Цвет( 200 , 255 , 200 ) ;
Иначе
ОформлениеСтроки. Ячейки. колСДоставки. ЦветФона = Новый Цвет( 255 , 0 , 0 ) ;
КонецЕсли ;
Если НЕ ( ДанныеСтроки. Доставка. ВидДоставки = Перечисления. ВидыДоставки. Самовывоз или ДанныеСтроки. Доставка. ВидДоставки = Перечисления. ВидыДоставки. Централизация) Тогда
Если ДанныеСтроки. Доставка. Дата < НачалоДня( ДанныеСтроки. Доставка. Дата) + 60 * 60 * 14 Тогда ОформлениеСтроки. Ячейки. Менеджер. ЦветФона = Новый Цвет( 166 , 255 , 166 ) ; Иначе ОформлениеСтроки. Ячейки. Менеджер. ЦветФона = Новый Цвет( 255 , 166 , 166 ) ; КонецЕсли ;
КонецЕсли ;
КонецПроцедуры
А вот так это выглядит в реальности:
Категория:
Список Справочника, Документов, Регистров Универсальный отчет в прикладных решениях фирмы 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.х ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "Печать" , "Печать" ) ;
ЭлементОформления. Область. Добавить( "Печать" , "Печать" , ТипОбластиОформления. Поле) ;
ЭлементОформления. Оформление. ГоризонтальноеПоложение. Значение = ГоризонтальноеПоложение. Центр;
ЭлементОформления. Оформление. Формат. Значение = «БЛ= Нет; БИ= Напечатан»;
ЭлементОформления. Оформление. ГоризонтальноеПоложение. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
Категория:
Прочие вопросы Форма ~ Программное добавление элементов на форму ЭлементыФормы (Controls) . Добавить (Add) - Добавляет элемент управления на форму.
Синтаксис: Код 1C v 8.х Добавить( < Тип> , < Имя> , < Видимость> , < ПоместитьНа> )
Параметры:
<Тип> (обязательный)
Тип: Тип. Тип добавляемого элемента управления:
Индикатор; ПолеКалендаря; Кнопка; КоманднаяПанель; Надпись; Панель; Переключатель; ПолеТабличногоДокумента; ПолеHTMLДокумента; ПолеТекстовогоДокумента; ПолеВвода; ПолеВыбора; ПолеСписка; ПолеКартинки; ПолосаРегулирования; Разделитель; РамкаГруппы; ТабличноеПоле; Флажок; ПолеГрафическойСхемы; ПолеГеографическойСхемы.
<Имя> (обязательный)
Тип: Строка. Имя создаваемого элемента управления. Имя должно быть указано в соответсвии с правилами написания имен системы 1С:Предприятие 8. В противном случае выполнение метода вызовет исключение.
<Видимость> (необязательный)
Тип: Булево. Определяет, создавать новый элемент управления формы видимым или нет. Истина - элемент создается видимым.
Значение по умолчанию: Истина
<ПоместитьНа> (необязательный)
Тип: Панель; ПолеТабличногоДокумента. Определяет, какой панели формы или какому табличному документу принадлежит создаваемый элемент. Если указана панель, то добавляемый элемент размещается на текущей странице панели. Если не указан, создаваемый элемент будет принадлежать непосредственно форме.
Код 1C v 8.х
// Расположим на странице табличное поле
ПолеРегистра = ЭлементыФормы.Добавить(Тип("ТабличноеПоле"),
СтрокаТаблицы.Имя,
Истина,
ЭлементыФормы.ОсновнаяПанель);
ПолеРегистра.Данные = "ДокументОбъект.Движения." + СтрокаТаблицы.Имя;
Если НЕ ЭтоНовый() Тогда
ПолеРегистра.Значение.Прочитать();
КонецЕсли;
ПолеРегистра.Верх = 30;
ПолеРегистра.Лево = 6;
ПолеРегистра.Ширина = ЭлементыФормы.ОсновнаяПанель.Ширина - 14;
ПолеРегистра.Высота = ЭлементыФормы.ОсновнаяПанель.Высота - 56;
ПолеРегистра.ТолькоПросмотр = Ложь;
ПолеРегистра.ИзменятьПорядокСтрок = Истина;
ПолеРегистра.ИзменятьСоставСтрок = Истина;
ПолеРегистра.УстановитьПривязку(ГраницаЭлементаУправления.Верх,
КоманднаяПанельРегистра,
ГраницаЭлементаУправления.Низ);
ПолеРегистра.УстановитьПривязку(ГраницаЭлементаУправления.Низ,
ЭлементыФормы.ОсновнаяПанель,
ГраницаЭлементаУправления.Низ);
ПолеРегистра.УстановитьПривязку(ГраницаЭлементаУправления.Право,
ЭлементыФормы.ОсновнаяПанель,
ГраницаЭлементаУправления.Право);
ПолеРегистра.СоздатьКолонки();
Если Метаданные.РегистрыНакопления[СтрокаТаблицы.Имя].ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки Тогда
КолонкаВидДвижения = ПолеРегистра.Колонки.Вставить(1, "Вид движения");
КолонкаВидДвижения.Имя = "ВидДвиженияРегистраНакопления";
КолонкаВидДвижения.УстановитьЭлементУправления(Тип("ПолеВвода"));
КолонкаВидДвижения.Данные = "ВидДвижения";
КолонкаВидДвижения.ЭлементУправления.КнопкаВыбора = Истина;
КолонкаВидДвижения.ЭлементУправления.ВыбиратьТип = Ложь;
КонецЕсли;
ПолеРегистра.Колонки.Регистратор.Видимость = Ложь;
ПолеРегистра.Колонки.Период.Видимость = Ложь;
ПолеРегистра.Колонки.НомерСтроки.Видимость = Ложь;
// Поле ввода
ПолеВвода = ЭлементыФормы.Добавить(Тип("ПолеВвода"), "ПолеВвода", Истина);
ПолеВвода.Верх = Надпись.Верх + Надпись.Высота + 5;
ПолеВвода.Лево = ЭлементыФормы.Переключатель1.Лево;
ПолеВвода.Ширина = ЭлементыФормы.Переключатель1.Ширина;
ПолеВвода.Высота = ЭлементыФормы.Переключатель1.Высота;
ПолеВвода.Доступность = Ложь;
// установка привязок
ПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Низ, ПолеВвода, ГраницаЭлементаУправления.Верх);
ПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Лево, ЭтаФорма.Панель, ГраницаЭлементаУправления.Лево);
ПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Право, ЭтаФорма.Панель, ГраницаЭлементаУправления.Право);
//Надпись и поле ввода
ЭлементНадпись = ЭлементыФормы.Добавить(Тип("Надпись"), "Надпись"+ИмяЭлемента, Истина, ЭлементыФормы.ПанельПодбор);
ЭлементНадпись.Заголовок = Синоним + ":";
ЭлементНадпись.Лево = 6;
ЭлементНадпись.Верх = ВерхЭлемента + 6;
ЭлементНадпись.Высота = 19;
ЭлементНадпись.Ширина = 160;
ЭлементНадпись.ЦветФона = ЦветаСтиля.ФонЭпицентра;
ЭлементПолеВвода = ЭлементыФормы.Добавить(Тип("ПолеВвода"), ИмяЭлемента, Истина, ЭлементыФормы.ПанельПодбор);
ЭлементПолеВвода.ТипЗначения = Параметр.Тип;
ЭлементПолеВвода.Верх = ЭлементНадпись.Верх;
ЭлементПолеВвода.Лево = ЭлементНадпись.Лево + ЭлементНадпись.Ширина + 6;
ЭлементПолеВвода.Высота = ЭлементНадпись.Высота;
Если ЭлементПолеВвода.ТипЗначения.СодержитТип(Тип("Дата")) Тогда
ЭлементПолеВвода.Ширина = 80;
Иначе
ЭлементПолеВвода.Ширина = 200;
КонецЕсли;
//Надпись и Поле Выбора
ИмяЭлемента = " Подписывающий";
ЭлементНадпись = ЭлементыФормы.Добавить(Тип("Надпись"), "Надпись"+ИмяЭлемента, Истина,);
ЭлементНадпись.Заголовок = ИмяЭлемента + ":";
ЭлементНадпись.Лево = 250;
ЭлементНадпись.Верх = 33;
ЭлементНадпись.Высота = 19;
ЭлементНадпись.Ширина = 160;
ЭлементНадпись.ЦветФона = ЦветаСтиля.ЦветФонаФормы;
ЭлементПолеВвода = ЭлементыФормы.Добавить(Тип("ПолеВыбора""), ИмяЭлемента, Истина,);
ЭлементПолеВвода.Данные = Подписывающий;
//ЭлементПолеВвода.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.СотрудникиОрганизаций");
ЭлементПолеВвода.Верх = ЭлементНадпись.Верх;
ЭлементПолеВвода.Лево = ЭлементНадпись.Лево + ЭлементНадпись.Ширина + 6;
ЭлементПолеВвода.Высота = ЭлементНадпись.Высота;
ЭлементПолеВвода.Ширина = 200;
Категория:
Работа с Формой (Диалог) и её элементами Форма ~ Программное создание таблицы значений с условным оформлением Как создать на форме таблицу и сделать для неё подсветку содержимого колонки в строке по условию?
Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем массив добавляемых реквизитов, который будет называться МассивДобавляемыхРеквизитов.
Код 1C v 8.2 УП МассивДобавляемыхРеквизитов = Новый Массив;
МассивДобавляемыхРеквизитов. Добавить( Новый РеквизитФормы( "План" , Новый ОписаниеТипов( "ТаблицаЗначений" ) ) ) ;
Обратите внимание, что элементы массива у нас типа РеквизитФормы. Дальше помимо таблицы значений, нам надо добавить колонки таблицы, например будем добавлять три колонки:
Код 1C v 8.2 УП МассивДобавляемыхРеквизитов. Добавить( Новый РеквизитФормы( "Номенклатура" , Новый ОписаниеТипов( "СправочникСсылка.Номенклатура" ) , "План" , "Номенклатура" ) ) ;
МассивДобавляемыхРеквизитов. Добавить( Новый РеквизитФормы( "Регион" , Новый ОписаниеТипов( "Число" , Новый КвалификаторыЧисла( 10 , 2 ) ) , "План" , "Регион" ) ) ;
МассивДобавляемыхРеквизитов. Добавить( Новый РеквизитФормы( "Разница" , Новый ОписаниеТипов( "Число" , Новый КвалификаторыЧисла( 10 , 2 ) ) , "План" , "Осталось распределить" ) ) ;
Во время добавления колонок в МассивДобавляемыхРеквизитов обязательно надо указать путь к создаваемому реквизиту, в нашем случае это «План», который был добавлен в массив ранее. Обратите внимание, что путь к создаваемому реквизиту не включает в себя сам реквизит. После того, как массив сформирован, можно вызывать изменение реквизитов:
Код 1C v 8.2 УП ИзменитьРеквизиты( МассивДобавляемыхРеквизитов) ;
После изменения реквизитов у нас уже есть нужный нам реквизит формы «План» типа ТаблицаЗначений с тремя колонками. Если вам надо будет обратиться к значению реквизита, то вы можете это сделать используя ЭтаФорма["План"]. Можно приступать к созданию элементов формы, для отображения данных. Сначала создадим элемент формы типа ТаблицаФормы.
Код 1C v 8.2 УП ТаблицаФормы = Элементы. Добавить( "План" , Тип( "ТаблицаФормы" ) ) ;
ТаблицаФормы. ПутьКДанным = "План" ;
ТаблицаФормы. ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы. Нет;
ТаблицаФормы. ФиксацияСлева = 3 ;
ТаблицаФормы. УстановитьДействие( "ПередУдалением" , "ПланПередУдалением" ) ;
ТаблицаФормы. УстановитьДействие( "ПередНачаломДобавления" , "ПланПередНачаломДобавления" ) ;
Как вы видите из приведенного когда, во время создания элемента мы тут же определяем действия на события. После создания элемента План типа ТаблицаФормы создадим подчиненные ему элементы типа ПолеФормы, которые будут отвечать у нас за вывод данных в колонки таблицы. Для этого в цикле перебора колонок таблицы необходимо выполнить следующий код (на примере одной из итераций цикла):
Код 1C v 8.2 УП НоваяКолонка = Элементы. Добавить( "ПланНоменклатура" , Тип( "ПолеФормы" ) , Элементы. План) ;
НоваяКолонка. Заголовок = "Номенклатура" ;
НоваяКолонка. ПутьКДанным = "План.Номенклатура" ;
НоваяКолонка. Вид = ВидПоляФормы. ПолеВвода;
НоваяКолонка. РежимРедактирования = РежимРедактированияКолонки. ВходПриВводе;
Обратите внимание, что во время добавления элемента мы указываем родителя Элементы.План. Так же путь к данным у нас состоит из наименования реквизита типа ТаблицаЗначений и имени колонки, разделенные точкой. После того, как вы в цикле создадите все элементы для колонок форма будет готова к выводу и вводу данных в таблицу.
Теперь можно перейти ко второй части задачи про подсветку цветом колонки Номенклатура. Например условие у нас будет накладываться на колонку Разница и когда она будет равно 100 строку надо будет подсвечивать колонку Номенклатуры серым цветом.
Для реализации этой части задачи мы будем использовать объект УсловноеОформление, который доступен на стороне сервера. Сначала в элементы условного оформления необходимо добавить новый элемент. Затем мы добавляем оформляемые поля. Если надо подсвечивать всю строку, то можно обойти в цикле колонки и добавить все их поля ввода в оформляемые. Так же необходимо потом добавить отбор. В левом значении отбора указываем поле, по которому будет идти сравнение. Поле указывает с точкой, как путь к данным во время добавления колонки.
Код 1C v 8.2 УП ЭлементУсловногоОформления = УсловноеОформление. Элементы. Добавить( ) ;
ОформляемоеПоле = ЭлементУсловногоОформления. Поля. Элементы. Добавить( ) ;
ОформляемоеПоле. Поле = Новый ПолеКомпоновкиДанных( "ПланНоменклатура" ) ;
ЭлементОтбора = ЭлементУсловногоОформления. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора. ЛевоеЗначение = Новый ПолеКомпоновкиДанных( "План.Разница" ) ;
ЭлементОтбора. ВидСравнения = ВидСравненияКомпоновкиДанных. Равно;
ЭлементОтбора. ПравоеЗначение = 100 ;
ЭлементУсловногоОформления. Оформление. УстановитьЗначениеПараметра( "ЦветФона" , WebЦвета. СеребристоСерый) ;
Внешняя обработка, демонстрирующая создание таблицы значений программно -
Скачивать файлы может только зарегистрированный пользователь!
Андрей Данилюк Категория:
Работа с Формой (Диалог) и её элементами Оптимизация работы в списке "ПриПолученииДанных" Очень часта бухгалтера, хотят чтобы формы списка были раскрашены во все цвета радуги в зависимости от значений реквизитов документа. Пример: Если товар не получен то в форме списка строка документа должна быть красная, если товар ... т.д., и так еще много много хотелок. Есть конечно отчеты, но не всегда выход. Приступим, получаем код типа:
Код 1C v 8.х Процедура ДокументСписокПриПолученииДанных(Элемент, ОформленияСтрок)
ЦветКрасный = Новый Цвет( 255 , 130 , 124 ) ;
Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
Данныестроки = ОформлениеСтроки. Данныестроки;
Если ДанныеСтроки. Ссылка. НеПолученТовар Тогда
ОформлениеСтроки. ЦветФона = ЦветКрасный;
КонецЕсли ;
КонецЦикла ;
КонецПроцедуры
Вроде все красиво. Разукрашиваем в "ПриПолученииДанных", а не в "ПриВыводеСтроки", Цвет вынесен из цикла.
Проходим отладчик и видим, узкое место
Код 1C v 8.х ДанныеСтроки. Ссылка. НеПолученТовар
т.е 1С-ка каждый раз запросом получает значение реквизита. Можно конечно добавить этот реквизит в форму списка и скрыть, но условие и может быть сложным. Попробуем это ускорить. Получаем массив ссылок:
Код 1C v 8.х Функция ПолучитьМассивСсылокОформленияСтрок(ОформленияСтрок)
Массив = Новый Массив;
Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
Массив. Добавить( ОформлениеСтроки. Данныестроки. Ссылка) ;
КонецЦикла ;
Возврат Массив;
КонецФункции
Получаем одним запросом необходимые нам данные. Пример:
Код 1C v 8.х Функция ПолучитьТаблицаОформленияСтрок(МассивСсылокОформления)
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ
| ПриходнаяНакладнаяБезнал.Ссылка,
| ПриходнаяНакладнаяБезнал.НеПолученТовар
|ИЗ
| Документ.ПриходнаяНакладнаяБезнал КАК ПриходнаяНакладнаяБезнал
|ГДЕ
| ПриходнаяНакладнаяБезнал.Ссылка В(&МассивСсылокОформления)" ;
Запрос. УстановитьПараметр( "МассивСсылокОформления" , МассивСсылокОформления) ;
Возврат Запрос. Выполнить( ) . Выгрузить( ) ;
КонецФункции
В результате получаем код процедуры ДокументСписокПриПолученииДанных
Код 1C v 8.х Процедура ДокументСписокПриПолученииДанных(Элемент, ОформленияСтрок)
ЦветКрасный = Новый Цвет( 255 , 130 , 124 ) ;
МассивСсылокОформления = ПолучитьМассивСсылокОформленияСтрок( ОформленияСтрок) ;
ТаблицаДанныхОформленияСтрок = ПолучитьТаблицаОформленияСтрок( МассивСсылокОформления) ;
Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
Данныестроки = ОформлениеСтроки. Данныестроки;
СтрокаОформленияСтрок = ТаблицаДанныхОформленияСтрок. Найти( ОформлениеСтроки. Данныестроки. Ссылка, "Ссылка" ) ;
Если СтрокаОформленияСтрок. НеПолученТовар Тогда
ОформлениеСтроки. ЦветФона = ЦветКрасный;
КонецЕсли ;
КонецЦикла ;
КонецПроцедуры
Ну а теперь тесты, как же без них.
Первый вариант:
Документ.ПриходнаяНакладнаяБезнал.Форма.ФормаВыбора.Форма 36 ДокументСписокПриПолученииДанных1(Элемент, ОформленияСтрок); 81 12,558905 96,65
Второй вариант после оптимизации
Документ.ПриходнаяНакладнаяБезнал.Форма.ФормаВыбора.Форма 37 ДокументСписокПриПолученииДанных2(Элемент, ОформленияСтрок); 81 0,426953 3,29 "
Результат-
ускорение в 36 раз .
Вывод: З
апрос для получения данных должен быть один .
Спасибо за внимание.
Автор:
Андрей (boggonzikov) Категория:
Полезные, Универсальные Функции Разложение значения Цвета на состовляющие RGB Периодически могут возникать ситуации, когда необходимо разложить числовое значение цвета на его RGB-составлящие. Например, если говорить о платформе 1С 8, то для задания цвета шрифта, цвета области табличного документа и т.п. мы можем использовать либо web-цвета, либо цвета стилей, либо абсолютный цвет, который задается через RGB-составляющие:
Код 1C v 8.х Цвет = Новый Цвет( R, G, B) ;
где R,G,B - числовое значение цвета от 0 до 255 (красный, зеленый и синий соответственно)
В тоже время некоторые приложения, например Excel, возвращают значение цвета одним десятичным числом, которое формируется из всех трех составляющих по определенному алгоритму. И если нам необходимо, например, скопировать формат ячейки Excel в ячейку табличного документа 1С, то возникает вопрос, как нам разложить числовое представление цвета на его RGB-составляющие?
Чтобы разобраться в этом вопросе, давайте посмотрим, по какой формуле формируется числовое представление цвета. Формула достаточно проста:
Цвет = R + G * 256 + B * 65535
где R,G,B - числовое значение цвета от 0 до 255 (красный, зеленый и синий соответственно)
Если представить коэффициенты немного в другом виде, то наша формула преобразуется к следующему виду:
Цвет = R*(256^0) + G*(256^1) + B*(256^2)
То есть наше числовое представление цвета есть ни что иное, как трехзначное число по основанию 256. Поэтому, чтобы получить требуемые составляющие, нам надо всего лишь преобразовать значение цвета из 10-тичной системы в систему по основанию 256. Каждое из трех полученных значений и будет искомым значением составляющих цвета.
На примере переноса цвета ячейки Excel код будет вылядеть так:
Код 1C v 8.х ЦветRGB = ЯчЕксел. Interior. Color;
R = ЦветRGB%256 ;
G = ( Цел( ЦветRGB/ 256 ) ) %256 ;
B = ( Цел( ЦветRGB/ 65535 ) ) %256 ;
Яч. ЦветФона = Новый Цвет( R, G, B) ;
Источник:
lessons1c Категория:
Полезные, Универсальные Функции Табличное поле ~ Оформление строк, ячеек табличного поля (цвет, текст) Одним из полезных свойств элемента управления Табличное поле является возможность настройки оформления его строк программным способом.
Для иллюстрации этой возможности мы снова воспользуемся формой справочника Номенклатура и придадим ей «нестандартный» вид.
Откроем в конфигураторе форму списка справочника Номенклатура и создадим обработчик события формы ПриОткрытии со следующим текстом:
Код 1C v 8.х Процедура ПриОткрытии()
СписокСправочника = ЭлементыФормы. СправочникСписок;
СписокСправочника. ЦветФонаЧередованияСтрок = WEBЦвета. Бежевый;
СписокСправочника. ЧередованиеЦветовСтрок = Истина ;
СписокСправочника. ВертикальныеЛинии = Ложь ;
СписокСправочника. ГоризонтальныеЛинии = Ложь ;
КонецПроцедуры
Вначале мы задаем режим чередования цветов фона строк списка. Первая строка будет выводиться на бежевом фоне, вторая на белом, третья снова на бежевом и т. д.
Затем мы скрываем линии, разделяющие колонки и строки.
Теперь откроем обработчик события ПриВыводеСтроки табличного поля списка справочника и добавим в него следующие строки:
Код 1C v 8.х Процедура СправочникСписокПриВыводеСтроки(Элемент, ОформлениеСтроки,ДанныеСтроки)
Если Не ДанныеСтроки. ЭтоГруппа Тогда
ОтборНоменклатуры = Новый Структура;
ОтборНоменклатуры. Вставить( "Номенклатура" , ДанныеСтроки. Ссылка) ;
ОформлениеСтроки. Ячейки. Цена. ОтображатьТекст = Истина ;
АктуальнаяЦена = РегистрыСведений. Цены. ПолучитьПоследнее( , ОтборНоменклатуры) . Цена;
ОформлениеСтроки. Ячейки. Цена. Текст = АктуальнаяЦена;
Если АктуальнаяЦена< 500 Тогда
ОформлениеСтроки. Ячейки. Цена. ЦветТекста = WEBЦвета. Васильковый;
КонецЕсли ;
Если СтрДлина( СокрЛП( ДанныеСтроки. Наименование) ) > 30 Тогда
ОформлениеСтроки. Ячейки. Наименование. АвтоВысотаЯчейки = Истина ;
ОформлениеСтроки. Ячейки. Наименование. ВысотаЯчейки = 3 ;
КонецЕсли ;
КонецЕсли ;
КонецПроцедуры
Здесь в случае вывода элемента справочника мы анализируем длину его наименования. Если оно более 30 символов, устанавливаем автоматическое определение высоты ячейки, ограничивая ее максимальную высоту тремя строками.
Категория:
Работа с Формой (Диалог) и её элементами Табличное поле ~ Дополнительная вычисляемая или текстовая колонка в табличной части, списке, журнале Как добавить дополнительную колонку в табличном поле?
Добавляете колонку, а все вычисления реализуются с помощью события
ПриВыводеСтроки табличного поля:
Код 1C v 8.х
Процедура НоменклатураПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
СамаЯчейка = ОформлениеСтроки. Ячейки. ИмяЯчейки;
СамаЯчейка. ОтображатьТекст = Истина ;
СамаЯчейка. Текст = "Лалала" ;
КонецПроцедуры
Процедура НоменклатураПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ОформлениеСтроки. Ячейки. ИмяЯчейки. УстановитьТекст( "Лалала" ) ;
КонецПроцедуры
Процедура НоменклатураПриПолученииДанных(Элемент, ОформленияСтрок)
Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
СамаЯчейка = ОформлениеСтроки. Ячейки. ИмяЯчейки;
СамаЯчейка. ОтображатьТекст = Истина ;
СамаЯчейка. Текст = "Лалала" ;
КонецЦикла ;
КонецПроцедуры
С помощью этого события можно выводить не только текст, но также флажки и картинки, например:
Картинка:
Код 1C v 8.х Ячейка = ОформлениеСтроки. Ячейки. ТипСобытия;
Ячейка. ОтображатьТекст = Ложь ;
Ячейка. ОтображатьФлажок = Ложь ;
Ячейка. ОтображатьКартинку = Истина ;
Ячейка. ИндексКартинки = 1 ;
ТЗ= Новый ТаблицаЗначений;
ТЗ. Колонки. Добавить( "ПометкаУдаления" , , "ПометкаУдаления" ) ;
ТЗ. Колонки. Добавить( "Проведен" , , "Проведен" ) ;
КолонкаКартинки= ЭлементыФормы. ТЗ. Колонки. Вставить( 0 , "<" ) ;
КолонкаКартинки. Имя= "Картинка" ;
КолонкаКартинки. Ширина= 5 ;
КолонкаКартинки. ДанныеКартинки= "ИндексКартинки" ;
КолонкаКартинки. КартинкиСтрок= БиблиотекаКартинок. СостоянияДокумента;
Процедура ТЗПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Если ДанныеСтроки. Проведен Тогда
ОформлениеСтроки. Ячейки. Картинка. ИндексКартинки= 0 ;
ИначеЕсли НЕ ДанныеСтроки. Проведен Тогда
ОформлениеСтроки. Ячейки. Картинка. ИндексКартинки= 2 ;
ИначеЕсли ДанныеСтроки. ПометкаУдаления Тогда
ОформлениеСтроки. Ячейки. Картинка. ИндексКартинки= 1 ;
КонецЕсли ;
Флажки:
Код 1C v 8.х ОформлениеСтроки. Ячейки. Колонка2 . ОтображатьФлажок= Истина ;
ОформлениеСтроки. Ячейки. Колонка2 . УстановитьТекст( "" ) ;
ОформлениеСтроки. Ячейки. Колонка2 . Флажок = Истина ;
Еще можно менять цвет фона и текста, шрифт и другие характеристики оформления:
Код 1C v 8.х ОформлениеСтроки. Ячейки. < ИмяКолонки> . ЦветФона = Новый Цвет ( 255 , 100 , 100 ) ;
ОформлениеСтроки. Ячейки. < ИмяКолонки> . Шрифт = Новый Шрифт( , , Истина ) ;
Можно также управлять доступностью отдельных строк и ячеек табличного поля:
Код 1C v 8.х ОформлениеСтроки. Ячейки. Назв. ТолькоПросмотр = Истина ;
Обычно колонка должна быть рассчитываемой, или зависимой от данных, поэтому нужно задействовать второй параметр
ДанныеСтроки . Этот механизм можно использовать для отображения остатков товаров в форме подбора, текущих цен, долга контрагента, другой информации по строкам.
Но здесь нужно быть осторожным! Событие
ПриВыводеСтроки вызывается довольно часто при перерисовке табличного поля. Поэтому процедура должна отрабатывать довольно быстро, чтобы не тормозить вывод списка. Если в ней происходит обращение к базе данных, то вывод может резко замедлиться.
Если начались тормоза, то рекомендуется сделать следующее:
1. Кеширование результата запроса в переменной модуля формы (таблица значений или массив, еще можно использовать соответствие, которое индексируется для примитивных типов данных, например, код товара или артикул)
2. При отключенной колонке (видимость) запрос к базе НЕ должен выполняться.
По умолчанию колонку держать выключенной, включение только по кнопке в форме или при личных настройках определенного пользователя.
3. Лучше выполнять один большой запрос на несколько товаров, чем несколько маленьких запросов на один товар.
4. Список товаров нужно передавать как ПАРАМЕТР виртуальной таблицы Остатки, а не как параметр условия ГДЕ.
5. При повышенных требованиях к скорости отображения списка и большом количестве пользователей можно завести регистр сведений, хранящий актуальные остатки. Для поддержки его актуальности можно создать последовательность.
6. Еще вариант через обработчик - при ПолученииДанных (вроде так называется)... Там сразу передается массив ОформленияСтрок - в нем все строки сразу и вызывается он реже, чем при выводе строки...
7. Завести в табличной части реквизит, куда при открытии формы и по мере надобности помещать остатки, это значительно ускорит вывод остатков, правда будет не лучшим образом влиять на флаг Модифицированность.
Источник. Категория:
Работа с Формой (Диалог) и её элементами Как при выводе данных в Табличный Документ изменить Текст и Цвет Текста конкретной ячейки? Код 1C v 8.х //Пример изменения цвета текста при выводе данных в табличный документ
Таб.ВывестиСекцию("Контрагент");
// Изменим Текст ячейки, имя которой заранее задали как "ТекстОСостоянии"
Таб.Область("ТекстОСостоянии").Текст = "Хорошо ";
// В зависимости от условия изменим Цвет Текста
Если Раз<0 Тогда
Таб.Область(Таб.ВысотаТаблицы(),9,Таб.ВысотаТаблицы(),9).ЦветТекста(255,0,0);
ИначеЕсли Раз>0 Тогда
Таб.Область(Таб.ВысотаТаблицы(),9,Таб.ВысотаТаблицы(),9).ЦветТекста(0,0,255);
КонецЕсли;
Код 1C v 7.x Таб = СоздатьОбъект( "Таблица" ) ;
Таб. Открыть( "tabldoc.mxl" ) ;
ВыбОбласть = Таб. Область( "R8C4" ) ;
ВыбОбласть. Шрифт( "Arial" ) ;
ВыбОбласть. РазмерШрифта( 10 ) ;
ВыбОбласть. Подчеркнутый( 1 ) ;
ВыбОбласть. ГоризонтальноеПоложение( 3 ) ;
ВыбОбласть. Контроль( 4 ) ;
ВыбОбласть. ЦветФона( 34 , 126 , 211 ) ;
ВыбОбласть. ЦветРамки( 34 , 126 , 211 ) ;
ВыбОбласть. ЦветТекста> ( 34 , 126 , 211 ) ;
Категория:
Табличный документ Как сделать чтобы в колонке табличного поля выводились текущие остатки? На форме в табличное поле добавим Колонку (Имя - НачальноеСальдо, Данные - Пусто и все остальное тоже) и колонку КонечноеСальдо
Зайдем в свойства Табличного поля и в событиях определим процедуру при выводе строки: ДействиеПриВыводеСтроки
А в модуле напишем:
Код 1C v 8.х
Процедура ЗарплатаПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Фильтр = Новый Структура;
Фильтр. Вставить( "ФизЛицо" , ДанныеСтроки. ФизЛицо) ;
Попытка
НачСальдо = РегистрыНакопления. Взаиморасчеты. Остатки( Новый Граница( Дата, ВидГраницы. Исключая) , Фильтр, "ФизЛицо" , "ВзаимРасчет" ) [0 ]. ВзаимРасчет;
Исключение
НачСальдо = 0 ;
КонецПопытки ;
Попытка
КонСальдо = РегистрыНакопления. Взаиморасчеты. Остатки( Новый Граница( Дата, ВидГраницы. Включая) , Фильтр, "ФизЛицо" , "ВзаимРасчет" ) [0 ]. ВзаимРасчет;
Исключение
КонСальдо = 0 ;
КонецПопытки ;
ОформлениеСтроки. Ячейки. НачальноеСальдо. ОтображатьТекст = Истина ;
ОформлениеСтроки. Ячейки. НачальноеСальдо. Текст = ? ( НачСальдо= 0 , "" , НачСальдо) ;
ОформлениеСтроки. Ячейки. КонечноеСальдо. ОтображатьТекст = Истина ;
ОформлениеСтроки. Ячейки. КонечноеСальдо. Текст = ? ( КонСальдо= 0 , "" , КонСальдо) ;
Если НачСальдо < 0 Тогда
ОформлениеСтроки. Ячейки. НачальноеСальдо. ЦветФона = Новый Цвет( 255 , 131 , 131 ) ;
Иначе
ОформлениеСтроки. Ячейки. НачальноеСальдо. ЦветФона = Новый Цвет( 255 , 255 , 231 ) ;
КонецЕсли ;
Если КонСальдо < 0 Тогда
ОформлениеСтроки. Ячейки. КонечноеСальдо. ЦветФона = Новый Цвет( 255 , 131 , 131 ) ;
Иначе
ОформлениеСтроки. Ячейки. КонечноеСальдо. ЦветФона = Новый Цвет( 255 , 255 , 231 ) ;
КонецЕсли ;
КонецПроцедуры
Категория:
Документы