gifts2017

Хранилище конфигурации: создание и использование

Опубликовал Котэ Пруидзе (kote) в раздел Программирование - Практика программирования

Заметка про Хранилище конфигурации 1С:8.х

Зачем, кому и для чего оно может быть полезно? Как создать, как использовать, как организовать работу программистов с ней?

"Неочевидные" и "невероятные" методики для чайников :)

Пара общих строк. Зачем это нужно?

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

- Если Вы хотите видеть, что, как и кем менялось в конфигурации с течением времени..

- Если Вы хотите иметь представление об объемах работы по изменению конфигурации каждого конкретного программиста (к сожалению, внешние обработки и отчеты туда не поместишь)

- Если над изменениями конфигурации работает несколько программистов и Вы хотите избежать ситуации, когда один из них перезатирает работу другого..

- Если нужно организовать слаженную работу географически удаленных разработчиков..

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

.. то Вам может помочь организация работы с использованием Хранилища.

В мире "большого" программирования т.н. Конфигурационное управление используется очень давно и многие проекты, представленные в каталогах бесплатного ПО, просто не смогло бы появится без использования данного подхода. И в мире 1С это так-же не могло не возникнуть, учитывая возрастающую сложность конфигураций и необходимость их групповой разработки и поддержки.

Итак.. Создание Хранилища.

В режиме Конфигуратора, в меню Конфигурация/Хранилище конфигурации выберем Создать хранилище... , укажем каталог хранилища, пользователя/пароль (не связано с пользователями БД) и выгрузим ТЕКУЩЕЕ состояние конфигурации в него..

Что нужно сделать дополнительно: Даже если Вы планируете работать с Хранилищем в одиночку - сразу после создания создайте ЕЩЕ одного пользователя хранилища с административными правами и одного с параметрами по умолчанию - пункт Администрирование хранилища в том же меню.

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

У нас есть хранилище. И наша текущая (как правило - рабочая) БД к нему уже подключена. Причем под именем того пользователя, от имени которого Хранилище было создано..

Неочевидный аспект: имейте ввиду, что теперь этот пользователь будет "закреплен" за Рабочей БД, от имени другого пользователя, открыв рабочую БД в конфигураторе, соединится с Хранилищем не удастся!

Как вести разработку:

- Для (каждого) программиста (обычно, локально, на его компьютере) создается пустая БД. Из основной БД делается выгрузка с данными (если она не сильно объемная - файл *.dt) или выгружается просто конфигурация (если БД сильно большая - файл *.cf). - В созданную локально базу заружают копии основной БД (можно без этого обойтись, но так быстрее, чем.. "не так" - этот пункт отсутствует в документации, по стандарту, его можно пропустить).

- Теперь нужно соединить нашу локальную БД с Хранилищем - выберем в том же меню, что упоминалось выше, пункт Подключиться к хранилищу.. , где укажем путь/адрес хранилища, пользователя с "обычными" правами (если программистов много - то для каждого должна быть заведена его учетная запись в Хранилище) и жмем OK.Происходит сравнение конфигурации Хранилища и Вашей локальной копии и подключение к Хранилищу.

ПРИ ЭТОМ ЕСЛИ ЕСТЬ РАЗНИЦА - ВАША ЛОКАЛЬНАЯ КОНФИГУРАЦИЯ БУДЕТ ЗАТЕРТА КОНФИГУРАЦИЕЙ ХРАНИЛИЩА

Данные локальной БД, при этом, останутся целыми.. можете считать, что произошло Объединение конфигураций с приоритетом конфигурации Хранилища.

"Неочевидное": а что делать если мы уже вели разработку в локальной БД? Как сохранить все "нажитое непосильным трудом"??

"Невероятное": выход есть. ПЕРЕД тем, как соединить локальную БД с Хранилищем, СДЕЛАЕМ ВЫГРУЗКУ локальной конфигурации в файл *.cf

После этого свяжем БД с Хранилищем и затрем свои изменения. Затем выполним операцию Захватить в хранилище.. (рекурсивно, если мы одни и никто не работает над изменением объектов) над корневым элементом в дереве Конфигурации.

После этого объединим локальную конфигурацию с конфигурацией из файла с приоритетом последнего и отправим все НАШИ ИЗМЕНЕНИЯ в Хранилище (операция Поместить в хранилище..).

Все в порядке. Оттуда эти наши изменения можно отправлять в основную БД!

Если программистов много - то изменения каждого нужно отправлять в Хранилище поочереди, ПРЕДВАРИТЕЛЬНО выгрузив у всех работу во внешние файлы с конфигурацией локальной БД и (если объединение делается с разных рабочих мест), не забывая перед каждым объединением ОБНОВЛЯТЬ локальные БД из Хранилища - до последней версии, с присутствующим там изменениями ранее подключенных товарищей не забывая перед каждым объединением выполнять РЕКУРСИВНЫЙ захват корневого элемента конфигурации, в ходе которого в т.ч. происходит обновление конфигурации из Хранилища до последней версии.. А после каждого объединения выпонять РЕКУРСИВНЫЙ возврат корневого элемента для обновления конфигурации в Хранилище.

А теперь можно начинать продуктивную работу..

====

Советую ознакомится со следующими ссылками:

 - На сайте 1С и еще вот это вот..
 - Кроме того пригодится еще это вот - из документации..
 - Настройка работы через интернет.

====

http://www.gilev.ru/1c/storage/index.htm
http://www.kb.mista.ru/article.php?id=788

====

В комментариях появляются очень хорошие посты.. этот не могу потерять :)

Большое спасибо автору, хорошо написал!

"12.

+ -
nafa 14.01.2010 02:27:15
..
В работе хранилища действительно очень много неочевидных вещей, поэтому мои дополнения:
1. Если работают несколько программистов, то как вариант,
рабочий день обычно начинается со следущего:
запускаем свою базу в конфигураторе, на корне конфигурации правой кнопкой мышки - получить из хранилища, включаем галочку "рекурсивно", жмем ОК. После этого в конфигурацию получаем все, что наработали другие из хранилища. САМУ БД НЕ ОБНОВЛЯЕМ!!!
Далее желаем "сравнить конфигурацию с конфигурацией БД" - и видим список все изменений сделанных другими программистами группы за предыдущий день. Если есть вопросы по изменениям- обращаемся к тому, кто их делал.
После того, как все разобрали - сохраняем в БД.
Почему не сравнить с конфигурацией хранилища - во-первых чтобы не показывались те объекты, над которым сам работаешь, во-вторых это работает быстрее.
2. В середине дня: срочные изменения (для динамического обновления) отправляем в хранилище сразу. Не срочные - после того, как изменим все связанные объекты. (см. пояснение ниже)
3. В конце дня (а если надо делать полное обновление базы - то перед ним) сдаем в хранилище все что можно.
Это не обязательный порядок, но весьма удобный.

4. Почему не помещаем сразу:
потому что целостность изменений контролируется 1С только там где есть ссылка. То есть если например вы сделали справочник "Автомобили клиентов" и добавили ссылку на него в "расходную накладную", то поместить "Расходную накладную" в хранилище Вы сможете только после (или одновременно) со справочником "Автомобили клиентов". Но если Вы например использовали этот справочник в процедуре общего модуле, которая вызывается при проведении расходной накладной, то этот общий модуль в хранилище спокойно поместиться без помещения справочника. Если после этого другой программист получит этот модуль из хранилища, то в его базе расходные накладные проводиться перестанут. (А если обновить основную базу - то и там перестанут).
И то еще хороший случай - так как возникает просто ошибка. А вот если Вы например изменили тип реквизита в документе со строки на текст и в процедуре общего модуля была проверка Если Реквизит = "1" а стала Если Реквизит = 1 и модуль в хранилище поместили а документ - нет, то ошибки не будет (привет отсутствию контроля типов), а значит у тех кто такой модуль получит документы будет неправильно проводиться, (и хорошо если это будет не основная база). Поэтому изменения лучше сдавать в хранилище "полным пакетом" (все измененные по одной теме объекты), если что-то нужно Вам для другой задачи - можно сразу же захватить по новой или просто, помещая в хранилище, "оставить захваченным".

В этом плане я не совсем понял:
Цитата
Если программистов много - то изменения каждого нужно отправлять в Хранилище поочереди, ПРЕДВАРИТЕЛЬНО выгрузив у всех работу во внешние файлы с конфигурацией локальной БД и (если объединение делается с разных рабочих мест), не забывая перед каждым объединением ОБНОВЛЯТЬ локальные БД из Хранилища - до последней версии, с присутствующим там изменениями ранее подключенных товарищей..

Странно, не было никаких проблем когда несколько человек сразу изменения помещали, разве что подтормаживало малость. На то захват объектов и предусмотрен, чтобы 2 человека сразу одно и то же не исправили. Причем было замечено, что: если 1 разработчик изменил документ, скажем "Авансовый отчет", а затем второй "получения" не делал, а сразу его захватывает (например, объект только что помещен в хранилище), то 1С это отследит и сама даст ему уже новую - измененную версию. (Так прикольно бывает - смотришь на документ - 5 реквизитов, захватываешь - уже 15).

И зачем работу во внешние файлы выгружать тоже не понял.

4. Создание копий базы для программистов проще делать не 1Совской загрузкой-выгрузкой (т.к. она требует монопольного режима и не шибко шустрая), а восстановлением скульного бекапа или просто копированием базе на скуле.

5. Если нужно добавить новый объект (документ, справочник и пр), то захватите корень конфигурации, добавьте его, добавьте минимум реквизитов (совсем "пустые" объекты не всегда сохраняется), сдайте корень в хранилище (этот объект тоже сдастся при этом) и заберите объект опять. (Чтобы не держать корень долго захваченным - он и другим нужен).

6. Если Вы хотите исправить права доступа на объект, захватили его - а права доступа по прежнему недоступны - захватите соответствующую роль.

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

8. Когда делаем "получить все из хранилища" (п. 1) бывает, что 1с выдает кучу сообщений а потом пишет, что "не удалось" (список объектов при этом меняется). Значит давно не получали изменения. Ничего страшного, жмем ОК по новой и так до тех пор, пока не сработает, как надо.

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

10. Поскольку рабочие базы делаются из основной, то названия конфигураций совпадают и их легко перепутать и потом начинаются непонятки, когда пользователе говорит что у него в отчете 100 руб, а у Вас - 100,000 руб. Как вариант, добавляем в модуль приложения строчку, проверяющую при запуске программы что это за база и если не основная - выводящую это в заголовке программы 1С (например "РАБОЧАЯ БАЗА ПРОГРАММИСТА ИВАНОВА")

