Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Выгрузка во внешний источник: пустая дата выглядит как 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 год, хотя текущая дата норм
Вопрос: как из запроса обработать тз

Здравствуйте! Подскажите, как в Зарплата и управление персоналом, редакция 3.1 из тз запроса

фио дата перевода подразделение должность событие
петров 01.01.2013 подр1 должн1 прием
петров 01.01.2014 подр2 должн2 перевод
петров 01.01.2015 подр2 должн2 перевод
петров 01.01.2016 подр3 должн3 перевод
иванов 01.01.2014 подр1 должн8 прием
иванов 01.01.2016 подр3 должн5 перевод

получить след таблицу (нужно отразить все переводы по подразделению)
петров 01.01.2013 подр1,должн1(прием) 01.01.2014подр2,должн2(перевод)
петров 01.01.2014 подр2,должн2 01.01.2015 подр2,должн2
петров 01.01.2015 подр2,должн2 01.01.2016 подр3,должн3
иванов 01.01.2014 подр1,должн8 01.01.2016 подр3,должн5
Ответ:
с двойным левым не стала делать.
там иначе запрос построен. т.к. надо еще было прием вытаскивать
сделала так и так заработало:

ии=0; номер = 0;
всегостр = тз.Количество();
Для каждого стр1 из тз цикл
Для каждого стр2 из тз цикл
Если СокрЛП(стр1.сотрудник) = СокрЛП(стр2.сотрудник) И СокрЛП(стр1.Дата1) = СокрЛП(стр2.Дата1) тогда
Продолжить;
ИначеЕсли СОкрЛП(стр1.сотрудник) = СокрЛП(стр2.сотрудник) И СокрЛП(стр1.Дата1) <> СокрЛП(стр2.Дата1) И ии<>всегостр-1 Тогда

ОбластьСтрока.Параметры.номерПП = номер+1;
ОбластьСтрока.Параметры.Сотрудник = стр1.Сотрудник;

ОбластьСтрока.Параметры.старМРаб = тз[ии].ПодразделениеПолное + Символы.ПС + тз[ии].Должность + Символы.ПС + Формат(тз[ии].Дата1,"ДЛФ=Д") ;
ОбластьСтрока.Параметры.старОплата = тз[ии].Оплата;

ОбластьСтрока.Параметры.новМРаб = тз[ии+1].ПодразделениеПолное + Символы.ПС + тз[ии+1].Должность + Символы.ПС + Формат(тз[ии+1].Дата1,"ДЛФ=Д");
ОбластьСтрока.Параметры.новОплата = тз[ии+1].Оплата + Символы.ПС + тз[ии+1].Оклад;

ТабличныйДокумент.Вывести(ОбластьСтрока);
номер = номер + 1;
ии = ии+1;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Вопрос: Выгрузка отчёта в 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.
Ответ: () , () Спасибо, изначально ход мыслей пошел не в ту степь, теперь все работает.