Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Выгрузка во внешний источник: пустая дата выглядит как 1753-01-01 00:00:00.0

Платформа 1С:Предприятие 8.3 (8.3.12.1529) клиент-серверная должна писать во внешний источник данных (SAP) в виде базы MSSQLServer, они жалуются, что пустая дата им приходит как 1753-01-01 00:00:00.0. Назначить полям "Разрешить Null" не удается - лезет еще ошибка. Коллеги, вопрос как правильно выгружать пустую дату во внешний источник, чтобы там не читались 1753 годы?


Ответ: Вроде бы так работает (в модуле записей):

Процедура ПередЗаписью(Отказ)
    СписокПолейДата = Новый Массив;
    ТипДата = Тип("Дата");
    Для каждого Поле Из Метаданные.ВнешниеИсточникиДанных.Интеграция111.Таблицы.dbo_PPPPPP.Поля Цикл
        Если Поле.Тип.СодержитТип(ТипДата) Тогда
            СписокПолейДата.Добавить(Поле.Имя);
        КонецЕсли; 
    КонецЦикла;
    Для каждого Запись Из ЭтотОбъект Цикл
        Для каждого поле Из СписокПолейДата Цикл
            Если не ЗначениеЗаполнено(Запись[поле]) Тогда
                Запись[поле] = NULL;
            КонецЕсли; 
        КонецЦикла; 
    КонецЦикла; 
КонецПроцедуры


В полях разрешили null
Вопрос: Дата 01.01.2000

Доброго дня!

Пл 8.1, при записи карточки в справочнике в поле дата устанавливается автоматом 01.01.2000. Пробовал ПриЗаписи и ПередЗаписью прописать РеквизитДата = ТекущаяДата(); По отладке видно что установил, но потом возвращает на 01.01.2000
Ответ:
Всё верно, не требуется. Но дата то всё равно перескакивает на 2000 год, хотя текущая дата норм
Вопрос: Выгрузка отчёта в ODBC

Всем добрый ночи!
Я никогда раньше не работал с 1С, но довольно много работал в Делфи, С++, ФастРепорт

В 1С:Предприятие 8 (Базовая) есть отчёт, который формирует 1 или более страниц (это квитанции, по одной квитанции для каждого человека).
Если я правильно понимаю, это формируется по количеству строчек Набора Данных(DataSet, или Master-Detail) которую 1С каким-то образом формирует.

Можно для каждой строчки(платёжки) 1С:
1. Выгрузить в любую ODBC базу данных ? Напрмер, подсоеднится к настроеной в ODBC SQL Express базе и выполнив Хранимую Процедуру ?
2. Создавать отдельный файл с полями вида
"ФИО" = "Владимир Ильич Ленин"
"Сумма" = "100р"
"Дата" = "01.01.2016" и т.п.



И совсем не могу понять, как редактировать конфигурацию 1С ? У меня всё для чтения.
Ответ:
Функция ПолучитьСтруктуруХраненияБазыДанных и немножко почитать книжек
Вопрос: Проверка на пустую дату

Здравствуйте, подскажите пожалуйста, как сделать проверку на не заполненную дату пользователем?
Просто я вывожу дату на внешнюю печатную форму, а если дата не указана, то выводиться 01.01.0001 00:00:00
Как сделать что бы значение даты было просто пустым?
Ответ:
1C
1
2
3
Если Дата = Дата(1, 1, 1) Тогда
Область.Параметры.Дата = "";
КонецЕсли;
Вопрос: СКД несколько наборов данных

Здравствуйте, создаю отчет в скд, два набора данных. В одном таблица с часами, а точнее с пустыми датами часами, например 01:01:0001 00:00:00, 01:01:0001 01:00:00, 01:01:0001 02:00:00 .... 01:01:0001 23:00:00

Во второй таблице Граница начала - это дата вида 01:01:0001 01:00:00
Время выполнения - это цело число
И Путь-это тоже цело число

В связях наборов данных я соединяю эти таблицы по границе начала и дате из первой таблицы

Таким образом в отчете на время когда граница начала =дате из второй таблицы у меня заполняется путь.



Но мне необходимо в зависимости от значения поля Путь, чтобы он заполнял не на одно время, допусти на 01:00, а на интервал времени. То есть если у меня граница начала 3:00, а путь 5, то значение пути в отчете должно заполняться с 3:00 до 8:00 (я к 3:0 добавила еще 5 часов). Помогите, пожалуйста. Сейчас получается выводить только на 3:00
Ответ: ДобавитьКДАТЕ?
Вопрос: выгрузка из ка11 в бп30

Добрый день..подскажите,делаю выгрузку РТУ из ка11 в бп30.Есть табличная часть товары,там реквизиты - СчетУчета,СчетРасходов,СчетДоходов.Переношу по ссылкам,так вот СчетУчета заполняется нормально-"43" берет из плана БП30,а СчетРасходов И СчетДоходов создает новые счета в плане БП30 и уже их заносит в реквизиты и хотя "90.01.01" и "90.02.01" там конечно имеются...как избежать этого ?как заполнять уже имеющимеся счетами и не создавать новые?
Ответ:
(11) благодарю Вас,я сделал как в (4) ,а счета потом прикручиваю в ПКО, После загрузки,проблема решена
Для Каждого Стр Из Объект.Товары Цикл
    
    СчДоходов        = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1");
    СчРасходов       = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.02.1");
    Стр.СчетДоходов  = СчДоходов;
    Стр.СчетРасходов = СчРасходов;
    
    
КонецЦикла;
Вопрос: Комбинированное поле внешнего отчета

Добрый день. Подскажите, пожалуйста. Есть отчет, но не могу сделать последний шаг.

Внешний отчет. Нужно вывести в отчет поле (пусть будет "ЭтоСуперМаршрут"), в котором показывается "Да", если маршруты переработки имеют строки "01;02" + "02;01".
Вычисляемое поле "ЭтоКомбинированныйМаршрут" показывает "Да", если в записях маршрутов есть строки ТОЛЬКО "01;02" или "02:01", и "Нет", если записи содержат ТОЛЬКО "01;01" или "02;02".

Наглядно. Нет случая, где были бы строки со значениями маршрутов "01;02" + "02;01". Только "01;01" + "01;01", "02;02" + "02;02" или "02;01" + "02;01" + "02;01".

ВЫБРАТЬ
    СпецификацииУпрУчет.Ссылка КАК ТехКарта,
    СпецификацииУпрУчет.Контрагент КАК Клиент,
    СпецификацииУпрУчет.Владелец КАК Номенклатура,
    СпецификацииУпрУчетМаршрутыПереработки.МаршрутПереработки
ПОМЕСТИТЬ ТехКарты
ИЗ
    Справочник.СпецификацииУпрУчет КАК СпецификацииУпрУчет
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СпецификацииУпрУчет.МаршрутыПереработки КАК СпецификацииУпрУчетМаршрутыПереработки
        ПО (СпецификацииУпрУчетМаршрутыПереработки.Ссылка = СпецификацииУпрУчет.Ссылка)
            И (СпецификацииУпрУчетМаршрутыПереработки.НомерСтроки = 2)
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ТехКарты.ТехКарта,
    ТехКарты.Клиент,
    ТехКарты.Номенклатура,
    МАКСИМУМ(ЗаказПокупателя.Ссылка) КАК ЗаказПокупателя,
    ТехКарты.МаршрутПереработки,
    ВЫБОР
        КОГДА ТехКарты.МаршрутПереработки ПОДОБНО "%01%"
                И ТехКарты.МаршрутПереработки ПОДОБНО "%02%"
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК ЭтоКомбинированныйМаршрут
ИЗ
    ТехКарты КАК ТехКарты
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК ЗаказПокупателя
        ПО ТехКарты.Клиент = ЗаказПокупателя.Контрагент
            И ТехКарты.ТехКарта.Спецификация = ЗаказПокупателя.Товары.Спецификация
            И ТехКарты.ТехКарта.ХарактеристикаПродукции = ЗаказПокупателя.Товары.ХарактеристикаНоменклатуры
            И ТехКарты.ТехКарта.Владелец = ЗаказПокупателя.Товары.Номенклатура

СГРУППИРОВАТЬ ПО
    ТехКарты.ТехКарта,
    ТехКарты.Клиент,
    ТехКарты.Номенклатура,
    ТехКарты.МаршрутПереработки,
    ВЫБОР
        КОГДА ТехКарты.МаршрутПереработки ПОДОБНО "%01%"
                И ТехКарты.МаршрутПереработки ПОДОБНО "%02%"
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ
Ответ: () заменил на И (СпецификацииУпрУчет.МаршрутыПереработки.НомерСтроки > 1) и самая первая карта, в которой записи
1. "02;02"
2. "02;02"
3. "01;02"
4. "01;02"
продублировалась. В одной строке в поле "Комбинированные" показывает "да", а в поле "Не комбинированные" - "Нет". Во второй строке - наоборот ("Комбинированные" - "Нет", "Не комбинированные" - "Да"). Хотя группировки стоят по техкарте
Вопрос: Дата в виде "01.01.2107 г."

Хочу вывести дату в виде "01.01.2107 г.", по формату Формат(ВыбДоговор.ДатаДок,"Д()ДДММГГГГ") - получается "01.01.17".
Что не так?
Ответ: () И правда Ёпрст!
Вопрос: v7: Прямой запрос во внешнюю базу.

Ситуация такая: есть самописная сервисная конфигурация, осуществляющая перемещение данных через ОЛЕ из типовой конфы в текстовый файл для конфы руководителей подразделений. Собираюсь ускорить процесс выгрузки данных из типовой, посредством добавления прямых запросов. База DBF. Использую следующий код:

ОлеДБ = СоздатьОбъект("OLEDBData");
а="ПУТЬ_К_ВНЕШНЕЙ_БАЗЕ\";
б="Provider=VFPOLEDB.1;Data Source= ""ПУТЬ_К_ВНЕШНЕЙ_БАЗЕ\""; User ID=""АДМИН""; Password=""ПАРОЛЬ_АДМИНА"";Mode=Read;Collating Sequence=MACHINE";
ОлеДБ.ПрисоединитьИБ(а,б);

Запрос = ОлеДБ.СоздатьКоманду();
Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");
Запрос.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')");
Запрос.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')");
Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')");
НачДата='01.01.2018';
КонДата=Дат;

мд = СоздатьОбъект("MetaDataWork");
НачПериод = мд.ПолучитьНачПериода(НачДата);
ПредПериод = мд.ПолучитьНачПериода(НачПериод-1);
КонПериод = мд.ПолучитьКонПериода(КонДата);

ТекстЗапроса = "
    |SELECT
    |        Рег.БСО as Бланк
    |     ,Рег.Номер as Номер
    |     ,Рег.МестоХранения as [МестоХранения $Спраочник.МестаХранения]
    |     ,Рег.Материал as [Материал $Справочник.Материалы]
    |     ,Рег.Справочник as [Справочник $Справочник.ТипыБланков]
    |       ,SUM(Рег.НачОст+Рег.Приход-Рег.Расход) КонОст
    |FROM
    |    (
    |   SELECT 
    |         $Итоги.БСО БСО
    |        ,$Итоги.Номер Номер
    |     ,$Итоги.МестоХранения МестоХранения
    |        ,$Итоги.Материал Материал
    |     ,$Итоги.Справочник Справочник
    |       ,$Итоги.Наличие НачОст
    |        ,0 Приход
    |        ,0 Расход
    |         ,0
    |    FROM
    |        $РегистрИтоги.БСО Итоги
    |    WHERE
    |        DTOS(Итоги.period)+$Итоги.БСО
    |        LIKE  (DTOS(:ПредПериод~~)+'_________')
    |   UNION ALL  
    |
    |    SELECT
    |         $Движения.БСО
    |     ,$Движения.Номер
    |     ,$Движения.МестоХранения
    |        ,$Движения.Материал
    |     ,$Движения.Справочник
    |     ,$Движения.Наличие * (1 - Движения.debkred * 2)
    |        ,0
    |        ,0
    |     ,0
    |    FROM
    |        $Регистр.БСО  Движения
    |    WHERE
    |        DTOS(Движения.date)+Движения.time+Движения.iddoc+STR(Движения.lineno,4)+STR(Движения.actno,6) BETWEEN
    |         DTOS(:НачПериод~~)+'    '+'       '+'    '+'    '
    |     And DTOS(:КонПериод~~)+'ZZZZZZ'+'ZZZZZZZZZ'+'ZZZZ'+'ZZZZZZ'
    |
    |    UNION ALL 
    |    
    |    SELECT
    |         $Оборот.БСО
    |     ,$Оборот.Номер
    |     ,$Оборот.МестоХранения
    |        ,$Оборот.Материал
    |     ,$Оборот.Справочник
    |        ,0
    |        ,$Оборот.Наличие*(1-Оборот.Debkred)
    |        ,$Оборот.Наличие*Оборот.Debkred
    |     ,0
    |    FROM
    |        $Регистр.БСО  Оборот
    |    WHERE
    |        DTOS(Оборот.date)+Оборот.time+Оборот.iddoc+STR(Оборот.lineno,4)+STR(Оборот.actno,6) BETWEEN
    |         DTOS(:НачДата~~)+'    '+'       '+'    '+'    '
    |     And DTOS(:КонДата~~)+'ZZZZZZ'+'ZZZZZZZZZ'+'ZZZZ'+'ZZZZZZ'
    |    ) Рег
    |WHERE
    |    Рег.НачОст+Рег.Приход-Рег.Расход=1
    |Group by Бланк,Номер,МестоХранения,Материал,Справочник
    |";

Запрос.УстановитьТекстовыйПараметр("ПредПериод",ПредПериод);
Запрос.УстановитьТекстовыйПараметр("НачПериод",НачПериод);
Запрос.УстановитьТекстовыйПараметр("КонПериод",НачДата-1);
Запрос.УстановитьТекстовыйПараметр("НачДата",НачДата);
Запрос.УстановитьТекстовыйПараметр("КонДата",КонДата);

ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
ТЗ.Выгрузить(Таблица1);

Колонки БСО, Номер и Наличие в регистре у меня текст-символы, там все хорошо выдает, проблемы начинаются с объектами Материал, Справочник, МестоХранения. Я так понимаю когда я обращаюсь к $Итоги.Материал как Материал, я получаю ссылку в виде строки, а если я обращусь к $Итоги.Материал как [Материал, $Справочник.Материалы] то мне должно вернуть элемент справочника. Когда я делал запрос из типовой конфы в ее же остатки, все выдавало верно. Но когда я начинаю подключатся из сервисной, то я получаю пустую строку. Суть вопроса: как мне сделать так, что бы мне хотя бы выдавало код или название справочников, или подключить метаданные из той базы. Есть ли альтернативы "ПрисоеденитьИБ" VFPOLEDB для DBF.
Ответ: () , () Спасибо, изначально ход мыслей пошел не в ту степь, теперь все работает.
Вопрос: Даты в одной строке

У заявок есть несколько уровней. Образно Уровень 1, Уровень 2, Уровень 3. Заявка может получить каждый из уровней в разный момент времени. При помощи СКД необходимо вывести для заявки даты уровней в одну строку. Подскажите пожалуйста как сделать. Перепробовал всякое. Сейчас отчёт выглядит
===========================================
Заявка | Уровень 1 | Уровень 2 | Уровень 3
Заявка1| 01.01.2001|           |          
Заявка1|           | 01.02.2001|
Заявка1|           |           | 01.03.2001
===========================================
А надо сделать
===========================================
Заявка | Уровень 1 | Уровень 2 | Уровень 3
Заявка1| 01.01.2001| 01.02.2001| 01.03.2001
===========================================
Помогите пожалуйста.
Ответ: Спасибо