1с подстановка значения. Автоматическая подстановка данных. Как установить основную организацию для подстановки в документы

Вопрос: Подстановка кода в поле 1с


Здравствуйте, подскажите пожалуйста, в какое поле нужно подставить процедуру, которая считает количество дней между датами, саму процедуру нашла, а ответ на этот вопрос - нет

Есть поля - дата заезда, дата выезда и поле количество, куда должна попадать разность между первыми двумя значениями
в какое событие нужно добавить процедуру?

Ответ: В событии "ПриИзменении" поля ДатаВыезда:

Вопрос: Не работает автоматическая подстановка данных

Ответ:

Всем спасибо за отклики:
1) 1С:Предприятие 8.3 (8.3.4.437), Бухгалтерия для Украины: версия 2.0.4.3.
2) Специально для nsk1C : "У Вас всегда такая привычка смотреть туда, куда Вам не надо, в моем вопросе нет, ни единого слова за основную ставку НДС - это, во-первых, во-вторых внимательно ознакомьтесь с указом о запрете продуктов 1С в Украине, а потом уже пишите свои мысли.."

Спасибо, за ответ, но хотелось бы узнать поточнее где в коде это выставляется.

Вопрос: Поле ввода и Enter вконце


Управляемые формы, работа в веб-клиенте.
Ситуация: запрограммировал сканер на Ф7 + штрихкод + ентер. Пробывал много вариантов, но код не успевает считывать через "ПоказатьВводЗначения". Ушел от этого варианта.
2. Создал Форму, на ней поле ввода. По Ф7 форма открывается, код в поле ввода попадает, ентер, походу, тоже нажимается (проверял в поле текстового документа). Пытаюсь отловить событие ОкончаниеВводаТекста, но не получается, т.к. оно отрабатывает по физически нажатому ентеру на клаве. Событие АвтоПодбор - не наилучший для меня вариант, т.к. штрихкод может вводится вручную и тогда мне костыль какой-то придумывать надо для обхода маленькой задерки между нажатиями.
Поскажите, пожалуйста, может есть полегче варианты?

Ответ: () форма открывается, код передается - события не отрабатывают

Вопрос: Отчет СКД и табличное поле


Создаю отчет с помощью СКД. Как мне вывести результат в табличное поле? Не в поле табличного документа, а именно в табличное поле.

Ответ: Поле табличного документа - это элемент формы (в него выводятся данные), который принадлежит реквизиту (формы) Табличный документ.
В табличный документ ты пишешь значение, а Поле табличного документа тебе это значение выводит.
Как записать туда значение?

Вопрос: Странно работает фокус на поле


Самописная конфигурация на 1С (8.3.8.2088), управляемые формы, интерфейс такси.

Вешаю на Поле событие ПриИзменении со следующем кодом:

1C
1 2 3 4 СтандартнаяОбработка = Ложь ; ДанныеВыбора = Новый СписокЗначений; ДанныеВыбора. Добавить(Объект. Номер) ;

На ОкончаниеВводаТекста вешаю код

Все работает, но как то криво.

Фокус элемент получает но как то на половину, видно на картинке:

Стало после кода:

То есть пропала желтая рамка и оформление поля. Работает но не красиво, глаз цепляется.

Ответ: Ну если коротко, то при изменении номера, появляется форма литерности, где человек заполняет причину изменения, если форму человек просто закрывает, то возвращается старое значение, и фокус остается в поле. Может есть какие то другие идеи как это лучше сделать?

Вопрос: Поле таблицы формы


Доброго дня.
Есть стандартная форма выбора номенклатуры (ут11), в которой не отображается наименование, лишь артикул!

Пробовал вернуть стандартные настройки формы - безрезультатно, поле/колонка не отображается.

Конфигуратор:

У полей дин. списка стоит "ИспользоватьВсегда".
Даже отладка присозданииформы(), а также ПриОткрытии() показывает, что

Элементы.СписокРасширенныйПоискНоменклатура.ПодчиненныеЭлементы

имеются, все в режиме видимости и доступности, никаких функциональных опций нет!

Попробовал добавить своё поле с таким же путем к данным - тоже не отображается!
Час убил, а поле не появляется. Просьба помочь

Ответ:

тогда ой! просто у меня получилось перетащить поле наименование в другую группу и его не стало видно,
и по первой кнопке Еще оно не восстанавливалось, был уверен что вам поможет.

Вопрос: Как при выборе элемента справочника сделать отображение кода, а не наименование?


имеется таб. часть, в ней поле с типом справочникссылка. как при выборе элемента в этом поле отобразить код реквизита, а не наименование? (управляемые формы)

Ответ: Tklwegsd ,))) Да это именно вопрос

Сообщение от polax

Нельзя просто добавить поле Код в таблицу?

Вопрос: Поле выбора отбора в отчёте СКД


Приветствую ребята, вопрос возник. Хочу вывести поле выбора отбора в отчёте, но что-то стопорится у меня это дело, нужен ваш совет...

Для поля контрагенты внёс код такой, он делает внутренний отбор, а как для поля слева отобразить ВидСравнения и привязать его к Пользователям?

1C
1 2 3 4 5 6 7 8 9 10 11 Процедура ПользователиПриИзменении(Элемент) Экспорт Параметр = КомпоновщикНастроек. Настройки. ПараметрыДанных. Найти ЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Пользователи" ) ) ; Параметр. Значение = Пользователи; Параметр. Использование = Истина ; ЭлементОтбора = КомпоновщикНастроек. Настройки. Отбор. Элементы. Добавить(Тип ("ЭлементОтбораКомпоновкиДанных" ) ) ; ЭлементОтбора. ВидСравнения = ВидСравненияКомпоновкиДанных. Равно; ЭлементОтбора. Лев оеЗначение = Новый ПолеКомпоновкиДанных("ОтветственныйЗаОтветНаЗапрос" ) ; ЭлементОтбора. Прав оеЗначение = Пользователи; КонецПроцедуры

Ответ: Dethmontt , убираю код, есть только СКД и поле отборов на форме - пустой отчёт...

Добавлено через 1 час 50 минут
Dethmontt , разобрался, почему пустой отчёт при отборе скд был, стояло условие в запросе скд по пользователям - удалил его и всё заработало. Благодарю за подсказки)

Вопрос: Можно ли менять состав полей динамического списка без кода?


Доброго всем дня. У меня чистая форма, на ней динамический список с произвольным запросом, где одна таблица (справочник, она же основная таблица ДС), одно поле Ссылка и характеристики.

Поля с характеристиками можно сразу же использовать в отборах, сортировках, оформлении и выбирать для группировки. Всё работает. Но просто выбрать в качестве дополнительного поля невозможно (чтобы он встал рядом с ссылкой отдельным столбцом). Понятно, что с помощью кода это всё как-то там делается, но неужели это нельзя сделать без кода?
Куча настроечных элементов компоновки данных, которые можно разместить на форме, и нет возможности просто добавить поле? Или я делаю что-то не так?

Ответ: В общем как я не крутил колонок через компоновщик данных - добавить мне не удалось (Без кода). Скорее всего это и невозможно, так как за колонки отвечает не реквизит формы дс, а элемент формы, что логично. Компоновщик рулит данными - элемент формы - отображением(Колонок в том числе).
То есть без программного увеличения подчиненных элементов Элемента формы - поменять их не получится.
Всем спасибо.

Вопрос: Ввод на основании, сообщение поле в ТЧ не заполнено


Коллеги хелп Не типовой ввод на основании дока в ЗУП 2.5, сообщение - поле в ТЧ не заполнено, хотя оно заполнено - тип Дата. Код в ОбработкеЗаполнения.
Если через форму перебить реквизит то проводит...

Ответ: ОМГ он ругался на другое поле - просто эта колонка была скрыта) она при заполнении в интерфейсе копирутся из поля дата начала

Очень часто, во время работы в программе 1С, бывает нужно быстро ввести несколько документов или добавить новые объекты в справочники (вид номенклатуры, организация, склад, касса и т.д.). При этом не у всех есть понимание, того как можно автоматизировать ввод основных значений, так, чтобы при создании сразу подставлялись в поля нужные значения. О том, как это сделать я расскажу в этой статье.
В программе 1С существуют механизмы, которые позволяют быстро заполнить значения реквизитов в документах и справочниках. По действию их можно разделить на следующие виды:

  • Подстановка единственного значения
  • Подстановка значения по отбору
  • Заполнение реквизитов по статистике
  • Подстановка ранее введенных реквизитов
  • Подстановка значений по шаблону
  • Ввод нового документа копированием

Подстановка единственного значения на который у пользователя есть права.

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

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

Если в списке установлен отбор по какому-то реквизиту (касса, банковский счет, склад), то этот реквизит будет автоматически заполнен в новом документе. Например, вы в форме списка документов РКО устанавливаете отбор по кассе. При оформлении нового платежного документа из списка будет автоматически взята информация о выбранной кассе. И так как, для кассы указана организация, то будет автоматически заполнена информация об организации. Использовать отборы можно в любом списке документов.