11. Когда база подключена к хранилищу, но при запуске не удалось к нему подключиться по любым причинам, то может выдаться сообщение "Не удалось подключиться, выполнить отключение от хранилища" (а у Вас есть захваченные объекты) - тут ОТВЕЧАЙТЕ "НЕТ". Но если случайно ответить "да" то - не пытайтесь подключиться по новой!!! Сначала сохраните конфигурацию в файл!!! Так как когда подключаемся к хранилищу, то вся конфигурация базы заменяется на конфигурацию хранилища. После этого загружаем изменения из сохраненного файла и работаем дальше.
[+]: vase4kin!; vtolga; hulio; kote;

Отредактировано nafa 14.01.2010 02:35:19

Ответили: (16) "

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Алексей Ситников (SiAl) 12.01.10 07:08
Хорошая статья, с картинками. Действительно для "чайников".
2. Артур Аюханов (artbear) 12.01.10 13:18
Самое главное (использование) слабо расписано или вообще не описано :(
Как работать с конфигурацией, помещенной в хранилище?
что делать, если объект уже захвачен в хранилище ?
назначение галочки рекурсия?
и т.д.

ЗЫ мы же говорим о начинающих :)
3. Котэ Пруидзе (kote) 12.01.10 15:26
(2) .. ну у меня проблемы с этим не возникло, т.к. эти моменты более менее расписаны. А вот с вышеупомянутыми были вопросы, ответы на которые были найдены опытным путем.. в общем, обмен опытом для начинающих работать с системой версионного контроля фирмы 1С.

Назначение галочки рекурсия - в дереве конфигурации происходит захват не только ВЫДЕЛЕННОГО объекта, но и подчиненных ему.. т.е. если, например, выделить "узел" документа "ПриходнаяНакладная" и захватить его - то формы и макеты этого объекта будут незахвачены и над ними может трудится другой программист.. с галочкой рекурсия - будет захвачено все, что к документу относится (формы, макеты)..
Если выделить корень конфигурации, отметить галочку и выполнить захват - то получите АБСОЛЮТНО ВСЕ что входит в конфигурацию.

Если объект уже захвачен кем-то - то нужно дождаться, когда человек его поправит и освободит.. Именно этот момент позволяет избежать проблем с перезатиранием работы одного программиста другим.

Использование в одиночку - захватываем ВСЕ, делаем необходимую доработку, локально тестируем, сохраняем в хранилище с комментарием что сделано.. впоследствии, если что то не так, можно загрузить конфигурацию на момент ДО сделанной доработки.. можно посмотреть, что и где добавилось, какие изменения были сделаны в модулях - для этого нужно в меню Конфигурация/Хранилище выбрать История, выделить две строки и по правой клавише выбрать команду Сравнить конфигурации..

Использование в группе - вопрос более сложный и многообразный.. как появится опыт нашей группы - сделаю небольшое дополнение к заметке.
4. Артур Аюханов (artbear) 12.01.10 19:40
(3) ты не мне пиши, а в свое статью вставь :) - я это и так знаю :)
а в статье явно будет полезнее, чем просто в комментах.

про галочку рекурсия ИМХО лучше дописать, что для прикладных объектов без нее будет захвачен только модуль объекта.
а после захвата корня конфы без рекурсии можно просто добавлять любые новые объекты
5. Nao Nakashima (nao) 13.01.10 09:11
Все эти штуки с захватом выглядят как древняя CVS. Выглядит довольно жалко на фоне современных VCS (svn, git, hg)
В 7.7 можно было распотрошить конфу с помощью gcomp и пользоваться любыми удобными _тебе_ внешними средствами: например положить конфу под контроль нормальной VCS или использовать нормальные средства трёх-стороннего объединения (я использовал kdiff3).

Есть ли у Платформы 8.* средства выгрузки наподобие gcomp? Тексты модулей конечно можно выгружать/загружать пакетно, но хотелось бы выгрузить вобще всё.
BigBzig; boggonzikov; chmod660; byte.mdfab; JohnyDeath; +5 Ответить 2
6. Котэ Пруидзе (kote) 13.01.10 12:13
(5) Это точно..

Есть ли у Платформы 8.* средства выгрузки наподобие gcomp?
Есть. Но в бета стадии - не помню названия, но здесь (на портале) есть..
7. Валентин Будкин (vabue) 13.01.10 12:47
Пока-что это набор относительно работающих разрозненых инструментов.
8. Nao Nakashima (nao) 13.01.10 12:56
(6) (7) Насколько я понял это V8Unpack? Последний коммит 31.03.08... Оно ещё развивается?
9. artmicro (artmicro) 13.01.10 14:11
Статья действительно хорошая, автор молодец. Но хочу добавить своих несколько мыслей:
1. Для полноты представления нужно было упомянуть и рассказать о сервере хранилища конфигурации. Что это за штука и с чем ее едят, соединие по tcp и т.д.
2. "можно посмотреть, что и где добавилось, какие изменения были сделаны в модулях - для этого нужно в меню Конфигурация/Хранилище выбрать История" - а если интересуют изменения в конкретном объекте, то лучше смотреть историю изменения объекта - отработает намного быстрее чем сравнение.
3. Неточность: "не забывая перед каждым объединением ОБНОВЛЯТЬ локальные БД из Хранилища - до последней версии" - каждый раз при объединении прийдется захватывать объекты, а при захвате Вы и так получете самую актуальную версию.
4. Обязательно нужно напомнить тот факт, что подключать новую конфигурацию под имеем пользователя, для которого уже есть подключенная конфигурация не следует, потому что это приведет к отключению предыдущей конфигурации. Особенно это актуально для рабочей БД, когда разворачивают бекапы и по невнимательности отключают рабочу БД от хранилища.

