Добавление колонки "Есть проводки" во все списки документов в БП 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 Платные (руб)

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

6000 руб.

16.01.2015    61810    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

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

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    54410    16    21    

42

Управление дашбордами

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

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

2400 руб.

29.06.2020    16702    21    4    

35

Новогоднее оформление для 1С

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

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

27.12.2023    10750    750    elcoan    45    

106

Конструктор HTML, CSS и javascript

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

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

2 стартмани

10.04.2023    9628    151    acces969    31    

118

Модель состояния для MVC

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

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    3671    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12086    1    5    

10
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Brawler 454 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 Сейчас в теме
Наглядность- дело хорошее! Вот только бух сам это не пропишет)) такая вещь хороша в виде обработки внешней, чтобы запускать и проверять по мере надобности.
Оставьте свое сообщение