Добавление колонки "Есть проводки" во все списки документов в БП 3.0

01.04.15

Разработка - Работа с интерфейсом

Дополнительная колонка "Проводки" позволяет увидеть проведенные документы, у которых нет проводок

При загрузке документов из других баз из программ бывают ситуации, когда документ загружен с признаком Проведен, но при попытке его проведения вышла какая-то ошибка и проводки не сформировались. В общем списке документов такой документ ничем не выделяется, а вот в оборотку не попадает, чем может ввести в ступор бухгалтера.
Эта маленькая доработка поможет бухгалтерам быстро найти или случайно увидеть такие документы.

Алгоритм простой. При создании формы списка нам нужно вызвать такую процедуру:

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

Она добавляет в запрос списка документов соединение с таблицей проводок и колонку ЕстьПроводки. Так же, добавляет в динамический список соответствующую колонку.

Остается вопрос: как вызов этой процедуры добавить во все формы списка бухгалтерских документов. Менять все формы списков и выбора, естественно, не хочется. Просмотрев несколько форм списков, я обнаружил несколько общих процедур, которые вызываются при создании этих форм. Я выбрал процедуру ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтаФорма), в самое ее начало добавил 1 строчку — вызов моей вспомогательной процедуры ДопМодуль.ПриСозданииФормыНаСервере(Форма). Вот ее код:

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

Она проверяет, подходит ли эта форма под наш случай. Проверяются следующие условия:

  1. Это должна быть основная форма списка или выбора документа (проверяется родитель метаданных);
  2. На форме должен быть реквизит типа ДинамическийСписок;
  3. Основная таблица динамического списка должна быть таблицей данного документа.

В этом случае вызывается наша первая процедура.

Результат — во всех бухгалтерских документах добавлена колонка "Проводки".

P. S. С журналами документов я пока не стал заморачиваться.

Проводки Обмен

См. также

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    63045    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    18912    26    6    

41

Работа с интерфейсом Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Редактор графов в 1С - внешний отчет, который формирует графы на основе таблицы значений, используя рисунки табличного документа. Есть возможность добавления, редактирования объектов графа и выгрузки результата в таблицу значений.

1500 руб.

06.10.2020    10280    7    7    

10

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    17301    mrXoxot    43    

121

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

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

27.05.2024    7689    smielka    37    

100

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    15012    935    elcoan    49    

117

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

2 стартмани

10.04.2023    11979    162    acces969    31    

124
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Brawler 458 01.04.15 22:48 Сейчас в теме
Идея и реализация конечно хороши, но стоит ли так делать?
Можно же было бы сделать отчет, который пробежит по всей базе и найдет все "корявые" документы.
alest; Dvornik; soulsteps; makas; TrinitronOTV; t278; +6 Ответить
2. soulsteps 73 02.04.15 11:03 Сейчас в теме
(1) Brawler, полностью согласен, хорошо, когда база для "себя", а если объем доков внушительный и количество пользователей тоже...кому нужна лишняя неоправданная нагрузка на сервер...а вот отчет...или, например, регламентная проверка в "ночные часы" с отправкой результата на почту...- нормуль))
3. sashocq 193 02.04.15 13:43 Сейчас в теме
(1), (2), Бухгалтерам понравилась именно простота доступа к этой информации.
По поводу нагрузки - согласен. В той базе, где это внедрено, нагрузка не критичная. А чтобы вообще лишний раз не было этой нагрузки можно сделать это соединение {опциональным} и колонку скрытой по умолчанию. Будет время — сделаю и обновлю публикацию.
4. mulla1979 9 02.04.15 18:59 Сейчас в теме
Отличное решение! Столкнулся на внедрении с такой же проблемой, теперь бухам их хоть наглядно будет видно :-)
5. sashocq 193 03.04.15 13:46 Сейчас в теме
Кстати, если кто-нибудь наткнется таки на отладочную запись в ЖР "Не могу добавить признак проводок", сообщите, пожалуйста, конфигурацию, номер релиза и вид документа. Просто я с таким не сталкивался.
6. Порт 08.04.15 16:37 Сейчас в теме
Наглядность- дело хорошее! Вот только бух сам это не пропишет)) такая вещь хороша в виде обработки внешней, чтобы запускать и проверять по мере надобности.
Оставьте свое сообщение