Добавление колонки в Динамический список (ОсновнаяТаблица)

1. newbigrator 18.04.19 11:22 Сейчас в теме
Добрый день,

Пытаюсь решить казалось бы простую задачу.
Берем любую конфу на 8.3.
Требуется добавить колонку в форму списка и заполнять ее произвольным текстом.

Деталь состоит в том, что для Динамического списка задана ОсновнаяТаблица.
И вот в таком случае у меня проблема, не понимаю как обойти ограничение, колонка не добавляется, не появляется.

Задача легко решается для случая Произвольного запроса, но я не хочу изменять это свойство.
Неужели никак не обойти это ограничение?
Gulloper; jobkostya1c_ERP; +2 Ответить
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. dhurricane 18.04.19 11:36 Сейчас в теме
(1) Так что за колонка? Если это не поле основной таблицы, не реквизит какого-либо поля, а также не значение характеристики, то действительно, добавить не меняя запрос не получится.

Можно разве что попробовать подменить одно значение другим. Вытянуть на форму любую возможную колонку, а в обработчике события "ПриПолученииДанныхНаСервере" динамического списка получить нужные значения и подставить их в новую колонку.
3. newbigrator 18.04.19 11:49 Сейчас в теме
(2) Воооот. Все так, я пытался таким способом делать.
Но в событии СписокПриПолученииДанныхНаСервере не могу добраться до колонки.

пытаюсь добраться кодом

КлючиРегистра = Строки.ПолучитьКлючи();
	
Для Каждого Ключ Из КлючиРегистра Цикл
		
	СтрокаСписка = Строки[Ключ];
		
КонецЦикла;
5. dhurricane 18.04.19 12:17 Сейчас в теме
(3) Что из себя представляет эта колонка? Она отображается на форме? Что за основная таблица?
4. tusv 210 18.04.19 11:56 Сейчас в теме
(1) В догонку к (2) . Теоретически. в настройки списка добавить какой нибудь Параметр со списком значений, Значение -Ссылка, представление - Введенное значение, а в ПриПолученииДанныхНаСервере проверять и дополнять. Пример работы ПриПолученииДанныхНаСервере в Зазеркалье. Только это же на один сеанс открытия формы
bugtester; +1 Ответить
6. newbigrator 18.04.19 12:27 Сейчас в теме
(4) (5) Колонка со статичным текстом. Суть моего вопроса - можно ли сделать такое, не используя Произвольный запрос.
Говоря ОсновнаяТаблица имею ввиду что для свойства Динамического списка задана ОсновнаяТаблица Документ.ИмяДокумента.
7. dhurricane 18.04.19 12:44 Сейчас в теме
(6) Не понимаю, где именно возникла сложность с использованием обработчика события "ПриПолученииДанныхНаСервере". Приведу свой пример.

Основная таблица: регистр сведений "УчетнаяПолитика". Единственное измерение - организация. Требуется вывести ее префикс с использованием вышеобозначенного события.

Итак, при создании формы добавляем элемент для вывода своего значения. В качестве примера я взял колонку ссылочного типа (что только усложнило задачу):
Элемент = Элементы.Добавить("СписокМоеЗначение", Тип("ПолеФормы"), Элементы.Список);
Элемент.ПутьКДанным = "Список.ОсновнойСчетУчетаЗатрат";
Элемент.Заголовок = "Мое значение";

Реализация обработчика получения данных динамического списка:
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
	
	МассивСсылок = ОбщегоНазначения.ВыгрузитьКолонку(Строки.ПолучитьКлючи(), "Организация");
	
	РеквизитыСсылок = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(МассивСсылок, "Префикс");
	
	Для каждого Элемент Из Строки Цикл
		
		Ссылка = Элемент.Значение.Данные["Организация"];
		
		ОформлениеЯчейки = Элемент.Значение.Оформление["ОсновнойСчетУчетаЗатрат"];
		ОформлениеЯчейки.УстановитьЗначениеПараметра("Текст", РеквизитыСсылок[Ссылка].Префикс);
		
	КонецЦикла; 
	
КонецПроцедуры
Показать

Все работает, в колонке "Мое значение" вижу префиксы вместо счетов бух. учета.
IKS_T; oleg-ts; Pilokarpios; mirrr; ra9000; Ctrl P; Xo66ut; +7 Ответить
8. newbigrator 18.04.19 13:46 Сейчас в теме
(7) Не прокатывает..
В коллекции Элемент.Значение.Оформление нет добавленного поля, пробоавал и программно и вручную. Добавляю колонку, связываю ее с имеющимся реквизитом и хочу подменить, но в коллекции ее нет!
9. newbigrator 18.04.19 13:51 Сейчас в теме
(7) (8)

Я понял.. подменяемая колонка, должна содержать значение еще не выведенного реквизита.
К примеру если в форме списка уже Номер выведен, то через него сделать колонку, а потом подменить не получится. Нужно чтобы был какой то другой еще не выведенный, но сидящей в основной таблице реквизит.
39. bugtester 590 25.06.21 10:45 Сейчас в теме
(4) спасибо за ссылкуhttps://wonderland.v8.1c.ru/blog/obrabotka-i-oformlenie-dannykh-dinamicheskogo-spiska/ на пример из Зазеркалья! не по этой теме, но пригодилась. в частности ограничением на группировку, отбор, сортировку
10. igslepenko 16 13.02.20 13:23 Сейчас в теме
Как я понимаю, совершенно левую колонку в динамический список, не меняя запроса добавить вообще нельзя?
jobkostya1c_ERP; +1 Ответить
11. dhurricane 13.02.20 13:46 Сейчас в теме
(10) Верно. Можно разве что вытянуть любую случайную колонку из имеющихся, а затем в обработчике "ПриПолученииДанныхНаСервере" подменить представление ее значений.
12. igslepenko 16 13.02.20 14:00 Сейчас в теме
(11) с этим моментом я как раз выяснил, буду тестировать на практике, ну и с подменой запроса разобрался попутно. Не хочется менять формы, а модули я в расширениях ваяю
13. igslepenko 16 17.02.20 07:34 Сейчас в теме
добрый день, такая история - в запросе динамического списка добавил строку ВЫРАЗИТЬ("" КАК СТРОКА(100)) КАК Оригинал
в форме добавил колонку Оригинал
Создал процедуру ПриПолученииДанныхНаСервере
когда запускаю форму, в строках динамического списка моей колонки Оригинал нет, соответственно, обработать, назначить ей значение, не могу
jobkostya1c_ERP; +1 Ответить
14. igslepenko 16 17.02.20 07:41 Сейчас в теме
Уточняю
Конфигурация УТ 11.4
Форма СписокДокументов обработки ЖурналДокументовЗакупки
динамический список СписокДокументыЗакупки
15. igslepenko 16 18.02.20 08:11 Сейчас в теме
Разобрался! Проблема в том, что строку в запросе я менял непосредственно в форме, в свойствах динамического списка, а в модуле формы есть функция, которая при изменении состава списка документов меняет текст запроса. Поменял функцию, все заработало.
16. Hot_Serg 5 07.12.20 17:28 Сейчас в теме
(15) Можно поподробнее, как у Вас получилось.
17. igslepenko 16 08.12.20 01:21 Сейчас в теме
(16) Подробнее: Форма СписокДокументов - Реквизиты - СписокДокументовЗакупки - Свойства - Объект - НастройкаСписка, открываем запрос:
ВЫБРАТЬ
        ...
	ТИПЗНАЧЕНИЯ(РеестрДокументовПереопределяемый.Ссылка) КАК ТипЗначения,
	&СтатусПроверки КАК СтатусПроверки,
	&ИндикаторПроверки КАК ИндикаторПроверки
        /////// Сюда вставил необходимый мне реквизит табличной части списка
	ВЫРАЗИТЬ("" КАК Строка(5)) КАК Оригинал
        ///////
ИЗ
	РегистрСведений.РеестрДокументов КАК РеестрДокументовПереопределяемый
        ...
Показать

Соответсвенно в СписокДокументовЗакупки появился мой реквизит Оригинал, который я добавил на форму. вроде бы все просто, но мой реквизит не хотел появляться на форме в режиме предприятия.
Почесав затылок, полез исследовать модуль через отладчик и наткнулся:
Функция ТекстЗапросаСписокДокументыЗакупки
которая и меняла текст запроса. Вставил туда свое желаемое:
|	&ИндикаторПроверки КАК ИндикаторПроверки,
	// Слепенко И.П. ++ для отражения наличия оригиналов документов
	|	ВЫРАЗИТЬ(NULL КАК БУЛЕВО) КАК Оригинал
	// Слепенко И.П. --
	|ИЗ
	|	РегистрСведений.РеестрДокументов КАК РеестрДокументов

поменяв тип со строки на булево, которое мне показалось более логичным и написал процедуру СписокДокументыЗакупкиПриПолученииДанныхНаСервереПосле (разработки ведутся в расширении), в которой обрабатывал значение реквизита Оригинал и условное оформление списка, типа:
...
			Если Массив.Количество()>0 Тогда
				Для каждого СтрокаМассива Из Массив Цикл
					Если СтрокаМассива.Значение Тогда
						СтрокаСписка.Данные.Оригинал = СтрокаМассива.Значение;
					КонецЕсли; 
				КонецЦикла;
			Иначе
				СтрокаСписка.Данные.Оригинал = ЛОЖЬ;
				СтрокаСписка.Оформление["Оригинал"].УстановитьЗначениеПараметра("ЦветФона",WebЦвета.БледноСиреневый);
			КонецЕсли; 
...
Показать

Надеюсь, понятно изложил и кому-то поможет )
VKuser118833114; AlexUnder; vampo; user693240_abramovskaya; user1503726; +5 Ответить
18. Hot_Serg 5 09.12.20 07:47 Сейчас в теме
(17) Т.е. Запрос изменили в самой конфигурации, сняв с поддержки, а потом в расширении заполнили колонку своим значением?
Полностью в расширении не получилось?
Просто хочется всё реализовать в расширении, не трогая саму конфигурацию.

У меня наподобе задача, добавить колонку в список Счетов в ФормуСписка и заполнять её значениями из РС, который заполняется обработкой от СБИС.

Пояснение:
В Бухгалтерия 3.0 открывают обработку для 1С от СБИС и получают статусы документов ЭДО от СБИС (РС заполняется в 1С) - нужно было руководителю для визуального контроля документов, чтобы не открывать саму обработку от СБИС. (директор есть директор :) ).
19. igslepenko 16 10.12.20 02:02 Сейчас в теме
(18) Нет, все делал в расширении, форму списка с реквизитами, необходимыми в запросе, добавляем в расширение, а там уже все колдовство
20. igslepenko 16 10.12.20 02:51 Сейчас в теме
(18) В запросе динамического списка ФормыСписка документа ПоступлениеТоваровУслуг есть:
ИЗ
Документ.ПоступлениеТоваровУслуг КАК ДокументПоступлениеТоваровУслуг
...
{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияЭД КАК СостоянияЭД
ПО ДокументПоступлениеТоваровУслуг.Ссылка = СостоянияЭД.СсылкаНаОбъект}
...
У вас данные из СБИС хранятся в каком-то регистре? Если нет, то откуда вы их хотите вытаскивать? Если да, то просто добавьте такое же соединение с тем регистром:
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияДокументооборота КАК СостоянияДокументооборота
ПО (СостоянияДокументооборота.ОбъектДокументооборота = ДокументРеализацияТоваровУслуг.Ссылка)

и выше в запросе, например:
ВЫБОР
КОГДА (НЕ ДокументРеализацияТоваровУслуг.Проведен)
ТОГДА ЗНАЧЕНИЕ(Перечисление.СостояниеДокументооборота.ПустаяСсылка)
ИНАЧЕ
ЕСТЬNULL(СостоянияДокументооборота.СостояниеДокументооборота, ЗНАЧЕНИЕ(Перечисление.СостояниеДокументооборота.ПустаяСсылка))
КОНЕЦ КАК СостояниеДокументооборота,

В этом примере у нас есть независимый регистр состояний внутреннего документооборота, в который пишутся состояния, перечисленные в Перечисления.СостоянияДокументооборота. Регистр и Перечисление добавлены в расширении
21. Hot_Serg 5 10.12.20 05:53 Сейчас в теме
(20) Значение я выцепил (нашёл в самой обработке от СБИС, куда они сохраняют данные), попробовал в существующую колонку записывать СостояниеЭД - всё удачно, но потом менеджеры не могут исправлять документ - выдаёт ошибку. Поэтому я и хотел создать в Расширении программно колонку с типом Строка и записывать туда значения от СБИС.

(Конфигурация Бухгалтерия 3.0.86.16, платформа 8.3.15.2107, документ СчетНаОплатуПокупателю, Форма Списка.)

Как получилось:
Создал отдельную Функцию:

&НаСервереБезКонтекста
Функция ПрочитатьПараметрыДокументаСБИС(Ссылка) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ДополнительныеСведения.Объект КАК Объект,
		|	ДополнительныеСведения.Свойство КАК Свойство,
		|	ДополнительныеСведения.Значение КАК Значение
		|ИЗ
		|	РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
		|ГДЕ
		|	ДополнительныеСведения.Объект = &ДокСсылка";
	
	Запрос.УстановитьПараметр("ДокСсылка", Ссылка);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		Если ВыборкаДетальныеЗаписи.Свойство.Наименование = СокрЛП("ДокументСБИС_Статус") Тогда
			Возврат ВыборкаДетальныеЗаписи.Значение;
		КонецЕсли;	
	КонецЦикла; 	
	
КонецФункции

Потом в Процедура РасшСБИС_СписокПриПолученииДанныхНаСервереПосле присваиваю значения:

&НаСервереБезКонтекста
Процедура РасшСБИС_СписокПриПолученииДанныхНаСервереПосле(ИмяЭлемента, Настройки, Строки, Ссылка)
	//ЦветФ = Новый Цвет(0, 128, 0); // Green
	//ЦветФ = Новый Цвет(255, 0, 0); // красный
	//ЦветФ = Новый Цвет(144, 238, 144); // LightGreen	#90EE90	144, 238, 144
	//ЦветФ = Новый Цвет(255, 182, 193); // LightPink	#FFB6C1	255, 182, 193

	//***** Вариант № 2 *****    
    Для каждого Элемент Из Строки Цикл
		
		СтатусСБИС = ПрочитатьПараметрыДокументаСБИС(Ссылка);
        
		Ссылка = Элемент.Значение.Данные.Ссылка;
		СостояниеВерсииЭД = Элемент.Значение.Данные.СостояниеВерсииЭД;		  
		
		ОформлениеЯчейки = Элемент.Значение.Оформление["СостояниеВерсииЭД"];		
		//ОформлениеЯчейки.УстановитьЗначениеПараметра("ЦветФона", ЦветФ);
		ОформлениеЯчейки.УстановитьЗначениеПараметра("Текст", СтатусСБИС);

    КонецЦикла; 
	   
КонецПроцедуры
Показать


Вот пока не получается создать колонку программно в Расширении с типом Строка.
Есть мысли?
22. Hot_Serg 5 10.12.20 07:15 Сейчас в теме
Заметил особенность - если отключить Расширение, то в колонке "Статус ЭДО" подставляются аналогичные по смыслу, но не по названию значения из Перечисления.СостоянияВерсийЭД.
Если обратно подключить Расширение, то колонка заполняется значениями от СБИС, тип Строка.
23. igslepenko 16 11.12.20 10:27 Сейчас в теме
(22) Попробуйте в форме списка в запрос динамического списка добавить:
...
	СостоянияЭД.СостояниеВерсииЭД КАК СостояниеВерсииЭД,
	ВЫБОР
		КОГДА ДокументыСОшибкамиПроверкиКонтрагентов.Документ ЕСТЬ NULL
			ТОГДА ЛОЖЬ
		ИНАЧЕ ИСТИНА
	КОНЕЦ КАК СодержитНекорректныхКонтрагентов,
	ВЫБОР
		КОГДА НаличиеФайлов.ЕстьФайлы ЕСТЬ NULL
			ТОГДА 1
		КОГДА НаличиеФайлов.ЕстьФайлы
			ТОГДА 0
		ИНАЧЕ 1
	КОНЕЦ КАК ЕстьФайлы,//Запятую не забыть
        // Эту строку добавляем
        ВЫРАЗИТЬ("" КАК Строка(100)) КАК СтатусСБИС
        //
ИЗ
Показать
...

Далее, в форме списка в расширении добавляете этот реквизит на форму (предварительно в расширение нужно добавить все реквизиты, которые будете использовать в запросе). В форме у вас будет две процедуры:

&НаСервереБезКонтекста
Процедура Расш1_СписокПриПолученииДанныхНаСервереПосле(ИмяЭлемента, Настройки, Строки)
	МассивСтрокДС = Строки.ПолучитьКлючи();
	Для каждого СтрокаМассиваДС Из МассивСтрокДС Цикл
		СтрокаСписка = Строки[СтрокаМассиваДС];
        ПолученныйСтатусСБИС = ПрочитатьПараметрыДокументаСБИС(СтрокаСписка.Данные.Ссылка);
		Если ПолученныйСтатусСБИС = 0 Тогда
			СтрокаСписка.Данные.СтатусСБИС = "Документ не проведен";
			СтрокаСписка.Оформление["СтатусСБИС"].УстановитьЗначениеПараметра("ЦветФона",WebЦвета.БледноСиреневый);
		иначеЕсли ПолученныйСтатусСБИС = 2 Тогда
			СтрокаСписка.Данные.СтатусСБИС = "Документ удален";
			СтрокаСписка.Оформление["СтатусСБИС"].УстановитьЗначениеПараметра("ЦветФона",WebЦвета.Аквамарин);
		Иначе
			СтрокаСписка.Данные.СтатусСБИС = "Документ проведен";
		КонецЕсли;	
    КонецЦикла; 
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПрочитатьПараметрыДокументаСБИС(СсылкаНаСчет) Экспорт
    Если СсылкаНаСчет.Проведен Тогда
        Возврат 1;
	ИначеЕсли СсылкаНаСчет.ПометкаУдаления Тогда
		Возврат 2;
	Иначе
		Возврат 0;
	КонецЕсли;
КонецФункции
Показать

У меня нет вашей обработки от СБИС, поэтому обработку значений в Вашей процедуре сделал для примера )))
Прикрепленные файлы:
24. igslepenko 16 11.12.20 12:03 Сейчас в теме
(22) Из Вашего кода: Возврат ВыборкаДетальныеЗаписи.Значение; - тип возвращаемого значения какой?
25. Hot_Serg 5 12.12.20 08:12 Сейчас в теме
(24) Тип строка, они в 1С добавили как доп.сведения.
26. igslepenko 16 12.12.20 16:35 Сейчас в теме
(25) Тогда все просто, делаете по описанному мной (23) и берете свою функцию ПрочитатьПараметрыДокументаСБИС:

      &НаСервереБезКонтекста
Процедура Расш1_СписокПриПолученииДанныхНаСервереПосле(ИмяЭлемента, Настройки, Строки)
    МассивСтрокДС = Строки.ПолучитьКлючи();
    Для каждого СтрокаМассиваДС Из МассивСтрокДС Цикл
        СтрокаСписка = Строки[СтрокаМассиваДС];
        ПолученныйСтатусСБИС = ПрочитатьПараметрыДокументаСБИС(СтрокаСписка.Данные.Ссылка);
        СтрокаСписка.Данные.СтатусСБИС = ПолученныйСтатусСБИС ;
// Если хотите разукрасить строки, то раскомментируйте строки ниже и подставьте свои значения,
// получаемые из функции ПрочитатьПараметрыДокументаСБИС
//        Если ПолученныйСтатусСБИС = 0 Тогда
//            СтрокаСписка.Оформление["СтатусСБИС"].УстановитьЗначениеПараметра("ЦветФона",WebЦвета.БледноСиреневый);
//        иначеЕсли ПолученныйСтатусСБИС = 2 Тогда
//            СтрокаСписка.Оформление["СтатусСБИС"].УстановитьЗначениеПараметра("ЦветФона",WebЦвета.Аквамарин);
//        КонецЕсли;    
    КонецЦикла; 
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПрочитатьПараметрыДокументаСБИС(СсылкаНаСчет) Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ДополнительныеСведения.Объект КАК Объект,
        |    ДополнительныеСведения.Свойство КАК Свойство,
        |    ДополнительныеСведения.Значение КАК Значение
        |ИЗ
        |    РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
        |ГДЕ
        |    ДополнительныеСведения.Объект = &ДокСсылка";
    
    Запрос.УстановитьПараметр("ДокСсылка", Ссылка);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если ВыборкаДетальныеЗаписи.Свойство.Наименование = СокрЛП("ДокументСБИС_Статус") Тогда
            Возврат ВыборкаДетальныеЗаписи.Значение;
        КонецЕсли;    
    КонецЦикла;
// Вот здесь, думаю, надо добавить возврат пустой строки
// если выборка будет пустой, функция вернет значение Неопределено
// В данном случае это не сыграет роли, а в других может выдать ошибку
    Возврат "";     
КонецФункции
Показать
27. Hot_Serg 5 14.12.20 06:37 Сейчас в теме
(26)
1. По Запросу:
Конфигурация полностью на поддержке без редактирования - не хотелось бы снисать её в режим редактирования, хотелось бы полностью в расширении всё сделать. Обошёлся пока существующей колонкой Состояние ЭДО.
Попробую на копиях конечно, ради спортивного интереса.

2. Возникла другая проблема:
Когда у пользователя в списке документов не включена колонка состояние ЭДО, тогда выдаётся ошибка и в список вообще нельзя войти:
Ошибка в этой строке: ОформлениеЯчейки = Элемент.Значение.Оформление["СостояниеВерсииЭД"];

