Вход | Регистрация


1С ЕГАИС Акт расхождения

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

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

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

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

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует