1с 7 скопировать документ

Обновлено: 07.07.2024

Сохранение конфигурации 1С в файл может потребоваться в различных случаях:

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

В отличие от платформы 1С:Предприятие 8.х, где конфигурацию нужно было сохранять в файл через меню Конфигурация — Сохранить конфигурацию в файл…, в версии 1С 7.7 этот файл уже готов и лежит в папке с информационной базой. Имя файла: 1Cv7.MD.

Для решения этой задачи нужно:

  1. Создать пустую папку на диске, где будет находиться информационная база.
  2. Добавить эту папку в загрузчик 1С:Предприятие 7.7 (кнопка Добавить).
  3. Далее есть 2 пути:
    • Поместить в папку с информационной базой файл 1Cv7.MD с нужной конфигурацией;
    • Зайти в конфигуратор, воспользоваться командой Конфигурация — Загрузить измененную конфигурацию (команда доступна только при закрытом окне конфигурации) и выбрать в открывшемся окне файл 1Cv7.MD.

Для загрузки измененной конфигурации в информационную базу 1С:Предприятие 7.7 необходимо воспользоваться командой Конфигурация — Объединение конфигураций.

В открывшемся окне диалога выбора файла нужно выбрать файл 1Cv7.MD с измененной конфигурацией.

Далее будет показано окно анализа различий в текущей и загружаемой конфигурациях. Здесь можно выбрать:

  • какие объекты загружать;
  • приоритет текущей или загружаемой конфигурации;
  • метод объединения (загружаемые объекты полностью замещают аналогичные имеющиеся, или же объединяются с ними).

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

1. Запустите обработку, желательно из базы, в которую будем копировать.

2. Выберите БАЗА-ИСТОЧНИК — путь к базе с данными, БАЗА-ПРИЕМНИК — ТЕКУЩАЯ

4. После подключения заполнятся списки справочников. Выберите Справочник-источник и справочник-приемник. При выборе заполнятся таблицы реквизитов.

6. Далее нужно выбрать тип операции: копировать только новые, обновлять существующие, либо и то и другое. Для принятия решения о том, существует ли уже запись в приемнике или нет, выбирается признак равенства. Варианты: запись существует, если равны коды, если равны наименования, либо если равны и коды и наименования.

9. Для периодических реквизитов необходимо задать дату, на которую они будут считаны и записаны.

10. Рекомендуется для больших справочников использовать транзакцию.

11. Если нарушается уникальность кодов, можно попробовать отключить их копирование. Это поможет, если включена автонумерация.

12. Можно копировать не весь справочник, а его группу, набрав код группы в соответствующем поле формы. Это срабатывает и для владельца подчиненного справочника. При данном режиме группа копируется в первый уровень справочника, на нужное место ее можно переместить после копирования.

13. До релиза 1С 7.7.008 при завершении работы происходил некорректный выход из программы, в памяти оставался процесс 1cv7.exe. Поэтому рекомендуется пользоваться релизом 008 или более поздним.

На основе имеющегося документа в конфигураторе создал документ-клон, но с другим названием и чуть измененной формой. Те же реквизиты, код в форме и в проведении (=МОДУЛЬ ДОКУМЕНТА). Ничего не менялось. Просто тупой copy-paste.

Но документ проводится, но не создает проводок по счетам и операций.

гораздо проще делать через копировать объект (F9).

Я недавно начал программировать в 1С v7.7. <br>И мне необходимо с помошью обработки копировать все элементы из одной группы справочника в другую?Если можно сделать, как-то еще подскажите. ))) А то в ручную слишком много элементов перенасить надо. времени уйдет очень много! Зарание спасибо. <br>

". <br>Сп=СоздатьОбъект("Справочник. ");<br>Сп.ИспользоватьРодителя(ВыбРодительОткуда); // это группа, откуда переносить<br>Сп.ВыбратьЭлементы(1);<br>НачатьТранзакцию(); // на всякий случай для работы в сети немонопольно<br>Пока Сп.ПолучитьЭлемент()=1 Цикл<br>Сп.Родитель=ВыбРодительКуда; // это группа, куда переносить<br>Сп.Записать();<br>КонецЦикла;<br>ЗафиксироватьТранзакцию();<br>. <br><br>Если не надо перемещать вложенные группы, в начало цикла добавьте условие<br><br>Если Сп.ЭтоГруппа()=1 Тогда<br>Продолжить;<br>КонецЕсли;<br><br>PS. Рекомендую записаться на курсы программистов 1с, поможет.<br>"

"Думаю, что не будет работать, скажет, что нарушен порядок выборки.<br>Я бы делал так:<br>СписокКПеремещению=СоздатьОбъект("СписокЗначений");<br>Сп=СоздатьОбъект("Справочник. ");<br>Сп.ИспользоватьРодителя(ВыбРодительОткуда); // это группа, откуда переносить<br>Сп.ВыбратьЭлементы(1);<br>Пока Сп.ПолучитьЭлемент()=1 Цикл<br>СписокКПеремещению.ДобавитьЗначение(Сп.ТекущийЭлемент());<br>КонецЦикла;<br>НачатьТранзакцию(); // на всякий случай для работы в сети немонопольно<br>Для i=1 По СписокКПеремещению.РазмерСписка() Цикл<br>Сп.НайтиЭлемент(СписокКПеремещению.ПолучитьЗначение(i));<br>Сп.Родитель=ВыбРодительКуда; // это группа, куда переносить<br>Сп.Записать();<br>КонецЦикла;<br>ЗафиксироватьТранзакцию();<br>"

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

В данном примере показано, как переносить элементы а мне их надо копировать. непродскажете как сделать?)))

Готовую обработку попробуй:<br> http://infostart.ru/projects/590/?<br> ;"Копир групп, элементов и подчинённых справочников"

> В данном примере показано, как переносить элементы а мне их надо >копировать. непродскажете как сделать?)))<br><br>Копировать элементы справочника из одной группы в другую - вы хоть понимаете что такое система справочников в системе 1С?<br>Это касается и другово вашего вопроса по переодическим реквизитам. Лучше обяъсните что вы делаете и что надо сделать на самом деле(какая поставлена перед вами задача)?<br><br>

Копировать тоже можно, но! Боюсь, что поскольку вы написали, что вы новичок, не стоит вам этого делать. Это отпугнет вас от изучения языка и принципов работы системы. Но мне не жалко, я, в принципе, могу описать основные проблемы, которые возникают при этой задаче.<br>Если рассматривать задачу в общем виде и пытаться написать универсальный алгоритм для проведения данной операции, то мы должны понимать, что у нас имеется:<br>1. Набор произвольных реквизитов для отдельно взятого справочника.<br>2. Реквизиты могут быть не простыми, а периодическими.<br>3. Значения периодических реквизитов могут быть установлены не только вручную, но и документами.<br>4. Существует понятие подчиненности справочников. То есть, копируемый элемент может иметь какого то владельца, мало того, в свою очередь может являться владельцем для каких то других элементов. Мало того, и для тех элементов тоже могут иметься и владельцы и подчиненные элементы.<br><br>Реализовать задачу с какими то упрощениями можно! Например, значения периодических реквизитов, установленные документами можно записывать в элементе-приемнике как "установленные вручную". Если для вас эта задача просто для обучения - реализуйте ее с еще большими упрощениями. Копируйте только код и наименование. Общий принцип работы вы поймете. Код и наименование ненулевые практически в любом справочнике.

Добрый вечер. Программно копирую документ, но не могу потом поймать его контекст. Делаю через: 1. Открывается журнал документа и документ делается активным (АктивизироватьОбъект); 2. Копирую документ, Сервис.ЭмулироватьКлавиатуру(""); 3. Журнал закрывается. В итоге у меня есть скопированный документ, но нет к нему доступа. Пробовал через АктивныйКонтекст, но ловится только документ-исходник. Есть какой-нибудь вариант поймать контекст копии? Можно, я так понимаю, сделать просто через "ОткрытьФорму" новый документ и скопировать через метаданные все атрибуты. И контекст там будет, но это второй вариант.

А зачем такой гемор? Не проще ли программно его скопировать, заполнив по метаданным?

Казалось что проще сэмулировать копирование, чем заполнять по метаданным.

+ В смысле какая исходная задача для копирования документа?

всего-то примитивный запрос на insert в пару-тройку табличек.

Надо в документе сделать кнопку, которая будет делать идентичный документ, но разбивать табличную часть по условию. Т.е. какая-то часть строк останется в первом документе, а остальные перейдут в копию. Да я был бы рад сделать прямым, но пока что не имею представления как это сделать.

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

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

У меня есть подозрение, что работа с атрибутами через КонтекстФормы это хреновое занятие.

Ты на пальцах расскажи, занафея тебе форму открывать??

Знаю, уже много раз получал в морду эту фразу, но тут надо именно так. Можно создать программно через Новый и заполнить, но этот документ (копию) нужно будет сразу выдать на экран. А для этого его нужно будет сохранить после создания. Нафига мне это надо? Надо открыть форму, заполнить чё надо и думать писать его в базу или нет.

в же сказал - откроется форма нового документа заполненная как написано в процедуре ВводНаОсновании. Пользователь примет решение - сохранять или нет.

Я, возможно, как-то неправильно поставил вопрос. Мне надо просто скопировать документ, на который есть ссылка и получить контекст формы полученного копированием документа.

+ Зачем мне дописывать ВводНаОсновании? Можно и через метаданные скопировать.

++ Это сродни тому, что я и хочу: "ОткрытьФорму и через контекст делать что угодно", но только без переписи ВводНаОсновании.

Читайте также: