1с отображать итоги в подвале
Данная публикация навеяна ностальгией по отборам в конфигурациях на обычных формах (ЗУП2.5, УПП3.1 и т.п.), где в контекстном меню можно было отобраться по выделенному значению и получить итоги в подвале с учетом этого отбора.
В управляемых формах также есть отборы (Найти, найти в найденном), но к сожалению, итоги не зависят от отборов. Данная публикация - некий костыль, позволяющий создать подобный механизм.
Сразу оговорюсь, решение не оптимальное, комфортно работать можно только с табличными частями, где количество строк не более 1-2 тыс. (при отмене отбора загружается первоначальная таблица с приблизительной оценкой по 1 секунде на каждую тысячу строк)
Зато реализация достаточно простая, ниже код для документа Отражение зарплаты в бухучете из ЗУП 3.1:
В форме документа должен быть реквизит АдресХранилища (строка) и контекстные кнопки ОтборПоЗначениюТекущейКолонки и ОтключитьОтбор
&НаСервере
Процедура ОтборПоЗначениюВТекущейКолонкеНаСервере ( Ключ , Значение )
ОригиналТЗ = Объект . НачисленнаяЗарплатаИВзносы . Выгрузить ();
Структура = Новый Структура ( Ключ , Значение );
ТЗ = Объект . НачисленнаяЗарплатаИВзносы . Выгрузить ( Структура );
Объект . НачисленнаяЗарплатаИВзносы . Загрузить ( ТЗ );
Если АдресХранилища = "" Тогда
АдресХранилища = ПоместитьВоВременноеХранилище ( ОригиналТЗ , ЭтаФорма . УникальныйИдентификатор );
ИначеЕсли ТипЗнч ( ПолучитьИзВременногоХранилища ( АдресХранилища )) = Тип ( "Структура" )
Или ПолучитьИзВременногоХранилища ( АдресХранилища )= Неопределено Тогда
АдресХранилища = ПоместитьВоВременноеХранилище ( ОригиналТЗ , ЭтаФорма . УникальныйИдентификатор );
КонецЕсли;
&НаКлиенте
Процедура ОтборПоЗначениюВТекущейКолонке ( Команда )
ПолеОтбора = Прав ( Элементы . НачисленнаяЗарплатаИВзносы . ТекущийЭлемент . Имя , СтрДлина ( Элементы . НачисленнаяЗарплатаИВзносы . ТекущийЭлемент . Имя ) - СтрДлина ( ЭтаФорма . ТекущийЭлемент . Имя ));
ПолеОтбора = ?( ПолеОтбора = "Сотрудник" , "ФизическоеЛицо" , ПолеОтбора ); //В ЗУП3.1 док ОтражениеЗарплатыВБухучете Поле ввода НачисленнаяЗарплатаИВзносыСотрудник, хотя данные - физлицо
ОтборПоЗначениюВТекущейКолонкеНаСервере ( ПолеОтбора , Элементы . НачисленнаяЗарплатаИВзносы . ТекущиеДанные [ ПолеОтбора ]);
&НаСервере
Процедура ОтключитьОтборНаСервере ()
ТЗ = ПолучитьИзВременногоХранилища ( АдресХранилища );
Если ТипЗнч ( ТЗ ) = Тип ( "ТаблицаЗначений" ) Тогда
Объект . НачисленнаяЗарплатаИВзносы . Загрузить ( ТЗ );
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтключитьОтбор ( Команда )
ОтключитьОтборНаСервере ();
КонецПроцедуры
//Проверка на изменение ТЧ при отборе (призаписи и проведении)
&НаСервере
Процедура ПроверитьТаблицу ()
Оригинал = ПолучитьИзВременногоХранилища ( АдресХранилища );
Если ТипЗнч ( Оригинал ) = Тип ( "ТаблицаЗначений" ) И
Оригинал . Количество () <> Объект . НачисленнаяЗарплатаИВзносы . Количество () Тогда
Объект . НачисленнаяЗарплатаИВзносы . Загрузить ( Оригинал );
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью ( Отказ , ПараметрыЗаписи )
//em+ Проверка на изменение ТЧ при отборе (встроить в процедуру)
Если Не АдресХранилища = "" Тогда
ПроверитьТаблицу ();
КонецЕсли;
//. стандартный код процедуры
КонецПроцедуры
&НаКлиенте
Процедура Провести ( Команда )
Если Не АдресХранилища = "" Тогда
ПроверитьТаблицу ();
КонецЕсли;
//. стандартный код процедуры
КонецПроцедуры
&НаКлиенте
Процедура ПровестиИЗакрыть ( Команда )
Если Не АдресХранилища = "" Тогда
ПроверитьТаблицу ();
КонецЕсли;
//. стандартный код процедуры
КонецПроцедуры
Во вложении этот код в виде расширения для ЗУП3.1. Тестировалось на платформе 1С:Предприятие 8.3 (8.3.15.1778), Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.10.309), тонкий клиент.
Данная публикация навеяна ностальгией по отборам в конфигурациях на обычных формах (ЗУП2.5, УПП3.1 и т.п.), где в контекстном меню можно было отобраться по выделенному значению и получить итоги в подвале с учетом этого отбора.
В управляемых формах также есть отборы (Найти, найти в найденном), но к сожалению, итоги не зависят от отборов. Данная публикация - некий костыль, позволяющий создать подобный механизм.
Сразу оговорюсь, решение не оптимальное, комфортно работать можно только с табличными частями, где количество строк не более 1-2 тыс. (при отмене отбора загружается первоначальная таблица с приблизительной оценкой по 1 секунде на каждую тысячу строк)
Зато реализация достаточно простая, ниже код для документа Отражение зарплаты в бухучете из ЗУП 3.1:
В форме документа должен быть реквизит АдресХранилища (строка) и контекстные кнопки ОтборПоЗначениюТекущейКолонки и ОтключитьОтбор
&НаСервере
Процедура ОтборПоЗначениюВТекущейКолонкеНаСервере ( Ключ , Значение )
ОригиналТЗ = Объект . НачисленнаяЗарплатаИВзносы . Выгрузить ();
Структура = Новый Структура ( Ключ , Значение );
ТЗ = Объект . НачисленнаяЗарплатаИВзносы . Выгрузить ( Структура );
Объект . НачисленнаяЗарплатаИВзносы . Загрузить ( ТЗ );
Если АдресХранилища = "" Тогда
АдресХранилища = ПоместитьВоВременноеХранилище ( ОригиналТЗ , ЭтаФорма . УникальныйИдентификатор );
ИначеЕсли ТипЗнч ( ПолучитьИзВременногоХранилища ( АдресХранилища )) = Тип ( "Структура" )
Или ПолучитьИзВременногоХранилища ( АдресХранилища )= Неопределено Тогда
АдресХранилища = ПоместитьВоВременноеХранилище ( ОригиналТЗ , ЭтаФорма . УникальныйИдентификатор );
КонецЕсли;
&НаКлиенте
Процедура ОтборПоЗначениюВТекущейКолонке ( Команда )
ПолеОтбора = Прав ( Элементы . НачисленнаяЗарплатаИВзносы . ТекущийЭлемент . Имя , СтрДлина ( Элементы . НачисленнаяЗарплатаИВзносы . ТекущийЭлемент . Имя ) - СтрДлина ( ЭтаФорма . ТекущийЭлемент . Имя ));
ПолеОтбора = ?( ПолеОтбора = "Сотрудник" , "ФизическоеЛицо" , ПолеОтбора ); //В ЗУП3.1 док ОтражениеЗарплатыВБухучете Поле ввода НачисленнаяЗарплатаИВзносыСотрудник, хотя данные - физлицо
ОтборПоЗначениюВТекущейКолонкеНаСервере ( ПолеОтбора , Элементы . НачисленнаяЗарплатаИВзносы . ТекущиеДанные [ ПолеОтбора ]);
&НаСервере
Процедура ОтключитьОтборНаСервере ()
ТЗ = ПолучитьИзВременногоХранилища ( АдресХранилища );
Если ТипЗнч ( ТЗ ) = Тип ( "ТаблицаЗначений" ) Тогда
Объект . НачисленнаяЗарплатаИВзносы . Загрузить ( ТЗ );
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтключитьОтбор ( Команда )
ОтключитьОтборНаСервере ();
КонецПроцедуры
//Проверка на изменение ТЧ при отборе (призаписи и проведении)
&НаСервере
Процедура ПроверитьТаблицу ()
Оригинал = ПолучитьИзВременногоХранилища ( АдресХранилища );
Если ТипЗнч ( Оригинал ) = Тип ( "ТаблицаЗначений" ) И
Оригинал . Количество () <> Объект . НачисленнаяЗарплатаИВзносы . Количество () Тогда
Объект . НачисленнаяЗарплатаИВзносы . Загрузить ( Оригинал );
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью ( Отказ , ПараметрыЗаписи )
//em+ Проверка на изменение ТЧ при отборе (встроить в процедуру)
Если Не АдресХранилища = "" Тогда
ПроверитьТаблицу ();
КонецЕсли;
//. стандартный код процедуры
КонецПроцедуры
&НаКлиенте
Процедура Провести ( Команда )
Если Не АдресХранилища = "" Тогда
ПроверитьТаблицу ();
КонецЕсли;
//. стандартный код процедуры
КонецПроцедуры
&НаКлиенте
Процедура ПровестиИЗакрыть ( Команда )
Если Не АдресХранилища = "" Тогда
ПроверитьТаблицу ();
КонецЕсли;
//. стандартный код процедуры
КонецПроцедуры
Во вложении этот код в виде расширения для ЗУП3.1. Тестировалось на платформе 1С:Предприятие 8.3 (8.3.15.1778), Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.10.309), тонкий клиент.
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 42
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Вывод результата запроса на форму УП в таблицу значений (аналог СоздатьКолонки() для УП) 2
при разработке на обычных формах было удобно выводить результат запроса используя метод СоздатьКолоки(): Процедура ПоискНажатие(Элемент) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДокументоОборот.Этап, | ДокументоОборот.Отдел, | Докуме Дерево значений в таблицу значений или в табличную часть и обратно 8
Для одной организации надо было реализовать документы, где вместо табличной части надо использовать дерево и все это на управляемых формах. Но дерево нельзя сохранить в базе в текущем виде. Пришлось использовать табличную часть документа для хранени Загрузка данных в 1С из PDF 4
В данной статье описан пример реализации загрузки данных накладных из PDF файлов для одного крупного Ритейла. И так у Нас есть несколько файлов в формате pdf, которые нам необходимо загрузить в 1С. Чтение PDF файлов из 1С Первым дело я стал Запись во внешний источник данных из 1С 8.3 (без com подключения) 0
В 8.3.4 в свойствах объекта "Внешний источник данных" появилась вкладка "Функции". Для внешних таблиц MSSQL данный функционал позволяет подключить к 1С хранимые процедуры и функции на стороне SQL. В том числе и процедуры, содержащие запросы SQL на д Посмотреть все результаты поиска похожих
Еще в этой же категории
Как обновить динамический список или реквизит на форме клиента? 19
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Как установить параметр динамического списка? 14
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Список НЕ модальных методов в 1С 4
Найдено в интернете но говорят что с диска ИТС. Табличная часть
Все работает хорошо, но при добавлении копированием выбранной строки (F9) в первый случай копирования значение Объект.СуммаПоДокументу не обновляется. В дальнейшем расчет идет без данных этой строки. Последующее использование F9 (несколько раз) для любой строки вызывает пересчет за исключением бедной строки. При добавлении строки стандартным способом (ins) и вводе значений - расчет получается правильный. Если добавить копированием (F9) – опять появляется неучтенная в итогах сумма для новой строки.
Рассмотрел значения полей по шагам. В процедуру
Код 1C v 8.2 УП
Передается элемент с типом ТаблицаФормы с новой строкой с нулевыми значениями, установлено значение только в поле НомерСтроки:
Элемент.ТекущиеДанные.НомерСтроки
Вопрос знатокам: это глюк системы или можно обойтись другими программными средствами? Например отслеживать F9 и вызывать функцию РсчетСуммыПоДокументу()
Выбор (S_election)
ВыборЗначения (ValueChoice)
НачалоПеретаскивания (DragStart)
ОбработкаВыбора (ChoiceProcessing)
ОбработкаЗаписиНового (NewWriteProcessing)
ОкончаниеПеретаскивания (DragEnd)
ПередНачаломДобавления (BeforeAddRow)
ПередНачаломИзменения (BeforeRowChange)
ПередОкончаниемРедактирования (BeforeEditEnd)
ПередРазворачиванием (BeforeExpand)
ПередСворачиванием (BeforeCollapse)
ПередУдалением (BeforeDeleteRow)
Перетаскивание (Drag)
ПослеУдаления (AfterDeleteRow)
ПриАктивизацииПоля (OnActivateField)
ПриАктивизацииСтроки (OnActivateRow)
ПриАктивизацииЯчейки (OnActivateCell)
ПриИзменении (OnChange)
ПриНачалеРедактирования (OnStartEdit)
ПриОкончанииРедактирования (OnEditEnd)
ПриСменеТекущегоРодителя (OnCurrentParentChange)
ПроверкаПеретаскивания (DragCheck)
Разбирал глюки системы:
В табличном поле установим флаг «Подвал».
В 1С 8.0 в табличном поле для колонки можно было установить флаг «Показывать итог в подвале». В 1С 8.2 такого нет. Приходится указывать для реквизита «СписокНоменклатурыСумма» путь к данным подвала «Объект.СписокНоменклатуры.ИтогСумма». Для наглядности в окне редактирования формы в правом верхнем углу (в окне реквизитов формы) раскроем основной реквизит формы «Объект», потом раскроем «СписокНоменклатуры». Мышкой «схватим» элемент «ИтогСумма» и перетащим в окно элементов формы (левая верхняя часть окна редактирования формы). Получим поле надписи «СписокНоменклатурыИтогСумма», а на форме надпись «Сумма (итог):». При этом, остается пустым свойство «Заголовок» поля надписи «СписокНоменклатурыИтогСумма».
Для устойчивости добавим процедуру:
В результате на форме отображаются два поля надписи:
«Сумма по документу»,
«Сумма (итог):».
При изменении данных в таблице происходит пересчет суммы, отображаются одинаковые данные. Но если добавить новый элемент копированием текущего (кнопкой или F9), то в подвале таблицы и в поле «Сумма (итог):» отображаются правильные данные, а в поле «Сумма по документу» - нет.
Не получается получить значение (текст) из Элементы.СписокНоменклатурыИтогСумма.
Для дальнейших расчетов в документе «ПриходнаяНакладная» реквизит «СуммаПоДокументу» будет показывать правильное значение.
Читайте также: