Вопрос № 53848: Здравствуйте, господа эксперты!!!
У меня уже установлена ДБФ версия базы 1с, данных много, могу ли я ее переделать на SQL без потери данных?...Вопрос № 53854: Здравствуйте!
Загвоздка в следующем: нужно свернуть таблицу документа группируя только по полю "номенклатура" и суммируя по полю "сумма", но при этом необходимо чтобы в таблице было поле "цена".
Код: Таб.Свернуть...Вопрос № 53855: Здравствуйте!!!
Кто может, объясните преимущества и недостатки ДБФной и SQL версий 1с. я слышал, что если размер дбф ной базы больше 1ГБ, то 1с начинает глючить, так ли это и вообще-что лучше: работа через ДБФ или SQL?...
Вопрос № 53.848
Здравствуйте, господа эксперты!!!
У меня уже установлена ДБФ версия базы 1с, данных много, могу ли я ее переделать на SQL без потери данных?
Отвечает: Inuki
Здравствуйте, Гребиников Павел Генадьевич!
Переход с DBF-версии на SQL-версию по шагам:
http://www.mista.ru/articles1c/hare/article.23.html
Ответ отправил: Inuki (статус: 1-ый класс)
Ответ отправлен: 31.08.2006, 09:28 Оценка за ответ: 5 Комментарий оценки: Как раз то, что нужно!!! Огромное спасибо!!!
Отвечает: Vizli
Здравствуйте, Гребиников Павел Генадьевич!
Да можете.
1. Для этого сначала выгрузите данные из ДБФ-версии базы.
2. Затем создай на SQL базу, создайте новый каталог, например C:mySQLbase
3. затем запустите 1С, создайте новую базу, укажите имя и каталог C:mySQLbase и тип файлов SQL.
4. Затем в конфигураторе заполните параметры базы SQL.
5. После этого загрузите в эту базу данные, которые были выгружены в пункте 1.
Т.о. при использовании SQL Ваша база будет храниться в двух местах: в SQL (все файлы которые в ДБФ-версии имели расширение *.DBF) и в каталоге C:mySQLbase, где хранятся настройки пользователей и файлы MD и DDS
Резерное копирование нужно делать как для баз SQL так и для каталога C:mySQLbase
Ответ отправил: Vizli (статус: 1-ый класс)
Ответ отправлен: 31.08.2006, 09:37 Оценка за ответ: 5 Комментарий оценки: спасибо
Отвечает: Karanskiy Arkadiy
Здравствуйте, Гребиников Павел Генадьевич!
Можете. Для это необходимо:
1) Установить SQL Server
2) В 1С прописать новую папку(пустую) и зайти под Конфигуратором. Там указать, что данные будут храниться не в ДБФ файлах, а в MS SQL Server.
3) Потом зайти в Администрирование - Параметры базы данных SQL и настроить правильно подключение.
4) После зайдите в Администрирование - Восстановить данные... и выберите ZIP файл какой вы хотите восстановить.
Удачи...
Ответ отправил: Karanskiy Arkadiy (статус: 3-ий класс)
Ответ отправлен: 31.08.2006, 10:06
Отвечает: Munster
Здравствуйте, Гребиников Павел Генадьевич!
Конечно, никаких проблем не должно возникнуть
Ответ отправил: Munster (статус: 3-ий класс)
Ответ отправлен: 31.08.2006, 15:00
Вопрос № 53.854
Здравствуйте!
Загвоздка в следующем: нужно свернуть таблицу документа группируя только по полю "номенклатура" и суммируя по полю "сумма", но при этом необходимо чтобы в таблице было поле "цена".
Код: Таб.Свернуть("Номенклатура, Цена", "Сумма") сворачивает и по номенклатуре и по цене, цены разные, а мне нужно чтобы таблица сворачивалась ТОЛЬКО по номенклатуре, а цена бралась из последней строки с одинаковой номенклатурой. Можно ли это сделать?
Прошу прощенья за путанность объяснений, если непонятно - постараюсь объяснить в мини-форуме. Заранее спасибо всем ответившим.
Отправлен: 31.08.2006, 10:41
Вопрос задал: Palkin (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: Шальков Павел Владимирович
Здравствуйте, Palkin!
Такова особенность этого метода, вам ничего не остается сделать кроме, как "вручную" находить последние цены, потом после первой свертки заменить цены в других строках, а потом применить еще одну свертку.
Ответ отправил: Шальков Павел Владимирович (статус: 7-ой класс)
Ответ отправлен: 31.08.2006, 11:07 Оценка за ответ: 5 Комментарий оценки: Дело в том, что этот код находится в модуле документа, где и так наворочено больше, чем надо. Спасибо, я это знал, но надеялся есть выход попроще.
После этого заполняете колонку "Цена" теми значениями, которые Вам нужны.
Можно также вместо "НоваяКолонка" использовать метод "ВставитьКолонку" если хотите чтобы колонка "Цена" была именно перед колонкой "Сумма"
--------- Мирный атом в КАЖДЫЙ дом!
Ответ отправил: Elric (статус: Студент)
Ответ отправлен: 31.08.2006, 11:19 Оценка за ответ: 3
Отвечает: Шахрайчук Владимир Анатольевич
Здравствуйте, Palkin!
Сверните таблицу по сумме и количеству, зная сумму и количество узнаете среднюю цену
Таб.Свернуть("Номенклатура", "Сумма,Количество")
Таб.НоваяКолонка("Цена","Число",15,6);
Таб.ВыбратьСтроки()
Пока Таб.ПолучитьСтроку Цикл
Таб.Цена=Таб.Сумма/Таб.Количество(если колво не нулевое)
Обращаю Ваше внимание на то, что в цене нужно поставить достаточное количество знаков после запятой, как минимум 6. Ни в коем случае не 2, как ставят многие бумагомаратели. Округлить до двух знаков всегда успеете
Брать цену из последней строки - глюконеустойчивый метод, результат превзойдет все ваши кошмарные ожидания.
Но если все же нужна цена из последней строки (мало ли какая поставлена задача), то сделать это несложно. Создайте еще одну таблицу значений, и копируйте из первой таблицы во вторую данные
ТЗ=СоздатьОбъект("ТаблицаЗначений")
ТЗ.НоваяКолонка
Таб.ВыбратьСтроки
Пока Таб.ПолучитьСтроку()=1 Цикл
Стр=0;
Если ТЗ.НайтиЗначение(Таб.номенклатура,Стр,"Номенклатура")=0 Тогда
ТЗ.НоваяСтрока
ТЗ.Номенклатура=Таб.Номенклатура
Иначе
ТЗ.ПолучитьСтрокуПоНомеру(Стр)
КонецЕсли
ТЗ.Сумма=ТЗСумма+Таб.Сумма
ТЗ.Количество=ТЗ.Количество+Таб.Количество
ТЗ.Цена=Таб.Цена
КонецЦикла
В данном примере цена в ТЗ постоянно обновляется, и есть ценой последней строки данной номенклатуры
Ответ отправил: Шахрайчук Владимир Анатольевич (статус: Студент)
Ответ отправлен: 31.08.2006, 12:57 Оценка за ответ: 5 Комментарий оценки: Спасибо! Но этот код требует много времени для выполнения, если к тому же кол-во строк документа приближается к 200. Я нашел более простой выход - брать цену из карточки товара
Отвечает: Краюшкин Игорь Валерьевич
Здравствуйте, Palkin!
Я думаю, что цена, взятая из последней строки с одинаковой номенклатурой, будет не корректной. Произведение Цена*Количество не даст итоговую сумму.
Поэтому корректнее будет так:
Таб.Свернуть("Номенклатура", "Количество, Сумма");
Таб.НоваяКолонка("Цена");
Для i = 1 По Таб.КоличествоСтрок() Цикл //выбираем строки таблицы значений
Таб.ПолучитьСтрокуПоНомеру(i); //получаем строку по номеру
Таб.Цена = Окр(Таб.Сумма / Таб.Количество, 2); //высчитываем и записываем цену по данной строке таблицы значений
КонецЦикла;
Здравствуйте!!!
Кто может, объясните преимущества и недостатки ДБФной и SQL версий 1с. я слышал, что если размер дбф ной базы больше 1ГБ, то 1с начинает глючить, так ли это и вообще-что лучше: работа через ДБФ или SQL?
Отвечает: Warior
Здравствуйте, Гребиников Павел Генадьевич!
я работал с базой ДБФ размером около 9Гб и ничего работала как родная
Ответ отправил: Warior (статус: 3-ий класс)
Ответ отправлен: 31.08.2006, 10:51
Отвечает: Vizli
Здравствуйте, Гребиников Павел Генадьевич!
Если Вас устраивает работа с DBF версией - 1С установлена локально, или в сети на несколько компьютеров, то на SQL переходить нет смысла, это гораздо дороже и в скорости не принесет ни каких изменений. Однако если у Вас в локальной сети работают с 1С более 10 рабочих станций одновременно, то установка SQL-версии становится желательной. SQL версии не ускоряет работу с 1С, а позволяет работать одновременно многим пользователям с очень дольшими объемами данных.
В SQL версии резервное копирование может происходить во время работы пользователей, в DBF версии - нет.
Вот еще инфа:
http://www.1c.donbass.com/articles/detail.php?ID=2622
http://mista.ru/articles1c/sql.htm
Ответ отправил: Vizli (статус: 1-ый класс)
Ответ отправлен: 31.08.2006, 11:23 Оценка за ответ: 5 Комментарий оценки: спасибо, все понял
Отвечает: Elric
Здравствуйте, Гребиников Павел Генадьевич!
Разница в основном в надежности.
Если база больше 1Гб то она начинает работать нестабильно. Положительный пример Warior'а это скорее исключение. Кроме того, если с базой работают более шести пользователей то лучше тоже перейти на SQL. Кроме того, SQL-база вообще стабильнее, ей не нужна переиндексация, можно делать дамп (архив) базы во время работы пользователей. Кроме того, сама информация (база) может лежать не в каталоге базы данных, к слову о защите.
Правда есть одно "Но". Системные требования для SQL-версии (а точнее для самого SQL) намного выше тех что предъявляются к DBF, особенно это касается возможностей локальной сети. Этот пункт решается посредством терминал-сервера.
--------- Мирный атом в КАЖДЫЙ дом!
Ответ отправил: Elric (статус: Студент)
Ответ отправлен: 31.08.2006, 11:27
Отвечает: Шахрайчук Владимир Анатольевич
Здравствуйте, Гребиников Павел Генадьевич!
ДБФ-ная версия , если размер файла RGxxxx.dbf превосходит 700 Мб, начинает долго, по 10-15 минут выполнять комманду Рег.РассчитатьРегистрыНа
Но чтобы доработаться до такого размера файла, нужно постараться огого как.
В моем примере размер базы 2.1Г, 13 пользователей, размер RG7649.dbf превосходит 120 Мб, терминальный режим, 200,000 документов, 1,200,000 проводок и 900,000 движений регистра, база ДБФ работает на ура, и переходить на SQL смысла пока не вижу.
А из плюсов ДБФ можно назвать тот, что у меня появились бэдблоки, и сожрали файл RG7649.dbf. Я его просто удалил, и в конфигуратере ТестировалИсправлял (сутки), и все стало нормально. В SQL так не выкрутишься.
Отвечает: Karanskiy Arkadiy
Здравствуйте, Гребиников Павел Генадьевич!
Знаете, если база большая, то конечно лучше ставить SQL. А преимущества - сохранность, более гибкая система для целостности данных. По скорости сильно большого ощущения нет, т.к. в некоторых обработках работает немного быстрее, а в некоторых тормозит и очень даже чуствительно.
Я лично на небольшие предприятия ставлю ДБФки, с ними меньше мароки. Просто надо периодически сохранять данные, а для больших предприятий наверное лучше скуль ставить.
Ответ отправил: Karanskiy Arkadiy (статус: 3-ий класс)
Ответ отправлен: 31.08.2006, 19:26
Отвечает: Ovr1970
Здравствуйте, Гребиников Павел Генадьевич!
По своему опыту скажу, что преимуществом SQL является ускорение примерно в 10 раз работы с БД, по сравнению с работой по сети. Большая устойчивость к ошибкам (не слетают индексы), но все жу лучше переиндексировать время от времени и SQL БД 1C (sp_1sp_DBReindex) и меньшие требования к серверу, по сравнению с сервером терминалов.
Сервер терминалов работает с DBF версией примерно в 3 раза быстрее, чем с SQL версией (если SQL находится локально и достаточно памяти, то примерно в 1.7 раза быстрее), вообще не требует сильных локальных машин (при SQL версии скорость работы сильно зависит от локальной машины), но остается менее устойчивым к слету индексов.
Ответ отправил: Ovr1970 (статус: Студент)
Ответ отправлен: 01.09.2006, 11:05