эм, что то еще хотел написать, но забыл ... значит позже допишу
Spacer; Созинов; Borisych; NewAndy; kote; +5 Ответить 1
10. Сергей Дудаков (Anything) 13.01.10 14:29
(4) Поддерживаю.

(0) Разбей статью на маленькие разделы (по одному-двум абзацам). Каждому абзацу дай заголовок. Например, "Создание хранилища", "Подключение к хранилищу", "Захват объектов в хранилище" и т. д.

Получится что-то типа FAQ для начинающих. Можно будет в тексте быстро найти нужный раздел.

Хотелось бы увидеть описания работы с сервером хранилища и через HTTP.
Siskin; Созинов; NewAndy; hulio; +4 Ответить
11. Сергей (strange2007) 13.01.10 15:30
Автор не отметил не маловажной нюанс плюса хранилища:
Хранилище защищает от нечаянного изменения конфы. Например элемент формы, что бы не сдвинуть. А то потом сидишь и думаешь, что там изменил.
И про косяк что-то я не заметил:
При удалении объектов, если есть ссылки из других объектов, то иногда 1С сама разрулить не сможет и просит "удалите руками. плииииз" (было на ролях и рег.задании)
А еще автор не отметил крайне важные фичи:
- Использование хранилища по TCP/IP
- Использование хранилище по HTTP
Хотя может я просто чего-то не заметил... устал сильно уже
P.S. Мне бы такое описание лет 5 назад
Созинов; kote; +2 Ответить
12. Виталий (nafa) 14.01.10 02:27
Статья полезная.
В работе хранилища действительно очень много неочевидных вещей, поэтому мои дополнения:
1. Если работают несколько программистов, то как вариант,
рабочий день обычно начинается со следущего:
запускаем свою базу в конфигураторе, на корне конфигурации правой кнопкой мышки - получить из хранилища, включаем галочку "рекурсивно", жмем ОК. После этого в конфигурацию получаем все, что наработали другие из хранилища. САМУ БД НЕ ОБНОВЛЯЕМ!!!
Далее желаем "сравнить конфигурацию с конфигурацией БД" - и видим список все изменений сделанных другими программистами группы за предыдущий день. Если есть вопросы по изменениям- обращаемся к тому, кто их делал.
После того, как все разобрали - сохраняем в БД.
Почему не сравнить с конфигурацией хранилища - во-первых чтобы не показывались те объекты, над которым сам работаешь, во-вторых это работает быстрее.
2. В середине дня: срочные изменения (для динамического обновления) отправляем в хранилище сразу. Не срочные - после того, как изменим все связанные объекты. (см. пояснение ниже)
3. В конце дня (а если надо делать полное обновление базы - то перед ним) сдаем в хранилище все что можно.
Это не обязательный порядок, но весьма удобный.

4. Почему не помещаем сразу:
потому что целостность изменений контролируется 1С только там где есть ссылка. То есть если например вы сделали справочник "Автомобили клиентов" и добавили ссылку на него в "расходную накладную", то поместить "Расходную накладную" в хранилище Вы сможете только после (или одновременно) со справочником "Автомобили клиентов". Но если Вы например использовали этот справочник в процедуре общего модуле, которая вызывается при проведении расходной накладной, то этот общий модуль в хранилище спокойно поместиться без помещения справочника. Если после этого другой программист получит этот модуль из хранилища, то в его базе расходные накладные проводиться перестанут. (А если обновить основную базу - то и там перестанут).
И то еще хороший случай - так как возникает просто ошибка. А вот если Вы например изменили тип реквизита в документе со строки на текст и в процедуре общего модуля была проверка Если Реквизит = "1" а стала Если Реквизит = 1 и модуль в хранилище поместили а документ - нет, то ошибки не будет (привет отсутствию контроля типов), а значит у тех кто такой модуль получит документы будет неправильно проводиться, (и хорошо если это будет не основная база). Поэтому изменения лучше сдавать в хранилище "полным пакетом" (все измененные по одной теме объекты), если что-то нужно Вам для другой задачи - можно сразу же захватить по новой или просто, помещая в хранилище, "оставить захваченным".

В этом плане я не совсем понял:
Если программистов много - то изменения каждого нужно отправлять в Хранилище поочереди, ПРЕДВАРИТЕЛЬНО выгрузив у всех работу во внешние файлы с конфигурацией локальной БД и (если объединение делается с разных рабочих мест), не забывая перед каждым объединением ОБНОВЛЯТЬ локальные БД из Хранилища - до последней версии, с присутствующим там изменениями ранее подключенных товарищей..


Странно, не было никаких проблем когда несколько человек сразу изменения помещали, разве что подтормаживало малость. На то захват объектов и предусмотрен, чтобы 2 человека сразу одно и то же не исправили. Причем было замечено, что: если 1 разработчик изменил документ, скажем "Авансовый отчет", а затем второй "получения" не делал, а сразу его захватывает (например, объект только что помещен в хранилище), то 1С это отследит и сама даст ему уже новую - измененную версию. (Так прикольно бывает - смотришь на документ - 5 реквизитов, захватываешь - уже 15).

И зачем работу во внешние файлы выгружать тоже не понял.

4. Создание копий базы для программистов проще делать не 1Совской загрузкой-выгрузкой (т.к. она требует монопольного режима и не шибко шустрая), а восстановлением скульного бекапа или просто копированием базе на скуле.

5. Если нужно добавить новый объект (документ, справочник и пр), то захватите корень конфигурации, добавьте его, добавьте минимум реквизитов (совсем "пустые" объекты не всегда сохраняется), сдайте корень в хранилище (этот объект тоже сдастся при этом) и заберите объект опять. (Чтобы не держать корень долго захваченным - он и другим нужен).

6. Если Вы хотите исправить права доступа на объект, захватили его - а права доступа по прежнему недоступны - захватите соответствующую роль.

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

8. Когда делаем "получить все из хранилища" (п. 1) бывает, что 1с выдает кучу сообщений а потом пишет, что "не удалось" (список объектов при этом меняется). Значит давно не получали изменения. Ничего страшного, жмем ОК по новой и так до тех пор, пока не сработает, как надо.

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

10. Поскольку рабочие базы делаются из основной, то названия конфигураций совпадают и их легко перепутать и потом начинаются непонятки, когда пользователе говорит что у него в отчете 100 руб, а у Вас - 100,000 руб. Как вариант, добавляем в модуль приложения строчку, проверяющую при запуске программы что это за база и если не основная - выводящую это в заголовке программы 1С (например "РАБОЧАЯ БАЗА ПРОГРАММИСТА ИВАНОВА")

11. Когда база подключена к хранилищу, но при запуске не удалось к нему подключиться по любым причинам, то может выдаться сообщение "Не удалось подключиться, выполнить отключение от хранилища" (а у Вас есть захваченные объекты) - тут ОТВЕЧАЙТЕ "НЕТ". Но если случайно ответить "да" то - не пытайтесь подключиться по новой!!! Сначала сохраните конфигурацию в файл!!! Так как когда подключаемся к хранилищу, то вся конфигурация базы заменяется на конфигурацию хранилища. После этого загружаем изменения из сохраненного файла и работаем дальше.
primara; WellMaster; kuz.mina; kentavr27; Katren; b1waver; Созинов; Knopodav; alex_shkut; LexSeIch; Borisych; Rusmus; artichoke; Dima_b; navigator-it; SunnyCat; Zeskord; xzorkiix; takt3a1c; verad; Maliwka; shoy; Spartan; markers; ArchinoS; vase4kin!; vtolga; hulio; kote; +29 Ответить 1
13. Сергей Гуров (hansel) 14.01.10 02:35
(5) Уважаемый, не обижайтесь, но...
Вы бы сначала ману покурили как следует, а потом уже на жалость давили.

1. В CVS используется (как и в последователях CVS типа svn) парадигма конкурентного изменения контролируемого объекта. Опция монопольной блокировки там есть, но это только опция. Вы бы хотя бы аббревиатуру CVS потрудились расшифровать, которая начинается со слова Concurrent...

С моей колокольни хранилище 1С сильно напоминает SourceSafe от МелкоСофта - там все те же принципы использованы. Со всеми их достоинствами и недостатками...

2. kdiff3 хорошая программа. Но, до тех пор пока не попробуешь нормальный инструмент, хотя бы типа Araxis.

3. Про "а-ля gcomp" под 8.х погуглить религия запрещает? 8-)
14. Александр Че (chmod660) 14.01.10 10:14
(9) история объекта предоставляет существенно меньшие возможности, чем сравнение, к сожалению.
15. vtolga (vtolga) 14.01.10 11:27
Большое спасибо за статью, после чтения литературы многие вопросы остались неясными, а практический опыт (пусть даже чужой)-клад для новичка.
16. vtolga (vtolga) 14.01.10 11:39
17. Виталий (nafa) 14.01.10 12:57
Еще дополнение.
Когда работаешь над отчетом/обработкой, то удобно сохранить его во внешний файл и с ним работать, чтобы после каждого изменениях не перезапускать 1С. Так вот, возьмите себе за правило - в этом случае объект все равно захватывать. Иначе пока вы меняете внешний файл кто-то может его поменять в базе. А потом будет удивляться пропаже изменений

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

Еще можно сделать каждому разработчику личный общий модуль, тогда если двум человекам очень приперло одновременно работать над одним общим модулем (типа Заказчик так в ТЗ написал что должно быть в одном модуле, или база типовая и не хочется ее сильно менять) действуем так:
1. Захватываем "общий" и свой модули
2. Копируем процедуру из общего в свой , в общем первой строчкой ставим Возврат + Вызов этой функции из своего модуля. Помещаем оба модуля в хранилище, свой опять захватываем.
3. Исправлеям функцию, отлаживаем.
4. Захватываем "общий" модуль, вырезаем процедуру из своего и вставляем в "общий".
5. Помещаем оба модуля в хранилище.
Цель достигнута - из модуля "захватывается" только одна функция. Выглядит криво но еще раз: в реальности нужно очень редко.
Созинов; +1 Ответить
18. Светлана Куприянова (Merlin12042009) 14.01.10 13:51
Вопрос.
Есть измененная конфигурация и есть хранилище, конфигурация которого соответствует рабочей конфигурации. Как грамотно сделать обновление на новую версию конфы и хранилища?
19. Nao Nakashima (nao) 14.01.10 14:05
(13) Я и не обижаюсь. По первому пункту вы абсолютно правы. Я начинал с svn, а c CVS как-то работать не приходилось даже. По-этому в моём представлении он был как некая древняя VCS с блокировками, на которые все почему-то всё время жаловались :)