По разному искал, как программно включить колонку пользователю - пока безрезультатно.
28. Hot_Serg 5 14.12.20 07:13 Сейчас в теме
Ошибка (в вашем коде тоже наподобе в строке СтрокаСписка.Данные.СостояниеВерсииЭД = ПолученныйСтатусСБИС ;):
Поле объекта не обнаружено (СостояниеВерсииЭД)
{ЭДО_от_СБиС Документ.СчетНаОплатуПокупателю.Форма.ФормаСписка.Форма(19)}: СостояниеВерсииЭД = Элемент.Значение.Данные.СостояниеВерсииЭД;
{ОбщийМодуль.ОбщегоНазначенияБПКлиент.Модуль(823)}: ОткрытьФорму(ПараметрыОткрытия.ИмяФормы,
{ОбщаяФорма.ДлительнаяОперацияОткрытиеСписка.Форма(40)}: ОбщегоНазначенияБПКлиент.ОткрытьОсновнуюФорму(Истина, ПараметрыОткрытияКлиент, Параметры.ПараметрыОткрываемойФормы);
29. igslepenko 16 14.12.20 08:06 Сейчас в теме
(27) (28) Я Вам полностью расписал все, что надо сделать, даже код в Форму списка просто скопипастить можно.
Ошибка у вас возникла из-за того, что Вы не выполнили:
Далее, в форме списка в расширении добавляете этот реквизит на форму (предварительно в расширение нужно добавить все реквизиты, которые будете использовать в запросе)
-

Еще раз, по порядку. Вся!!! доработка происходит в расширении. В основной конфе делать ничего не надо.
1. В расширение добавляете документ СчетНаОплатуПокупателю, Форма Списка.
2. В расширение добавляете:
- реквизиты Организация, Контрагент, Комментарий, ВалютаДокумента, СуммаДокумента документа СчетНаОплатуПокупателю;
- перечисления СостоянияВерсийЭД, СтатусОплатыСчета, СтатусыОтгрузки;
- измерение СсылкаНаОбъект и ресурс СостояниеВерсииЭД регистра сведений СостоянияЭД;
- измерения Организация, Документ и ресурсы Статус, ДополнительныйСтатус регистра сведений СтатусыДокументов;
- измерение Документ регистра сведений ДокументыСОшибкамиПроверкиКонтрагентов;
- измерение ОбъектСФайлами и ресурс ЕстьФайлы регистра сведений НаличиеФайлов;
3. В форме списка в расширении меняете запрос динамического списка (Список-Объект-Настройка списка-Открыть) на следующий:
ВЫБРАТЬ
	ВЫБОР
		КОГДА ДокументСчетНаОплатуПокупателю.ПометкаУдаления = ИСТИНА
			ТОГДА 2
		КОГДА ДокументСчетНаОплатуПокупателю.Проведен = ИСТИНА
			ТОГДА 1
		ИНАЧЕ 0
	КОНЕЦ КАК СостояниеДокумента,
	ДокументСчетНаОплатуПокупателю.Ссылка КАК Ссылка,
	ДокументСчетНаОплатуПокупателю.ПометкаУдаления КАК ПометкаУдаления,
	ДокументСчетНаОплатуПокупателю.Номер КАК Номер,
	ДокументСчетНаОплатуПокупателю.Дата КАК Дата,
	ДокументСчетНаОплатуПокупателю.Проведен КАК Проведен,
	ДокументСчетНаОплатуПокупателю.Организация КАК Организация,
	ДокументСчетНаОплатуПокупателю.Контрагент КАК Контрагент,
	ДокументСчетНаОплатуПокупателю.Комментарий КАК Комментарий,
	ДокументСчетНаОплатуПокупателю.ВалютаДокумента КАК ВалютаДокумента,
	ДокументСчетНаОплатуПокупателю.СуммаДокумента КАК СуммаДокумента,
	ЕСТЬNULL(СрокиОплатыДокументов.СрокОплаты, ДАТАВРЕМЯ(1, 1, 1)) КАК СрокОплаты,
	ВЫРАЗИТЬ(ЕСТЬNULL(СтатусыДокументов.Статус, &СтатусОплатыПоУмолчанию) КАК Перечисление.СтатусОплатыСчета) КАК Оплата,
	ВЫРАЗИТЬ(ЕСТЬNULL(СтатусыДокументов.ДополнительныйСтатус, &СтатусОтгрузкиПоУмолчанию) КАК Перечисление.СтатусыОтгрузки) КАК Отгрузка,
	СостоянияЭД.СостояниеВерсииЭД КАК СостояниеВерсииЭД,
	ВЫБОР
		КОГДА ДокументыСОшибкамиПроверкиКонтрагентов.Документ ЕСТЬ NULL
			ТОГДА ЛОЖЬ
		ИНАЧЕ ИСТИНА
	КОНЕЦ КАК СодержитНекорректныхКонтрагентов,
	ВЫБОР
		КОГДА НаличиеФайлов.ЕстьФайлы ЕСТЬ NULL
			ТОГДА 1
		КОГДА НаличиеФайлов.ЕстьФайлы
			ТОГДА 0
		ИНАЧЕ 1
	КОНЕЦ КАК ЕстьФайлы,
// Добавленная строка
    ВЫРАЗИТЬ("" КАК Строка(100)) КАК СтатусСБИС
ИЗ
	Документ.СчетНаОплатуПокупателю КАК ДокументСчетНаОплатуПокупателю
		{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыДокументов КАК СтатусыДокументов
		ПО ДокументСчетНаОплатуПокупателю.Организация = СтатусыДокументов.Организация
			И ДокументСчетНаОплатуПокупателю.Ссылка = СтатусыДокументов.Документ}
		{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СрокиОплатыДокументов КАК СрокиОплатыДокументов
		ПО ДокументСчетНаОплатуПокупателю.Организация = СрокиОплатыДокументов.Организация
			И ДокументСчетНаОплатуПокупателю.Ссылка = СрокиОплатыДокументов.Документ}
		{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияЭД КАК СостоянияЭД
		ПО (СостоянияЭД.СсылкаНаОбъект = ДокументСчетНаОплатуПокупателю.Ссылка)}
		{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДокументыСОшибкамиПроверкиКонтрагентов КАК ДокументыСОшибкамиПроверкиКонтрагентов
		ПО ДокументСчетНаОплатуПокупателю.Ссылка = ДокументыСОшибкамиПроверкиКонтрагентов.Документ
			И (&ИспользованиеПроверкиВозможно)}
		{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеФайлов КАК НаличиеФайлов
		ПО (НаличиеФайлов.ОбъектСФайлами = ДокументСчетНаОплатуПокупателю.Ссылка)}
Показать

4. В расширении добавляете реквизит Списка СтатусСБИС на форму (см. рис.)
5. В расширении в модуле формы списка прописываете:
&НаСервереБезКонтекста
Процедура Расш1_СписокПриПолученииДанныхНаСервереПосле(ИмяЭлемента, Настройки, Строки)
    МассивСтрокДС = Строки.ПолучитьКлючи();
    Для каждого СтрокаМассиваДС Из МассивСтрокДС Цикл
        СтрокаСписка = Строки[СтрокаМассиваДС];
        ПолученныйСтатусСБИС = ПрочитатьПараметрыДокументаСБИС(СтрокаСписка.Данные.Ссылка);
        СтрокаСписка.Данные.СтатусСБИС = ПолученныйСтатусСБИС ;
// Если хотите разукрасить строки, то раскомментируйте строки ниже и подставьте свои значения,
// получаемые из функции ПрочитатьПараметрыДокументаСБИС
//        Если ПолученныйСтатусСБИС = 0 Тогда
//            СтрокаСписка.Оформление["СтатусСБИС"].УстановитьЗначениеПараметра("ЦветФона",WebЦвета.БледноСиреневый);
//        иначеЕсли ПолученныйСтатусСБИС = 2 Тогда
//            СтрокаСписка.Оформление["СтатусСБИС"].УстановитьЗначениеПараметра("ЦветФона",WebЦвета.Аквамарин);
//        КонецЕсли;    
    КонецЦикла; 
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПрочитатьПараметрыДокументаСБИС(СсылкаНаСчет) Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ДополнительныеСведения.Объект КАК Объект,
        |    ДополнительныеСведения.Свойство КАК Свойство,
        |    ДополнительныеСведения.Значение КАК Значение
        |ИЗ
        |    РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
        |ГДЕ
        |    ДополнительныеСведения.Объект = &ДокСсылка";
    
    Запрос.УстановитьПараметр("ДокСсылка", Ссылка);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если ВыборкаДетальныеЗаписи.Свойство.Наименование = СокрЛП("ДокументСБИС_Статус") Тогда
            Возврат ВыборкаДетальныеЗаписи.Значение;
        КонецЕсли;    
    КонецЦикла;
// Вот здесь, думаю, надо добавить возврат пустой строки
// если выборка будет пустой, функция вернет значение Неопределено
// В данном случае это не сыграет роли, а в других может выдать ошибку
    Возврат "";     
КонецФункции
Показать

6. Сохраняете изменения и в режиме предприятия открываете список счетов и видите результат (см. второй рисунок)
Прикрепленные файлы:
30. igslepenko 16 14.12.20 08:50 Сейчас в теме
(27)

2. Возникла другая проблема:
Когда у пользователя в списке документов не включена колонка состояние ЭДО, тогда выдаётся ошибка и в список вообще нельзя войти:
Ошибка в этой строке: ОформлениеЯчейки = Элемент.Значение.Оформление["СостояниеВерсииЭД"];

По разному искал, как программно включить колонку пользователю - пока безрезультатно.

Естественно, такая ошибка возникнет при скрытии колонки в форме, так как в коде Вы обращаетесь по ключу ячейки. Раскраска в коде применяется к конкретной ячейке, если у пользователей эта ячейка скрыта, возникает описанная ошибка. Чтобы исключить эту ошибку, либо делаете условное оформление динамического списка (Список-Объект-Настройка списка-Открыть), закладка Настройки-Условное оформление, либо можете воспользоваться статьей Евгения Сизова Программное условное оформление динамического списка для раскраски строк целиком, либо, так как данные строки списка имеют тип ДанныеФормыСтруктура, воспользоваться конструкцией:
Если СтрокаСписка.Данные.Свойство("СтатусСБИС") Тогда
	СтрокаСписка.Оформление["СтатусСБИС"].УстановитьЗначениеПараметра("ЦветФона",WebЦвета.БледноСиреневый);
КонецЕсли;

Все три варианта реализуются, третий за 5 минут, первый за 10 минут, второй подольше
31. SlavaKron 14.12.20 09:03 Сейчас в теме
Можно в процедуре ПриПолученииДанныхНаСервере проверять есть ли такое оформление и если его нет, просто не оформлять его:
ПоказыватьСостояниеВерсииЭД = Истина;
Для Каждого КлючИЗначение Из Строки Цикл 
	Если КлючИЗначение.Значение.Оформление.Получить("СостояниеВерсииЭД") = Неопределено Тогда
		ПоказыватьСостояниеВерсииЭД = Ложь;
	КонецЕсли;
	Прервать;
КонецЦикла;
33. igslepenko 16 14.12.20 09:09 Сейчас в теме
(31) В (30) используется стандартный метод Структуры Свойство. Если в полученной структуре нет такого свойства, то ничего не делаем )
32. igslepenko 16 14.12.20 09:06 Сейчас в теме
На всякий случай, текст процедуры полностью:
Процедура Расш1_СписокПриПолученииДанныхНаСервереПосле(ИмяЭлемента, Настройки, Строки)
    МассивСтрокДС = Строки.ПолучитьКлючи();
    Для каждого СтрокаМассиваДС Из МассивСтрокДС Цикл
        СтрокаСписка = Строки[СтрокаМассиваДС];
        ПолученныйСтатусСБИС = ПрочитатьПараметрыДокументаСБИС(СтрокаСписка.Данные.Ссылка);
        СтрокаСписка.Данные.СтатусСБИС = ПолученныйСтатусСБИС ;
        Если ПолученныйСтатусСБИС = "Первый вариант статуса" Тогда
            Если СтрокаСписка.Данные.Свойство("СтатусСБИС") Тогда
                СтрокаСписка.Оформление["СтатусСБИС"].УстановитьЗначениеПараметра("ЦветФона",WebЦвета.БледноСиреневый);
            КонецЕсли;
        ИначеЕсли ПолученныйСтатусСБИС = "Второй вариант статуса" Тогда
            Если СтрокаСписка.Данные.Свойство("СтатусСБИС") Тогда
                СтрокаСписка.Оформление["СтатусСБИС"].УстановитьЗначениеПараметра("ЦветФона",WebЦвета.Аквамарин);
            КонецЕсли;
        КонецЕсли;    
    КонецЦикла; 
