Перебор документов, обработка и запись В данном примере показано как в 7-ке выбрать документы поступления товаров за определенный период и обработать их, установив дату и номер счета-фактуры.
Код 1C v 7.x Процедура Сформировать()
ДокПрием = СоздатьОбъект("Документ.ПоступлениеТоваров");
ДокПрием.ВыбратьДокументы(НачДата, КонДата);
Пока ДокПрием.ПолучитьДокумент()=1 Цикл
текдлина = СтрДлина(СокрЛП(ДокПрием.НомерСчетаФактуры));
если текдлина>1 Тогда
Сообщить("Уже заполнено - "+строка(текдлина)+" * "+ДокПрием.НомерСчетаФактуры);
Иначе
ДатаСчФ = лев(ДокПрием.ДатаНомерСчетаФактуры,10);
ДатаСчетаФактуры = Дата(Сред(ДатаСчФ,7,4),Сред(ДатаСчФ,4,2),Лев(ДатаСчФ,2)); //31.03.2015
НомерСчетаФактуры = СокрЛП(Сред(ДокПрием.ДатаНомерСчетаФактуры, 11, 50));
ДокПрием.ДатаСчетаФактуры = ДатаСчетаФактуры;
ДокПрием.НомерСчетаФактуры = НомерСчетаФактуры;
ДокПрием.ДатаНомерСчетаФактуры = СокрЛП(НомерСчетаФактуры) + ";" + Формат(ДатаСчетаФактуры,"Д ДДММГГГГ");
Сообщить(" - " +НомерСчетаФактуры+" / "+строка(ДатаСчетаФактуры));
ДокПрием.Записать();
Конецесли;
КонецЦикла;
КонецПроцедуры
Категория:
Документы COM-подключение к базе 7.7 из 8.2 1С Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине.
Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)):
Код 1C v 8.2 УП &НаКлиенте
Процедура Загрузки()
ПутьКБазе="D:\ВашаБаза\1с77\";
Пользователь="stvbliz";//пользователь базы 7.7
Пароль="вашпароль";
МонопольныйРежимOLE = ""; // " /m";
ЗапускБезЗаставки = 1;
База = Новый COMОбъект("V1CEnterprise.Application");
СтрокаПодключения = "/D"""+СокрЛП(ПутьКБазе)+""" /N"""+СокрЛП(Пользователь)+""" /P"""+СокрЛП(Пароль)+"""";
РезультатПодключения=База.Initialize(База.RMTrade,СтрокаПодключения,?(ЗапускБезЗаставки = 1,"NO_SPLASH_SHOW",""));
Если НЕ РезультатПодключения Тогда
Сообщить("Не удалось произвести подключение к информационной базе");
КонецЕсли;
Таблица.Очистить();
Док = База.CreateObject("Документ.ЗаявкаПокупателя");
Док.ВыбратьДокументы(НачалоНедели(Дата),КонецНедели(Дата));
Пока Док.ПолучитьДокумент() = 1 Цикл
ОбработкаПрерыванияПользователя();
Если Док.НомерДок = НомерЗаявки Тогда
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку()=1 Цикл
нов=Таблица.Добавить();
нов.Номенклатура = Док.Номенклатура.Наименование;
нов.Количество = Док.Количество;
нов.Единица = Док.Единица.Наименование;
нов.Цена = Док.Цена;
Нов.Сумма = Док.Сумма;
нов.Коэффициент = Док.Коэффициент;
нов.Производитель = Док.производитель;
Нов.Валюта = Док.Валюта.Наименование;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Док=NULL;
КонецПроцедуры
Код 1C v 8.2 УП //Примеры получения значений
//Периодический реквизит нужно получать на дату
ДатаОст= ТекущаяДата();
Спр77Оле.ВидГрейда.Получить(ДатаОст).код;
// Перечисление
Если База77ОЛЕ.ВидКонтрагента.Идентификатор() = "ЧастноеЛицо"
// или
Если Сотрудник.ХарактерРаботы.Получить(Необходимая_Дата).Идентификатор() = БазаОЛЕ.EvalExpr("Перечисление.ХарактерРаботы.ТрудовыеОтношения.Идентификатор()") Тогда
// Принадлежит ...
КонецЕсли;
//В запросе
// в v7 ссылка OLE
Запрос = v7.CreateObject("Запрос");
ТипТовара = v7.evalexpr("Перечисление.ТипыТоваров.Собственный.ПорядковыйНомер()");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;
|Наименование = Справочник.Номенклатура.Наименование;
|ТипТовара = Справочник.Номенклатура.ТипТовара;
|ЕдиницаИзмерения = Справочник.Номенклатура.ЕдиницаИзмерения;
|Функция Счётчик = Счётчик();
|Группировка ТекущийЭлемент;
|Условие(ТипТовара.ПорядковыйНомер() = "+ТипТовара+");
|"//}}ЗАПРОС
;
Категория:
COM-объекты, WMI, WSH Удаление документа Код 1C v 8.2 УП &НаКлиенте
Процедура УдалитьДокумент(Команда)
// Вставить содержимое обработчика.
УдалитьДокументНаСервере(0);
КонецПроцедуры
&НаСервере
Процедура УдалитьДокументНаСервере(ПометкаУдаления)
// Вставить содержимое обработчика.
Перем УдаляемыйДокумент;
УдаляемыйДокумент =Документы.РасходнаяНакладная.НайтиПоНомеру("000000004");
Если ПометкаУдаления = 1 Тогда
УдаляемыйДокумент.ПолучитьОбъект().УстановитьПометкуУдаления(Истина);
Иначе
УдаляемыйДокумент.ПолучитьОбъект().Удалить();
КонецЕсли;
КонецПроцедуры
Код 1C v 8.х //Установить пометку удаления документа
ТС=ЭлементыФормы.Список.ТекущиеДанные;
ТД=Документы.РеализацияТоваровУслуг.НайтиПоНомеру(ТС.Номер, ТС.Дата);
Если ТД.Пустая() Тогда
Сообщить("Документ по номеру <такому то> не найден");
возврат;
КонецЕсли;
ТД.ПолучитьОбъект().УстановитьПометкуУдаления(Истина);
Код 1C v 8.х // Непосредственное удаление документов
Запрос = Новый Запрос("ВЫБРАТЬ
| Заказы.Ссылка
|ИЗ
| Документ.Заказы КАК Заказы
|ГДЕ
| Заказы.ПометкаУдаления = ИСТИНА");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ОбъектДокумент = Выборка.Ссылка.ПолучитьОбъект();
ОбъектДокумент.Удалить();
КонецЦикла;
Код 1C v 7.x Д = СоздатьОбъект("Документ");
Д.ВыбратьДокументы(НачДата,КонДата);
Пока Д.ПолучитьДокумент() = 1 Цикл
Сообщить(Д.ТекущийДокумент());
Состояние(Д.ДатаДок);
Д.Удалить();
КонецЦикла;
Категория:
Документы Как получить уникальный идентификатор объекта, GUID? GUID (Globally Unique Identifier) — статистически уникальный 128-битный идентификатор. Его главная особенность — уникальность, которая позволяет создавать расширяемые сервисы и приложения без опасения конфликтов, вызванных совпадением идентификаторов. Хотя уникальность каждого отдельного GUID не гарантируется, общее количество уникальных ключей настолько велико (2128 или 3,402 * 10в38), что вероятность того, что в мире будут независимо сгенерированы два совпадающих ключа, крайне мала.
Для получения уникального идентификатора объекта, используйте код вида:
Код 1C v 8.х ГУИДССЫЛКИ = СсылкаНаОбъект.УникальныйИдентификатор();
// или
НоменклатураСсылка = Справочники.Номенклатура.НайтиПоКоду("00013");
Если НЕ НоменклатураСсылка.Пустая() Тогда
Сообщить("GUID = " + НоменклатураСсылка.УникальныйИдентификатор());
КонецЕсли;
Как с помощью запроса получить уникальный идентификатор:
Код 1C v 8.х Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Номенклатура.НаименованиеПолное,
| Номенклатура.ЕдиницаИзмерения,
| Номенклатура.СтавкаНДС,
| Номенклатура.НоменклатурнаяГруппа,
| Номенклатура.СчетУчетаЗапасов,
| Номенклатура.СчетУчетаЗатрат,
| Номенклатура.Ссылка,
| Номенклатура.ЭтоГруппа
| ИЗ
| Справочник.Номенклатура КАК Номенклатура";
РезультатЗапроса = Запрос.Выполнить();
СпрОбъект = РезультатЗапроса.Выбрать();
Пока СпрОбъект.Следующий() Цикл
СтрокаУИ = Объект.XMLСтрока(СпрОбъект.Ссылка);
GUID = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(СокрЛП(СтрокаУИ)));
КонецЦикла;
В 1С 7.7 можно получить так
Через v7plus.dll
Код 1C v 7.x Инфо = СоздатьОбъект("AddIn.V7SysInfo");
ГлобальноУникальныйИдентификатор = Инфо.СоздатьGUID();
Через WScript
Код 1C v 7.x Функция СоздатьGUID()
TypeLib = CreateObject("Scriptlet.TypeLib");
NewGUID = TypeLib.Guid();
TypeLib = "";
Возврат NewGUID;
КонецФункции
//*******************************************
Процедура Сформировать()
g=СоздатьGUID();
Сообщить("Создан GUID: "+g);
КонецПроцедуры
при OLE доступе:
Код 1C v 7.x Если Док_Источник.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода) = 1 Тогда
Пока Док_Источник.ПолучитьДокумент() = 1 Цикл
Объект = БазаОле.ЗначениеВстрокуВнутр(Док_Источник.ТекущийДокумент());
ИдентификаторДокумента = СокрЛП(ПолучитьИД(Объект));
// Для примера Объект возвращает {"O","0","0","3114","0","0"," 258156CB "},
// а ПолучитьИД(объект) = 258156CB
КонецЦикла;
Еще посмотрите метод:
ЗначениеВСтрокуВнутр(<?>);
Синтаксис:
ЗначениеВСтрокуВнутр(<Объект>)
Назначение:
Преобразование значения объекта агрегатного типа в строковое системное представление.
Возвращает: представление значения объекта в строковом системном виде.
Параметры:
<Объект> - значение объекта агрегатного типа данных которое нужно преобразовать.
Категория:
Встроенные Функции Пример создания общего журнала с закладками, для 7.7 Создание журнала с закладками, причем в справочнике можно задать каждой закладке любое название. Создавал в конфигурациях «Бухгалтерский учет» и «Торговля и Склад». Выглядит это так:
а справочник:
1. Создаем новый справочник.Новый1
где, уровень = 1, длина кода = 10, длина наименования = 50. серии кодов = в пределах подчинения, тип кода = текстовый, основное представление = в виде наименования.
Редактируем форму списка:
Добавляем 2 кнопки: Заполнить, Применить.
В модуль:
Код 1C v 7.x Процедура Заполнить()
Спр = СоздатьОбъект("Справочник.Новый1");
Для Х = 1 По Метаданные.Документ() Цикл
ИдДок = Метаданные.Документ(Х).Идентификатор;
Если Спр.НайтиПоНаименованию(ИдДок) = 0 Тогда
Спр.Новый();
Спр.Наименование = ИдДок;
Спр.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура Применить()
НачатьТранзакцию();
Спр = СоздатьОбъект("Справочник.Новый1");
Х = 0;
Док = СоздатьОбъект("Документ");
Док.ВыбратьДокументы();
Пока Док.ПолучитьДокумент() = 1 Цикл
ВидДок = Док.Вид();
Если Спр.НайтиПоНаименованию(ВидДок) = 1 Тогда
Док.ДляОтбора = Спр.Код;
Док.Записать();
КонецЕсли;
Х = Х + 1;
Состояние(Х);
КонецЦикла;
ЗафиксироватьТранзакцию();
КонецПроцедуры
2. В Документы, Общие реквезиты добавляем «ДляОтбора» где: Тип значения = строка и длина = 10 , в Дополнительные стоит галочка «Отбор».
3. В «Журналах» копируем «Общий» и в его модуле пишем:
Код 1C v 7.x Процедура ПриОткрытии()
ЗакладкиОтбора("ДляОтбора");
КонецПроцедуры //ПриОткрытии
4. Заходим в режиме Предприятия, открываем созданный нами справочник и заполняем его. Называем закладки и жмем «Применить», открываем Журнал и пользуемся
Категория:
Список Справочника, Документов, Регистров Битая ссылка, <Объект не найден>, Уникальный Идентификатор, GUID Когда кто-то удаляет данные из базы без проверки ссылок на эти объекты, то везде где этот объект использовался появляется сообщение вида: <Объект не найден> (84:bf5600145e3710ab11dda4c605dbe824) .
В данной статье я опишу пример быстрого восстановления данных.
Для пользователя:
Скачиваете эту обработку восстановления объектов по GUID :
Для 1С 8.1:
здесь или
Скачивать файлы может только зарегистрированный пользователь!
Для 1С 8.2:
Скачивать файлы может только зарегистрированный пользователь!
!!! Новая Версия!!! 8.2 и 8.3 -
Скачивать файлы может только зарегистрированный пользователь! Подробное описание:
Объект не найден в 1С или про Битые ссылки 1С
и открываете ее в программе:
1. Копируем фразу <Объект не найден... и вставляем в поле Объект не найден, жмем на кнопку GUID -> и получаем 05dbe824-a4c6-11dd-bf56-00145e3710ab
2. Если Вы знаете что удалили, то можете сразу нажать кнопку Создать Объект Из GUID - Пункт 4.
3. Если Вы не знаете что удалили, тогда вам нужно поднять архивную копию базы, открыть там обработку и вставить полученный GUID в поле GUID.
далее нажать Ссылку -> и в правом поле отобразится необходимый Вам объект(в моем случае Попов Роман Владимирович).
Открыв его, узнаем что это справочник Сотрудники и всю содержащуюся в справочнике информацию. Возвращаемся в базу, где необходимо восстановить объект и жмем кнопку Создать Объект Из GUID
4. Из открывшегося списка выбираем Справочник Сотрудники, в открывшейся форме заполняем все поля данными из архивной базы и жмем OK. Все, данный объект восстановлен.
Для быстрого поиска всех <Объект не найден> используйте
Поиск в базе битых ссылок - "объект не найден"
Для программиста:
Для получения уникального идентификатора объекта, используйте код вида:
Код 1C v 8.х ГУИДССЫЛКИ = СсылкаНаОбъект.УникальныйИдентификатор();
Для того чтобы преобразовать <Объект не найден> (84:bf5600145e3710ab11dda4c605dbe824) в УникальныйИдентификатор (GUID)
Код 1C v 8.х // ГУИДУдОбъкта = <Объект не найден> (84:bf5600145e3710ab11dda4c605dbe824)
ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъкта,"<Объект не найден> (","");
ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаСтр,")","");
ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаСтр,"0x","");
ГУИДУдОбъктаСтр = Сред(ГУИДУдОбъктаСтр, Найти(ГУИДУдОбъктаСтр,":")+1, СтрДлина(ГУИДУдОбъктаСтр));
// Преобразуем GUID
ГУИД = Сред(ГУИДУдОбъктаСтр,25,8)+"-"+Сред(ГУИДУдОбъктаСтр,21,4)+"-"+Сред(ГУИДУдОбъктаСтр,17,4)+"-"+Сред(ГУИДУдОбъктаСтр,1,4)+"-"+Сред(ГУИДУдОбъктаСтр,5,12); //и получаем ГУИД = 05dbe824-a4c6-11dd-bf56-00145e3710ab
Для получения ссылки по уникальному идентификатору, используйте код:
Код 1C v 8.х // ГУИД = 05dbe824-a4c6-11dd-bf56-00145e3710ab
// Ссылка будет установлена в переменную СсылкаНаОбъектГуид
УникальныйИдентификатор = Новый УникальныйИдентификатор(ГУИД)
// все объекты по которым можно получить ссылку
Если ПолучитьСсылкуНоМенеджеруОбъекта(Справочники,УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта(Документы,УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта(ПланыВидовХарактеристик,УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта(ПланыСчетов,УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта(ПланыОбмена,УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта(БизнесПроцессы,УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта(Задачи,УникальныйИдентификатор) Тогда
КонецЕсли;
// ПолучитьСсылкуНоМенеджеруОбъекта()
Функция ПолучитьСсылкуНоМенеджеруОбъекта(ОбъектыМенеджер,УникальныйИдентификатор)
Для Каждого Менеджер Из ОбъектыМенеджер Цикл
СсылкаНаОбъектГуид = Менеджер.ПолучитьСсылку(УникальныйИдентификатор);
Если СсылкаНаОбъектГуид.ПолучитьОбъект() <> Неопределено Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
Создать объект документ или справочник и установить ему свой Уникальный идентификатор
Код 1C v 8.х // ТекGUID = 05dbe824-a4c6-11dd-bf56-00145e3710ab
Попытка
УникальныйИд = Новый УникальныйИдентификатор(ТекGUID);
Исключение
Возврат;
КонецПопытки;
КартинкаСпр=БиблиотекаКартинок.Справочник;
КартинкаДок=БиблиотекаКартинок.Документ;
СписокВыбора = Новый СписокЗначений;
СписокВыбора.Добавить(null,"СПРАВОЧНИКИ");
Для каждого ЭлементМетаданных Из Метаданные.Справочники Цикл
Структурка=Новый Структура;
Структурка.Вставить("Имя",ЭлементМетаданных.Имя);
Структурка.Вставить("Тип",1);
СписокВыбора.Добавить(Структурка,ЭлементМетаданных.Синоним,,КартинкаСпр);
КонецЦикла;
СписокВыбора.Добавить(null,"ДОКУМЕНТЫ");
Для каждого ЭлементМетаданных Из Метаданные.Документы Цикл
Структурка=Новый Структура;
Структурка.Вставить("Имя",ЭлементМетаданных.Имя);
Структурка.Вставить("Тип",2);
СписокВыбора.Добавить(Структурка,ЭлементМетаданных.Синоним,,КартинкаДок);
КонецЦикла;
Результат=СписокВыбора.ВыбратьЭлемент("Выберите тип ссылки");
Если Результат=Неопределено Тогда
Возврат;
КонецЕсли;
Структурка=Результат.Значение;
Если Структурка=null Тогда
Возврат;
КонецЕсли;
НовыйОбъект=Неопределено;
Если Структурка.Тип=1 Тогда
Объект=Справочники[Структурка.Имя].СоздатьЭлемент();
Объект.ОбменДанными.Загрузка=Истина;
Объект.УстановитьСсылкуНового(Справочники[Структурка.Имя].ПолучитьСсылку(УникальныйИд));
Иначе
Объект=Документы[Структурка.Имя].СоздатьДокумент();
Объект.ОбменДанными.Загрузка=Истина;
Объект.УстановитьСсылкуНового(Документы[Структурка.Имя].ПолучитьСсылку(УникальныйИд));
КонецЕсли;
Форма=Объект.ПолучитьФорму();
Форма.Открыть();
Для 1С 7.7 смотрите:
Технология восстановления удаленных объектов или элементов в 1С 7.7
еще можно получить ИдентификаторДокумента при OLE доступе:
Код 1C v 7.x Если Док_Источник.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода) = 1 Тогда
Пока Док_Источник.ПолучитьДокумент() = 1 Цикл
Объект = БазаОле.ЗначениеВстрокуВнутр(Док_Источник.ТекущийДокумент());
ИдентификаторДокумента = СокрЛП(ПолучитьИД(Объект));
// Для примера Объект возвращает {"O","0","0","3114","0","0"," 258156CB "},
// а ПолучитьИД(объект) = 258156CB
КонецЦикла;
Еще посмотрите метод:
ЗначениеВСтрокуВнутр(<?>);
Синтаксис:
ЗначениеВСтрокуВнутр(<Объект>)
Назначение:
Преобразование значения объекта агрегатного типа в строковое системное представление.
Возвращает: представление значения объекта в строковом системном виде.
Параметры:
<Объект> - значение объекта агрегатного типа данных которое нужно преобразовать.
Подробнее см. в документации, глава ''Системные процедуры и функции''
Категория:
1С Общие вопросы - Обычные формы Пример простой реализации OLE доступа из 8 к 77 Код 1C v 8.х V77 = Новый COMОбъект("V77M.Application");
Если V77.Initialize(V77.RMTrade,"ИсточникСтр","") Тогда
Сообщить("Успех");
Накл= V77.EvalExpr("CreateObject(""Документ.РасходнаяНакладная"")");
ДокОсн= V77.EvalExpr("CreateObject(""Документ"")");
Накл.ВыбратьДокументы();
Пока Накл.ПолучитьДокумент()=1 Цикл
Номер=СокрЛП(Накл.НомерДок);
ДокСоотв=Документы.РеализацияТоваров.НайтиПоНомеру(СокрЛП(Номер), Накл.ДатаДок);
Если Накл.Проведен()=0 Тогда
Продолжить;
КонецЕсли;
Если ДокСоотв=Документы.РеализацияТоваров.ПустаяСсылка() Тогда
Сообщить("! для "+Накл.Вид()+" "+Накл.НомерДок+" не найдено соответстствие");
Продолжить;
КонецЕсли;
Если Накл.ДокументОснование.Выбран()=0 Тогда
Продолжить;
КонецЕсли;
// и т.д.
Иначе Предупреждение("Ошибка открытия информационной базы");
Возврат;
КонецЕсли;
Категория:
COM-объекты, WMI, WSH Выборка документа по номеру и вывод на Печать, в Табличный Документ Код 1C v 7.x
Процедура Печать()
Если (ПустоеЗначение(ДатаНач)=1) или (ПустоеЗначение(ДатаКон)=1) Тогда
Предупреждение("Не задан период отчета");
Возврат;
КонецЕсли;
Заг="За период с "+ДатаНач+" по "+ДатаКон;
Таб=СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("Шапка");
Док=СоздатьОбъект("Документ");
Док.ВыбратьДокументы(ДатаНач,ДатаКон);
ИтогоПриход=0;
ИтогоРасход=0;
Чеков=0;
//1C-ovec.ru Нужно выводить документы по Номеру, хотя лучше для этих целей использовать Запрос
ТЗврем = СоздатьОбъект("ТаблицаЗначений");
ТЗврем.НоваяКолонка("Док");
ТЗврем.НоваяКолонка("Дата");
ТЗврем.НоваяКолонка("Номер");
ТЗврем.НоваяКолонка("Приход");
ТЗврем.НоваяКолонка("Расход");
ТЗврем.НоваяКолонка("Чеков");
//Выборка документов
Пока Док.ПолучитьДокумент()=1 Цикл
Если Док.Проведен()=0 Тогда
Продолжить;
ИначеЕсли (Док.Вид()="ПриходныйОрдерТБ") и (флПКО=1) Тогда
Приход=Док.Сумма;
Расход=0;
ИначеЕсли (Док.Вид()="БезналичнаяОплата") и (флБН=1) Тогда
Приход=Док.Сумма;
Расход=0;
ИначеЕсли (Док.Вид()="РасходныйОрдерТБ") и (флРКО=1) Тогда
Приход=0;
Расход=Док.Сумма;
ИначеЕсли Док.Вид()="Чек" Тогда
Если (Док.Тип=1) и (флЧекиП=1) Тогда
Приход=Док.Сумма;
Расход=0;
Чеков=Чеков+1;
ИначеЕсли (Док.Тип=2) и (флЧекиВ=1) Тогда
Приход=0;
Расход=Док.Сумма;
Чеков=Чеков+1;
Иначе
Продолжить;
КонецЕсли;
Иначе
Продолжить;
КонецЕсли;
//Добавим в ТЗ строку
НовСТР=ТЗврем.НоваяСтрока();
ТЗврем.Док = Док;
ТЗврем.Дата = Док.ДатаДок;
ТЗврем.Номер = Док.НомерДок;
ТЗврем.Приход = Приход;
ТЗврем.Расход =Расход;
ТЗврем.Чеков = Чеков;
//Пока рано выводить
//Таб.ВывестиСекцию("Строка");
ИтогоПриход=ИтогоПриход+Приход;
ИтогоРасход=ИтогоРасход+Расход;
КонецЦикла;
//Теперь сортируем по номеру и выводим
ТЗврем.Сортировать("Номер");
ТЗврем.ВыбратьСтроки();
Пока ТЗврем.ПолучитьСтроку() = 1 Цикл
Док=ТЗврем.Док;
Приход=ТЗврем.Приход;
Расход=ТЗврем.Расход;
Таб.ВывестиСекцию("Строка");
КонецЦикла;
Таб.ВывестиСекцию("Итого");
Таб.ТолькоПросмотр(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;
КонецПроцедуры
Категория:
Регистры Пример присвоения нового номера, при проблемах с нумерацией Пример реализации автоматич. расчета следующего номера, нумерация
Предположим, у документа
Начисление Отпуска слетела нумерация, кто-то влез и ручками исправил номер документа
Самый простой способ исправить ситуацию - найти документ с некорректным номером и изменить в нем номер на правильный.
Или можно перенумеровать воспользовавшись специальными обработками -
https://helpf.pro/files/view/8.html
https://helpf.pro/files/view/11.html
Ну а если найти некорректный документ не удается, а использовать обработки перенумерации нежелательно, тогда:
в модуле документа, у которого слетела нумерация, в процедуре
Код 1C v 7.x Процедура ВводНового(Копирование)
добавить (пример для документа "НачислениеОтпуска" ):
Код 1C v 7.x
//E_Migachev автоматический расчет следующего номера
//Выберем документы в обратном порядке
ДокНачислениеОтпуска = СоздатьОбъект("Документ.НачислениеОтпуска");
ДокНачислениеОтпуска.ОбратныйПорядок(1);
ДокНачислениеОтпуска.ВыбратьДокументы(НачКвартала(РабочаяДата()-15),КонКвартала(РабочаяДата()+27));
ДокНачислениеОтпуска.ПолучитьДокумент();
//Получим последний числовой номер
новномдк=Строка(число(Сред(ДокНачислениеОтпуска.НомерДок,3,7)));
стрдлинаномдк=СтрДлина(Строка(СокрЛП(Сред(ДокНачислениеОтпуска.НомерДок,3,7))));
новномдк=Число(новномдк)+1;
иткол=стрдлинаномдк-СтрДлина(новномдк);
префиксдк="ОТ";
если иткол>0 тогда
для н=1 по иткол цикл
префиксдк=префиксдк+строка(0);
конеццикла;
конецесли;
докном=префиксдк+новномдк;
//Если документ исправление то нужен префикс И
Если Исправление=1 Тогда
знтри=Прав(ДокНачислениеОтпуска.НомерДок,3);
Если Строка(Лев(знтри,1))="И" Тогда
чзнтри=Число(Прав(знтри,2));
чзнтри=чзнтри+1;
Иначе
чзнтри=1;
КонецЕсли;
Если СтрДлина(чзнтри)=1 Тогда
докном=докном+"-И0"+Строка(чзнтри);
Иначе
докном=докном+"-И"+Строка(чзнтри);
КонецЕсли;
КонецЕсли;
//Присвоим новый номер
НомерДок=докном; //E_Migachev автоматич расчет номера
Категория:
1С Общие вопросы - Обычные формы