Насчёт 2. Что в Araxis Merge (вы же про него?) такого особенного? Два года назад смотрел разные программы для diff/merge под винду и не нашёл ничего интересного у Araxis Merge по сравнению с kdiff3.
Выбрал то что ближе по духу и бесплатное:)

Насчёт 3. Я уже погуглил, писал ниже про V8Unpack.
20. Светлана Куприянова (Merlin12042009) 14.01.10 14:13
Отключаюсь от хранилища, обновляю рабочую конфигурацию, выгружаю в файл. Затем захожу в рабочий конфигуратор, рекурсивно захватываю корневой элемент конфигурации, сравнить/объединить с конфигурацией из файла, потом помещаю в Хранилище.Все получится??? :o
21. Котэ Пруидзе (kote) 14.01.10 15:55
(20)
Отключаюсь от хранилища, обновляю рабочую конфигурацию, выгружаю в файл. Затем захожу в рабочий конфигуратор, рекурсивно захватываю корневой элемент конфигурации, сравнить/объединить с конфигурацией из файла, потом помещаю в Хранилище.Все получится??? smile:o 

Непонятна цель, с которой это делается.. В норме отключаться от хранилища не нужно, даже вредно.. Если цель - правильно обновить Рабочую конфигурацию, то:
Вносим изменения из обновления в хранилище:
1) заходим в любую конфигурацию, связанную с хранилищем рабочей конфигурации, в конфигураторе
2) захватываем корень рекурсивно
3) обновляем конфигурацию файлом *.cf - сравнение/объединение
4) выполняем возврат рекурсивно
==
.. если при обновлении были внесены изменения в структуру данных БД, то придется ждать или выгонять всех пользователей..
.. если были изменены только модули - то можно обновить конфигурацию динамически (тогда изменения у каждого отдельного пользователя появятся после того, как они выйдут и снова зайдут в программу, т.е. перезапустят её)
Далее обновляем рабочую базу из хранилища:
5) открываем рабочую конфигурацию в конфигураторе
6) обновляем конфигурацию из хранилища
7) загружаем полученные из хранилища изменения клавишей F7 в рабочую БД (динамически или выгнав всех пользователей)
==
Все. Рабочая БД обновлена.
SergeyRomanov; +1 Ответить
22. Светлана Куприянова (Merlin12042009) 14.01.10 19:11
спасибо.Не надо отключаться, согласна. :)
23. Котэ Пруидзе (kote) 15.01.10 00:56
А еще автор не отметил крайне важные фичи: 
- Использование хранилища по TCP/IP 
- Использование хранилище по HTTP 
Хотя может я просто чего-то не заметил... устал сильно уже 
P.S. Мне бы такое описание лет 5 назад
...Показать Скрыть

Нашел по этому поводу материал ОнЛайн - что толку перепечатывать - читайте первоисточник: на сайте 1С и еще вот это вот..

Кроме того пригодится еще это вот - из документации..
24. Котэ Пруидзе (kote) 15.01.10 01:21
(19) и для всех любителей SVN, CVS, GIT и т.д..

В отношении этих программ - в работе SVN + "Черепашка" мне пригодились даже без "растормашивания" кода 1С до исходников..

Методика такая:
Есть множество обработок, в 1С 77 они лежат в каталоге extform.. конфа старая, отлаженная, основная работа программистов - доработка под меняющиеся постоянно требования внешних отчетов и некоторых обработок.. программстов несколько - как узнать, кто и чего поменял?

Всю папку extforms загружаем в хранилище - прямо 1Совские "недобинарники".. Если заходить ежедневно и делать коммиты изменений каталога в хранилище SVN - то прекрасно отслеживается что (какой файл) и в каком порядке изменялось.. не ясно кто и что в файле изменилось.. но с "что в файле" есть небольшой "черный ходик" - мне помогло.. изменившиеся файлы берем в свой каталог, который тоже в отдельном хранилище (не связанном с ранее упомянутым).. Открываем обработку/отчет и сохраняем тексты его модуля в текстовые файлы. Все это коммитим в хранилище.
В этом хранилище можно видеть что изменилось в модулях/текстах.. только вот с формами облом..

ЧерепашкаSVN очень хорошо жала все файлы - каталог в 43Мб с обработками и т.п. ужался до 14 Мб и рос. очень медленно.. Секрет медленного роста - устройство хранилища SVN таково, что он реально коммитит только изменения даже у бинарников (перезаписывается только разница даже в exe-шниках) - в итоге 2 раза погрузив один и тот же файл (изменена только дата или имя, например), объем увеличится на.. менее чем на 1КБ..

===

Интересно будет попробывать Черепашку с ТЕКСТОВЫМИ файлами от 1С 8, которые оно получает при выгрузке модулей всех конфигураций с помощью СТАНДАРТНОЙ команды: Конфигурация / Выгрузить файлы конфигурации.. жаль при этом формы не выгружаются - но все ж..

Никто не пробовал?
25. Артур Аюханов (artbear) 15.01.10 08:07
(24) Вот как раз для подобного и был придуман GComp.
все делается автоматически вместо ручного "Открываем обработку/отчет и сохраняем тексты его модуля в текстовые файлы" :)
там тебе и модули, и формы, и для конфы - права, интерфейсы, ИД и т.д.
мы юзали результат разбора конф и внешних отчетов через GComp как в CVS, так и в SVN.

По поводу 8-ки - нет проблем, только очень медленная выгрузка и только модули, нет всего остального.
Лучше уж юзать хранилище, чем извращаться с выгрузкой.
26. Nao Nakashima (nao) 15.01.10 13:23
(24) (25) Я вот тут подумал, вместо того чтобы корячиться над разбором cf файла, ведь наверное намного проще выгрузить метаданные в формате подобном GComp написав внешнюю обработку (т.е. средствами самой 1С)?
Вот только неудобно что запускать её придётся в режиме Предприятия. Есть ли возможность запустить внешнюю обработку в режиме конфигуратора? (наверное нет).
27. Артур Аюханов (artbear) 15.01.10 16:13
(26) Из режима Предприятия штатным способом нельзя достать тексты модулей :(
28. Serg (serg_infostart) 18.01.10 15:01
6. Если Вы хотите исправить права доступа на объект, захватили его - а права доступа по прежнему недоступны - захватите соответствующую роль.

- для исправления прав нужна только Роль, объект - не нужен.
mikhailovaew; kote; +2 Ответить
29. Надежда Иванова (Nadezhda09) 22.03.11 09:46
nafa пишет:
Странно, не было никаких проблем когда несколько человек сразу изменения помещали, разве что подтормаживало малость.

Здравствуйте!
Нигде в инструкциях не прописано элементарное:
- чтобы поместить измененный объект в Хранилище, необходимо захватить корень.
Вопрос: захватывать рекурсивно?
Замечание: Захват корня для помещения измененных объектов, лишает всякого смысла понятие "коллективной работы". Получается необходимость договариваться об очередности. Что весьма проблематично, если разработчики в разных городах и с разным приоритетом.
А вы работаете как-то иначе?
30. Спама Не (RibD) 30.08.11 15:25
Остался неясным вопрос - если рабочая база от хранилища была отключена кем-то, а народу много - как посмотреть, кто этот нехороший человек?

В журнале регистрации прямой записи об этом нет, можно лишь увидеть, кто входил в конфигуратор и методом допроса 8-) установить.

Еще идеи как выяснить - есть?
31. Роман Романов (romansun) 31.08.11 00:15
(29)
если еще актуально, то всё просто

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

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

(30)
как узнать, кто отрубил базу от хранилища? хм... в истории хранилища какие тачки к нему подключены/отключены кем и когда не запоминается, да... тогда, наверное, никак :)


ну ваще, чисто административная проблема, имхо. Т.е. такое, да, бывает когда:

а) программист просто ошибся когда выскочил тот самый диалог и ткнул не в ту кнопку. Сам так ошибался не раз. Лечится просто опытом, внимательностью и здоровым сном по ночам )). Тем более, что некритично, ибо в рабочей базе, подключенной к хранилищу, никто ж не кодит, да? ;) (особенно в её отключенном состоянии)
б) программист - новичок, лечится опытом и доведением до сведения, что отключать рабочую базу от хранилища некрасиво

Т.е. все ситуации - это программисты, а с ними можно/нужно договариваться.

ЗЫ: в) если программистов как кур, и договориться нереально, то переходите на поставки обновлений - тут всё уже четко.
32. netserfer (netserfer) 28.11.11 11:16
Как добавить в закладки :)
33. Сергей Гладышев (SergeyGladyshev) 20.12.11 18:19
Очень полезная статья, я ранее никогда не работал с хранилищами конфигураций, но благодаря этой статье сразу разобрался что к чему. Автору респект!
34. chainick (kurmanov) 02.05.12 11:07
Пара общих строк. Зачем это нужно?

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


это относится только к динамическому обновлению? Или все таки как то можно обновить конфигурацию БД не выгоняя пользвателей, с помощью хранилища БД. Было бы очень хорошо если такой способ есть :)
35. Владимир Кузнецов (mr.Kot) 31.07.13 11:45
Начал работать в команде, в связи с чем знакомлюсь с хранилищем, но почитав информацию по нему понял, как выгодно разработки, где я работаю один, так же делать через хранилище.
36. Антон Тоник (artichoke) 31.07.13 17:16
(31) romansun, у меня возник такой вопрос: наша рабочая база подключена к хранилищу под отдельным пользователем (для ускорения накатывания изменений, ПОМЕЩЕННЫХ в хранилище всеми разработчиками), а сама разработка (захват и помещение объектов хранилища b т.д.) ведется в других, личных "тестовых" базах, подключенных под другими пользователями.

Когда нужно накатить накопленные изменения, я просто делаю в рабочей "Получить из хранилища". Однако если я не планировал обновляться, но нажимаю "Получить из хранилища" и текущая конфигурация помечается как изменённая. К сожалению, кнопка в меню "Конфигурация->Конфигурация базы данных->Вернуться к конфигурации БД" недоступна и приходится обновляться в рабочей базе, иначе у пользователей будет выходить вопрос "Конфа изменена, уверены, что хотите продолжить".

Вопрос: можно ли как-то выйти из этой ситуации без обновления рабочей базы (кроме такого варианта, как отключиться от хранилища и воспользоваться ожившей кнопкой "Вернуться к конфигурации БД" и подключиться только непосредственно перед обновлением)?
37. Роман Романов (romansun) 01.08.13 00:50
(36)вопрос понятен

