gvk2009 подробно и доходчиво описал разницу методов, за что ему огромное спасибо:
В Синтаксис-Помощнике очень скупо написано о процедуре ДанныеФормыВЗначение(), чуть побольше - о РеквизитФормыВЗначение(). И совсем нет примеров использования. Попробуем с этим разобраться.
РеквизитФормыВЗначение()
Является методом управляемой формы, компилируется только &НаСервере, контекст формы является для него необходимым, поэтому компиляция &НаСервереБезКонтекста недоступна. На клиенте не работает, поскольку в результате получаем прикладной объект.
Где и когда его нужно использовать?
Метод РеквизитФормыВЗначение() необходим, если требуется из модуля формы вызвать стандартный метод объекта или метод (процедуру, функцию) из модуля объекта, из общего модуля.
Этот метод будет отрабатывать с данными, взятыми из формы, т.е. еще не записанными в базу.
Для того, чтобы измененные данные вернуть на форму, используется метод ЗначениеВРеквизитФормы().
Вторым параметром метода РеквизитФормыВЗначение является тип значения. Это необязательный параметр. Если обрабатываемый реквизит не является составным типом, то тип будет автоматически получен из реквизита формы. Иначе генерируется исключение времени выполнения.
Примеры:
В указанных выше случаях метод РеквизитФормыВЗначение() похож на метод ПолучитьОбъект(). Разница в том, что первый получает объект, заполненный данными формы, а второй - объект с данными из базы.
ДанныеФормыВзначение()
В отличие от метода управляемой формы РеквизитФормыВЗначение(), процедура глобального контекста ДанныеФормыВЗначение() может работать без контекста формы, но именно поэтому, в частности, ей необходимо указывать тип конвертируемых данных.
Обратной процедурой является ЗначениеВДанныеФормы().
Примеры:
В этом примере на форме отображен набор записей регистра бухгалтерии. При отработке процедуры, активность набора меняется только на форме, в базе при этом ничего не происходит. Активность у набора записей регистра в базе поменяется только после выполнения операции Записать.
В этом примере на клиент возвращается ОснРеквизит, содержащий измененные данные. Но его еще нужно "запихать" в отображаемую форму. Для этого используем процедуру глобального контекста КопироватьДанныеФормы().
В большинстве случаев процедуры ДанныеФормыВзначение() и РеквизитФормыВЗначение() взаимозаменяемы. При этом РеквизитФормыВЗначение проще в использовании. Но если требуется использование &НаСервереБезКонтекста - тогда только ДанныеФормыВЗначение.
В качестве иллюстрации взаимозаменяемости Пример 2 еще в двух вариантах:
Данная функция возвращает значение Истина, если хотя бы в одной из таблиц перерасчета есть хотя бы одна запись по данному документу. Если таких записей нет, то функция вернет значение Ложь, и перерассчитывать записи этого документа не нужно.
Собственно перерасчет записей, как и их расчет, рекомендуется выполнять в процедуре общего модуля по тем же причинам, что и расчет. Процедура перерасчета отличается от процедуры расчета только тем, что в расчете участвуют не все записи документа, а только удовлетворяющие усло- виям проводимого перерасчета. Например, только записи по конкретным сотрудникам и конкретным видам расчета.
Наконец, после того как нужные записи перерассчитаны, необхо- димо средствами встроенного языка удалить соответствующие записи из таблицы перерасчета, так как перерасчет больше не требуется.
Процедуру перерасчета записей документа рекомендуется помещать в модуле этого документа как экспортную процедуру. В этом случае она может быть вызвана из других модулей, в том числе из обработки перерасчета, описанной в предыдущем разделе. В качестве параметров в процедуру должна передаваться информация о том, какие именно записи документа необходимо перерассчитать. Ниже приведен пример такой процедуры, где в качестве параметра используется список сотрудников, по которым необходимо выполнить перерасчет.
Процедура перерасчета записей документа
Процедуры общего модуля, выполняющие непосредственный перерасчет записей, по алгоритму схожи с процедурами расчета. Основное отличие состоит в том, что в процедурах перерасчета происходит расчет только тех записей, которые удовлетворяют заданным условиям. В данном случае это записи по заданному списку сотрудников. Также при перерасчете не нужно производить предварительную запись набора с формированием фактического периода действия, так как набор уже записан в регистр (перерассчитываемый документ всегда проведен). Ниже приведен пример процедур ПерерассчитатьЗаписиРегистраРасчета() и ПерерассчитатьНаборЗаписей(). Эти процедуры используют вызов тех же самых процедур и функций, которые используются при расчете.
В случае если в качестве второго параметра передается значение Ложь, расходные накладные и записи регистра накопления регистрируются как измененные только в случае совпадения склада со складом, определенным в узле плана обмена. Все остальные данные регистрируются обычным образом.
Автоматизация обмена между базами используя обработку "Универсальный обмен данными в формате XML" В основу данной публикации положены найденные мною материалы по cозданию обмена между двумя базами с использованием обработки "Универсальный обмен данными в формате XML" . Но предлагается вариант автоматизации решения задачи которая позволяет выполнять обмен неквалифицированным пользователям, либо по регламенту. Скажем такой обмен применим если вы не можите по ряду причин использовать РБД, либо совсем разные конфигурации баз (случаи бывают разные, а хочется максимально настраиваемой гибкости).
Вначале безусловно воспользуемся конфигурацией "Конвертация данных" чтобы создать необходимые нам правила обмена (как - это отдельная тема).
Итак Собственно сама ВЫГРУЗКА:
Настройка ОТБОРА:
Тут надо обратить внимание на массив "ВременнаяТаблицаПравил.Строки[1]" и в частности на индекс массива строк,
1 - это ветка "Справочники". Ну и так далее по аналогии
Сдесь вы определяете искомое правило выгрузки которое нужно оставить включенным на определенной ветке (сами можите варьировать чего и сколько)
Теперь настраиваем ОТБОР смысл которого передать в нашу выгрузку ссылку на документ(ты) который(е) хотим выгрузить:
Обработка.ТаблицаПравилВыгрузки = ВременнаяТаблицаПравил.Скопировать();
Ну и собственно запускаем саму выгрузку и получаем файл для загрузки:
Далее процесс загрузки:
Он довольно прост
Расширение .zip для файлов обмена пусть вас не смущает, обработка самостоятельно упакует .xml файл в архив:
И также самостоятельно уже без дополнительных указаний распакует и загрузит. Это существенно уменьшает размеры файла обмена.
Введение
Многие из Вас, наверное, сталкивались с такой проблемой как, удаление элементов в справочниках, а значит, знают, какую кучу проблем это приносит. Я видал много способов восстановления порушенного справочника. Все их можно свести к следующему:
Заводится новый элемент справочника, аналогичный удаленному элементу, а потом он заносится во все документы, вместо удаленного элемента. Дальше все различается только способом занесения элемента в документы. Кто все исправляет в руки, кто пишет обработку - все зависит от опыта и квалификации исполнителя. После чего, необходимо перепровести все измененные документы. В общем, долгая и нудная работа, не всегда дающая 100% результат правильного восстановления. Есть, правда, один быстрый способ, основанный на формате DBF, точнее методах работы с ним.
Вот об этом мы и поговорим. Итак, что нам для этого надо. Иметь голову, наполненную мозгами, умелые ручки, знания основ перевода чисел из одной системы счисления в другую и любой редактор DBF файлов. Я, к примеру, использую winDBFview фирмы "Гэндальф".
Часть 1. Нам повезло.
С начала, собственно, о формате DBF и методах работы с ним. Думаю, рассказывать обо всем формате нет смысла, это тема отдельной статьи, поэтому расскажем о нем вкратце, для понимания тех действий, которые необходимо совершить.
Итак, что такое DBF формат и с чем его едят. Файл DBF можно разделить на две части: заголовок и, собственно, набор данных. В заголовке находится вся служебная информация, показывающая из каких полей состоит запись, типы этих полей, размер данных в полях, количество записей, размер записи, и откуда в файле начинаются записи, но это сейчас ни к чему. В наборе данных находятся, собственно, записи данных. В начале каждой записи стоит специальный байт - признак удаления. То есть когда вы говорите программе удалить запись, она ее фактический не удаляет, а ставит в первый байт записи метку о том, что данная запись удалена.
Отсюда следует, что если найти запись соответствующую удаленному элементу и сбросить признак удаления, переиндексировать базу, то можно обнаружить что, правильно удаленный
элемент будет восстановлен не только в справочнике, но всех документах.
Для тех, кто не знает что почем, показываю на примере:
Рабочая конфигурация ТиС, удалили элемент справочника товаров.
Запускаем winDBFview и выбираем Файл - Открыть. В появившемся окне диалога находим папку, в которую установлена база и открываем там файл. А какой? Вот ведь вопрос: как узнать? Да просто. Запускаем какую-нибудь оболочку, переходим в папку с базой и находим файл"1Cv7.DD". Открываем его для просмотра и находим там следующую строчку - "Справочник Номенклатура" - в нашем случае, у вас, вместо "Номенклатура" ставим название порушенного справочника (как он называется в конфигураторе) . И видим приблизительно следующее (см. рис. 1). То, что у меня выделено под надписью "Name" и есть искомое нами имя файла. Открываем его в редакторе DBF файлов, и смотрим. В поле CODE содержится код элемента справочника, а в поле DESCR наименование элемента. Как будете искать - уже дело техники и возможностей редактора. Найдя нужный элемент, сбрасываем байт пометки на удаления и сохраняем сделанные изменения.
Часть 2. Нам не повезло.
Но может быть, что вы не смогли быстро приехать к месту событий (всякое в жизни бывает). Приступили к восстановлению элемента. Запустили редактор. И начали искать и не нашли удаленный элемент. Куда он делся? Опять вернемся к формату DBF, и посмотрим, что происходит при добавлении новой записи. С начала программа ищет помеченные на удаление записи и если не находит, то добавляет новую запись. А если находит, вы правы, пишет вместо нее. И что делать, неужто опять все в руки?
Внимательно смотрим листинг файла "1Cv7.DD". Видите перед полем CODE поля ID и PARENTID. Для чего они нужны. Из описания поля (см. рис. 1), следует, что это какой-то идентификатор объекта. Оказывается 1С все равно, на тот код, что вы указали в справочнике элементов. Сама для себя она каждому объекту присваивает свой код. Значит, если мы узнаем этот код, то сможем создать запись полный аналог удаленной. Хм.... А как узнать этот код?
Есть много способов. Я, надеюсь, предлагаю вам самый простой. Итак, начнем.
Запускаем 1С. Лезем в Сервис - Монитор пользователей - Журнал регистрации. В появившемся диалоге делаем отбор: "во всем журнале, отбор по признаку удаление элемента справочника", жмем "ОК".
И смотрим журнал (см. рис. 2). Видите, там, где написано "Номенклатура 2258 04 ....", это и есть удаленный элемент справочника, его нам и надо восстановить. Сверху присутствует
строка: "<Объект не найден>(36201/)", 36201 - это и есть ID объекта. Создаем в справочнике новый элемент - полный аналог удаленному элементу. Выходим из 1С. Запускаем редактор, находим созданный нами элемент и поле ID ставим найденный. Внимательный читатель может сразу заметить существенное различие между соседними записями. Вот сейчас мы и переведем найденный идентификатор к нужному виду.
Перевод из одной системы счисления в другую, подробно изучается в школах и институтах, поэтому на этом останавливаться не будем. Изучив весь справочник, замечаем, что в идентификатор состоит из цифр и заглавных букв латинского алфавита. То есть может содержать все цифры от "0" до "9", и буквы от "A" до "Z". Значит, используется тридцати шестеричная система счисления 10 цифр плюс 26 букв. Приступим:
* 36201 делим на 36, получаем 1005 в остатке 21;
* 1005 делим на 36, получаем 27 в остатке 33;
В конце имеем три числа: 27, 33, 21. Заменяем их соответствующими значениями из приведенной ниже таблицы и получаем ID объекта RXL. Записываем его вместо ID созданного нами элемента. Номер можно получить средствами самой 1С использую функцию _IdToStr() и наоборот получит десятичное число из его тридцати шестеричного представления _StrToId().
Запускаем 1С, индексируем базу и смотрим, что имеем (см. рис. 3)
Что и требовалось получить. Пользуйтесь.
Для обмена данными между программами необходимо сделать следующее:
1. При помощи Конвертации Данных создать правила выгрузки данных
2. Нужно чтобы в конфигурации была обработка УниверсальныйОбменДаннымиXML, желательно последней версии!
(При помощи ее и созданных правил будут выгрузаться и заружаться данные)
3. В 1-вой базе Добавляем Регламентное задание:
Имя - Выгрузка
Использование - !(галочка)
Расписание настройте обязательно.
Имя метода - Общий модуль в котором процедура ВыгрузимИзЗУП():
4. Во 2-ой базе Добавляем Регламентное задание:
Имя - Загрузка
Использование - !(галочка)
Расписание настройте обязательно.
Имя метода - Общий модуль в котором процедура ЗагрузкаВБУХ():
Для обновления релиза конфигурации следует использовать режим "Объединение конфигураций". Вам потребуется файл метаданных (файл 1Cv7.MD) нового релиза конфигурации.
1. Запустите систему 1С:Предприятие в режиме "Конфигуратор".
3. Вызовите режим "Объединение конфигураций", для этого в меню "Конфигурация" выберите пункт "Объединение конфигураций". Если "Объединение конфигураций" недоступно - используйте Загрузить измененную конфигурацию и перейдите по инструкции к шагу 7!
4. В запросе "Открыть файл конфигурации" выберите файл метаданных 1Cv7.MD нового релиза конфигурации.
5. В окне режима "Объединение конфигураций" проверьте:
- в группе "Приоритет конфигурации" был установлен
переключатель "Загружаемая конфигурация";
- в группе "Метод объединения" установлен
переключатель "Замещать объекты".
6. Нажмите кнопку "OK" для объединения конфигураций.
7. После завершения будет открыто окно "Конфигурация", содержащее конфигурацию с внесенными изменениями.
8. Выполните сохранение конфигурации. нажав на значок сохранить или Файл - Сохранить
Подтвердите сохранение метаданных, нажав Да.
Далее нажмите Принять, и ОК.
9. По окончании установки обновления новые или измененные внешние отчеты, внешние печатные формы и формы календаря бухгалтера располагаются в каталоге ExtForms обновления. Данные отчеты и формы не входят в конфигурацию, поэтому для того, чтобы их обновить, все содержимое данного каталога следует перенести в каталог ExtForms вашей информационной базы.
Узнать Каталог вашей информационной базы, можно нажав на желтый знак вопроса:
Каталог Информационной базы = Информационная база: (на картинке это K:\teme\Buh45\)
10. Для обновления компоненты V7Plus файлы UPDATE\SSTDB\V7Plus.dll и UPDATE\SSTDB\V7Plus.als скопируйте в каталог вашей информационной базы.