1с 8 2 как изменить документ программно
Процедура ОсновныеДействияФормыДействие(Кнопка)
выборка = документы.Событие.Выбрать(начдата, кондата);
пока выборка.Следующий() цикл
Форма = документы.Событие.ПолучитьФорму(«ФормаДокумента»);
Форма.Элементыформы.подтверждение.Значение = истина;
конеццикла;
КонецПроцедуры
Пытаюсь обработкой за указанный период в документах изменить реквизит в значение «истина», не получается. Притом, если в процедуре сделать «сообщить», то в комментариях выводит правильное значение, а в документе не записывает. Не могу понять в чем ошибка.
объект надо получать
Если пытаешься изменить реквизит документа, то при чем тут элементы формы?
Кстати, слово «Записат» пишется таки с мягким знаком.
Объект= выборка.ПолучитьОбъект();
Объект. Подтверждение=Истина;
Объект. Записать(режимзаписидокумента.Запись);
1с 8 2 как изменить документ программно
[Практика программирования] Управляемые формы 1С 8: как программно изменить запрос динамического списка и программно вывести колонку добавленного реквизита списка
Ранее уже описывалось в соответствующей статье то, как разместить программно в форме колонку реквизита объекта базы (например, документа или справочника). В этой статье будет рассмотрено как программно добавить колонку с флажком в список управляемой формы с динамическим списком, данные для которого выбираются произвольным запросом.
Для программного добавления элементов управляемой формы должно быть учтено условие о том, что добавление происходит на стороне сервера, а не на клиенте (не в процедуре «ПриОткрытии», как это было в обычном приложении). И так можно ошибочно подумать по старой привычке (если есть опыт программирования в обычном интерфейсе), учитывая архитектуру платформы 1С: Предприятие 8.2 и 8.3. Ведь процедура «ПриОткрытии» формы есть и в управляемом приложении, но через не создать программно и не разместить элементы для прикладной задачи. Поэтому » &НаСервере » и преимущественно в процедуре «ПриСозданииНаСервере ( Отказ , СтандартнаяОбработка ) » формы документа или элемента справочника или формы списка теперь происходит программное добавление каких-либо элементов формы.
В общем информация о том, как программно изменить текст запроса динамического списка, использующего произвольный запрос можно найти на странице сайта ИТС 1С, если у Вас есть доступ. Но если доступа нет, то можете сильно не расстраиваться — информация на странице как и во многих случаях методологической информации от 1С носит условно практический характер. А это означает, что мелочи и нюансы, о которых бы было неплохо упомянуть на указанной странице ИТС, не упомянуты никак. И их понимание будет происходить на практике. Вот часть такой практики изложена ниже на прикладной задаче.
Нажатие на изображении увеличит его
Рис. 1. Пример теоретического кода для программного изменения текста произвольного динамического списка для управляемой формы в 1С 8.
Прикладная задача заключалась в том, чтобы выводить программно в управляемую форму списка документов «Реализация товаров и услуг» колонку добавленного реквизита документа. Реквизит с именем «ДопМФ_Отгружено» тип «Булево», в данном примере добавлен в расширении, но может быть и добавлен в основной конфигурации, если она на частичной поддержке. Как вывести программно элемент формы, содержащей флажок, добавленного реквизита, повторимся, можно изучить в соответствующей статье, о которой уже упоминалось в начале страницы.
Рис. 2. Пример добавленного реквизита объекта конфигурации (документа) в 1С 8 для дальнейшего программного вывода колонки в управляемую форму списка объекта.
Прежде чем перейти непосредственно к программному добавлению колонки элемента таблицы формы нужно добавить его выбор в текст запроса динамического списка. Таким образом подготовительный рабочий исполняемый код получается примерно следующим:
1 | | | СвойстваСписка = ОбщегоНазначения . СтруктураСвойствДинамическогоСписка (); |
2 | | | СвойстваСписка . ОсновнаяТаблица = «Документ.РеализацияТоваровУслуг» ; |
3 | | | СвойстваСписка . ДинамическоеСчитываниеДанных = Истина; |
4 | | | ИсхТекстаЗапроса = СписокРеализацииТоваровУслуг . ТекстЗапроса ; |
5 | | | |
СвойстваСписка . ТекстЗапроса = СтрЗаменить ( ИсхТекстаЗапроса , «ВЫБРАТЬ» , «ВЫБРАТЬ» + Символы . ПС + «РеализацияТоваровУслуг.ДопМФ_Отгружено КАК ДопМФ_Отгружено,» ); |
6 | | | |
ОбщегоНазначения . УстановитьСвойстваДинамическогоСписка ( Элементы . СписокРеализацииТоваровУслуг , СвойстваСписка ); |
7 | | | / /СписокРеализацииТоваровУслуг.Параметры.УстановитьЗначениеПараметра(«Параметр1», 42); |
Прокомментируем его основные моменты. В строке 1 происходит получение структуры через функцию «СтруктураСвойствДинамическогоСписка()» общего модуля «ОбщегоНазначения» для заполнения ее значений и передачи для заполнения свойств динамического списка. Для ключа «ОсновнаяТаблица» структуры в строке 2 указывается название основной таблицы, которая используюется для динамического списка, в примере это «Документ.РеализацияТоваровУслуг». Значение ключа структуры в строке 3 «ДинамическоеСчитываниеДанных» в значении «Истина». В строках 4 и 5 ведется произвольная модификация запроса.
Нажатие на изображении увеличит его
Рис. 3. Пример исходного текста произвольного запроса динамического списка реквизита управляемой формы списка документов.
Можно просто подготовить новый или измененный исходный текст запроса для указания его в ключе «ТекстЗапроса» структуры. В данном же случае была использована хитрость, чтобы минимизировать зависимость от изменений разработчиков. Происходит модификация исходного текста запроса, который определили разработчики, за счет замены подстроки «ВЫБРАТЬ», которая есть в любом запросе, на подстроку так же содержащее это обязательное слово текста запроса и текст для выборки значения добавленного реквизита документа «ДопМФ_Отгружено». Таким образом, доработка в расширении может сломаться тогда, когда разработчики существенным образом изменять исходный текст запроса. И на примере строки 5 помещаем новый вариант текста запроса в структуру. В данном примере получилось, что запрос содержит одну дополнительную строчку, чтобы выбирать значения добавленного реквизита. Порядок следования полей выборки в запросе для динамического списка не имеет значения.
Т.е. в практической задаче начало запроса программно изменялось:
РеализацияТоваровУслуг.Ссылка,
РеализацияТоваровУслуг.ДопМФ_Отгружено КАК ДопМФ_Отгружено,
РеализацияТоваровУслуг.Ссылка,
Особенно обратим внимание на то, к каким объектам ведется обращение в строке 7, когда выполняется установка новой настройки для динамического списка с помощью процедуры «УстановитьСвойстваДинамическогоСписка» общего модуля «ОбщегоНазначения». В этом месте важно не перепутать, т.к. в типовой конфигурации названия элемента формы таблицы-списка и реквизита формы одинаковые. А важно, что первым параметром передается элемент управляемой формы — Таблица реквизита формы. Не перепутать его с названием реквизита формы, к которому ранее обращались для получения текста исходного запроса. Вторым параметром передается заполненная структура. Строка 7 в данном примере закомментирована, т.к. в данной прикладной задаче в тексте запроса не содержится параметров. Но, если параметр есть, то устанавливается через свойство «Параметры» и метод «УстановитьЗначениеПараметра» реквизита управляемой формы, а не элемента формы. Установка значения по имени параметра по коду как для классического запроса в 1С: первое значение — текстовое имя параметра, второе значение — собственно значение для параметра.
Нажатие на изображении увеличит его
Рис. 4. Сравнение одноименных реквизита и элемента управляемой формы 1С 8 для программного изменения текста произвольного запроса динамического списка этого реквизита формы.
После модификации текста произвольного динамического запроса реквизита управляемой формы 1С 8, становится возможным размещение колонки нового реквизита. И теперь рассмотрим код для программного вывода, размещения, добавления (как будет угодно) колонки в элемент-таблицу формы.
Нажатие на изображении увеличит его
Рис. 5. Пример кода в 1С 8 для программного вывода колонки нового реквизита объекта конфигурации, в частности документа, в элемент «Таблица» управляемой формы
По логике программного вывода в прикладной задачи новая колонка, напомним с флажком, должна выводиться сразу после колонки «Номер», содержащей данные номеров документов списка. Код на скриншоте содержит условие на то, что если колонка «Номер» по каким то причинам, например скрыта пользователем в управляемой форме, что вполне может быть (странно но может быть, ведь номер для документа является ключевым реквизитом для работы пользователей), то тогда новая колонка будет выведена самой первой в списке.
1 | | | ТаблицаФормы = Элементы . СписокРеализацииТоваровУслуг ; |
2 | | | КолонкаВставки = ТаблицаФормы . ПодчиненныеЭлементы . Найти ( «Номер» ); |
3 | | | |
4 | | | КолонкаОтгружено = Элементы . Вставить ( «_Отгружено» , Тип ( «ПолеФормы» ), ТаблицаФормы , КолонкаВставки ); |
5 | | | КолонкаОтгружено . Вид = ВидПоляФормы . ПолеФлажка ; |
6 | | | КолонкаОтгружено . Заголовок = «О.» ; |
7 | | | КолонкаОтгружено . Подсказка = «Отгружено» ; |
8 | | | КолонкаОтгружено . ТолькоПросмотр = Истина; |
9 | | | КолонкаОтгружено . ШиринаЭлемента = 5 ; |
10 | | | КолонкаОтгружено . ПутьКДанным = «СписокРеализацииТоваровУслуг.ДопМФ_Отгружено» ; |
Есть небольшие отличия от случая, который уже упоминался выше, добавления колонки для элемента формы Таблица динамического списка, как было описано смежной статье. В смежном случае был пример для таблицы, данными (ПутьКДанным) которой выступал «динамический список», но у которого основанием выступала таблица, а не произвольный запрос. Если отличия не учесть, то будут просто возникать ошибки. В данном же примере
Отличия заключаются в двух местах кода. Во-первых, это обращение к свойству «ШиринаЭлемента, а не просто «Ширина» как в случае, если колонка — это программно выводимая колонка динамического списка, но у которого указана «Основная таблица» и не используется произвольный запрос. Т.е. для программно добавляемой колонки динамического списка с произвольным запросом указывается свойство «ШиринаЭлемента».
Во-вторых, очень важно правильно указать значение свойства «ПутьКДанным», иначе можно получить ошибку:
Нажатие на изображении увеличит его
Рис. 6. Пример ошибки «Недопустимое значение» при указании неверного значения для свойства «ПутьКДанным» элемента управляемой формы .
: Ошибка при установке значения атрибута контекста (ПутьКДанным)
КолонкаОтгружено.ПутьКДанным = «Объект.СписокРеализацииТоваровУслуг.ДопМФ_Отгружено»;
по причине:
Недопустимое значение
Недопустимое значение
Конечно, подобную ошибку можно «поймать» и при других условиях. Но когда она касается свойства «ПутьКДанным», то это явно говорит о том, что указанное строковое значение попросту не верное. Следует тщательно проанализировать корректность ее составления, т.к. в реквизитах управляемых форм можно запутаться.
Нажатие на изображении увеличит его
Рис. 7. Демонстрация того, что данные элемента формы Таблица — это динамический произвольный запрос.
В текущей задаче реквизит формы (он не основной) носит имя «СписокРеализацийТоваровУслуг», а не так, как часто можно встретить в конфигурации, что основной реквизит формы носит имя «Объект». И значения для добавленной колонки берется из реквизита типа «ДинамическийСписок» и для элемента формы. Поэтому строка для «ПутьКДанным» — «СписокРеализацииТоваровУслуг.ДопМФ_Отгружено» с указанием через «.» имени нового реквизита.
Это все условия и нюансы, с которыми пришлось столкнуться на практике для программной модификации произвольного запроса динамического списка реквизита управляемой формы в 1С 8, чтобы потом программно вывести колонку нового реквизита объекта конфигурации базы в элемент «Таблица» формы .
Разработчику о работе с 1С:Предприятие, Pascal, Паскаль
Решение вопросов, возникающие при автоматизации учета с помощью 1С:Предприятие. Паскаль.
Как изменить значение реквизита документа 1С?
15.12.2016 |
Автор Дмитрий
Как изменить значение реквизита документа 1С?
Часто возникает потребность изменить какое-то значение в отдельном реквизите. И не в одном документе, в в нескольких документах. Возможно использовать запрос.
Например:
Процедура ИзменитьЗначениеВРеквизите() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказПокупателя.ДатаОплаты, | ЗаказПокупателя.Ссылка |ИЗ | Документ.ЗаказПокупателя КАК ЗаказПокупателя |ГДЕ | ЗаказПокупателя.Контрагент = &Контрагент | И ЗаказПокупателя.Дата >= &Дата"; Запрос.УстановитьПараметр("Контрагент",ВыбКонтрагент); Запрос.УстановитьПараметр("Дата",НачалоГода(ТекущаяДата())); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ОбДок=ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); ОбДок.ДатаОплаты=КонецГода(ТекущаяДата());//изменение реквизита ОбДок.Записать(РежимЗаписиДокумента.Проведение); Сообщить(" "+ОбДок); КонецЦикла; КонецПроцедуры Процедура КнопкаВыполнитьНажатие(Кнопка) // Вставить содержимое обработчика. ИзменитьЗначениеВРеквизите(); КонецПроцедуры
В статье был рассмотрен вопрос:
Как изменить значение реквизита документа 1С?
Рубрика: 1С:Предприятие 8.2, Без рубрики
Програмно изменить реквизит документа
Не устроил ответ?
Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.
Реклама
Новые вакансии
- Вакансия «Прораммист/разработчи 1С» Екатеринбург от Денис Спеиалист
Вчера в 13:10 - Вакансия Стажер Аналитик от Elizavetashkr
17 ноября 2023 г. - Вакансия Стажер Программист 1С от Elizavetashkr
17 ноября 2023 г.