КонецПроцедуры
Показать
34. Hot_Serg 5 14.12.20 09:29 Сейчас в теме
(32) Почему через ПолучитьКлючи() ?
Сразу через Строки можно получить данные строки, как изначально у меня.
35. igslepenko 16 14.12.20 10:24 Сейчас в теме
(34) Что пнем по сове, что совой об пень. Получайте сразу через строки
Если Вы используете метод ПолучитьКлючи - в массив сразу грузятся ключевые значения списка документов - ссылки на документы. В дальнейшем не нужно обращение к ссылке через точки. Я не поправил это в своем коде.
Для каждого СтрокаМассиваДС Из МассивСтрокДС Цикл
	СтрокаСписка = Строки[СтрокаМассиваДС];
        ПолученныйСтатусСБИС = ПрочитатьПараметрыДокументаСБИС(СтрокаСписка.Данные.Ссылка);

Правильно будет:
Для каждого СтрокаМассиваДС Из МассивСтрокДС Цикл
	СтрокаСписка = Строки[СтрокаМассиваДС];
        ПолученныйСтатусСБИС = ПрочитатьПараметрыДокументаСБИС(СтрокаМассиваДС);

Пока с Вами общался, поправил код, чтобы ошибок не выдавал:
МассивСтрокДС = Строки.ПолучитьКлючи();
Для каждого СтрокаМассиваДС Из МассивСтрокДС Цикл
	СтрокаСписка = Строки[СтрокаМассиваДС];
        ПолученныйСтатусСБИС = ПрочитатьПараметрыДокументаСБИС(СтрокаМассиваДС);
	Если СтрокаСписка.Данные.Свойство("СтатусСБИС") Тогда
		СтрокаСписка.Данные.СтатусСБИС = ПолученныйСтатусСБИС;
		Если ПолученныйСтатусСБИС = "Х" Тогда
			СтрокаСписка.Оформление["СтатусСБИС"].УстановитьЗначениеПараметра("ЦветФона",WebЦвета.БледноСиреневый);
		ИначеЕсли ПолученныйСтатусСБИС = "У" Тогда
			СтрокаСписка.Оформление["СтатусСБИС"].УстановитьЗначениеПараметра("ЦветФона",WebЦвета.Аквамарин);
		КонецЕсли;	
	КонецЕсли;
КонецЦикла; 
Показать
36. igslepenko 16 14.12.20 11:01 Сейчас в теме
(34) Ваш вариант без цветового оформления:
    Для каждого Элемент Из Строки Цикл
        
        Ссылка = Элемент.Значение.Данные.Ссылка;
        СтатусСБИС = ПрочитатьПараметрыДокументаСБИС(Ссылка);
        Если Элемент.Значение.Данные.Свойство("СтатусСБИС") Тогда
            Элемент.Значение.Данные.СтатусСБИС = СтатусСБИС;
        КонецЕсли;
    КонецЦикла; 
Показать
37. Hot_Serg 5 14.12.20 18:06 Сейчас в теме
Спасибо за поддержку!!!
38. igslepenko 16 15.12.20 04:50 Сейчас в теме
(37) Не за что, рад, что у Вас все получилось
40. red_kid369 21.11.21 16:21 Сейчас в теме
пожалуйста помоги


{ЖурналДокументов.ОбщийЖурнал.Форма.ФормаСписка.Форма(178)}: Значение не является значением объектного типа (ВОЕН)
зн=зн.ВОЕН;

ВОЕН=Контрагент ИНН
проблема возникает только при наличии документов, у которых нет контрагента
Если в журнале есть только контрагентские документы, проблем нет.
Например Документы ПрочиеРасходы нет контрагент