Заполнение реквизитов по статистике.

Программа 1С ведет статистику ввода основных значений по каждому пользователю. В случае, если вы два раза ввели при создании нового документа одинаковые организацию, подразделение, склад, хозяйственную операцию и т.д., программа будет анализировать последние введенные значения. Таким образом, алгоритм заполнения по статистике автоматически «подстраивается» под каждого пользователя.
Если пользователь нарушает в новом документе эту цепочку, то программа это поймет и начнет подставлять через некоторое время новые значения, но в первом таком документе значения подставлены не будут.
Заполнение ранее введенных реквизитов при выборе значения другого реквизита возможно в случае если выбирается, например торговое соглашение или договор, где заполнены все основные поля (склад, график оплаты, цены и т.д.). При указании соглашения или договора в документе реквизиты будут заполнены по следующим правилам:

будут заполнены все те данные, которые были определены в соглашении или договоре;

если в соглашении или договоре не было указано какое-либо значение (например, подразделение), то это значение будет заполнено в соответствии со статистикой. Если при вводе нового документа значения были заполнены в соответствии со статистикой, то они будут перезаполнены, если они определены в соглашении или договоре.

Подстановка значений по шаблону.

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

Ввод нового документа копированием.

Тут все просто. Если пользователь уже вводил похожий документ, то его можно скопировать и после этого поправить изменившиеся данные. Проверить все реквизиты, уделив особое внимание, такому реквизиту, как дата.

Вот пять основных способов облегчить ввод однотипных документов и справочников. Обязательно используйте их в своей повседневной работе

Как быстро ввести значение реквизитов в 1С?

Решим следующую задачу . Необходимо, чтобы при создании или изменении документа ОказаниеУслуги и при добавлении в табличную часть какой-нибудь номенклатуры услуг, одновременно подставлялась бы сразу актуальная цена, полученная из регистра сведений и соответствующая дате документа.

Для этого необходимо:

    написать функцию РозничнаяЦена, которая будет возвращать актуальную цену;

    вызвать функцию, когда в документ будет добавляться новая номенклатура.

Поскольку такая функция может понадобиться в дальнейшем, напишем ее в «общедоступном» месте – в общем модуле.

1. Создать функцию РозничнаяЦена в ветке Общие – Общие модули с названием РаботаСоСправочниками . Установить флаг Вызов сервера (чтобы экспортные процедуры и функции этого модуля можно было бы вызвать с клиента) (рис. 71а).

Рис. 71а. Свойства общего модуля

2. Поместите в модуль следующий текст.

Функция РозничнаяЦена(АктуальнаяДата,ЭлементНоменклатурыУслуг)Экспорт

//Создать вспомогательный объект Отбор

Отбор = Новый Структура("НоменклатураУслуг",ЭлементНоменклатурыУслуг);

//Получить актуальные значения ресурсов регистра

ЗначенияРесурсов=РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата,Отбор);

Возврат ЗначенияРесурсов.Цена;

КонецФункции

Поясним функцию.

Для получения розничной цены необходимо в функцию передать два параметра:

    АктуальнаяДата – параметр типа Дата, определяет точку на оси времени, в которой нас интересует значение розничной цены.

Эта структура содержит Отбор по измерениям регистра. С его помощью определяется искомое измерение регистра НоменклатураУслуг, которое равно переданной в функцию ссылке на элемент справочника.

Имя ключа структуры («НоменклатураУслуг ») должна совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры (ЭлементНоменклатурыУслуг ) задает отбираемое по данному измерению значение.

Во второй строке идет обращение к менеджеру регистра сведений Цены (РегистрыСведений.Цены ) и выполнение метода ВыполнитьПоследнее() , который возвращает значение ресурсов самой последней записи регистра, соответствующей переданной в функцию дате (АктуальнаяДата ) и значениям измерений регистра Отбор .

Метод ПолучитьПоследнее возвращает структуру, содержащую значения ресурсов, которая сохраняется в переменной ЗначенияРесурсов.

В следующей строке получаем искомую розничную цену, указав имя нужного ресурса регистра через точку (ЗначениеРесурсов.Цена ) и возвращаем ее при выполнении функции.

Т.о. данную функцию можно вызывать в некоторый момент времени.

Необходимо открыть Форму документа ВыполнениеУслуги (она была создана ранее). В Модуль формы необходимо дописать Процедуру ПриИзменении .

