Имя: Пароль:
 
1C
 
1С ЕГАИС Акт расхождения
0 Novicadmin
 
09.09.16
06:42
Конфигурация: Комплексная автоматизация, редакция 1.1 (1.1.76.2)

с момента появления типовой конфигурации 1С для работы с ЕГАИС (в рознице) не получается корректно отправить акт расхождения, всё время улетает акт подтверждения, в чем может быть дело? кривые руки у пользователя или не доработка 1С? Сталкнулси ли кто еще с такой проблемой?
1 Novicadmin
 
09.09.16
07:00
ВЫБРАТЬ
    ДокументЕГАИСТовары.ИдентификаторСтроки,
    ДокументЕГАИСТовары.Количество,
    ЕСТЬNULL(ДокументИБТовары.Количество, 0) КАК КоличествоФакт
ИЗ
    Документ.ТТНВходящаяЕГАИС.Товары КАК ДокументЕГАИСТовары
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ДокументИБТовары
        ПО ДокументЕГАИСТовары.ИдентификаторСтроки = ДокументИБТовары.ИдентификаторСтроки
ГДЕ
    ДокументИБТовары.Ссылка = &СсылкаНаДокументИБ
    И ДокументЕГАИСТовары.Ссылка = &СсылкаНаДокЕГАИС
    И ДокументЕГАИСТовары.Количество <> ЕСТЬNULL(ДокументИБТовары.Количество, 0)
2 Novicadmin
 
09.09.16
07:00
Это запрос который проверяет расхождения между двумя таблицами товаров
3 Novicadmin
 
09.09.16
07:14
сразу много "а если?", к примеру "а если пользователь удалил строку из приход.товары?"
4 Novicadmin
 
09.09.16
07:17
как они вообще пишут типовки!??
5 Novicadmin
 
09.09.16
07:26
надо поправить (
6 Novicadmin
 
09.09.16
07:59
Функция НайтиСтрокиСРасхождениями(СсылкаНаДокументИБ, ДокЕГАИС)
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ДокументЕГАИСТовары.ИдентификаторСтроки,
    |    ДокументЕГАИСТовары.Количество,
    |    ЕСТЬNULL(ДокументИБТовары.Количество, 0) КАК КоличествоФакт
    |ИЗ
    |    Документ.ТТНВходящаяЕГАИС.Товары КАК ДокументЕГАИСТовары
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ."+СсылкаНаДокументИБ.Метаданные().Имя+".Товары КАК ДокументИБТовары
    |        ПО ДокументЕГАИСТовары.ИдентификаторСтроки = ДокументИБТовары.ИдентификаторСтроки
    |ГДЕ
    |    ДокументИБТовары.Ссылка = &СсылкаНаДокументИБ
    |    И ДокументЕГАИСТовары.Ссылка = &СсылкаНаДокЕГАИС
    |    И ДокументЕГАИСТовары.Количество <> ЕСТЬNULL(ДокументИБТовары.Количество, 0)";
    
    Запрос.УстановитьПараметр("СсылкаНаДокументИБ", СсылкаНаДокументИБ);
    Запрос.УстановитьПараметр("СсылкаНаДокЕГАИС", ДокЕГАИС);
            
    ТаблицаСтрок = Запрос.Выполнить().Выгрузить();
    
    Возврат ТаблицаСтрок;
    
КонецФункции

Функция ПерезаполнитьДокументЕГАИСПоДаннымДокументаИБ(СтрокиСРасхождениями, ДокЕГАИС)
    
    ДокОбъект = ДокЕГАИС.ПолучитьОбъект();
    
    Для Каждого СтрокаЕГАИС Из ДокОбъект.Товары Цикл
        СтрокаРасхождений = СтрокиСРасхождениями.Найти(СтрокаЕГАИС.ИдентификаторСтроки, "ИдентификаторСтроки");
        Если СтрокаРасхождений <> Неопределено Тогда
            СтрокаЕГАИС.КоличествоФакт = СтрокаРасхождений.КоличествоФакт;
        Иначе
            СтрокаЕГАИС.КоличествоФакт = СтрокаЕГАИС.Количество;
        КонецЕсли;
    КонецЦикла;
    
    Попытка
        ДокОбъект.Записать();
        Результат = Истина;
    Исключение
        Результат = Ложь;
    КонецПопытки;
    
    Возврат Результат;
    
КонецФункции
7 Novicadmin
 
09.09.16
07:59
обе эти функции надо переписывать чтобы всё заработало
8 Novicadmin
 
09.09.16
10:22
есть те кто их правил? ))
9 Torquader
 
09.09.16
11:15
А в последней версии он разве не из ТТН отдельной командой отправляется ?
10 Novicadmin
 
09.09.16
12:19
неа, проверил
11 Novicadmin
 
09.09.16
12:20
Функция НайтиСтрокиСРасхождениями(СсылкаНаДокументИБ, ДокЕГАИС)
    ТаблицаСтрок = новый ТаблицаЗначений;
    ТаблицаСтрок.Колонки.Добавить("ИдентификаторСтроки");
    ТаблицаСтрок.Колонки.Добавить("Количество");
    ТаблицаСтрок.Колонки.Добавить("КоличествоФакт");
    
    ПриходыЕГАИС = Новый Запрос;
    ПриходыЕГАИС.Текст =
    "ВЫБРАТЬ
    |    ДокументЕГАИСТовары.ИдентификаторСтроки,
    |    ДокументЕГАИСТовары.Количество
    |ИЗ
    |    Документ.ТТНВходящаяЕГАИС.Товары КАК ДокументЕГАИСТовары
    |ГДЕ
    |    ДокументЕГАИСТовары.Ссылка = &СсылкаНаДокЕГАИС";
    
    ПриходыИБ = Новый Запрос;
    ПриходыИБ.Текст =
    "ВЫБРАТЬ
    |    ДокументИБТовары.ИдентификаторСтроки,
    |    ДокументИБТовары.Количество
    |ИЗ
    |   Документ."+СсылкаНаДокументИБ.Метаданные().Имя+".Товары КАК ДокументИБТовары
    |ГДЕ
    |    ДокументИБТовары.Ссылка = &СсылкаНаДокументИБ";
    
    ПриходыИБ.УстановитьПараметр("СсылкаНаДокументИБ", СсылкаНаДокументИБ);
    ПриходыЕГАИС.УстановитьПараметр("СсылкаНаДокЕГАИС", ДокЕГАИС);
            
    ТПриходыЕГАИС = ПриходыЕГАИС.Выполнить().Выгрузить();
    ТПриходыИБ    = ПриходыИБ.Выполнить().Выгрузить();
    
    
    Для каждого стр из ТПриходыЕГАИС цикл
        
        НайтиТов = ТПриходыИБ.Найти(Стр.ИдентификаторСтроки,"ИдентификаторСтроки");
        Если НайтиТов = неопределено тогда
            тстр = ТаблицаСтрок.Добавить();
            тстр.ИдентификаторСтроки = стр.ИдентификаторСтроки;
            тстр.Количество          = стр.Количество;
            тстр.КоличествоФакт      = 0;
        иначе
            Если стр.Количество <> НайтиТов.Количество тогда
                тстр = ТаблицаСтрок.Добавить();
                тстр.ИдентификаторСтроки = стр.ИдентификаторСтроки;
                тстр.Количество          = стр.Количество;
                тстр.КоличествоФакт      = НайтиТов.Количество;
            КонецЕсли;
        КонецЕсли;
        
    КонецЦикла;
    
    
    Возврат ТаблицаСтрок;
    
КонецФункции

Функция ПерезаполнитьДокументЕГАИСПоДаннымДокументаИБ(СтрокиСРасхождениями, ДокЕГАИС)
    
    ДокОбъект = ДокЕГАИС.ПолучитьОбъект();
    
    Для Каждого СтрокаЕГАИС Из ДокОбъект.Товары Цикл
        СтрокаРасхождений = СтрокиСРасхождениями.Найти(СтрокаЕГАИС.ИдентификаторСтроки, "ИдентификаторСтроки");
        Если СтрокаРасхождений <> Неопределено Тогда
            Если СтрокаРасхождений.КоличествоФакт = 0 тогда ДокОбъект.Товары.Удалить(СтрокаЕГАИС); КонецЕсли;
            Если СтрокаРасхождений.КоличествоФакт > 0 тогда СтрокаЕГАИС.КоличествоФакт = СтрокаРасхождений.КоличествоФакт; КонецЕсли;
        КонецЕсли;
    КонецЦикла;

    Попытка
        ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
        Результат = Истина;
    Исключение
        Результат = Ложь;
    КонецПопытки;
    
    Возврат Результат;
    
КонецФункции
12 Novicadmin
 
09.09.16
12:20
где то накосячил, не удоляет строки из документа, хотя вроде всё ок, даже по условию проходит и типо адляет но не удаляет
13 Novicadmin
 
16.09.16
05:49
Функция НайтиСтрокиСРасхождениями(СсылкаНаДокументИБ, ДокЕГАИС)
    ТаблицаСтрок = новый ТаблицаЗначений;
    ТаблицаСтрок.Колонки.Добавить("ИдентификаторСтроки");
    ТаблицаСтрок.Колонки.Добавить("Количество");
    ТаблицаСтрок.Колонки.Добавить("КоличествоФакт");
    
    ПриходыЕГАИС = Новый Запрос;
    ПриходыЕГАИС.Текст =
    "ВЫБРАТЬ
    |    ДокументЕГАИСТовары.ИдентификаторСтроки,
    |    ДокументЕГАИСТовары.Количество
    |ИЗ
    |    Документ.ТТНВходящаяЕГАИС.Товары КАК ДокументЕГАИСТовары
    |ГДЕ
    |    ДокументЕГАИСТовары.Ссылка = &СсылкаНаДокЕГАИС";
    
    ПриходыИБ = Новый Запрос;
    ПриходыИБ.Текст =
    "ВЫБРАТЬ
    |    ДокументИБТовары.ИдентификаторСтроки,
    |    ДокументИБТовары.Количество
    |ИЗ
    |   Документ."+СсылкаНаДокументИБ.Метаданные().Имя+".Товары КАК ДокументИБТовары
    |ГДЕ
    |    ДокументИБТовары.Ссылка = &СсылкаНаДокументИБ";
    
    ПриходыИБ.УстановитьПараметр("СсылкаНаДокументИБ", СсылкаНаДокументИБ);
    ПриходыЕГАИС.УстановитьПараметр("СсылкаНаДокЕГАИС", ДокЕГАИС);
    
    ТПриходыЕГАИС = ПриходыЕГАИС.Выполнить().Выгрузить();
    ТПриходыИБ    = ПриходыИБ.Выполнить().Выгрузить();
    
    
    Для каждого стр из ТПриходыЕГАИС цикл
        
        НайтиТов = ТПриходыИБ.Найти(Стр.ИдентификаторСтроки,"ИдентификаторСтроки");
        Если НайтиТов = неопределено тогда
            тстр = ТаблицаСтрок.Добавить();
            тстр.ИдентификаторСтроки = стр.ИдентификаторСтроки;
            тстр.Количество          = стр.Количество;
            тстр.КоличествоФакт      = 0;
        иначе
            Если стр.Количество <> НайтиТов.Количество тогда
                тстр = ТаблицаСтрок.Добавить();
                тстр.ИдентификаторСтроки = стр.ИдентификаторСтроки;
                тстр.Количество          = стр.Количество;
                тстр.КоличествоФакт      = НайтиТов.Количество;
            КонецЕсли;
        КонецЕсли;
        
    КонецЦикла;
    
    
    Возврат ТаблицаСтрок;
    
КонецФункции

Функция ПерезаполнитьДокументЕГАИСПоДаннымДокументаИБ(СтрокиСРасхождениями, ДокЕГАИС)
    
    ДокОбъект = ДокЕГАИС.ПолучитьОбъект();
    
    Для Каждого СтрокаЕГАИС Из ДокОбъект.Товары Цикл
        СтрокаРасхождений = СтрокиСРасхождениями.Найти(СтрокаЕГАИС.ИдентификаторСтроки, "ИдентификаторСтроки");
        Если СтрокаРасхождений <> Неопределено Тогда
            Если СтрокаРасхождений.КоличествоФакт = 0 тогда
                ДокОбъект.Товары.Удалить(СтрокаЕГАИС);
                продолжить;
            КонецЕсли;
            Если СтрокаРасхождений.КоличествоФакт > 0 тогда
                СтрокаЕГАИС.КоличествоФакт = СтрокаРасхождений.КоличествоФакт;
                СтрокаЕГАИС.Сумма = СтрокаЕГАИС.КоличествоФакт * СтрокаЕГАИС.Цена;
            КонецЕсли;
        иначе
            СтрокаЕГАИС.КоличествоФакт = СтрокаЕГАИС.Количество;    
        КонецЕсли;
    КонецЦикла;
    
    ДокОбъект.СуммаДокумента = ДокОбъект.Товары.Итог("Сумма");
    
    Попытка
        ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
        Результат = Истина;
    Исключение
        Результат = Ложь;
    КонецПопытки;
    
    Возврат Результат;
    
КонецФункции
14 Novicadmin
 
16.09.16
05:49
вот так будет правильнее, работает