COM-подключение к базе 7.7 из .NET, .NET Core Инсталяция:> dotnet add package sabatex.V1C77
или добавить через NUGET пакет sabatex.V1C77.
Добавить пространство имен: using sabatex.V1C77;
пример использованя: ---C#
static void Main(string[] args) { // создаём строку соединения var connection = new sabatex.V1C77.Models.Connection { DataBasePath = @"C:\demo\1SBUKRD", // путь к базе PlatformType = sabatex.V1C77.Models.EPlatform1C.V77M, // платформа 1С77 UserName = "Админов", // имя пользователя UserPass = "" // пароль или пустая строка }; // соединяемся с 1С77 // using (var _1c77 = sabatex.V1C77.COMObject1C77.CreateConnection(connection)) { // перебор всего справочника Контрагенты var contr = _1c77.GlobalContext.CreateObject("Справочник.Контрагенты"); if (contr.Method<double>("ВыбратьЭлементы") == 1) { while (contr.Method<double>("ПолучитьЭлемент")==1) { if (contr.Method<double>("ЭтоГруппа") == 1) continue; var name = contr.GetProperty<string>("Наименование"); Console.WriteLine(name); } } } } [/pre] соответствие типов данных 1С7.7 и C#
строка - string число - doubl дата - DataTime остальное - V1C77COMObject возможно использовать bool для замены double(0- false;1 - true) тогда выражение сократится к if (contr.Method("ВыбратьЭлементы"))
Категория:
OLE, ActiveX Как загрузить данные из Access в 1С ? Загружаем данные из Access в 1С
Код 1C v 8.х Файл = "C:\files\demo.mdb" ;
//СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Файл + "; Extended Properties=""Excel 8.0;HDR=NO;""";
СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Файл + ";""";
Connection = Новый COMОбъект("ADODB.Connection");
Попытка
Connection.Open(СтрокаПодключения);
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = Connection;
Command.CommandText = "S_elect * FROM Table1";
Command.CommandType = 1;
RecordSet = Новый COMОбъект("ADODB.RecordSet");
RecordSet = Command.Execute();
стр ="";
Пока RecordSet.EOF() = 0 Цикл
для н=0 по Recordset.Fields.Count -1 цикл
стр = стр + " " + Recordset.Fields(н).Value;
КонецЦикла;
Сообщить(стр);
стр ="";
RecordSet.MoveNext();
КонецЦикла;
RecordSet.Close();
Connection.Close();
Код 1C v 7.x Акцесс = СоздатьОбъект("ADODB.CONNECTION");
Попытка
СтрокаПодключения="Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mybase.mdb;Uid=Admin;Pwd=";
Акцесс.Open(СтрокаПодключения);
Исключение
Сообщить("Все плохо:"+ОписаниеОшибки());
Возврат;
КонецПопытки;
Команда = СоздатьОбъект("ADODB.Command");
Команда.ActiveConnection=Акцесс;
ТекстСелект = "S_elect * FROM tblCustoms";
НаборЗаписей = СоздатьОбъект("ADODB.RecordSet");
Команда.CommandText=ТекстСелект;
Попытка
НаборЗаписей=Команда.Execute;
Исключение
Сообщить("Обломись:"+ОписаниеОшибки());
КонецПопытки;
Попытка
НаборЗаписей.MoveFirst();
Исключение //нет записей в рекордсете
НаборЗаписей.Close();
Возврат;
КонецПопытки;
Пока НаборЗаписей.EOF()=0 Цикл
ИНН = НаборЗаписей.Fields("INN").Value;
//ну и т.д.
НаборЗаписей.MoveNext();
КонецЦикла;
НаборЗаписей.Close();
// Для тех, у кого в базе Акцесс создана рабочая группа (есть файлик mdw), строка подключения будет такая:
СтрокаПодключения="Driver= Microsoft Access Driver (*.mdb)};systemDB=C:\wg.mdw;Dbq=C:\mybase.mdb;Uid=Admin;Pwd=";
Работа с ACCESS из 1С через DAO
Код 1C v 7.x Процедура Выполнить()
//фасВладелец = СтрЗаменить(фасВладелец," ","_");
Спр = СоздатьОбъект("Справочник.ТоварыВПрайсе");
Спр.ИспользоватьВладельца(ФасВладелец);
dbe = СоздатьОбъект("dao.DBEngine.36");
wksp = dbe.Workspaces(0);
db = 0;
Если ФС.СуществуетФайл(КаталогИБ()+"Pric_list.mdb")=0 Тогда //
db = wksp.CreateDataBase(КаталогИБ()+"Pric_list.mdb",";LANGID=0x0419;Cp=1251;Country=0"); //
db.Execute("Create table [" + Строка(фасВладелец) + "]
|(Rec_ind integer,
|Код text,
|Артикул text,
|Цена integer,
|Товар text,
|Единица text,
|Val text);"
);
db.Execute("Create index Rec_ind on ["+Строка(фасВладелец)+"] (Rec_ind);");
Иначе
db= wksp.OpenDataBase(КаталогИБ()+"Pric_list.mdb");
Попытка
rs = db.OpenRecordset(Строка(фасВладелец));
Исключение
Сообщить("Создается новая таблица");
КонецПопытки;
Если ПустоеЗначение(rs)= 1 Тогда
db.Execute("Create table [" + Строка(фасВладелец) + "]
|(Rec_ind integer,
|Код text,
|Артикул text,
|Цена integer,
|Товар text,
|Единица text,
|Val text);"
);
db.Execute("Create index Rec_ind on ["+Строка(фасВладелец)+"] (Rec_ind);");
КонецЕсли;
db.Execute("Delete * From ["+Строка(фасВладелец)+"];");
КонецЕсли;
rs = db.OpenRecordset(Строка(фасВладелец));
Y = 1;
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
лсЕдиницы = "";
Если Спр.асТовар.апТип=Перечисление.ТипТовара.Услуга Тогда
лсЕдиницы = "";
ИначеЕсли Спр.асТовар.апТип=Перечисление.ТипТовара.Весовой Тогда
лсЕдиницы = "г";
ИначеЕсли Спр.асТовар.апТип=Перечисление.ТипТовара.Штучный Тогда
лсЕдиницы = "шт.";
КонецЕсли;
Если Спр.ЭтоГруппа() = 0 Тогда
rs.AddNew();
rs.Rec_ind = Y;
rs.Код= Спр.асТовар.ПолныйКод();
rs.Артикул = Спр.асТовар.сАртикул;
rs.Цена = Спр.чЦена;
rs.Товар=Спр.асТовар.сПолнНаименование;
rs.Единица = лсЕдиницы;
rs.Val = Спр.асВалюта.Код;
rs.Update();
Y=Y+1;
КонецЕсли;
КонецЦикла;
db.Close();
Сообщить("Выгрузка завершена");
КонецПроцедуры
Код 1C v 7.x
Процедура ACCESS()
dbe=CreateObject("DAO.DBEngine.36");
wksp=dbe.Workspaces(0);
db=0;
// в ковычках имя фаила с расширением MDB
Если ФС.СуществуетФайл(КаталогПользователя()+"sr.mdb")=0 Тогда
// создание файла базы данных с русским порядком сортировки
db=wksp.CreateDataBase(КаталогПользователя()+"mars_sr.mdb",";LANGID=0x0419;CP=1251;COUNTRY=0");
// DDL - запрос на создание таблицы
// описание языка DDL (подмножество SQL) смотрите в хелпе по MS Access
// не пытайтесь делать это с другими форматами - DDL через DAO поддерживается только для MDB
//Создадим еще таблицу
db.Execute("CREATE TABLE BANKS
|(REC_IND INTEGER,
|BANKCODE INTEGER,
|BANKNAME TEXT ,
|ModifiedFlg BIT,
|ChangeSeqFlg BIT);"
);
// индекс на нужные поля
db.Execute("CREATE INDEX REC_IND ON BANKS (REC_IND);");
Иначе
// просто открываем базу данных в разделенном режиме
db=wksp.OpenDataBase(КаталогПользователя()+"sr.mdb");
// и очищаем имеющиеся данные
db.Execute("DELETE * FROM BANKS;");
КонецЕсли;
// rs-это как раз сама таблица, куда мы будем добавлять записи
rs=db.OpenRecordset("BANKS");
// добавление записи
rs.AddNew();
// присвоение значений полям
rs.REC_IND = "1";
rs.BANKCODE = "34";
rs.BANKNAME = "Инвест";
rs.ModifiedFlg = "1";
// запомним запись
rs.Update();
// и так далее ...
db.Close(); // закрытие базы данных
КонецПроцедуры
Категория:
Работа с Microsoft Office и OpenOffice Фильтрация иерархического справочника по какому-либо условию в форме списка Есть ли в 8.х аналог ИспользоватьСписокЭлементов?
В динамических списках документов, справочников и т.д. может быть программно установлен отбор по полю Ссылка с указанием в качестве вида сравнения вхождения в список значений. Это позволяет отображать в списке только определенные объекты.
Однако эта возможность может иметь только ограниченное применение, так как динамический список имеет достаточно большое количество универсальных возможностей (установка отбора пользователем, переходы по уровням в иерархических списках и т.д.) и совмещение в прикладных решениях этих механизмов с отбором по конкретным значениям ссылок достаточно сложно реализуется.
В большинстве случаев, если необходимо обеспечить отображение в списке специально отобранного перечня объектов, можно рекомендовать использовать другие возможности (например, выборку данных запросом и отображение в форме с помощью таблицы значений или табличного документа). При этом система обеспечивает возможность полноценного взаимодействия с такими формами других системных механизмов.
Код 1C v 8.х Запрос = Новый Запрос();
Запрос.Текст = " ВЫБРАТЬ
| СпецификацииНоменклатуры.Ссылка
|ИЗ
| Справочник.СпецификацииНоменклатуры КАК СпецификацииНоменклатуры
|ГДЕ
| СпецификацииНоменклатуры.Владелец.Ссылка = &НоменклатураСсылка
| И СпецификацииНоменклатуры.Организация В ИЕРАРХИИ (&Организация)";
Запрос.УстановитьПараметр("НоменклатураСсылка", ГотоваяПродукция);
Запрос.УстановитьПараметр("Организация", Организация);
СписокСпецификаций = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
ФормаВыбора = Справочники.СпецификацииНоменклатуры.ПолучитьФормуВыбора(,Элемент,Элемент);
ЭлементОтбора = ФормаВыбора.СправочникСписок.Отбор.Ссылка;
ЭлементОтбора.ВидСравнения = ВидСравнения.ВСписке;
ЭлементОтбора.Значение = СписокСпецификаций;
ЭлементОтбора.Использование = Истина;
ФормаВыбора.ЭлементыФормы.СправочникСписок.НастройкаОтбора.Ссылка.Доступность = Ложь;
ФормаВыбора.Открыть();
Код 1C v 8.2 УП &НаКлиенте
Процедура ПоУмолчаниюОпцияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ФормаВыбора = ПолучитьФорму("Справочник.ОпцииАвтомобилей.Форма.ФормаВыбора");
ФормаВыбора.Открыть();
ЭлементОтбора = ФормаВыбора.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЭлементОтбора.ПравоеЗначение = СписокОпций;
ЭлементОтбора.Использование = Истина;
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//считаем данные по опциям доступной для данной модели
СписокОпций.ЗагрузитьЗначения(Объект.Владелец.ОпцииМодели.Выгрузить().ВыгрузитьКолонку("Опция"));
КонецПроцедуры
Для 7.7 используем метод ИспользоватьСписокЭлементов
Автор:
Antoska
Для решения данной задачи я решил воспользоваться методом формы списка "ИспользоватьСписокЭлементов(<СписокЗначений>)", так как использование процедуры "ОбработкаПодбора()" требует наличия реквизита справочника для отбора, а это мне не очень подходит. Вот как я реализовал этот алгоритм (код из модуля формы списка справочника):
Код 1C v 7.x Функция СоответствуетУсловиямФильтра(ЭлементСправочника)
Если ПустоеЗначение(ЭлементСправочника) = 0 Тогда
//Условие фильтра: текущий остаток не равен нулю
Если Регистр.ПартииТоваров.СводныйОстаток("",ЭлементСправочника.ТекущийЭлемент(),,,,,"ОстатокТовара") <> 0 Тогда
Возврат 1;
КонецЕсли;
КонецЕсли;
Возврат 0;
КонецФункции
Процедура УстановитьФильтр(Знач Группа="", Знач Иерархия="")
//Для флажка Фильтр задана формула "УстановитьФильтр()"
Если Фильтр = 1 Тогда
//Определяем параметры процедуры
Группа = ?(Группа="",ТекущийЭлемент().Родитель,Группа);
Иерархия = ?(Иерархия="",ИерархическийСписок(),Иерархия);
СписокФильтра = СоздатьОбъект("СписокЗначений");
Спр = СоздатьОбъект("Справочник.Номенклатура");
//Определяемся с использованием родителя при выборке элементов
Если ПустоеЗначение(Группа) = 0 Тогда
Спр.ИспользоватьРодителя(Группа);
КонецЕсли;
Спр.ВключатьПодчиненные(0);
//Выбираем элементы с учётом иерархии
Спр.ВыбратьЭлементы(Иерархия);
Пока Спр.ПолучитьЭлемент() = 1 Цикл
//Показваем группы, для удобства навигации
Если Спр.ЭтоГруппа() = 1 Тогда
//Добавляем группу в список фильтра
СписокФильтра.ДобавитьЗначение(Спр.ТекущийЭлемент());
Продолжить;
КонецЕсли;
//Проверяем элемент на соответствие условиям фильтра
Если СоответствуетУсловиямФильтра(Спр.ТекущийЭлемент()) = 1 Тогда
//Добавляем элемент в список фильтра
СписокФильтра.ДобавитьЗначение(Спр.ТекущийЭлемент());
КонецЕсли;
КонецЦикла;
//Устанавливаем фильтр
ИспользоватьСписокЭлементов(СписокФильтра);
Иначе
//Снимаем фильтр
ИспользоватьСписокЭлементов();
КонецЕсли;
КонецПроцедуры
Процедура ПриВыбореРодителя(Элемент)
УстановитьФильтр(Элемент)
КонецПроцедуры
Процедура ПриСменеИерархии(Способ)
УстановитьФильтр(,Способ)
КонецПроцедуры
Функцией "СоответствуетУсловиямФильтра(ЭлементСправочника)" можно задавать любые условия фильтрации списка опираясь на передаваемый ей элемент справочника.
Скорость работы приемлема, но можно попробовать реализовать и через запрос...
Категория:
Справочники Функция выгружает справочник в таблицу значений Пример выгрузки(помещения) справочника в Таблицу Значений (ТЗ):
Код 1C v 7.x // Параметры:
// ВидСправочника - Строка, указывающая вид справочника, как он задан в конфигураторе
// ДобавлятьЭлементыСправочника - 1- добавить колонку с наименованием "Элемент", содержащую элементы справочников, 0 - не добавлять колонку
// ИмяРеквизита - Имя реквизита, как он задан в конфигураторе. Используется при заполнении таблицы из выборки по значению реквизита.
// ЗначениеРеквизита - Значение реквизита, по которому надо построить выборку. Используется при заполнении таблицы из выборки по значению реквизита.
// ЭлементВладелец - Владелец, указывается для подчиненных справочников
// ЭлементРодитель - Родитель, используется в случае, если надо ограничить выборку условием принадлежности элементов одной группе
// ВключатьПодчиненные - Установить флаг выборки всех подчиненных элементов.
// Иерархия - Флаг указывающий на то как выбирать элементы (1 - выбирать элементы с учетом иерархии, 0 - выбирать элементы без учета иерархии)
// ВОбратномПорядке - Число: 1 - выбирать элементы справочника в обратном порядке; 0 - выбирать элементы справочника в прямом порядке
// ВключатьГруппы - 1 - выбирать среди групп справочника, 0 - выбирать только среди элементов
//
// Возвращает: Таблица значений, колонками которой, являются реквизиты справочника
Функция СправочникВТЗ(ВидСправочника, ДобавлятьЭлементыСправочника = 0,ИмяРеквизита = 0, ЗначениеРеквизита = 0, ЭлементВладелец = 0, ЭлементРодитель = 0, ВключатьПодчиненные = 1, Иерархия = 1, ВОбратномПорядке = 0, ВключатьГруппы = 0) Экспорт
ТаблицаСпр = СоздатьОбъект("ТаблицаЗначений");
мдСпр = Метаданные.Справочник(ВидСправочника);
ВсегоРеквизитовСпр = мдСпр.Реквизит();
Для индРекв = 1 по ВсегоРеквизитовСпр Цикл
Вид = мдСпр.Реквизит(индРекв).Вид;
ТаблицаСпр.НоваяКолонка(мдСпр.Реквизит(индРекв).Идентификатор, мдСпр.Реквизит(индРекв).Тип + ?(ПустоеЗначение(Вид) = 0, "." + Вид, ""), мдСпр.Реквизит(индРекв).Длина, мдСпр.Реквизит(индРекв).Точность);
КонецЦикла;
ТаблицаСпр.НоваяКолонка("Код", ?(мдСпр.ТипКода = "Текстовый", "Строка", "Число"), мдСпр.ДлинаКода);
ТаблицаСпр.НоваяКолонка("Наименование", "Строка", мдСпр.ДлинаНаименования);
Если ДобавлятьЭлементыСправочника = 1 тогда
ТаблицаСпр.НоваяКолонка("Элемент", "Справочник." + ВидСправочника);
КонецЕсли;
Спр = СоздатьОбъект("Справочник." + ВидСправочника);
Если ЭлементВладелец <> 0 тогда
Спр.ИспользоватьВладельца(ЭлементВладелец);
КонецЕсли;
Если ЭлементРодитель <> 0 тогда
Спр.ИспользоватьРодителя(ЭлементРодитель);
КонецЕсли;
Спр.ОбратныйПорядок(ВОбратномПорядке);
Спр.ВключатьПодчиненные(ВключатьПодчиненные);
Если ИмяРеквизита = 0 тогда
Спр.ВыбратьЭлементы(Иерархия);
Иначе
Спр.ВыбратьЭлементыПоРеквизиту(ИмяРеквизита, ЗначениеРеквизита, Иерархия, ВключатьГруппы);
КонецЕсли;
Пока Спр.ПолучитьЭлемент() = 1 Цикл
ТаблицаСпр.НоваяСтрока();
ТекущаяСтрока = ТаблицаСпр.НомерСтроки;
Для НомерКолонки= 1 по ВсегоРеквизитовСпр Цикл
ТаблицаСпр.УстановитьЗначение(ТекущаяСтрока, НомерКолонки, Спр.ПолучитьАтрибут(мдСпр.Реквизит(НомерКолонки)));
КонецЦикла;
ТаблицаСпр.Код = Спр.Код;
ТаблицаСпр.Наименование = Спр.Наименование;
Если ДобавлятьЭлементыСправочника = 1 тогда
ТаблицаСпр.УстановитьЗначение(ТекущаяСтрока, "Элемент", Спр.ТекущийЭлемент());
КонецЕсли;
КонецЦикла;
Возврат ТаблицаСпр;
КонецФункции
Новинки игровых автоматов с возможностью играть на
бездепозитный бонус за регистрацию в онлайн казино на деньги.
Категория:
Справочники Пример переноса данных из 1С 7.7 в 8.1 посредством XML файла Код 1C v 7.x xmldoc = CreateObject("Msxml2.DOMDocument");
xmlDoc.loadXML("<root/>");
nodeRoot = xmlDoc.documentElement;
расходы = xmlDoc.createElement("СправочникРасходы");
Спр = Создатьобъект("Справочник.Расходы");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 цикл
расход = xmlDoc.createElement("Расход");
расход.setAttribute("Код",Спр.Код);
расход.setAttribute("Наименование",Спр.Наименование);
расход.setAttribute("Родитель",Строка(Спр.Родитель));
расход.setAttribute("Цена",Строка(Спр.Цена.Получить(ТекущаяДата())));
расход.setAttribute("Количество",Строка(Спр.Количество));
расход.setAttribute("ЭтоГруппа",Строка(Спр.ЭтоГруппа()));
расходы.appendChild(расход);
КонецЦикла;
nodeRoot.appendChild(расходы);
ДвижениеСчетов = xmlDoc.createElement("ДвижениеСчетов");
рег = СоздатьОбъект("Регистр.Счет");
рег.ВыбратьДвижения();
Пока Рег.ПолучитьДвижение()=1 цикл
Движение = xmlDoc.createElement("Движение");
Движение.setAttribute("Приход",Строка(Рег.Приход));
Движение.setAttribute("Дата",Строка(Рег.ТекущийДокумент().ДатаДок));
Движение.setAttribute("Описатель",Строка(Рег.Описатель));
Движение.setAttribute("СтатьяРасходов",Строка(Рег.СтатьяРасходов));
Движение.setAttribute("СтатьяПоступлений",Строка(Рег.СтатьяПоступлений));
Движение.setAttribute("Кто",Строка(Рег.Кто));
Движение.setAttribute("Кому",Строка(Рег.Кому));
Движение.setAttribute("Остаток",Строка(Рег.Остаток));
Движение.setAttribute("Количество",Строка(Рег.Количество));
ДвижениеСчетов.appendChild(Движение);
КонецЦикла;
nodeRoot.appendChild(ДвижениеСчетов);
xmlDoc.save("C:\budjet.xml");
Код 1C v 8.х
Функция Кошель(Кош)
стр = ТП2.Найти(Кош,"Описатель");
Возврат Стр.Счет;
КонецФункции
Функция Вал(Кош)
стр = ТП2.Найти(Кош,"Описатель");
Возврат Стр.Валюта;
КонецФункции
Функция Дата1С(дат)
Возврат "20"+сред(дат,7,2)+сред(дат,4,2)+лев(дат,2);
КонецФункции
Процедура Загрузка(Элемент)
xmlDoc = Новый COMОбъект("MSXML2.DOMDocument");
xmlDoc.load("C:\budjet.xml");
nodeRoot = xmlDoc.documentElement;
Для каждого nod из nodeRoot.childNodes цикл
Если nod.nodeName = "СправочникРасходы" тогда
Сообщить("нашли СправочникРасходы");
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Код");
ТЗ.Колонки.Добавить("Наименование");
ТЗ.Колонки.Добавить("Родитель");
ТЗ.Колонки.Добавить("Цена");
ТЗ.Колонки.Добавить("Количество");
ТЗ.Колонки.Добавить("ЭтоГруппа");
Для Каждого Расход из nod.childNodes Цикл
Строка = ТЗ.Добавить();
Строка.Код = Расход.getAttribute("Код");
Строка.Наименование = Расход.getAttribute("Наименование");
Строка.Родитель = Расход.getAttribute("Родитель");
Строка.Цена = Число(Расход.getAttribute("Цена"));
Строка.Количество = Число(Расход.getAttribute("Количество"));
Строка.ЭтоГруппа = ?(Расход.getAttribute("ЭтоГруппа")="1",True,Ложь);
КонецЦикла;
//ТЗ.ВыбратьСтроку();
Для Каждого Стр из ТЗ Цикл
Родитель = Справочники.СтатьиЗатрат.НайтиПоНаименованию(Стр.Родитель,истина);
Справ = Справочники.СтатьиЗатрат.НайтиПоНаименованию(Стр.Наименование,истина);
Если Справ = Справочники.СтатьиЗатрат.ПустаяСсылка() тогда
Если Стр.ЭтоГруппа тогда
Справ = Справочники.СтатьиЗатрат.СоздатьГруппу();
Справ.Код = Стр.Код;
Справ.Наименование = Стр.Наименование;
Справ.Родитель = Родитель;
Справ.Записать();
Иначе
Справ = Справочники.СтатьиЗатрат.СоздатьЭлемент();
Справ.Код = Стр.Код;
Справ.Наименование = Стр.Наименование;
Справ.Родитель = Родитель;
Справ.Цена = Стр.Цена;
Справ.Количество = Стр.Количество;
Справ.Записать();
КонецЕсли;
Иначе
КонецЕсли;
КонецЦикла;
ИначеЕсли nod.nodeName = "ДвижениеСчетов" тогда
Сообщить("нашли движения счетов");
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Приход");
ТЗ.Колонки.Добавить("Дата");
ТЗ.Колонки.Добавить("Описатель");
ТЗ.Колонки.Добавить("Статья");
ТЗ.Колонки.Добавить("Цена");
ТЗ.Колонки.Добавить("Количество");
Для каждого движ из nod.childNodes цикл
Строка = ТЗ.Добавить();
Строка.Приход = ?(движ.getAttribute("Приход")="1",True,Ложь);
Строка.Дата = Дата(Дата1С(движ.getAttribute("Дата")));
Строка.Описатель = движ.getAttribute("Описатель");
Строка.Статья = Справочники.СтатьиЗатрат.НайтиПоНаименованию(движ.getAttribute(?(Строка.Приход,"СтатьяПоступлений","СтатьяРасходов")),истина);
Строка.Цена = Число(движ.getAttribute("Остаток"));
Строка.Количество = Число(движ.getAttribute("Количество"));
КонецЦикла;
ТЗ.ВыбратьСтроку();
Доки = Новый ТаблицаЗначений;
Доки.Колонки.Добавить("Док");
Доки.Колонки.Добавить("Дата");
Доки.Колонки.Добавить("КошелекС");
Доки.Колонки.Добавить("КошелекНа");
Доки.Колонки.Добавить("Статья");
Доки.Колонки.Добавить("ВалютаС");
Доки.Колонки.Добавить("ВалютаНа");
Доки.Колонки.Добавить("ЦенаС");
Доки.Колонки.Добавить("ЦенаНа");
Доки.Колонки.Добавить("Количество");
УжеЕстьДок=Ложь;
док=0;
Для Каждого Стр Из ТЗ цикл
Если Стр.Приход Тогда
Если УжеЕстьДок тогда
Док.КошелекНа = Кошель(Стр.Описатель);
Док.ВалютаНа = Вал(Стр.Описатель);
Док.ЦенаНа = Стр.Цена;
Док.Количество = Стр.Количество;
Док.Статья = Стр.Статья;
УжеЕстьДок=Ложь;
Иначе
Док = Доки.Добавить();
Док.КошелекНа = Кошель(Стр.Описатель);
Док.ВалютаНа = Вал(Стр.Описатель);
Док.ЦенаНа = Стр.Цена;
Док.Количество = Стр.Количество;
Док.Статья = Стр.Статья;
Док.Док = "ПоступлениеСредств";
КонецЕсли;
Иначе
Док = Доки.Добавить();
Док.КошелекС = Кошель(Стр.Описатель);
Док.ВалютаС = Вал(Стр.Описатель);
Док.ЦенаС = Стр.Цена;
Док.Количество = Стр.Количество;
Док.Статья = Стр.Статья;
Если СокрЛП(Стр.Статья.Наименование)="Обмен валюты" тогда
Док.Док = "ОбменВалюты";
УжеЕстьДок=истина;
ИначеЕсли СокрЛП(Стр.Статья.Наименование)="Перевод средств" тогда
Док.Док = "ПереводСредств";
УжеЕстьДок=истина;
Иначе
Док.Док = "РасходСредств";
УжеЕстьДок=Ложь;
КонецЕсли;
КонецЕсли;
Док.Дата = Стр.Дата;
КонецЦикла;
Доки.ВыбратьСтроку();
КонецЕсли;
КонецЦикла;
Для Каждого Док из Доки Цикл
Если Док.Док = "ПоступлениеСредств" тогда
Докум = Документы.ПоступлениеСредств.СоздатьДокумент();
Докум.Дата = Док.Дата;
Докум.Кошелек = Док.КошелекНа;
Докум.Валюта = Док.ВалютаНа;
Докум.Сумма = Док.ЦенаНа;
Докум.Статья = Док.Статья;
Докум.Записать(РежимЗаписиДокумента.Проведение);
ИначеЕсли Док.Док = "ПереводСредств" тогда
Докум = Документы.ПеремещениеСредств.СоздатьДокумент();
Докум.Дата = Док.Дата;
Докум.КошелекКуда = Док.КошелекНа;
Докум.КошелекОтКуда = Док.КошелекС;
Докум.Валюта = Док.ВалютаНа;
Докум.Сумма = Док.ЦенаНа;
Докум.Записать(РежимЗаписиДокумента.Проведение);
ИначеЕсли Док.Док = "ОбменВалюты" тогда
Докум = Документы.ПеремещениеСредств.СоздатьДокумент();
Докум.Дата = Док.Дата;
Докум.КошелекКуда = Док.КошелекНа;
Докум.КошелекОтКуда = Док.КошелекС;
Докум.Валюта = Док.ВалютаС;
Докум.Сумма = Док.ЦенаС;
Докум.Записать(РежимЗаписиДокумента.Проведение);
Докум = Документы.ОбменВалюты.СоздатьДокумент();
Докум.Дата = Док.Дата;
Докум.Кошелек = Док.КошелекНа;
Докум.ВалютаС = Док.ВалютаС;
Докум.ВалютаНа = Док.ВалютаНа;
Докум.СуммаС = Док.ЦенаС;
Докум.СуммаНа = Док.ЦенаНа;
Докум.Курс = Докум.СуммаС / Докум.СуммаНа;
Докум.Переключатель = 1;
Докум.Записать(РежимЗаписиДокумента.Проведение);
Иначе
Докум = Документы.РасходСредств.СоздатьДокумент();
Докум.Дата = Док.Дата;
Докум.Кошелек = Док.КошелекС;
Докум.Валюта = Док.ВалютаС;
тч = Докум.Затраты.Добавить();
тч.Сумма = Док.ЦенаС;
тч.Статья = Док.Статья;
тч.Цена = Док.ЦенаС;
тч.Количество = Док.Количество;
Докум.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьТЗДанными(Элемент)
xmlDoc = Новый COMОбъект("MSXML2.DOMDocument");
xmlDoc.load("C:\budjet.xml");
nodeRoot = xmlDoc.documentElement;
Для каждого nod из nodeRoot.childNodes цикл
Если nod.nodeName = "ДвижениеСчетов" тогда
Сообщить("нашли движения счетов");
ТП1 = Новый ТаблицаЗначений;
ТП1.Колонки.Добавить("Описатель");
Типы = Новый Массив(1); Типы[0] = Тип("СправочникСсылка.Кошельки");
Тип = Новый ОписаниеТипов(Типы);
ТП1.Колонки.Добавить("Счет",Тип);
Типы[0] = Тип("СправочникСсылка.Валюты");
Тип = Новый ОписаниеТипов(Типы);
ТП1.Колонки.Добавить("Валюта",Тип);
Для каждого движ из nod.childNodes цикл
Описатель = движ.getAttribute("Описатель");
если ТП1.Найти(Описатель,"Описатель") = Неопределено тогда
стр = ТП1.Добавить();
Стр.Описатель = Описатель;
КонецЕсли;
КонецЦикла;
ТП2=ТП1;//ВыбратьСтроку();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Категория:
XML, DBF, TXT, CSV Как заполнить диаграмму данными? Код 1C v 8.х Диаграмма = ЭлементыФормы.Диаграмма;
// Очистить диаграмму, возможно ранее в нее уже выводились данные.
Диаграмма.КоличествоСерий = 0;
Диаграмма.КоличествоТочек = 0;
// Количество серий будет ограничиваться (не все значения будут показываться).
Диаграмма.МаксимумСерий = МаксимумСерий.Ограничено;
Диаграмма.МаксимумСерийКоличество = 7;
Диаграмма.ВидПодписей = ВидПодписейКДиаграмме.Процент;
Диаграмма.ОбластьЗаголовка.Текст = "Обороты номенклатуры";
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ
| ПродажиКомпанииОбороты.Номенклатура,
| СУММА(ПродажиКомпанииОбороты.КоличествоОборот) КАК КоличествоОборот
|ИЗ
| РегистрНакопления.Продажи.Обороты(, , , ) КАК ПродажиКомпанииОбороты
|СГРУППИРОВАТЬ ПО
| ПродажиКомпанииОбороты.Номенклатура";
Результат = Запрос.Выполнить();
// Запретить обновление диаграммы на время вывода данных.
Диаграмма.Обновление = Ложь;
// Установить единственную точку.
Диаграмма.КоличествоТочек = 1;
Диаграмма.Точки[0].Текст = "Количество";
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
// Количество серий, если бы не ограничивали зависело бы от результата запроса.
КоличествоСерий = Диаграмма.Серии.Количество();
Диаграмма.КоличествоСерий = КоличествоСерий + 1;
Диаграмма.Серии[КоличествоСерий].Текст = Выборка.Номенклатура;
// Установить значение "на пересечении" точки и серии.
// Первый параметр - 0 , так как в диаграмме только одна точка.
Диаграмма.УстановитьЗначение(0, КоличествоСерий, Выборка.КоличествоОборот);
КонецЦикла;
// Обновить диаграмму.
Диаграмма.Обновление = Истина;
Код 1C v 7.x //Пример 1:
Процедура ПостроитьДиаграмму(Диагр)
КолСерий=0;
//количество серий определяется по количеству элементов в справочнике Материалы Спр=СоздатьОбъект("Справочник.Материалы");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
// группы элементов пропускаются
Если Спр.ЭтоГруппа()=0 Тогда
КолСерий=КолСерий+1;
КонецЕсли;
КонецЦикла;
// установка количества серий и точек
Диагр.КоличествоСерий(КолСерий);
Диагр.КоличествоТочек(1);
//в качестве значений на диаграмме примем количественное сальдо конечное по счету 10 и текущему элементу справочника
БИ=СоздатьОбъект("БухгалтерскиеИтоги");
БИ.Рассчитать(ДатаОтчета, ДатаОтчета);
номер=1;
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
Если Спр.ЭтоГруппа()=0 Тогда
Диагр.УстановитьИмяСерии(Номер, Спр.Наименование);
Диагр.УстановитьЗначение(1,номер,БИ.СКД("10","К",,Спр.ТекущийЭлемент()));
номер=номер+1;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Код 1C v 7.x // Пример 2:
Процедура СформироватьДиаграмму(Диаграмма1)
// Блокируем обновление, пока обрабатываются данные
Диаграмма1.Обновление(0);
Диаграмма1.Заголовок = "Поступления от покупателей";
Диаграмма1.УстановитьИмяСерии(1, "Рубли");
Диаграмма1.АвтоУстановкаИменТочек(1);
// Заполним диаграмму значениями
БухИт = СоздатьОбъект("БухгалтерскиеИтоги");
Бухит.ВыполнитьЗапрос(НачКвартала(РабочаяДата()),
КонКвартала(РабочаяДата()),"60.1",,,1,"Неделя","С");
БухИт.ВыбратьПериоды();
А = 1;
// дебетовые обороты по счету 60.1 покажут поступления
// денег от покупателей
Пока БухИт.ПолучитьПериод() = 1 Цикл
Диаграмма1.УстановитьЗначение(А, 1, БухИт.ДО());
А = А +1;
КонецЦикла;
// после наполнения данными перерисовываем
Диаграмма1.Обновление(1);
КонецПроцедуры
Категория:
Диаграмма Вывести все помеченные на удаление элементы справочника Код 1C v 8.х Запрос=новый Запрос;
Запрос.Текст="
|ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ПометкаУдаления = ИСТИНА
|";
Результат = Запрос.Выполнить();
Результат = Результат.Выбрать();
Пока Результат.Следующий() Цикл
//Код обработки результата запроса
КонецЦикла;
Код 1C v 7.x Спр=СоздатьОбъект("Справочник.Контрагенты");
спр.выбратьЭлементы();
Пока спр.ПолучитьЭлемент()=1 Цикл
Если спр.ПометкаУдаления()=1 тогда //выводим, если стоит пометка на удаление
сообщить(спр.наименование);
конецЕсли;
КонецЦикла;
Категория:
Справочники Вывести справочник в таблицу, табличный документ Код 1C v 8.х //Выведем весь справочник Номенклатура
Запрос=новый Запрос;
Запрос.Текст="
|ВЫБРАТЬ
| Номенклатура.*
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|";
РезультатЗ = Запрос.Выполнить();
//Далее использовать функцию вывода Результата запроса в табличный документ, например:
ПечатьРезвТаб(ТабДок,РезультатЗ);
Функция
ПечатьРезвТаб(ТабДок,РезультатЗ); - [url=/faq/view/209.html]Вывод результата запроса в табличный документ[/url]
Код 1C v 7.x таб=СоздатьОбъект("Таблица");
таб.ВывестиСекцию("Шапка");
спр=СоздатьОбъект("Справочник.Контрагенты");
спр.ВыбратьЭлементы();
Пока спр.ПолучитьЭлемент()=1 Цикл
Если спр.ЭтоГруппа()=1 Тогда
таб.ВывестиСекцию("гр");
иначе
таб.ВывестиСекцию("эл");
КонецЕсли;
КонецЦикла;
Таб.Опции(0,0,1,1);
Таб.ТолькоПросмотр(1);
таб.Показать();
Категория:
Справочники Есть ли у текущего элемента подчиненные Код 1C v 8.х Выборка = Справочники.Номенклатура.Выбрать( , Владелец);
Если Выборка.Следующий() = Истина Тогда
// Есть подчиненные элементы.
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
| ЕдиницыИзмерения.Ссылка
|ИЗ
| Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
|ГДЕ
| ЕдиницыИзмерения.Владелец = &Владелец";
Запрос.УстановитьПараметр("Владелец", Владелец);
Если НЕ Запрос.Выполнить().Пустой() Тогда
// Есть подчиненные элементы!
КонецЕсли;
Код 1C v 7.x Спр=СоздатьОбъект("Справочник.Контрагенты");
Попытка
дог=СоздатьОбъект("Справочник.Договоры");
исключение
Предупреждение("В конфигурации нет справочника ДОГОВОРЫ");
возврат;
конецПопытки;
Спр.ВыбратьЭлементы();//перебираем справочник-владелец
Пока спр.ПолучитьЭлемент()=1 Цикл
Если спр.ЭтоГруппа()=1 Тогда
продолжить;//группы не имеют подчиненных элементов
КонецЕсли;
Сообщить("Контрагент "+спр.Наименование+ " его договоры:");
дог.ИспользоватьВладельца(Спр.ТекущийЭлемент());//будем перебирать только
//подчиненные владельцу
дог.ВыбратьЭлементы(); //перебираем только подчиненные конкретному владельцу
Пока дог.получитьЭлемент()=1 Цикл
сообщить("----------"+дог.наименование);
КонецЦикла;
КонецЦикла;
Категория:
Справочники Создать всем подчиненный элемент справочника Код 1C v 7.x //проуедура всем контрагентам мозжает подчиненный докогвор "Дополнительный"
Спр=СоздатьОбъект("Справочник.Контрагенты");
Попытка
дог=СоздатьОбъект("Справочник.Договоры");
исключение
Предупреждение("В конфигурации нет справочника ДОГОВОРЫ");
возврат;
конецПопытки;
Спр.ВыбратьЭлементы();//перебираем справочник-владелец
Пока спр.ПолучитьЭлемент()=1 Цикл
Если спр.ЭтоГруппа()=1 Тогда
продолжить;//группы не могут имет подчиненных элементов
КонецЕсли;
дог.ИспользоватьВладельца(спр.ТекущийЭлемент());
дог.Новый();
Дог.наименование="Дополнительный";
дог.записать();//это часто забывают написать
конецЦикла;
Категория:
Справочники Перебрать, выбрать элементы подчиненного справочника Перебор элементов справочника принадлежащих элементу другого справочника, т.е когда один справочник подчинен другому справочнику.
Код 1C v 8.х // Получить выборку по указанному контрагенту.
Выборка = Справочники.КонтактныеЛица.Выбрать( , Контрагент);
Пока Выборка.Следующий() Цикл
ОчереднойПодчиненый = Выборка.Ссылка;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| КонтактныеЛица.Ссылка
|ИЗ
| Справочник.КонтактныеЛица КАК КонтактныеЛица
|ГДЕ
| КонтактныеЛица.Владелец = &Владелец";
Запрос.УстановитьПараметр("Владелец", Контрагент);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
ОчереднойПодчиненый = Выборка.Ссылка;
КонецЦикла;
Код 1C v 7.x //При работе с подчиненным справочником (например, при переборе или поиске элементов)
//требуется указать, для какого конкретно элемента-владельца получать подчиненные элементы.
//Для этого предназначена процедура ИспользоватьВладельца(ОбъектВладелец)
//агрегатного типа данных Справочник.
// Пример 1
спр=СоздатьОбъект("Справочник.Модели");
спрМарка=СоздатьОбъект("Справочник.Марки");
спрМарка.НайтиПоНаименованию("BMW");
спр.ИспользоватьВладельца(спрМарка.ТекущийЭлемент());
спр.ВыбратьЭлементы();
Пока спр.ПолучитьЭлемент()=1 Цикл
Сообщение(спр.ТекущийЭлемент().Наименование);
КонецЦикла;
// Пример 2
Спр=СоздатьОбъект("Справочник.Контрагенты");
Попытка
дог=СоздатьОбъект("Справочник.Договоры");
исключение
Предупреждение("В конфигурации нет справочника ДОГОВОРЫ");
возврат;
конецПопытки;
Спр.ВыбратьЭлементы();//перебираем справочник-владелец
Пока спр.ПолучитьЭлемент()=1 Цикл
Если спр.ЭтоГруппа()=1 Тогда
продолжить;//группы не имеют подчиненных элементов
КонецЕсли;
Сообщить("Контрагент "+спр.Наименование+ " его договоры:");
дог.ИспользоватьВладельца(Спр.ТекущийЭлемент());//будем перебирать только
//подчиненные владельцу
дог.ВыбратьЭлементы(); //перебираем только подчиненные конкретному владельцу
Пока дог.получитьЭлемент()=1 Цикл
сообщить("----------"+дог.наименование);
КонецЦикла;
КонецЦикла;
Категория:
Справочники Выбрать, перебрать все элементы из определенной группы В терминах 1С:Предприятия
Группа - это
Родитель
Код 1C v 8.х //ПолеВводаРодитель - поле на форме
Выборка = Справочники.Номенклатура.Выбрать(ПолеВводаРодитель);
Пока Выборка.Следующий() Цикл
Наименование = Выборка.Наименование;
КонецЦикла;
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Ссылка,
| Наименование
|ИЗ
| Справочник.Номенклатура
|ГДЕ
| Родитель = &Родитель
|АВТОУПОРЯДОЧИВАНИЕ");
Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Наименование = Результат.Наименование;
КонецЦикла;
Выборка=Справочники.Номенклатура.ВыбратьИерархически(ПолеВводаРодитель);
Пока Выборка.Следующий() Цикл
Наименование = Выборка.Наименование;
КонецЦикла;
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Ссылка,
| Наименование
|ИЗ
| Справочник.Номенклатура
|ГДЕ
| Родитель В ИЕРАРХИИ(&Родитель)
|АВТОУПОРЯДОЧИВАНИЕ");
Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Наименование = Результат.Наименование;
КонецЦикла;
Код 1C v 7.x спр=СоздатьОбъект("Справочник.Материалы");
спрГруппа=СоздатьОбъект("Справочник.Материалы");
спрГруппа.НайтиПоНаименованию("Топливо");
спр.ИспользоватьРодителя(спрГруппа.ТекущийЭлемент());
спр.ВыбратьЭлементы();
Пока спр.ПолучитьЭлемент()=1 Цикл
Сообщить(спр.ТекущийЭлемент().Наименование);
КонецЦикла;
Категория:
Справочники Перебрать, выбрать элементы справочника Код 1C v 8.х Выборка = Справочники.Сотрудники.Выбрать();
//или Выборка = Справочники.Сотрудники.ВыбратьИерархически();
Пока выборка.Следующий() = 1 Цикл
... //действия с очередным элементом
...Сообщить("Сотрудник " + выборка.Наименование);
КонецЦикла;
//А через запрос так:
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Ссылка,
| Наименование
|ИЗ
| Справочник.Номенклатура
|АВТОУПОРЯДОЧИВАНИЕ");
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Наименование = Результат.Наименование;
КонецЦикла;
Код 1C v 7.x
// Обход элементов справочника
Спр = СоздатьОбъект("Справочник.Материалы");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
// Дальнейшие действия с Спр.ТекущийЭлемент()
сообщить("Наименование "+спр.Наименование+" Код "+спр.код);
КонецЦикла;
//А через запрос так:
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса ="
|Период с Дата1 по Дата2;
|Обрабатывать НеПомеченныеНаУдаление;
|Спр = Справочник.Материалы.ТекущийЭлемент;
|Группировка Спр упорядочить по Спр.Наименование;";
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Предупреждение("Запрос по элементам справочника не выполнился!");
Возврат;
КонецЕсли;
// Теперь вся выборка находится в объекте "Запрос"
Категория:
Справочники Помечен ли элемент справочника на удаление Код 1C v 8.х //можно проверить, помечен ли элемент на удаление
//есть свойство ПометкаУдаления, оно имеет тип Булево - Истина или Ложь
Пометка = СпрСотр.ПометкаУдаления; //обратите внимание: это свойство
Если Пометка = Истина Тогда
.....//элемент помечен на удаление
КонецЕсли;
Код 1C v 7.x
//пом=1 если ставим пометку
//пом =0 если хотим снять пометку
спр=СоздатьОбъект("Справочник.Материалы");
спр.ВыбратьЭлементы();
Пока спр.ПолучитьЭлемент()=1 Цикл
Если пом=1 Тогда
спр.удалить(0);//если поставить 1, то будет непосредственное удаление
иначе
спр.СнятьПометкуУдаления();
КонецЕсли;
КонецЦикла;
Предупреждение("Обработка завершена");
Категория:
Справочники Выбрать все движения регистра по документу Код 1C v 7.x
Процедура Взаиморасчеты(ВыбКлиент, ДатаНачало, ДатаКонец)
// Создание Таблицы для выходного отчета
Заг = "Неизвестно.";
Таб = СоздатьОбъект("Таблица");
Клн = СоздатьОбъект("Справочник.Клиенты");
Клн.ИспользоватьДату(ДатаКонец);
Док = СоздатьОбъект("Документ");
Рег = СоздатьОбъект("Регистр.Взаиморасчеты");
Рег1 = СоздатьОбъект("Регистр.Взаиморасчеты");
Рег.ВременныйРасчет();
РассчитатьРегистрыНа(ДатаКонец);
Если ВыбКлиент.Выбран() = 0 Тогда
//Без условий
Заг = "По всем клиентам.";
ИначеЕсли ВыбКлиент.ЭтоГруппа() = 1 Тогда
Клн.ВключатьПодчиненные(ВыбКлиент);
Клн.ИспользоватьРодителя(ВыбКлиент);
Заг = "По клиентам группы " + ВыбКлиент.Наименование;
Иначе
Предупреждение("Выберите группу клиентов!");
Возврат;
КонецЕсли;
Таб.ВывестиСекцию("Отчет");
Клн.ВыбратьЭлементы();
Пока Клн.ПолучитьЭлемент() > 0 Цикл
Если Клн.ЭтоГруппа() = 1 Тогда
Таб.ВывестиСекцию("Группа");
Иначе
Рег.Клиент = Клн.ТекущийЭлемент();
Рег.ОстаткиПолучить();
Баз_сум = Рег.СуммаБазовая;
Вал_сум = Рег.СуммаВалютная;
Таб.ВывестиСекцию("Клиент");
// цикл по всем документам
Док.ВыбратьДокументы(ДатаНачало, ДатаКонец);
Пока Док.ПолучитьДокумент() > 0 Цикл
// отфильтруем документы
Если (Док.Вид() = "Перемещение") ИЛИ (Док.Вид() = "Счет") ИЛИ
(Док.Вид() = "Списание") ИЛИ
(Док.Вид() = "РучноеИзмОстатка") Тогда
// Эти Документы не изменяют Взаиморасчеты
Продолжить;
КонецЕсли;
// выберем все движения регистра по документу
Рег1.ВыбратьДвиженияДокумента(Док.ТекущийДокумент());
Пока Рег1.ПолучитьДвижение() > 0 Цикл
Если Строка(Рег1.Клиент.Код) <> Строка(Клн.Код) Тогда
// не тот клиент
Продолжить;
КонецЕсли;
Дв_Баз_Сум = Рег1.СуммаБазовая;
Дв_Вал_Сум = Рег1.СуммаВалютная;
Если Рег1.Приход = 1 Тогда
Таб.ВывестиСекцию("Приход");
Иначе
Таб.ВывестиСекцию("Расход");
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
//Вызов выходного отчета в окно просмотра и редактирования.
Таб.ТолькоПросмотр(1);
Таб.Опции(0, 0, 4, 0);
Таб.Показать("Взаиморасчеты с клиентами", "");
ВыбКлиент = 0;
КонецПроцедуры
Категория:
Регистры