как быть? эм... ну, технически, я так понимаю, никак. Конфа подключена к хранилищу, соответственно и работает по правилам хранилища. Хотя, не исключаю, что я чего-то не знаю, да ))

Имхо, проблема всё та же - человеческая:
Однако если я не планировал обновляться, но нажимаю "Получить из хранилища"

Бейте себя по рукам, что тут попишешь... ))

Либо переходите на механизм выпуска обновлений - он несложен, и логически и методологически более верен.
artichoke; +1 Ответить
38. Денис Луцик (NAKIS) 22.04.14 17:29
Спасибо за статью! Все очень четко и по теме...
39. Алексей Беспалов (FreeArcher) 05.08.14 05:41
Подскажите, а можно ли обновить рабочую базу на определенную версию или частично?
Или выгрузить из хранилища конфигурацию определенной версии?

Пример:
Есть долгосрочный проект, который например месяц пишется. А между этим проектом есть много мелких изменений.
И надо организовать так, чтобы эти мелкие изменения можно было накатывать, а доработки длительного проекта пропускать.
40. Котэ Пруидзе (kote) 13.08.14 07:32
"Или выгрузить из хранилища конфигурацию определенной версии?"

Это можно - в истории хранилища выбираете нужную строку (версию) и выгружаете (через контекстное меню)

--

"Подскажите, а можно ли обновить рабочую базу на определенную версию или частично?"
Можно и то и другое - через сравнение/объединение.. но всё это черевато, т.к. бывает (не всегда, но часто после даже стандартного обновления - происходит программная обработка данных - все же замечали, да??), что обновление сопровождается обработкой и корректировкой данных. При откате обратно - (1) нужно ли и (2) как обеспечить обратные действия??
41. Сергей Генко (Sobol007) 19.09.14 04:03
Здравствуйте!
Вижу у вас есть хороший опыт работы с хранилищем конфигурации. Буду благодарен, если поможете разобраться с проблемой.
На сервере с адресом 1.1.1.1 запущена служба "Сервер хранилища конфигураций". В параметрах службы указан каталог -d "F:\Repository"
1С:Предприятие 8.2 (8.2.19.90) - версии 1С и сервера конфигураций совпадают.

Есть папка Repository - на нее даны все права.

Пытался создать хранилище сразу указав путь, как tcp://1.1.1.1/Repository
Начинает анализировать структуру, потом конфигурировать файлы хранилища в
результате пишет - ошибка создания хранилища по адресу tcp://1.1.1.1/Repository

Хорошо, тогда предлагаю создать через файловый доступ.
Создает, в Repository появляется файл 1cv8ddb.1CD
Предлагает подключиться, я отказываюсь и пытаюсь подключиться через tcp://1.1.1.1/Repository

В результате появляется сообщение, "Хранилище конфигураций по адресу: tcp://1.1.1.1/Repository не обнаружено".

А вот, если указать файловый вариант подключения \\1.1.1.1\F$\Repository
Подключение выполняется.

Что я не так делаю? Права полные. Служба работает и с каталогом F:\Repository связана.

Заранее спасибо за ответ.
43. Котэ Пруидзе (kote) 08.12.14 18:36
(42) Malvo4ka

Слышал звон, не знаю где он..
44. Andrey (aniks3000) 04.01.15 15:15
Подскажите, пожалуйста, а для заливки типовых обновлений какие-то особенности имеются? Или просто захватываем рекурсивно корневой узел, Поддержка\ Обновить конфигурацию, обновляем, помещаем в хранилище? Обновится ли таким способом конфигурация поставщика в рабочей базе и в ИБ разработчиков? Или обновляется только основная конфигурация?
45. dpagon (dpagon) 07.11.15 17:52
(44) aniks3000, Тоже интересует этот вопрос
46. Александр Харин (aharin) 04.02.16 13:14
(44) aniks3000, Захватывайте рекурсивно корень, выполняйте обновление как обычно, помещайте в хранилище. Конфа поставщика во всех подключенных обновится нормально.
47. gulchitai (gulchitai) 22.08.16 08:14
(40) kote, подскажите, может в курсе, планирует ли фирма 1с развивать хранилище конфигурации? Интересует тотже вопрос, что у http://forum.infostart.ru/forum24/topic30408/message1186832/#message1186832.
Есть у нас тестовое хранилище конфигурации, в которое разработчики помещают доработки, которые должны быть протестированы тестировщиком. И если из десяти задач тестировщик протестировал 9, а одну не успел, то мы бы ее не загрузили в рабочую базу. Вариант перейти на гит кажется слишком громоздким, у нас 82 и обычные формы.
48. nadja v (nadjav) 13.09.16 07:40
Подскажите, пожалуйста, как удалить объект из конфигурации, подключенной к хранилищу?
49. Евгений Сосна (pumbaE) 13.09.16 10:09
(48) nadjav, захватить корень рекурсивно, если объект на поддержке, то дополнительно снять его с поддержки и потом можно будет удалить.
50. Артур Аюханов (artbear) 13.09.16 14:47
(49) (48) Не совсем так.
Еще нужно все роли захватить, иначе после удаления не удастся сделать коммит (помещение) в хранилище
51. Евгений Сосна (pumbaE) 13.09.16 14:48
(50) artbear, я же написал "захватить рекурсивно"
52. Артур Аюханов (artbear) 13.09.16 19:33
(51) Ага, не обратил внимание.
Но рекурсивный захват, ты же знаешь, зло еще то :) и скорость, и монопольность и т.п.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа