1. Создание на форме дополнительных реквизитов в 1С 8.3 и их функции
Механизм дополнительных реквизитов в 1С 8.3 позволяет пользователю самостоятельно добавлять реквизиты к объектам, не меняя при этом конфигурации. После добавления и настройки реквизит отобразится на форме, пользователь сможет заполнить его и значения будут сохраняться в базе.
Вывести реквизиты на форму можно динамически, при ее открытии. Если смотреть отладчиком, то видно, что после процедур ПриСозданииНаСервере и ПриОткрытии дополнительных реквизитов в 1С 8.3 еще нет. Появятся они, когда активизируется закладка «Дополнительно». При создании на форме, реквизитам присваиваются длинные, страшные, ни о чем не говорящие имена. Например:
Имена значений дополнительных реквизитов на форме
Из-за этого возникают сложности с программным обращением к дополнительным реквизитам в 1С 8.3.
Дополнительные реквизиты на форме создаются типовой процедурой УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме:
Создание дополнительных реквизитов на форме
Посмотрим отладчиком, как выглядит форма с созданными на ней дополнительными реквизитами для программного обращения:
Форма с созданными на ней дополнительными реквизитами в 1С 8.3
2. Установка значения дополнительного реквизита в 1С 8.3 с помощью обращения к нему по имени
Чтобы иметь возможность программного обращения к созданным дополнительным реквизитам, нужно знать их имена на форме. Помочь разработчику узнать имена дополнительных реквизитов может специальный реквизит Свойства_ОписаниеДополнительныхРеквизитов. Его автоматически создает система, когда используется механизм дополнительных реквизитов. Тип этого служебного реквизита ДанныеФормыКоллекция. Он содержит список всех дополнительных реквизитов объекта и все сведения о них. Теперь, мы сможем найти нужный дополнительный реквизит в 1С 8.3 по имени, или по соответствующему ему свойству плана видов характеристик. Итак, обращаясь по имени к доп.реквизиту можно присвоить ему нужное значение, либо, наоборот, получить его значение и, например, как-то проверить.
Найти в плане видов характеристик интересующий нас реквизит можно по имени для разработчиков. Имя дополнительного реквизита для разработчиков видно в пользовательском режиме в нижней части формы характеристики, в разделе Для разработчиков:
Раздел Для разработчиков в нижней части формы характеристики
Вот вариант процедуры, которая получает поле доп. реквизита по его имени:
Параметры функции: форма и имя дополнительного реквизита
Функция принимает два параметра – форма и имя дополнительного реквизита (имя для разработчиков). Сперва получим тот самый служебный реквизит, в котором содержатся данные о всех дополнительных реквизитах на форме. Затем по имени дополнительного реквизита в 1С 8.3 найдем свойство в плане видов характеристик. Теперь по этому свойству можем в списке реквизитов найти соответствующий реквизит.
Так может выглядеть код, вызывающий процедуру и устанавливающий значение дополнительному реквизиту:
Код, вызывающий процедуру и устанавливающий значение дополнительному реквизиту в 1С 8.3
Главное преимущество использования механизма дополнительных реквизитов состоит в том, что у нас нет необходимости вносить изменения в типовую конфигурацию. При этом, зная несколько тонкостей обращения с дополнительными реквизитами в 1С 8.3, мы получаем возможность работать с ними так же свободно, как и с основными реквизитами объекта.
Специалист компании «Кодерлайн»
Екатерина Редько
В ЗУП не знаю, в БП это в ГМ УправлениеСвойствами
// Возвращает значения дополнительных свойств объекта.
//
// Параметры:
// ВладелецСвойств — Ссылка — например, СправочникСсылка.Номенклатура, ДокументСсылка.ЗаказПокупателя, …
// ПолучатьДопРеквизиты — Булево — в результат включать дополнительные реквизиты.
// ПолучатьДопСведения — Булево — в результат включать дополнительные сведения.
// МассивСвойств — Массив — свойства:
// * ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения — значения
// которых следует получить.
// — Неопределено — получить значения всех свойств владельца.
// Возвращаемое значение:
// ТаблицаЗначений — колонки:
// * Свойство — ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения — свойство владельца.
// * Значение — Произвольный — значения любого типа из описания типов свойства объекта метаданных:
// «Метаданные.ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Тип».
//
Функция ПолучитьЗначенияСвойств(ВладелецСвойств,
ПолучатьДопРеквизиты = Истина,
ПолучатьДопСведения = Истина,
МассивСвойств = Неопределено) Экспорт
Дополнительные реквизиты в 1с 8 представляют из себя специальную табличную часть у некоторых документов и справочников. В ней хранятся дополнительные данные, касающиеся данного объекта метаданных. Данный механизм реализован только в конфигурация работающих на управляемом приложении. По своему назначению дополнительные реквизиты напоминают дополнительные сведения, разница в том, что доп. сведения хранятся в отдельном регистре, это их плюс, но зато доп. реквизиты автоматически выводятся на форму объекта. В этой статье будет рассказано, как получать и записывать дополнительные реквизиты программно.
Получить дополнительные реквизиты программно
Функция получает значение дополнительного реквизита объекта по ссылке и свойству.
- Ссылка. Тип: Любая ссылка. Ссылка на искомый объект;
- Свойство. Тип: План видов характеристик ДополнительныеРеквизитыИСведения. Дополнительное свойство.
Код:
Функция ПолучитьЗначениеДопРеквизита(Ссылка, Свойство) Экспорт
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Свойство",Свойство);
Массив = Ссылка.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
Если Массив.Количество() = 0 Тогда
Возврат Неопределено;
Иначе
Возврат Массив[0].Значение;
КонецЕсли;
КонецФункции
Записать дополнительные реквизиты программно
Функция записывает значение доп. реквизита объекта по ссылке и свойству.
- Ссылка. Тип: Любая ссылка. Ссылка на искомый объект;
- Свойство. Тип: План видов характеристик ДополнительныеРеквизитыИСведения. Дополнительное свойство;
- Значение. Тип: заданный для данного свойства.
Функция ЗаписатьЗначениеДопРеквизита(Ссылка, Свойство, Значение)
Попытка
ОбъектСсылки = Ссылка.ПолучитьОбъект();
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Свойство",Свойство);
Массив = ОбъектСсылки.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
Если Массив.Количество() = 0 Тогда
НовоеСвойство = ОбъектСсылки.ДополнительныеРеквизиты.Добавить();
НовоеСвойство.Свойство = Свойство;
НовоеСвойство.Значение = Значение;
Иначе
Массив[0].Значение = Значение;
КонецЕсли;
ОбъектСсылки.Записать();
Исключение
Возврат Ложь;
КонецПопытки
КонецФункции
Если вы еще не знаете, как правильно работать с механизмом дополнительных сведений в 1с 8, то прочтите об этом в статье 1С дополнительные сведения запись и получение.
Опубликовано в Статьи по 1С 27.10.2018
В библиотеке стандартных подсистем 1С дополнительные реквизиты и сведения включены и активно применяются. Эти механизмы позволяют добавить дополнительный реквизит к объекту метаданных без изменения типовой конфигурации. Принцип работы дополнительных реквизитов и сведений, их добавление и получение значений.
Отличие дополнительного реквизита от дополнительного сведения в том, что
- Дополнительные реквизиты – список реквизитов, доступных в форме документа или справочника; причем эти реквизиты хранятся в табличной части объекта, к которому они добавлены;
- Дополнительные сведения – список значений доступных по дополнительной кнопке; причем доп. сведения хранятся в отдельном регистре.
После ввода дополнительного реквизита или сведения 1С, можно создать подключаемую обработку, где считать введенные дополнительные данные и задать необходимую логику обработки данных, в которой использовать этот реквизит или сведение.
Как получить 1С дополнительные реквизиты и сведения программно:
Для получения дополнительных данных используем запрос, в котором получим значение дополнительных реквизитов и сведений:
////
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДополнительныеСведения.Свойство,
| ДополнительныеСведения.Значение
|ИЗ
| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
|ГДЕ
| ДополнительныеСведения.Объект = &Объект»;
Запрос.УстановитьПараметр(«Объект», СсылкаДокумент);
////
Для получения дополнительного реквизита использую код вида:
////
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| НоменклатураДополнительныеРеквизиты.Свойство,
| НоменклатураДополнительныеРеквизиты.Значение
|ИЗ
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|ГДЕ
| НоменклатураДополнительныеРеквизиты.Свойство = &Свойство
| И НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка»;
Запрос.УстановитьПараметр(«Ссылка», СсылкаДокумент);
Запрос.УстановитьПараметр(«Свойство», ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Коэффициент бруто»));
////
Теперь вы без труда сможете добавить и получить необходимые дополнительные 1С данные без снятия конфигурации 1С с поддержки и изменения типовой конфигурации. Без сомнения, такой инструмент должен быть в арсенале 1С программиста и активно использоваться в работе.
Примеры работы с дополнительными реквизитами.
Как получить значение дополнительного реквизита:
Пример: мы делаем печатную форму документа «Заказ клиента» и хотим вывести на неё значение определённого дополнительного реквизита — «Должность покупателя».
Используем вложенный запрос, в котором соединяем левым соединением таблицу «Дополнительные реквизиты» документа «Заказ клиента» с Планом видов характеристик «Дополнительные реквизиты и сведения». Устанавливаем условие: заголовок дополнительного реквизита должен быть таким – «Должность покупателя». Таблицы соединяем по ссылке на «Заказ клиента».
Получается вот такой запрос:
"ВЫБРАТЬ | ДополнительныеРеквизиты.ДолжностьПокупателя КАК ДолжностьПокупателя |ИЗ | Документ.ЗаказКлиента КАК Заказ | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ЗаказДополнительныеРеквизиты.Значение КАК ДолжностьПокупателя, | ЗаказДополнительныеРеквизиты.Ссылка КАК Ссылка | ИЗ | Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ЗаказДополнительныеРеквизиты | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ПВХДополнительныеРеквизитыИСведения | ПО ЗаказДополнительныеРеквизиты.Свойство = ПВХДополнительныеРеквизитыИСведения.Ссылка | ГДЕ | ПВХДополнительныеРеквизитыИСведения.Заголовок = ""Должность покупателя"") КАК ДополнительныеРеквизиты | ПО (ДополнительныеРеквизиты.Ссылка = Заказ.Ссылка) |ГДЕ | Заказ.Ссылка В(&МассивОбъектов)";
Также можно использовать метод НайтиПоНаименованию(«***»).
Пример запроса:
"ВЫБРАТЬ | ДоговорыКонтрагентовДополнительныеРеквизиты.Значение, | ДоговорыКонтрагентовДополнительныеРеквизиты.Свойство |ИЗ | Справочник.ДоговорыКонтрагентов.ДополнительныеРеквизиты КАК ДоговорыКонтрагентовДополнительныеРеквизиты |ГДЕ | ДоговорыКонтрагентовДополнительныеРеквизиты.Ссылка = &Ссылка | И ДоговорыКонтрагентовДополнительныеРеквизиты.Свойство = &Свойство"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("КПП", Истина); Запрос.УстановитьПараметр("Свойство", Свойство);
Переменная Ссылка – это ссылка на «Договор контрагента».
Проверка на предмет того, что дополнительный реквизит заполнен:
ДопРеквизитСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Дата отправки", Истина); ЕстьСтроки = ЗаказПоставщикуСсылка.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство", ДопРеквизитСвойство)); Если ЕстьСтроки.Количество() = 0 Тогда // Обработка условия КонецЕсли;
Как изменить значения дополнительных реквизитов:
Задействуем общий модуль УправлениеСвойствами, который входит в состав БСП.
ДопРеквизитДатаОтправки = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Дата отправки", Истина); ДопРеквизитДоставка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Доставка", Истина); МассивСтруктур = Новый Массив; МассивСтруктур.Добавить(Новый Структура("Свойство, Значение", ДопРеквизитДатаОтправки, ТекущаяДата())); МассивСтруктур.Добавить(Новый Структура("Свойство, Значение", ДопРеквизитДоставка, Истина)); УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ЗаказКлиентаСсылка, МассивСтруктур);
Как получить значение дополнительного реквизита у сотрудника?
Автор Алексей Рожков, 27 мар 2020, 11:26
0 Пользователей и 1 гость просматривают эту тему.
Привет всем. Как из справочника «сотрудники» получить значение дополнительного реквизита?
Я пытаюсь написать, но ничего не получается.
Конфа — типовая
ЗУП 3.1
Пример:
ИЗ справочника «сотрудники» получить значение дополнительного реквизита с названием «Статья» у сотрудника Иванов Иван Иванович
Как это реализовать?
P.S. Прохожу курсы на Ютубе, но эту задачу нужно решить сейчас, а практики пока нет не судите строго
Цитата: Алексей Рожков от 27 мар 2020, 11:26
Привет всем. Как из справочника «сотрудники» получить значение дополнительного реквизита?
Я пытаюсь написать, но ничего не получается.Инфа:
Конфа — типовая
ЗУП 3.1
Управляемое приложениеПример:
ИЗ справочника «сотрудники» получить значение дополнительного реквизита с названием «Статья» у сотрудника Иванов Иван ИвановичКак это реализовать?
P.S. Прохожу курсы на Ютубе, но эту задачу нужно решить сейчас, а практики пока нет
не судите строго
(1)
//Ссылка - элемент справочника "сотрудники"
//Свойство - ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Статья, хотя УТОЧНИТЕ название")
Функция ПолучитьЗначениеДопРеквизита(Ссылка, Свойство) Экспорт
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Свойство",Свойство);
Массив = Ссылка.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
Если Массив.Количество() = 0 Тогда
Возврат Неопределено;
Иначе
Возврат Массив[0].Значение;
КонецЕсли;
КонецФункции
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают
Цитата: wise от 27 мар 2020, 11:36
(1)//Ссылка - элемент справочника "сотрудники"
//Свойство - ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Статья, хотя УТОЧНИТЕ название")
Функция ПолучитьЗначениеДопРеквизита(Ссылка, Свойство) Экспорт
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Свойство",Свойство);
Массив = Ссылка.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
Если Массив.Количество() = 0 Тогда
Возврат Неопределено;
Иначе
Возврат Массив[0].Значение;
КонецЕсли;
КонецФункции
Сделал, по вашему коду, но 1 ошибка не дает запуститься коду.
Скриншот
Переменная не определена (Справочники) — та самая ошибка. Помогите пожалуйста правильно сформировать код.
Не совсем понял фразу «//Ссылка — элемент справочника «сотрудники»» — Я указал «Справочники.Сотрудники», но ругается на это. На какой именно элемент указать нужно?
Вот такой у меня получился листинг
//Ссылка - элемент справочника "сотрудники"
//Свойство - ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Статья, хотя УТОЧНИТЕ название")
Функция ПолучитьЗначениеДопРеквизита(ссылка, Свойство) Экспорт
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Свойство",Свойство);
Массив = Ссылка.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
Если Массив.Количество() = 0 Тогда
Возврат Неопределено;
Иначе
Возврат Массив[0].Значение;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура Команда1(Команда)
ПолучитьЗначениеДопРеквизита(Справочники.Сотрудники,ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Заказ/статья затрат"));
КонецПроцедуры
Цитата: Алексей Рожков от 30 мар 2020, 07:32
Цитата: wise от 27 мар 2020, 11:36
(1)//Ссылка - элемент справочника "сотрудники"
//Свойство - ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Статья, хотя УТОЧНИТЕ название")
Функция ПолучитьЗначениеДопРеквизита(Ссылка, Свойство) Экспорт
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Свойство",Свойство);
Массив = Ссылка.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
Если Массив.Количество() = 0 Тогда
Возврат Неопределено;
Иначе
Возврат Массив[0].Значение;
КонецЕсли;
КонецФункцииСделал, по вашему коду, но 1 ошибка не дает запуститься коду.
Скриншот
Переменная не определена (Справочники) — та самая ошибка. Помогите пожалуйста правильно сформировать код.
Не совсем понял фразу «//Ссылка — элемент справочника «сотрудники»» — Я указал «Справочники.Сотрудники», но ругается на это. На какой именно элемент указать нужно?
Вот такой у меня получился листинг
//Ссылка - элемент справочника "сотрудники"
//Свойство - ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Статья, хотя УТОЧНИТЕ название")
Функция ПолучитьЗначениеДопРеквизита(ссылка, Свойство) Экспорт
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Свойство",Свойство);
Массив = Ссылка.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
Если Массив.Количество() = 0 Тогда
Возврат Неопределено;
Иначе
Возврат Массив[0].Значение;
КонецЕсли;
КонецФункции&НаКлиенте
Процедура Команда1(Команда)
ПолучитьЗначениеДопРеквизита(Справочники.Сотрудники,ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Заказ/статья затрат"));
КонецПроцедуры
https://its.1c.ru/db/metod8dev#content:2461:hdoc
Типовая версия программы 1С:Документооборот предоставляет возможность использовать большое количество предопределенных реквизитов документов. Однако для полноценной работы со всеми документами только типовых реквизитов порой недостаточно. 1С:Документооборот позволяет настроить собственные реквизиты в зависимости от потребностей и специфики организации с помощью механизма дополнительных реквизитов. Расскажем в статье о том, как это сделать в пользовательском режиме без изменения конфигурации.
Создание и настройка дополнительных реквизитов
В ходе заполнения документа «Заявление на командировку», помимо основной информации о сроках, месте и цели командирования, автору необходимо указать, планируются ли расходы на проживание, и если планируются, то добавить место проживания и примерную сумму затрат, иначе эти поля должны быть скрыты.
Для реализации этой задачи в карточке документа «Заявление на командировку» необходимы следующие дополнительные реквизиты: «Дата начала командировки», «Дата окончания командировки», «Место», «Цель», «Проживание», «Гостиница/отель» и «Сумма».
Рассмотрим настройку подробнее на примере создания дополнительных реквизитов «Проживание» и «Гостиница/отель».
Добавить дополнительный реквизит в документ можно как в настройке вида документа (в нашем случае это «Заявление на командировку»), перейдя по гиперссылке «Набор дополнительных свойств документа данного вида», так и непосредственно в разделе Настройка и администрирование – Дополнительные реквизиты.
При создании нового дополнительного реквизита указывается его наименование, тип значения, условия видимости и доступности, обязательность заполнения, всплывающая подсказка, комментарий, а также имеется возможность задать имя для разработчика, которое может использоваться при программном обращении к реквизиту.
Наличие дополнительного реквизита «Гостиница/отель» зависит от значения реквизита «Проживание», укажем это. Для этого воспользуемся настройками видимости – добавим условие, при выполнении которого реквизит появится в карточке документа. Аналогичная настройка производится для дополнительного реквизита «Сумма».
В результате при создании документа автор увидит только поле «Проживание». Установив галочку, ему станут доступны для заполнения поля «Гостиница/отель» и «Сумма». Задача выполнена.
Размещение, использование в других наборах и удаление дополнительных реквизитов
Все дополнительные реквизиты в карточке документа размещаются на вкладке Свойства. При необходимости их можно переместить на другую вкладку, перенастроив расположение элементов по команде Ещё – Изменить форму.
После записи документа значения дополнительных реквизитов будут отображаться на вкладке Обзор.
Также ранее созданные дополнительные реквизиты можно использовать в других видах документах. Для этого нужно воспользоваться способом добавления «Из другого набора» и выбрать, откуда будет добавляться реквизит. При этом представляется 2 варианта добавления: как есть (появится возможность отбирать по реквизиту данные разных типов в списках и отчетах) и как полную копию.
Поэтому в дальнейшем для документа «Приказ о направлении в командировку» аналогичные реквизиты создавать с нуля не придётся, поскольку их можно будет добавить из существующего набора реквизитов документа «Заявление на командировку».
После удаления дополнительного реквизита в новых документах он уже не будет использоваться, а в созданных ранее примет особый вид: серый перечеркнутый шрифт. Для удаления реквизита из созданных документов его значение очищается, а документ перезаписывается.
Применение дополнительных реквизитов
Дополнительные реквизиты, как и типовые, можно использовать:
— в условиях маршрутизации;
— в настройках автоматического заполнения шаблонов файла;
— при построении отчетов;
— при написании дополнительных обработчиков бизнес-событий;
— при изменении формы списка документов: вывести колонку со значениями дополнительных реквизитов, применить в отборе, сортировке, группировке и условном оформлении записей.
Так, ранее созданные дополнительные реквизиты документа «Заявление на командировку» можно будет использовать в дальнейших настройках. К примеру, в условии маршрутизации для формирования задачи менеджеру «Забронировать гостиницу/отель», если автор указал, что нуждается в месте проживания, а также при автозаполнении шаблона файла значениями реквизитов «Гостиница/отель» и «Сумма».
Заключение
Таким образом, с помощью дополнительных реквизитов можно организовать работу с неформализованными документами и ведение их учета в специфических разрезах.
Поскольку дополнительные реквизиты – это функционал всех конфигураций 1С, пользователю другой конфигурации работа с дополнительными реквизитами в 1С:Документообороте будет знакома.
Специалисты компании «1С:БИЗНЕС РЕШЕНИЯ» помогут Вам освоить все возможности 1С:Документооборота, проведут бесплатную демонстрацию программы и ответят на вопросы!
Узнать подробнее о возможностях программы и заказать бесплатную демонстрацию можно по ссылке http://edo.1c-br.ru/ или по телефону +7(3532)43-05-17.