/// <summary> /// Функция добавления записи в справочник базы 1С. /// </summary> /// <param name="v82Base">объект подключения к базе</param> /// <param name="connector">COM объект для соединения с 1С</param> /// <param name="thesaurusName">название справочника</param> /// <param name="requisites">ассоциативный массив Название реквизита - Значение</param> /// <returns>Возвращает код добавленной записи в формате ХХХХХХХХХ(если этот код храниться в базе как строка)</returns> public static string addToThesaurus(object v82Base, COMConnectorClass connector, string thesaurusName, Dictionary<string, object> requisites) { object thesauruses = RequestTo1C.GetProperty(v82Base, "Справочники"); object thesaurus = RequestTo1C.GetProperty(thesauruses, thesaurusName); object record = RequestTo1C.ExecuteFunction(thesaurus, "СоздатьЭлемент", null); foreach (KeyValuePair<string, object> kvp in requisites) RequestTo1C.SetProperty(record, kvp.Key, new object[] { kvp.Value }); RequestTo1C.ExecuteFunction(record, "Записать", null); return RequestTo1C.GetProperty(record, "Код").ToString(); }
/// <summary> /// Метод для подключения к 1С. /// </summary> /// <param name="filename">путь к базе</param> /// <param name="user">логин</param> /// <param name="password">пароль</param> /// <param name="v82Base">объект подключения к базе</param> /// <param name="connector">COM объект для соединения с 1С</param> /// <returns></returns> public static bool Connect1C(string filename, string user, string password, ref object v82Base, ref COMConnectorClass connector) { try { v82Base = connector.Connect(GetConnectionString(filename, user, password)); return true; } catch (Exception ex) { string error = ("Ошибка подключения!\n" + ex.Message); return false; } }
/// <summary> /// Функция добавления записи в регистр базы 1С. /// </summary> /// <param name="v82Base">объект подключения к базе</param> /// <param name="connector">COM объект для соединения с 1С</param> /// <param name="registrType">Тип регистра (РегистрНакопления, РегистрСведений и т.п.)</param> /// <param name="registrName">Название регистра</param> /// <param name="registratorName">Название регистратора</param> /// <param name="dimension">Ассоциативный массив Название измерения - Значение</param> /// <param name="resource">Ассоциативный массив Название ресурса - Значение</param> public static void addToRegistr(object v82Base, COMConnectorClass connector, string registrType, string registrName, string registratorName, Dictionary<string, object> dimension, Dictionary<string, object> resource) { object registrs = RequestTo1C.GetProperty(v82Base, registrType); object registr = RequestTo1C.GetProperty(registrs, registrName); object storage = RequestTo1C.ExecuteFunction(registr, "СоздатьНаборЗаписей", null); object registrator = RequestTo1C.GetProperty(RequestTo1C.GetProperty(storage, "Отбор"), "Регистратор"); object document = RequestTo1C.GetProperty(RequestTo1C.GetProperty(v82Base, "Документы"), registratorName); object linkDocument = RequestTo1C.ExecuteFunction(document, "ПолучитьСсылку", null); RequestTo1C.ExecuteFunction(registrator, "Установить", new object[] { linkDocument }); object str = RequestTo1C.ExecuteFunction(storage, "Добавить", null); DateTime d = DateTime.Today; RequestTo1C.SetProperty(str, "Период", new object[] { d }); foreach (KeyValuePair<string, object> kvp in dimension) RequestTo1C.SetProperty(str, kvp.Key, new object[] { kvp.Value }); foreach (KeyValuePair<string, object> kvp in resource) RequestTo1C.SetProperty(str, kvp.Key, new object[] { kvp.Value }); RequestTo1C.ExecuteFunction(storage, "Записать", null); }
/// <summary> /// Функция удаления всех записей из справочника базы 1С. /// </summary> /// <param name="v82Base">объект подключения к базе</param> /// <param name="connector">COM объект для соединения с 1С</param> /// <param name="thesaurusName">Название справочника</param> /// <returns>Возвращает, прошло ли удаление или нет</returns> public static bool deleteAllFromThesaurus(object v82Base, COMConnectorClass connector, string thesaurusName) { try { object thesauruses = RequestTo1C.GetProperty(v82Base, "Справочники"); object thesaurus = RequestTo1C.GetProperty(thesauruses, thesaurusName); object selection = RequestTo1C.ExecuteFunction(thesaurus, "Выбрать", null); while ((bool)RequestTo1C.ExecuteFunction(selection, "Следующий", null)) { object deletingObject = RequestTo1C.ExecuteFunction(selection, "ПолучитьОбъект", null); RequestTo1C.ExecuteFunction(deletingObject, "Удалить", null); } return true; } catch (Exception ex) { return false; } }
/// <summary> /// Функция изменения записи в базе 1С. /// </summary> /// <param name="v82Base">объект подключения к базе</param> /// <param name="connector">COM объект для соединения с 1С</param> /// <param name="thesaurusName">Название справочника</param> /// <param name="index">Индекс изменяемой записи в формате ХХХХХХХХХ</param> /// <param name="updateValues">ассоциативный массив Название реквизита - Значение</param> /// <returns>Возвращает удачно завершилось обновление или нет</returns> public static bool updatingRecordFromThesaurus(object v82Base, COMConnectorClass connector, string thesaurusName, string index, Dictionary<string, object> updateValues) { try { object thesauruses = RequestTo1C.GetProperty(v82Base, "Справочники"); object thesaurus = RequestTo1C.GetProperty(thesauruses, thesaurusName); object record = RequestTo1C.ExecuteFunction(thesaurus, "НайтиПоКоду", new object[] { index }); object updatingObject = RequestTo1C.ExecuteFunction(record, "ПолучитьОбъект", null); foreach (KeyValuePair<string, object> kvp in updateValues) RequestTo1C.SetProperty(updatingObject, kvp.Key, new object[] { kvp.Value }); RequestTo1C.ExecuteFunction(updatingObject, "Записать", null); return true; } catch (Exception ex) { string str = ex.Message; return false; } }
/// <summary> /// Получает из базы 1С список записей по запросу. /// </summary> /// <param name="v82Base">Объект подключения к базе 1С</param> /// <param name="connector">COM объект для соединения с 1С</param> /// <param name="requestText">Текст запроса</param> /// <param name="fieldsSelection">Названия полей в полученной выборке (в запросе после слова КАК идут)</param> /// <param name="parametrs">Ассоциативный массив Название параметра - Значение</param> /// <returns>Возвращает список списков строк, в котором каждый внутренний список - запись</returns> public static List<List<string>> requestToListLists(object v82Base, COMConnectorClass connector, string requestText, List<string> fieldsSelection, Dictionary<string, object> parametrs = null) { object storage = RequestTo1C.ExecuteCreateObject(v82Base, "NewObject", new object[] { "Запрос" }); RequestTo1C.SetProperty(storage, "Текст", new object[] { requestText }); if (parametrs != null) { foreach (KeyValuePair<string, object> kvp in parametrs) RequestTo1C.ExecuteFunction(storage, "УстановитьПараметр", new object[] { kvp.Key, kvp.Value }); } object result = RequestTo1C.ExecuteFunction(storage, "Выполнить", null); object selection = RequestTo1C.ExecuteFunction(result, "Выбрать", null); int count; int.TryParse(RequestTo1C.ExecuteFunction(selection, "Количество", null).ToString(), out count); List<List<string>> list = new List<List<string>>(); //string [][] list = new string[count][]; for (int i = 0; i < count; i++) { //list[i] = new string[fieldsSelection.Count]; list.Add(new List<string>()); } for (int k = 0; (bool)RequestTo1C.ExecuteFunction(selection, "Следующий", null); k++) { for (int i = 0; i < fieldsSelection.Count; i++) { object record = RequestTo1C.GetProperty(selection, fieldsSelection[i]); //list[k][i] = (((DBNull.Value.Equals(record) || record == null) ? "NULL" : record).ToString()); list[k].Add(((DBNull.Value.Equals(record) || record == null) ? "NULL" : record).ToString());//проверка, что в ячейке значение не DBNull или null } } return list; }
public static object getObjectFromThesaurusByName(object v82Base, COMConnectorClass connector, string thesaurusName, string name) { object thesauruses = RequestTo1C.GetProperty(v82Base, "Справочники"); object thesaurus = RequestTo1C.GetProperty(thesauruses, thesaurusName); object record = RequestTo1C.ExecuteFunction(thesaurus, "НайтиПоНаименованию", new object[] { name }); //return RequestTo1C.ExecuteFunction(record, "ПолучитьОбъект", null); return record; }
/// <summary> /// Функция удаления записи из справочника базы 1С. /// </summary> /// <param name="v82Base">объект подключения к базе</param> /// <param name="connector">COM объект для соединения с 1С</param> /// <param name="thesaurusName">Название справочника</param> /// <param name="index">Индекс удаляемой строки( в формате ХХХХХХХХХ если код хранится как строка)</param> /// <returns>Возвращает, прошло ли удаление или нет</returns> public static bool deleteFromThesaurus(object v82Base, COMConnectorClass connector, string thesaurusName, string index) { try { object thesauruses = RequestTo1C.GetProperty(v82Base, "Справочники"); object thesaurus = RequestTo1C.GetProperty(thesauruses, thesaurusName); object deletingRecord = RequestTo1C.ExecuteFunction(thesaurus, "НайтиПоКоду", new object[] { index }); object deletingObject = RequestTo1C.ExecuteFunction(deletingRecord, "ПолучитьОбъект", null); RequestTo1C.ExecuteFunction(deletingObject, "Удалить", null); return true; } catch (Exception ex) { return false; } }
/// <summary> /// Функция удаления записи из регистра базы 1С.(функция не доделана!) /// </summary> /// <param name="v82Base">объект подключения к базе</param> /// <param name="connector">COM объект для соединения с 1С</param> /// <param name="registrType">Тип регистра (РегистрНакопления, РегистрСведений и т.п.)</param> /// <param name="registrName">Название регистра</param> /// <param name="registratorName">Название регистратора</param> /// <param name="index">Индекс удаляемой строки</param> /// <returns>Возвращает, прошло ли удаление или нет</returns> public static bool deleteFromRegistr(object v82Base, COMConnectorClass connector, string registrType, string registrName, string registratorName, int index) { try { object registrs = RequestTo1C.GetProperty(v82Base, registrType); object registr = RequestTo1C.GetProperty(registrs, registrName); object storage = RequestTo1C.ExecuteFunction(registr, "СоздатьНаборЗаписей", null); object registrator = RequestTo1C.GetProperty(RequestTo1C.GetProperty(storage, "Отбор"), "Регистратор"); object document = RequestTo1C.GetProperty(RequestTo1C.GetProperty(v82Base, "Документы"), registratorName); object linkDocument = RequestTo1C.ExecuteFunction(document, "ПолучитьСсылку", null); RequestTo1C.ExecuteFunction(registrator, "Установить", new object[] { linkDocument }); object str = RequestTo1C.ExecuteFunction(storage, "Удалить", new object[] { index }); RequestTo1C.ExecuteFunction(storage, "Записать", null); return true; } catch (Exception ex) { return false; } }