среда, 30 апреля 2014 г.

Документы

На следующей схеме изображено взаимодействие объектов встроенного языка для работы с документами.

понедельник, 28 апреля 2014 г.

Не работает поиск по дате в конвертации данных

Нашел особенность в переносе документов в конвертации данных: нужно было перенести документ "Реализация товаров и услуг" из УПП в Бухгалтерию, поля поиска у документа были установлены "Номер" и "Дата", поиск по внутреннему идентификатору не использовался. Ничего, вроде, сложного, но есть один нюанс: когда после переноса я поменял дату в базе-источнике (УПП) и попытался перенести ее в базу-источник (Бухгалтерия), то новый документ почему-то не создался (хотя должен был), в нем лишь поменялась дата на новую, которую я установил.
Пришлось анализировать код обработки "Универсальный обмен данными XML", т.к. коллега подсказал, что дело может быть в методе НайтиПоНомеру(), который используется в обработке для поиска документов по их номеру. Здесь есть нюанс в этого метода: поиск будет идти не с проверкой даты на равенство (ДатаВремя1 = ДатаВремя2), а вхождением в интервал(ДатаНач <= ДатаВремя1 <= ДатаКон). Сам интервал определяется как период уникальности номеров документа, в который входит указанная дата. Например, если номера документов уникальны в пределах месяца и задана дата 10 декабря 2001 года, то поиск будет проводиться в интервале с 01 по 31 декабря 2001 года.
В модуле обработки "Универсальный обмен данными XML" нашел такую функцию для поиска документов:

воскресенье, 27 апреля 2014 г.

среда, 23 апреля 2014 г.

Константы

На следующей схеме изображено взаимодействие объектов встроенного языка для работы с константами.

Что означает ОбменДанными.Загрузка = Истина

ОбменДанными.Загрузка – атрибут любого объекта в системе 1С предприятие. Он позволяет обозначить при записи объекта что необходимо отключить любые проверки (в т.ч проверки на уровне платформы 1С). Сделано это было для того, что бы избежать конфликтов при обмене данных.
Если вы разрабатываете свою конфигурацию, в всех проверках правильности данных (например, процедура ПередЗаписью) необходимо первой строкой добавить такую строку:

Если ОбменДанными.Загрузка = Истина Тогда
    Возврат;
КонецЕсли;

Список значений в качестве параметра в СКД

Включить возможность использовать список значений в качестве параметра в СКД можно посредством установки флажка "Доступен список значений" напротив параметра на закладке "Параметры".


Проверка на пустой список значений в запросе

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

Пример:
Выбрать информацию о продажах только тех контрагентов, которые содержатся в заданном списке. Проверку на заполненность списка значений проверять в запросе.

среда, 16 апреля 2014 г.

Гибкий отбор в таблице значений с использованием построителя запроса

Иногда возникают ситуации, когда нужно сделать отбор в таблице значений используя нечеткое условие, к примеру: больше, меньше, содержит и т.д. Можно, конечно же, использовать перебор в цикле и там уже делать проверку на нечеткие условия, можно использовать метод НайтиСтроки(), вот только отбор, передаваемые туда как параметр, всегда будут иметь вид сравнения - равно.
Что же делать, если нам нужно найти строки в ТЧ и при этом использовать нечеткое условие и не использовать цикл?
Все просто: можно воспользоваться построителем запроса.
Построитель запроса - это объект встроенного языка, с помощью которого мы можем получать необходимые данные, используя отборы.

Пример:
Есть таблица значений ПродукцияТЗ, которая содержит исходные данные. Нужно найти строки, где сумма больше нуля и равна нулю.

вторник, 15 апреля 2014 г.

Конвертация двух табличных частей документа в одну

Для того, чтобы конвертировать две и больше табличные части документа в одну нужно в ПКГС одной из ТЧ в обработчике "ПередОбработкой" написать следующий код:

КоллекцияОбъектов = Источник.ПерваяТабличнаяЧасть.Выгрузить();
Для Каждого
СтрокаТЧ Из Источник.ВтораяТабличнаяЧасть Цикл
   
НовыйСтрока = КоллекцияОбъектов.Добавить();
   
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ);
КонецЦикла;

В данном примере сначала в коллекцию объектов выгружаем первую табличную часть, потом обходим вторую ТЧ и дозаполняем коллекцию уже данными из нее.
Правила конвертации второй ТЧ нужно или удалить, или отключить. Они нам уже не понадобятся.