Для этого дважды щелкните на элемент формы ПереченьНоменклатурыУслуга (рис. 71б).

Рис. 71б. Элементы документа Выполнение услуги

В окне свойств в событии ПриИзменении создайте обработчик события, в который внесем следующий текст:

&НаКлиенте

Процедура ПереченьНоменклатурыУслугаПриИзменении(Элемент)

//Получить следующую строку табличной части

СтрокаТабличнойЧасти=Элементы.ПереченьНоменклатуры.ТекущиеДанные;

//Установить цену

СтрокаТабличнойЧасти.Цена=РаботаСоСправочниками.РозничнаяЦена(Объект.Дата,СтрокаТабличнойЧасти.Услуга);

КонецПроцедуры

Поясним функцию.

Первая строка уже известна: сначала получаем текущую строку табличной части документа, т.к. она понадобиться в дальнейшем, и сохраним ее в переменной СтрокаТабличнойЧасти .

Затем вызываем функцию РозничнаяЦена() из общего модуля РаботаСоСправочниками .

Первым параметром в функцию передаем дату документа, на которую необходимо получить цену. Дату документа получаем из основного реквизита формы – Объект.Дата .

Функция возвращает последнее значение цены, и это значение присваивается полю Цена в текущей строке табличной части документа (СтрокаТабличнойЧасти.Цена ).

Обратите внимание, что процедура ПереченьНоменклатурыУслугаПриИзменении() начинает работать в модуле формы на стороне клиента, т.к. это обработчик интерактивного события формы. Создавая заготовку этой процедуры, платформа автоматически разместит перед описанием процедуры директиву компиляции &НаКлиенте .

Затем вызываем функцию РозничнаяЦена() . Т.к. эта функция не будет найдена на стороне клиента, то исполнение будет передано в общий модуль РаботаСоСправочниками , который выполняется на сервере. После завершения функции программный код продолжит исполняться на клиенте.

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

ВВОД ДАННЫХ В БД

1. Введите в приложение не менее 8-ми документов Оказание услуги.

Наша задача заключается в следующем. Цена номенклатуры у нас теперь хранится в отдельном регистре сведений. Когда мы создаем или изменяем документ ОказаниеУслуги и добавляем в табличную часть какую-либо номенклатуру, нам хочется, чтобы одновременно с этим в документ подставлялась бы сразу и актуальная цена этой номенклатуры, полученная из регистра сведений и соответствующая дате документа.

Для этого нам нужно сделать две вещи.

Сначала написать некую функцию, которая будет возвращать нам актуальную цену номенклатуры, а затем вызвать эту функцию в тот момент, когда в документ добавляется номенклатура, и подставить в документ цену номенклатуры, которую вернет эта функция.

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

В режиме Конфигуратор

Функция, возвращающая цену номенклатуры

Сначала мы создадим функцию РозничнаяЦена(), которая будет возвращать нам актуальную розничную цену номенклатуры, и поместим ее в общий модуль конфигурации.

Откроем конфигуратор, в ветке Общие Общие модули добавим новый объект конфигурации Модуль и назовем его РаботаСоСправочниками.

Мы видим, что у модуля по умолчанию установлен флажок Сервер. Это означает, что экземпляры этого модуля будут скомпилированы только на стороне сервера.

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

Поместим в него следующий текст (листинг 9.1).

Поясним эту функцию.

Для получения розничной цены мы будем передавать в функцию два параметра:

АктуальнаяДата - параметр типа Дата, определяет точку на оси времени, в которой нас интересует значение розничной цены.

В теле функции мы сначала создаем вспомогательный объект Отбор.

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

Имя ключа структуры ("Номенклатура") должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры (ЭлементНоменклатуры) задает отбираемое по данному измерению значение.

Во второй строке мы обращаемся к менеджеру регистра сведений Цены (РегистрыСведений.Цены) и выполняем метод ПолучитьПоследнее(), который возвращает нам значения ресурсов самой поздней записи регистра, соответствующей передаваемой в функцию дате (АктуальнаяДата) и значениям измерений регистра (Отбор).

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

Поэтому в следующей строке мы получаем искомую нами розничную цену, просто указав имя нужного нам ресурса регистра через точку (ЗначенияРесурсов.Цена) и возвращаем ее при выполнении функции.

Теперь эту функцию нужно вызвать в некоторый момент работы документа.

Вызов функции при выборе номенклатуры и заполнение цены в документе

Итак, задача, которая перед нами стоит, заключается в следующем. При редактировании документа ОказаниеУслуги нам необходимо обеспечить автоматическое заполнение поля Цена после того, как пользователь выберет услугу. Причем цена услуги должна опреде­ляться исходя из даты создаваемого документа.


Найдем в конфигураторе документ ОказаниеУслуги и откроем его форму Форма Документа.

Дважды щелкнем на элементе формы ПереченьНоменклатурыНо- менклатура или правой кнопкой мыши откроем для него палитру свойств (пункт контекстного меню Свойства). Прокрутив список до конца, найдем событие ПриИзменении, которое возникает после изменения значения поля.

Нажмем кнопку открытия В со значком лупы в поле ввода.

Система создаст шаблон процедуры обработчика этого события в модуле нашей формы и откроет закладку Модуль редактора формы.

Внесем в него следующий текст (листинг 9.2).

Прокомментируем содержимое обработчика.

Первая строка обработчика вам уже знакома по процедурам Пе- реченьНоменклатурыКоличествоПриИзменении и ПереченьНоменкла- турыЦенаПриИзменении. Сначала мы получаем текущую строку табличной части документа, так как она нам понадобится в даль­нейшем, и сохраняем ее в переменной СтрокаТабличнойЧасти.

Затем мы вызываем нашу функцию РозничнаяЦена() из общего модуля РаботаСоСправочниками.

Первым параметром мы передаем в эту функцию дату документа, на которую необходимо получить цену. Дату документа мы получаем из основного реквизита формы - Объект.Дата.



Функция возвращает последнее значение цены, и это значение мы присваиваем полю Цена в текущей строке табличной части документа (СтрокаТабличнойЧасти.Цена).

Заметьте, что сама процедура ПереченьНоменклатурыНоменклату- раПриИзменении() начинает работать в модуле формы на стороне клиента, так как это обработчик интерактивного события формы. Создавая заготовку этой процедуры, платформа автоматически разместила перед описанием процедуры директиву компиляции &НаКлиенте.

Затем вызывается функция РозничнаяЦена(). Поскольку эта функция не будет найдена на стороне клиента, то исполнение будет передано в общий модуль РаботаСоСправочниками, который выполняется на сервере. После завершения функции программный код продолжит исполняться на клиенте.

Почему в данном случае использована такая «хитрость»? Зачем было передавать исполнение кода на сервер?

Дело в том, что любая работа с базой данных (чтение данных, запись) возможна только на сервере. В данном случае нам необходимо было прочитать последние данные из регистра сведений для некоторой номенклатуры.

Такие действия можно выполнить только на сервере, и если посмот­реть в синтакс-помощнике описание метода ПолучитьПоследнее() регистра сведений, то можно заметить, что этот метод доступен только на сервере, в толстом клиенте и во внешнем соединении.

Толстый клиент и внешнее соединение - это клиентские приложения прежней версии платформы, которые существуют для совместимости с прежними прикладными решениями.

Мы же с вами разрабатываем совершенно новое прикладное решение, которое работает в тонком клиенте или в веб-клиенте. Поэтому в нашем случае для получения каких-либо данных из базы данных нужно передать исполнение кода на сервер, там получить нужные данные и вернуть эти данные на клиента. Что мы и сделали.

В режиме 1С:Предприятие

Проверим, как теперь работает наш документ.

Запустим 1С:Предприятие в режиме отладки и откроем регистр сведений Цены.

Для транзистора Philips добавим другим числом новую цену (рис. 9.10).

Теперь откроем документ Оказание услуги № 1. Как вы помните, этим документом мы как раз «израсходовали» один такой транзистор.

Оставим дату документа без изменения и повторим выбор тран­зистора в колонке Номенклатура табличной части документа. Автоматически установится значение цены транзистора от 01.07.2009. Это последнее значение цены на дату документа (рис. 9.11).

Теперь изменим дату документа на 13.07.2009 и снова повторим выбор транзистора. Будет установлено новое значение цены, последнее на эту дату (рис. 9.12).

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


Контрольные вопросы

1. Для чего предназначен объект конфигурации Регистр сведений.

2. Какими особенностями обладает объект конфигурации Регистр сведений.

3. В чем главные отличия регистра сведений от регистра накопления.

4. Какие поля определяют ключ уникальности регистра накопления.

5. Что такое периодический регистр сведений и что такое независимый регистр сведений.

6. Как создать периодический регистр сведений.

7. Что такое ведущее измерение регистра.

8. Как получить значения ресурсов наиболее поздних записей регистра средствами встроенного языка.