Процедура РеестрДокуметов()
    ТабДок=новый ТабличныйДокумент ;
    Макет =ЖурналыДокументов.ОбщийЖурнал.ПолучитьМакет("РеестрДокументов");
    обЗаголовок=Макет.ПолучитьОбласть("Заголовок|Графа");
    обЗаголовок.Параметры.заголовок="ОбщийЖурнал";
    
    ВидСравненияДата=ЖурналДокументовСписок.Отбор.Дата.ВидСравнения;
    обЗаголовок.Параметры.ДатаНачало=?(ЗначениеЗаполнено(ЖурналДокументовСписок.Отбор.Дата.ЗначениеС),ЖурналДокументовСписок.Отбор.Дата.ЗначениеС,"");
    обЗаголовок.Параметры.ДатаКонца=?(ЗначениеЗаполнено(ЖурналДокументовСписок.Отбор.Дата.ЗначениеПо),ЖурналДокументовСписок.Отбор.Дата.ЗначениеПо,"");
    Если  ВидСравненияДата=ВидСравнения.БольшеИлиРавно тогда
        обЗаголовок.Параметры.ДатаНачало= ЖурналДокументовСписок.Отбор.Дата.Значение ;
    Конецесли;
    Если  ВидСравненияДата=ВидСравнения.МеньшеИлиРавно тогда
        обЗаголовок.Параметры.ДатаКонца=ЖурналДокументовСписок.Отбор.Дата.Значение ;
    Конецесли;
    

    обЗаголовок. Область(1,1,1,1).ШиринаКолонки=ЭлементыФормы.ЖурналДокументовСписок.Колонки["ВидДокумента"].Ширина;
    

    ТабДок.Вывести(обЗаголовок);
    ОбШапка=макет.ПолучитьОбласть("Шапка|Графа");
    ////////////ТекКолонка=0;

    ////////////для каждого Колонка из ЭлементыФормы.ЖурналДокументовСписок.Колонки цикл

    ////////////    если Колонка.Имя="Картинка" тогда

    ////////////        Продолжить;

    ////////////    Конецесли;

    ////////////    ТекКолонка=ТекКолонка+1;

    ////////////    ОбШапка.Область(1,1,1,1).ШиринаКолонки=Колонка.Ширина;

    ////////////    если ТекКолонка=1 тогда

    ////////////    Иначе

    ////////////        ТабДок.Присоединить(ОбШапка);

    ////////////    Конецесли;

    ////////////КонецЦикла;

    
    
    СписокРеквизиты=Новый СписокЗначений;
    ТекКолонка=0;
    
    для каждого Колонка из ЭлементыФормы.ЖурналДокументовСписок.Колонки цикл
        если Колонка.Имя="Картинка" тогда
            Продолжить;
        Конецесли;
        ТекКолонка=ТекКолонка+1;
        ОбШапка.Параметры.наимГрафа=Колонка.ТекстШапки;
        ОбШапка.Область(1,1,1,1).ШиринаКолонки=Колонка.Ширина;
        если ТекКолонка=1 тогда
            ТабДок.Вывести(ОбШапка);
        Иначе
            ТабДок.Присоединить(ОбШапка);
        Конецесли;
    КонецЦикла;
    
    //

    //

    
    
    Запрос=новый запрос;
    запрос_Текст="ВЫБРАТЬ * 
                 |ИЗ
                 |    ЖурналДокументов.ОбщийЖурнал КАК ОбщийЖурнал" ;
                 
    ОтборЖурнал=ЖурналДокументовСписок.Отбор;
    
    ТекстУсловие ="";
    н=0;
    для каждого ВыбОтбор из ОтборЖурнал цикл
        если не ВыбОтбор.Использование тогда
            продолжить;
        Конецесли;
        
        н=н+1;
        
        если ВыбОтбор.ВидСравнения=ВидСравнения.Больше тогда
            условие=ВыбОтбор.Имя+">&"+ВыбОтбор.Имя;
            запрос.УстановитьПараметр(ВыбОтбор.Имя,ВыбОтбор.Значение);
        Иначеесли ВыбОтбор.ВидСравнения=ВидСравнения.БольшеИлиРавно тогда
            условие=ВыбОтбор.Имя+">=&"+ВыбОтбор.Имя;
            запрос.УстановитьПараметр(ВыбОтбор.Имя,ВыбОтбор.Значение);
            
        Иначеесли ВыбОтбор.ВидСравнения=ВидСравнения.Равно тогда
            если  ВыбОтбор.Имя="ВидДокумента" тогда
                условие="Выразить(Ссылка как Документ."+ВыбОтбор.Значение.Имя+")<>НЕОПРЕДЕЛЕНО";
            Иначе
                условие=ВыбОтбор.Имя+"=&"+ВыбОтбор.Имя;
                запрос.УстановитьПараметр(ВыбОтбор.Имя,ВыбОтбор.Значение);
            КонецЕсли;
        Иначеесли ВыбОтбор.ВидСравнения=ВидСравнения.НеРавно тогда
            условие="НЕ "+ВыбОтбор.Имя+"=&"+ВыбОтбор.Имя;
            запрос.УстановитьПараметр(ВыбОтбор.Имя,ВыбОтбор.Значение);
            
        Иначеесли ВыбОтбор.ВидСравнения=ВидСравнения.Меньше тогда
            условие=ВыбОтбор.Имя+"<&"+ВыбОтбор.Имя;
            запрос.УстановитьПараметр(ВыбОтбор.Имя,ВыбОтбор.Значение);
        Иначеесли ВыбОтбор.ВидСравнения=ВидСравнения.МеньшеИлиРавно тогда
            условие=ВыбОтбор.Имя+"<=&"+ВыбОтбор.Имя;
            запрос.УстановитьПараметр(ВыбОтбор.Имя,ВыбОтбор.Значение);
            
        Иначеесли ВыбОтбор.ВидСравнения=ВидСравнения.ВИерархии тогда
            условие=ВыбОтбор.Имя+" В Иерархии (&"+ВыбОтбор.Имя+")";
            запрос.УстановитьПараметр(ВыбОтбор.Имя,ВыбОтбор.Значение);
        Иначеесли ВыбОтбор.ВидСравнения=ВидСравнения.НеВИерархии тогда
            условие="НЕ "+ВыбОтбор.Имя+" В Иерархии (&"+ВыбОтбор.Имя+")";
            запрос.УстановитьПараметр(ВыбОтбор.Имя,ВыбОтбор.Значение);
            
        Иначеесли ВыбОтбор.ВидСравнения=ВидСравнения.ВСписке тогда
            условие=ВыбОтбор.Имя+" В (&"+ВыбОтбор.Имя+")";
            запрос.УстановитьПараметр(ВыбОтбор.Имя,ВыбОтбор.Значение);
        Иначеесли ВыбОтбор.ВидСравнения=ВидСравнения.НеВСписке тогда
            условие="НЕ "+ВыбОтбор.Имя+" В (&"+ВыбОтбор.Имя+")";
            запрос.УстановитьПараметр(ВыбОтбор.Имя,ВыбОтбор.Значение);
            
            
        Иначеесли ВыбОтбор.ВидСравнения=ВидСравнения.ВСпискеПоИерархии тогда
            условие=ВыбОтбор.Имя+" В Иерархии (&"+ВыбОтбор.Имя+")";
            запрос.УстановитьПараметр(ВыбОтбор.Имя,ВыбОтбор.Значение);
        Иначеесли ВыбОтбор.ВидСравнения=ВидСравнения.НеВСпискеПоИерархии тогда
            условие="НЕ "+ВыбОтбор.Имя+" В Иерархии (&"+ВыбОтбор.Имя+")";
            запрос.УстановитьПараметр(ВыбОтбор.Имя,ВыбОтбор.Значение);
            
        Иначеесли ВыбОтбор.ВидСравнения=ВидСравнения.Интервал тогда
            условие="("+ВыбОтбор.Имя+">&"+ВыбОтбор.Имя+"С и "+ВыбОтбор.Имя+"<&"+ВыбОтбор.Имя+"По)";
            запрос.УстановитьПараметр(ВыбОтбор.Имя+"С",ВыбОтбор.ЗначениеС);
            запрос.УстановитьПараметр(ВыбОтбор.Имя+"По",ВыбОтбор.ЗначениеПо);
        Иначеесли ВыбОтбор.ВидСравнения=ВидСравнения.ИнтервалВключаяГраницы тогда
            условие="("+ВыбОтбор.Имя+">=&"+ВыбОтбор.Имя+"С и "+ВыбОтбор.Имя+"<=&"+ВыбОтбор.Имя+"По)";
            запрос.УстановитьПараметр(ВыбОтбор.Имя+"С",ВыбОтбор.ЗначениеС);
            запрос.УстановитьПараметр(ВыбОтбор.Имя+"По",ВыбОтбор.ЗначениеПо);
        Иначеесли ВыбОтбор.ВидСравнения=ВидСравнения.ИнтервалВключаяНачало тогда
            условие="("+ВыбОтбор.Имя+">=&"+ВыбОтбор.Имя+"С и "+ВыбОтбор.Имя+"<&"+ВыбОтбор.Имя+"По)";
            запрос.УстановитьПараметр(ВыбОтбор.Имя+"С",ВыбОтбор.ЗначениеС);
            запрос.УстановитьПараметр(ВыбОтбор.Имя+"По",ВыбОтбор.ЗначениеПо);
        Иначеесли ВыбОтбор.ВидСравнения=ВидСравнения.ИнтервалВключаяОкончание тогда
            условие="("+ВыбОтбор.Имя+">&"+ВыбОтбор.Имя+"С и "+ВыбОтбор.Имя+"<=&"+ВыбОтбор.Имя+"По)";
            запрос.УстановитьПараметр(ВыбОтбор.Имя+"С",ВыбОтбор.ЗначениеС);
            запрос.УстановитьПараметр(ВыбОтбор.Имя+"По",ВыбОтбор.ЗначениеПо);
            
        Иначеесли ВыбОтбор.ВидСравнения=ВидСравнения.Содержит тогда
            условие=ВыбОтбор.Имя+" ПОДОБНО &"+ВыбОтбор.Имя;
            запрос.УстановитьПараметр(ВыбОтбор.Имя,ВыбОтбор.Значение);
        Иначеесли ВыбОтбор.ВидСравнения=ВидСравнения.Содержит тогда
            условие="НЕ "+ВыбОтбор.Имя+" ПОДОБНО &"+ВыбОтбор.Имя;
            запрос.УстановитьПараметр(ВыбОтбор.Имя,ВыбОтбор.Значение);
        Конецесли ;
        ТекстУсловие=ТекстУсловие+Символы.ПС  +?(н>1," И ","")+условие;
    Конеццикла;
    
    если ТекстУсловие<>"" тогда
         запрос_Текст=запрос_Текст+"
         |ГДЕ
         |"+ТекстУсловие;
     Конецесли;
     
     запрос.Текст= запрос_Текст;
     Выборка=запрос.Выполнить().Выбрать();
     ТЗИтог=Новый ТаблицаЗначений;
     ТЗИтог.Колонки.Добавить("Синоним",Новый ОписаниеТипов("Строка"));
     ТЗИтог.Колонки.Добавить("СуммаДокумента",Новый ОписаниеТипов("Число"));
     ТЗИтог.Колонки.Добавить("РознСумма",Новый ОписаниеТипов("Число"));
     
    
    
                 
    обДетал=Макет.ПолучитьОбласть("Детал|Графа");
    пока  Выборка.Следующий() цикл
        ТекКолонка=0;
        ДокОб=выборка.ссылка.ПолучитьоБъект();
        Синоним=ДокОб.Метаданные().Синоним;
        РознСумма=0;
        СуммаДокумента=0;
        для каждого Колонка из ЭлементыФормы.ЖурналДокументовСписок.Колонки цикл
            если Колонка.Имя="Картинка" тогда
                Продолжить;
            Конецесли;
            если Колонка.Имя="ВидДокумента" тогда
                зн=Синоним;
            Иначеесли Колонка.Имя="ВОЕН" тогда
                зн=зн.ВОЕН;    
            Иначеесли Колонка.Имя="РознСумма" тогда
                зн="";
                если РаботаСТЧДокумента.ЕстьРеквизитТЧ(ДокОб,"РознСумма","Товары")<>неопределено тогда
                    РознСумма=  ДокОб.товары.Итог("РознСумма");
                     зн=формат(рознСумма,"ЧДЦ=2");
                Конецесли;
            Иначе
                зн =Выборка[Колонка.Имя];
            Конецесли;
            обДетал.Область(1,1,1,1).ГоризонтальноеПоложение=колонка.ГоризонтальноеПоложениеВКолонке;
            обДетал.Область(1,1,1,1).Формат=Колонка.Формат;
            
            если  Колонка.Имя="СуммаДокумента" и значениеЗаполнено(зн) тогда
                СуммаДокумента=зн;
            Конецесли;
            
            обДетал.Параметры.Значение=зн;
            
            ТекКолонка=ТекКолонка+1;
            если ТекКолонка=1 тогда
                ТабДок.Вывести(обДетал);
            Иначе
                ТабДок.Присоединить(обДетал);
            Конецесли;
        КонецЦикла;
        
        стр=ТЗИтог.Найти(Синоним,"Синоним"); 
        если Стр=неопределено тогда
            стр= ТЗИтог.Добавить();
            стр.синоним= Синоним;
        Конецесли;
        стр.СуммаДокумента=Стр.СуммаДокумента+СуммаДокумента;
        стр.РознСумма=Стр.РознСумма+РознСумма;
        
        
    Конеццикла;
    
    ОбИтог= Макет.ПолучитьОбласть("Итого");
    ТабДок.Вывести(Макет.ПолучитьОбласть("Подвал"));


    для каждого СтрИтог из   ТЗИтог Цикл
        ОбИтог.Параметры.Заполнить(СтрИтог);
        ТабДок.Вывести(ОбИтог);

    Конеццикла;
    
    
    ТабДок.Показать("ОбщийЖурнал");    
    
КонецПроцедуры

Процедура ДействияФормыкнРеестрДокументов(Кнопка)
    РеестрДокуметов();
КонецПроцедуры

Процедура ЖурналДокументовСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    Об=ДанныеСтроки.Ссылка.ПолучитьОбъект();
    Если не ПустаяСтрока(ДанныеСтроки.Контрагент) Тогда
    ОформлениеСтроки.Ячейки.ВОЕН.Значение=ДанныеСтроки.Контрагент.ВОЕН;
    КонецЕсли;
    //СуммаДокумента=0;

    //если об.Метаданные().Имя="СписаниеТоваров" или об.Метаданные().Имя="ПеремещениеТоваров" тогда

    //    запрос=новый запрос;

    //    запрос.Текст="ВЫБРАТЬ

    //                 |    ТоварыНаСкладахОбороты.СебестоимостьРасход

    //                 |ИЗ

    //                 |    РегистрНакопления.ТоварыНаСкладах.Обороты(, , Регистратор, ) КАК ТоварыНаСкладахОбороты

    //                 |ГДЕ

    //                 |    ТоварыНаСкладахОбороты.Регистратор = &Регистратор

    //                 |

    //                 |СГРУППИРОВАТЬ ПО

    //                 |    ТоварыНаСкладахОбороты.СебестоимостьРасход";

    //    запрос.УстановитьПараметр("Регистратор",ДанныеСтроки.Ссылка);

    //    СуммаДокумента=запрос.Выполнить().Выгрузить().Итог("СебестоимостьРасход");

    //ИначеЕсли РаботаСТЧДокумента.ЕстьРеквизитШапки(Об,"СуммаДокумента")<> неопределено тогда

    //    СуммаДокумента=об.СуммаДокумента;

    //ИначеЕсли РаботаСТЧДокумента.ЕстьРеквизитШапки(Об,"Сумма")<> неопределено тогда

    //    СуммаДокумента=об.Сумма;

    //Конецесли;

    //    ОформлениеСтроки.Ячейки.СуммаДокумента.значение=СуммаДокумента;

                     
КонецПроцедуры
Показать
41. Gulloper 08.10.22 12:30 Сейчас в теме
Здравствуйте!

спасибо большое,
ваша ветка помогла решить подобную задачу, не снимая с поддержки БД.
Добавлю ссылку на:
https://its.1c.ru/db/metod8dev/content/3544/hdoc
42. poyson 14.03.23 16:49 Сейчас в теме
43. psa247 17 28.09.23 08:02 Сейчас в теме
Мой вариант решения задачи (необходимо добавить вычисляемую колонку "НДФЛ к перечислению" для динамического списка)
- помещаем в расширение форму списка документов
- добавляем в расширение
&НаСервере
Процедура Д_ПриСозданииНаСервереПеред(Отказ, СтандартнаяОбработка)
	ЭтотОбъект.Список.ТекстЗапроса = ПолучитьЗапрос();
	ЭтотОбъект.Список.ДинамическоеСчитываниеДанных = ИСТИНА;
	Эл = Элементы.Вставить("НДФЛКПеречислению", Тип("ПолеФормы"), Элементы.Список, Элементы.ПеречислениеНДФЛРеквизиты);
	Эл.Заголовок = "НДФЛ к перечислению";
	Эл.ПутьКДанным = "Список.СуммаНДФЛОбщая";
КонецПроцедуры


и добавляем функцию, которая меняет текст запроса:

Функция ПолучитьЗапрос()
	Возврат("ВЫБРАТЬ
	|	СУММА(Таблица.Сумма) КАК Сумма,
	|	СУММА(Таблица.СуммаСПревышения) КАК СуммаСПревышения,
	|	Таблица.Ссылка КАК Док
	|ПОМЕСТИТЬ ВРЕМ
	|ИЗ
	|	Документ.ВедомостьНаВыплатуЗарплатыВБанк.НДФЛ КАК Таблица
	
	|СГРУППИРОВАТЬ ПО
	|	Таблица.Ссылка
	
	|ОБЪЕДИНИТЬ ВСЕ
	
	|ВЫБРАТЬ
	|	СУММА(Таблица.Сумма),
	|	СУММА(Таблица.СуммаСПревышения),
	|	Таблица.Ссылка
	|ИЗ
	|	Документ.ВедомостьНаВыплатуЗарплатыВКассу.НДФЛ КАК Таблица
	
	|СГРУППИРОВАТЬ ПО
	|	Таблица.Ссылка
	
	|ОБЪЕДИНИТЬ ВСЕ
	
	|ВЫБРАТЬ
	|	СУММА(Таблица.Сумма),
	|	СУММА(Таблица.СуммаСПревышения),
	|	Таблица.Ссылка
	|ИЗ
	|	Документ.ВедомостьНаВыплатуЗарплатыПеречислением.НДФЛ КАК Таблица
	
	|СГРУППИРОВАТЬ ПО
	|	Таблица.Ссылка
	
	|ОБЪЕДИНИТЬ ВСЕ
	
	|ВЫБРАТЬ
	|	СУММА(Таблица.Сумма),
	|	СУММА(Таблица.СуммаСПревышения),
	|	Таблица.Ссылка
	|ИЗ
	|	Документ.ВедомостьНаВыплатуЗарплатыРаздатчиком.НДФЛ КАК Таблица
	
	|СГРУППИРОВАТЬ ПО
	|	Таблица.Ссылка
	|;
	
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ЖурналДокументовВедомостиНаВыплатуЗарплаты.Ссылка КАК Ссылка,
	|	ЖурналДокументовВедомостиНаВыплатуЗарплаты.Дата КАК Дата,
	|	НАЧАЛОПЕРИОДА(ЖурналДокументовВедомостиНаВыплатуЗарплаты.Дата, ДЕНЬ) КАК ДатаДокумента,
	|	ЖурналДокументовВедомостиНаВыплатуЗарплаты.ПометкаУдаления КАК ПометкаУдаления,
	|	ЖурналДокументовВедомостиНаВыплатуЗарплаты.Номер КАК Номер,
	|	ЖурналДокументовВедомостиНаВыплатуЗарплаты.Проведен КАК Проведен,
	|	ЖурналДокументовВедомостиНаВыплатуЗарплаты.Организация КАК Организация,
	|	ЖурналДокументовВедомостиНаВыплатуЗарплаты.Ответственный КАК Ответственный,
	|	ЖурналДокументовВедомостиНаВыплатуЗарплаты.Сумма КАК Сумма,
	|	ЖурналДокументовВедомостиНаВыплатуЗарплаты.ПериодРегистрации КАК ПериодРегистрации,
	|	ЖурналДокументовВедомостиНаВыплатуЗарплаты.МестоВыплаты КАК МестоВыплаты,
	|	ЖурналДокументовВедомостиНаВыплатуЗарплаты.СпособВыплаты КАК СпособВыплаты,
	|	ЖурналДокументовВедомостиНаВыплатуЗарплаты.ПеречислениеНДФЛРеквизиты КАК ПеречислениеНДФЛРеквизиты,
	|	ЖурналДокументовВедомостиНаВыплатуЗарплаты.Сотрудники КАК Сотрудники,
	|	ЖурналДокументовВедомостиНаВыплатуЗарплаты.Комментарий КАК Комментарий,
	|	ЖурналДокументовВедомостиНаВыплатуЗарплаты.Тип КАК Тип,
	|	ВЫБОР
	|		КОГДА ИСТИНА В
	|				(ВЫБРАТЬ ПЕРВЫЕ 1
	|					ИСТИНА
	|				ИЗ
	|					РегистрСведений.ОплатаВедомостейНаВыплатуЗарплаты КАК ОплатаВедомостейНаВыплатуЗарплаты
	|				ГДЕ
	|					ОплатаВедомостейНаВыплатуЗарплаты.Ведомость = ЖурналДокументовВедомостиНаВыплатуЗарплаты.Ссылка)
	|			ТОГДА ИСТИНА
	|		ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК ЕстьОплаты,
	|	ЕСТЬNULL(ВРЕМ.Сумма, 0) КАК СуммаНДФЛ,
	|	ЕСТЬNULL(ВРЕМ.Сумма + ВРЕМ.СуммаСПревышения, 0) КАК СуммаНДФЛОбщая,
	|	ЕСТЬNULL(ВРЕМ.СуммаСПревышения, 0) КАК СуммаНДФЛСПревышения
	|ИЗ
	|	ЖурналДокументов.ВедомостиНаВыплатуЗарплаты КАК ЖурналДокументовВедомостиНаВыплатуЗарплаты
	|		ЛЕВОЕ СОЕДИНЕНИЕ ВРЕМ КАК ВРЕМ
	|		ПО (ЖурналДокументовВедомостиНаВыплатуЗарплаты.Ссылка = ВРЕМ.Док)
	|{ГДЕ
	|	(ИСТИНА В
	|			(ВЫБРАТЬ ПЕРВЫЕ 1
	|				ИСТИНА
	|			ИЗ
	|				РегистрСведений.СоставДокументовЗарплатаКадры КАК СоставДокументовЗарплатаКадры
	|			ГДЕ
	|				СоставДокументовЗарплатаКадры.ФизическоеЛицо = &ФизическоеЛицо
	|				И ЖурналДокументовВедомостиНаВыплатуЗарплаты.Ссылка = СоставДокументовЗарплатаКадры.ДокументФизическогоЛица))}");
КонецФункции
Показать
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)